Лаборатория Математики и Программирования Сергея Бобровского – Telegram
Лаборатория Математики и Программирования Сергея Бобровского
1.29K subscribers
1.19K photos
24 videos
931 links
ЛаМПовое с Бобровским
Download Telegram
Готовлю сейчас несколько материалов по блокчейну (тайный роадмап, как войти в эту профессию :), поизучал много десятков разных статей, гайдов, схем курсов, ну и в очередной раз убеждаюсь, и в паблике вк постоянно пишу об этом, и моя Школа, в принципе, основана на таком принципе, что и проще, и надёжнее, и перспективнее, и выгоднее всего становиться КЛАССИЧЕСКИМ серверным/бэкенд программистом.

Программировать на классических языках Java, Python, PHP, C#, C++, теперь ещё Go и Rust немного добавились,
+ хорошее знание классических реляционных баз данных и SQL (и в меру NoSQL, но в целом это фигня),
+ классический System Desing,
+ классический Programming in large,
и больше ничего не надо. Всё это было топом по актуальности и 20-30 лет назад, и сегодня, и в ближайшие 20-30 лет ничего не изменится, этого набора скиллов хватит точно, никакие другие области разработки и близко не будут тягаться с бэком по критерию "число вакансий x зарплаты". А вот если сделаете шажок в сторону - в какой-нибудь хипстерский датасайнс, или в мобильную разработку, или во фронтенд, и т. п., сразу резко проиграете по окладам и свободным вакансиям.

Смотрю по зарплатам, ну да, по блокчейнам немного побольше вакансий с зарплатами от 500,000 рублей, но не сильно значимо. Но он проигрывает уже чуть ли не в 10 раз классике по числу вакансий (сотни!) на зарплатах даже от 300-400 тыс.

Следствие, что сперва надо постараться выбрать по максимуму классический сеньорский бэкенд, и вот уже когда упрётесь в стеклянный потолок зп где-то под полмиллиона рублей, можно двигать в крипту; это будет уже значительно легче. Общая схема, собственно, к серверным скиллам добавить Solidity & web3; просто этот путь "в лоб", который вы можете легко нагуглить по "roadmap web3", можно в разы сократить (как, расскажу подробнее, но не тут :).
Почему в "современных" языках вроде Java или Python не поддерживаются ограничения/constraints? В алгебре кортежей это мощная темка. Хочу например задавать состояния "не был женат" / "женат" / "разведён" не в произвольном порядке; понятно, что недопустимы переходы "не был женат" => "разведён" без промежуточного "женат", или даже "женат" => "женат" без промежуточного "разведён". Понятно, что можно закодить цепочкой условий или машинами состояний, но это явный оверхед. А если состояний тысячи?

В СильныхИдеях будет скоро контринтуитивный материал, с отсылочкой к теории категорий, как правильно подходить к подобным, экзистенциальным :) проблемам со всеми этими вашими, "популярными" языками программирования.
Я переделал учебный сервер в метаверсум! теперь, ники занимающихся показываются в тридэ )))

(это был сарказм, на всякий случай уточню)

Однако, через 10 лет реальный бизнес метаверсумов составит 10 триллионов долларов. Для сравнения, сегодня рынок крипты 1-2 триллиона; ну правда к 2030-му обещают рост в сотни раз :)

Половина всех коммерческих структур на 50% перейдёт от обычных договоров к смарт-контрактам, ну и GameFi конечно выстрелит: 70% всех игр будут использовать блокчейн. В этом году, смотрю, прямо десятки стартапов запустились по криптоиграм, бум (или скорее пузырь :) -- причём пилят очень активно, но даже минимально работающей демки или прототипа пока почти ни у кого нету. К концу года наверняка 90% обрушатся, а вот на выживших будет очень интересно посмотреть.

Почему обрушится? Потому что хипстеры с нулевым жизненным опытом наивно думают, что ИТ-бизнес -- это сперва набрать инвестиций на производство, потом год пилить что-то уникальненькое, потом дать рекламу, и их продукт будут расхватывать как горячие пирожки. А вот нифига: базовая аксиома маркетинга, что всем до вашего продукта пофиг. Как правильно, поясняю на курсе карьеры в занятии по MVP.

=

Только не ведитесь на web3 как, типа, продолжение web2, нет. Это абсолютно разные парадигмы; web3 отличается от классического web более чем полностью.

Обязательно будем это изучать, потому что за этим будущее: это станет главная технологическая оппозиция цифровому концлагерю и AI-чебурнету.
Но с другой стороны, конечно, не стоит думать, что в криптостартапах, где готовы платить сотни килодолларов в месяц, вас ждёт мимимишность и бесплатные печеньки как и в классических проектах, и что просто вы, такой уникальный, удачно так попали.

Дело в том, что эти ребята скорее всего набрали инвестиций, сроки начинают поджимать, а пока не то что MVP, даже демки простой нету. Вообще ничего нет :) И вот им нужно "ещё вчера" выкатить хоть что-то для отчёта.

Поэтому тут надо быть готовым к тому, что рабочая неделя будет 100+ часов, и над душой будет стоять десяток менеджеров и следить за каждым движением вашей мышки. Хотя, в таких проэктах мышка обычно не требуется; какой-нибудь безжалостный vim, где надо очень-очень шустро фигачить код, многими часами не отводя пальцы за границы клавиатуры, и при этом никаких багов в принципе быть не должно: ибо это блокчейновский Code is Law.

Поэтому, в частности, крайне трудно переходить в web3 из мэйнстрима, когда вы, не познакомившись с фундаментальными принципами вычислительных моделей (мой цикл "как понять в программировании всё"), сформировали себе выученную беспомощность -- "стабильно" писать говнокод с рейтом ошибок за пять процентов.
Спрашивали по вчерашнему посту: чем же так сильно отличается web3 от web2? Ну, например тем, что технологии web3 пока очень своеобразные, жутко кривые и слабо эффективные :) В классическом бэкенде сегодня можно спокойно делать элегантные, быстрые, надёжные, хорошо масштабируемые системы (причём в существенной степени по шаблонам: купите учебник "System Design. Подготовка к сложному интервью", и будет вам щастье на десятилетие :), и при этом хорошо зарабатывать, особо и не парясь.

А "блокчейны" это пока какое-то возвращение в прошлый век, когда вылазят тучи очень странных ограничений (та же цена транзакций, например), с которыми нормальные люди никогда не сталкивались в принципе. Ну всё равно что после F# начинаешь кодить на Си, если не на ассемблере. Снова получается непрозрачный набор скиллов, который вдобавок развивается пока непонятно куда + риски по работе очень высоки (никакой стабильности в принципе).

Но, факт, что тем не менее в "криптостартапах" сегодня можно очень здорово заработать. Например, по Solidity даже на хабре десяток вакансий находится: "от 5,000$" "от 7,000$ до 10,000$", при этом "Можно удаленно".

Однако стратегически темка "крипты", считаю, крайне полезна в первую очередь для саморазвития потому, что в ней объединяется перспективный "бизнес" (когда вам хорошо платят за изучение и практику в важных направлениях) с формальной верификацией и сопутствующей математикой (на практике, правда, пока чаще получается что-то вроде формального чекера свойств операционной семантики, но это уже нюансы).
Может ли консультант по инженерным профессиям, например, в тех же ИТ, помогать людям, которые его явно умнее?

Ну, вот у меня например занимается немало ребят, которые точно заметно умнее меня :)

Но, моя миссия в том, чтобы говорить не "вот это, по моему мнению, может быть полезно для вас", а "вот это хорошо работает, по мнению учёных (computer science и математика)", по возможности точечно, под конкретного человека, под его рабочие задачи.

В информатике столько реально полезных фишек, что даже чтобы просто познакомиться с ними, жизни не хватит.
Некоторые разработчики будут ругаться, если вы скажете, что мы должны написать формальную спецификацию перед выполнением работы.

Но если вы скажете им, что мы будем работать по TDD и поэтому должны чётко формулировать свойства системы, которые мы хотим проверить нашими тестами, они тут же согласятся!
А разве кто-то из программистов сомневался насчёт вот этого всего? :)

"Работодатели посчитали, что если сейчас часть компаний уходит с рынка, то оставшиеся люди будут чувствовать себя неуверенно и начнут соглашаться на меньшие деньги, на худшие условия. Что рынок кандидата неожиданно станет рынком работодателя. А произошло ровно наоборот.
...И непонятно, что делать. Работодатели говорят: "Войдите в положение, нам всем сейчас тяжело. Мы готовы дать вам работу, но немножко снизьте свои ожидания". А кандидаты им: "А чего это мы будем снижать ожидания? Курс меняется, мы хотим больше денег, мы хотим больше стабильности".

На курсе карьеры постоянно подчёркиваю, что "трудно с финансами" и "войдите в положение" вам будут лить в уши абсолютно всегда. Так было и 30 лет назад, и 20, и 10, и будет дальше. Это, очевидно, чисто управленческие косяки руководства: не смогли построить прочный бизнес, не умеют договариваться по бюджетам, и хотят свалить свою ответственность на вас.

Просто игнорьте это менеджерское нытьё и следуйте рекомендованной технологии по переговорам о зарплате и карьерном повышении.
Вместо написания легко и прозрачно тестируемых чистых функций с простыми типами данных на входе и выходе, как предлагают классические вычислительные модели (трек "как понять в программировании всё"), ООП-"практики" любят конструировать невероятно сложные и невероятно хрупкие башни из моков, чтобы вызвать в итоге один конкретный сеттер или что-то подобное.
В таком случае весь тест фактически тестирует только сам себя.

Рассматриваем однако эту тему на курсе Ясное Легаси, потому что такие фетишисты вполне могут оказаться вашими начальниками :)
Просили пояснить на примере, что же такого особенного в программировании дают теории вроде HoTT.

Ну например, популярная тема в математике, в data science, в комбинаторике -- подсчет количества объектов определённого вида/типа, для которых "естественное" определение отношения эквивалентности отсутствует. Ежели ООП, то объекты могут быть вообще в разных ветках иерархии, и как определить, что они условно эквивалентны? Можно явно "равенство" закодировать, но если классов, которые требуется проверять на "подходящие", в проекте сотни, тысячи?

А когда вы определяете некоторую концепцию в HoTT, то отношение эквивалентности между типами всех объектов "получается" автоматически (спойлер: оно немного напоминает утиную типизацию :).
Разбирался с термином retention -- один из пяти четырёх ключевых принципов проектирования API, когда надо учитывать, поддерживает ли библиотека своё внутреннее состояние, которое "отражает" состояние приложения,
наткнулся на его использование в графических API (retained mode vs immediate mode),
и попал сюда:

"Сохраненный режим и режим интерпретации. Графические API можно разделить на API-интерфейсы в режиме хранения и интерфейсы API немедленного режима .
Direct2D — это API непосредственного режима. Windows Presentation Foundation (WPF) является примером API сохраненного режима."

В одной фразе три(!) разных перевода/трактовки "retained".

Как же хорошо, что Microsoft свалила восвояси :)
OpenAI похвасталась, что разработала нейросеть, умеющую "играть" в майнкрафт. Однако если внимательно посмотреть, что же она делает, то окажется, что AI просто бездумно эксплуатирует ресурсы окружающего пространства, и судя по всему, в принципе не способна создать что-то полезное или красивое, что хоть немного улучшило бы существование в этом метаверсуме.

Напоминает скорее сценарий конца света Grey Goo (серая слизь), отрабатываемый пока на виртуальных мирах.

"Всадники Апокалипсиса уже в пути" (с)
Общался на неделе с небольшой командой, которая пилит мобильный клиент под ифоны не скажу для какого сервиса. Программисты iOS жаловались, что для них чуть ли не ночные кошмары -- "retain cycles".
Зарегистрировался для профессионального роста ради лулзов на платный семинар коллег из GeekBrains

"Путь в IT: c нуля до PRO. Как стать востребованным IT-специалистом с доходом от 100 000 ₽" -- в темках "метавселенные, блокчейн, NFT" )))

Сервис регистрации GB выполнен с классическим архитектурным багом: ввёл данные имя/почта/телефон, ответил на 34(!) подробных вопроса анкеты, меня перебросило на страницу оплаты, и тут началось бесконечное "невозможно активизировать оплату", пауза и снова перегрузка странички через 3 сек.

Почему, понятно: на почту выслали ссылку активации, и пока по ней не щёлкнешь, страница оплаты не сработает. А когда активировал, просто выбрасывает в ЛК, где приходится выискивать этот семинар заново вручную, и потом тоже снова вводить свои контактные данные (и почту, и имя, и телефон).

Я вот учу прямо противоположным подходам; говорил уже не раз и в паблике, и в СильныхИдеях, что лучшая схема -- Continuation Passing Style (т.н. "продолжения"), когда например сервис запоминает в своём потоке функциональности, где именно я остановился в UI, откладывая на сервере выполнение последующего кода, и потом при моём возвращёнии продолжает автоматически точно с того места.

Но, да, для этого нужен немного другой стиль проектирования, и достаточно глубокое понимание programming in large, нежели принято в этих ваших веб-фреймворках мэйнстрима; а для этого требуется университетский уровень, а не "онлайн-курсы".

P.S. Как же стать востребованным разработчиком с нуля до профи в темах блокчейна и крипты с доходом от 100k/сек, после семинара вкратце расскажу :)
Знакомые пацаны пилят биллинг с поддержкой PayPal, посоветовал им попутную идею микро-стартапа :)

В PayPal есть база транзакций, ну и здорово было бы декларативно указать связь между вашей базой данных и базой данных PayPal, и позволить системе самой автоматически поддерживать соответствие между ними (эта фича во взрослом проектировании называется "зеркалирование", и её почти нигде нету). Поэтому приходится реализовывать синхронизацию вручную через кривейший PayPal REST API, и это весьма сложно сделать нормально.

Так вот, идея организовать сторонний платный сервис, который обеспечивал бы такую автоматическую консистентность между двумя базами.
"Старый код никогда не умирает, пока вы не прибьёте его сами."
(с) Гради Буч

Перефразирую маэстро:
"Старая архитектура никогда не умирает, и будет постоянно возрождаться как Феникс, пока вы не разломаете её сами до самого основания."

В PayPal PHP SDK (вроде и deprecated, однако тянется и тянется во многих проэктах) была например такая пыточная фича, как токен доступа для аутентификации всех ваших будущих запросов в пределах заданного лимита времени, причём этот SDK использует глобальное состояние (!) для отслеживания этого токена, и не позволяет вам не создавать его. Можете представить себе ту боль, которая возникает при необходимости отслеживания этого всего и организации дополнительных запросов.
Хороший (по контенту) бесплатный курс по Highload -- был?

От организаторов конференции Highload++, и я его раньше рекомендовал. Однако, сервис по обучению highload от мастеров highload сам по себе оказался крайне ненадёжным и очень хрупким :)

Во-первых, в рассылке материалов при щелчке на кнопу "Читать статью в блоге" выбрасывается страничка "No URL found for this tracker ID" на известном международном сервисе подписок.

Во-вторых, на самом сайте, если вы введёте ваш почтовый адрес для получения материалов, вас выбросит уже на 404 (на том же сервисе).

В-третьих, ну ок, тут можно понять причину, что вероятно "Россию в интернете забанили".

Но можно наверное хотя бы на сайте добавить объявление в духе "российский сервис для российских граждан не работает"? Это буквально пять минут. Или выложить просто все материалы в открытый доступ (дальнейшее собирание имейлов потеряло смысл, т.к. всё равно полностью бан в международной базе).

В-четвёртых, ну а вообще вы точно Highload? Запилить на пыхапы простенькую, но надёжно работающую почтовую рассылку на русском хостинге за пару долларов в месяц нормальный джуниор сегодня может за несколько часов.

=

Впрочем, совершенно не удивлён; мое многолетнее мнение, что мэйнстрим это зашквар (сколь бы эпичные проэкты в нём не создавались), с годами лишь крепнет.

Мэйнстрим -- это не технологии, это состояние ума.
Сплошное хипстерство.
"Программа импортозамещения провалена полностью. Ничего нет, кроме бравурных отчетов отраслевых ведомств", - заявил сенатор Андрей Клишас.

Кстати да: массово распиаренные "льготы для российских айтишников" на деле оборачиваются почти полным пшиком, никого особо не мотивирующим, и выглядят как подачка хипстерам с барского плеча "на отвязаться" (оценочное суждение).

Какие-то там смехотворные проценты скидка по ипотеке, когда разница в зарплатах даже со средними американскими сеньорами в десятки, а то и сотни раз (и это я ещё молчу про криптостартапы :), а главное, что теперь западные биржи фриланса недоступны, где ребятам мирового уровня можно было трудиться из России, плюс множество реально важных в архитектурном плане платных облачных сервисов теперь недоступно из-за блокировки оплаты по картам, и никаких им альтернатив и близко не видно. Понятно, что два-три крупнейших сервиса вроде амазона заменить яндексом/мэйлом можно, но тысячи мелких специализированных, которые естественно росли под нужды миллионов пользователей, никогда не сформируются принудительно под заказ "технологического суверенитета". Ну или что-то сформируется, но по ценнику "x100", и на уровне студенческого курсача на пыхе, который через месяц развалится уже на первой сотне реальных пользователей.

Ну, штош. Надо бы поконструктивнее, но в данном случае у меня никаких идей нету, только попкорн :)
Хотели как лучше ("технологический суверенитет"), а получилось как всегда ("цифровой концлагерь").

"Вот вводят программу «Мой спорт». Слышали о такой? Детям даются куар-коды, а мы, тренеры, должны их считывать, когда они приходят на тренировку. После — выставлять оценки. Нам объясняют, что пора уже проводить цифровизацию и здесь. Ребята, у нас нет площадок, условий, инвентаря, а мы вкладываемся в цифровизацию! У нас скоро детей не останется в спорте. Вот для этой платформы нужны персональные данные как детей, так и родителей. Что сильно настораживает последних. Кто все-таки приходит — то телефоны забывает, то они разряжаются, у кого-то кнопочные. И вот вместо тренировок мы этой отчетностью занимаемся."
Спорт-Экспресс