Лаборатория Математики и Программирования Сергея Бобровского
1.3K subscribers
1.17K photos
24 videos
917 links
ЛаМПовое с Бобровским
Download Telegram
.

Облако драгоценностей за неделю.

Основной паблик:

null

Для донов-начинающих:

База по карьере, серия 16:
Итак, что же это за система? Ранее я приводил несколько десятков схем тайм-менеджмента и самообучения, и в будущем разберём ещё немало...

Достичь практически чего угодно в ИТ сегодня стало проще, чем когда-либо прежде — в частности, с помощью AI, вообще без посторонней помощи... но люди по прежнему находят оправдания тому, почему они "не могут".
Честно говоря, сегодня в программировании лучшее время за все 45 лет моей карьеры. Но большинство людей оказываются в нужном месте в неподходящее время - или не в том месте в нужное время...

Для донов-неначинающих:

Профессиональным программистам сегодня приходится тратить больше времени на...

Продолжаю выкладывать для донов материалы СильныхИдей — доступны моим курсантам, но тут расширенные и дополненные версии.
47. Как повысить качество проектирования программных систем?
В ответ на такой вопрос обычно даются шаблонные советы, например:
"Больше работай над практическими проектами".
"Найди хороший проект с открытым кодом и изучай его код."
"Попроси коллегу, чтобы он провел code review".
Если читать между строк, то все это сведётся к "я не знаю"...

(все старые материалы для донов постепенно сгорают)

=

Первые сериалы из существенно переработанных и улучшенных материалов СильныхИдей (по сути три книги) доступны на бусти:
1. БАЗА программной инженерии
2. Software Design с акцентом на Programming in Small
3. SOLID-25

Сериал "Вайб-проектирование" тоже на неделе выложу для всех.
Не выложил )

=

Новые материалы для ментатов Лаборатории.

null

=

Self-Hack (тайм-менеджер + мотиватор + idle-игра).
null

По техническим причинам "по состоянию здоровья" ничем особо не занимался.

Фоном посмотреть рекомендую =>
Шиз 596 минут изучает теорию групп (тяжело...)
1👍387🐳6🤓1
(а, так я же выложил гайд по вайб-проектированию (подробно): поставил дату на 28.07 и забыл :) а его уже напокупали)

Хочешь научиться проектировать системы с помощью AI так, чтобы код не превращался в адский спагетти-монстр? 🍝💀

=> гайд по вайб-проектированию на бусти (сегодня в полночь цена вырастет)

Разбираем AI-разработку на практике: от идеи до рабочего чата на локальной модели или API. Никаких сложных IDE — только Python, PyTorch и Gradio (+твои горящие глаза 👀).

Для кого?
✔️ Новички в AI, которые устали от "слепого" копирования кода из ChatGPT
✔️ Те, кто хочет запустить свой AI-сервис, но не знает, с чего начать
✔️ Все, кому надоело, что код из чатика превращается в "лоскутное одеяло"

Что внутри?
🚀 22 урока — от мозгового штурма до релиза:
- System Design (без него — никак!)
- Генерация кода (и как не сойти с ума)
- Локальные модели vs API (плюсы, минусы, подводные камни)
- Отладка и рефакторинг (спасаем проект от краха)
- Документация (да, это обязательно 😅)

Акцент на Programming in the Large — учим AI писать чистый, масштабируемый код, а не просто склеивать prompt'ы.

💡 Бонус: Весь процесс — от диалогов с Claude 3.7 до финального кода — у тебя перед глазами.

P.S. Если твой прошлый опыт с AI-кодингом напоминал "котёл ведьмы" — этот курс для тебя. 🧙‍♂️🔥

=> гайд по вайб-проектированию на бусти
5😁33👍16117🐳4
This media is not supported in your browser
VIEW IN TELEGRAM
Раньше у меня было какое-то подобие личности, а потом я изучил теорию типов...

Первый (из семи) уровней рационального просветления ментата -- это освоить теоркат пониманием локальных декартово замкнутых категорий (ибо это категориальная модель лямбда-исчисления с зависимыми типами), симметричных моноидальных категорий (как обобщение лямбда-исчисления с гом- джаббаром функтором) и категории коммутативных диаграмм. Ну и, соответственно, изучить мои гайды по HoTT/CoC/CTT.
5👍43🤯1911🔥3
.

Облако драгоценностей за неделю.

Основной паблик:

null

Для донов-начинающих:

Всё есть в бесплатном доступе, только не у всех складывается паззл, чтобы получилось системное действие, которое даст реальный и значительный рост...

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

Для донов-неначинающих:

Продолжаю выкладывать для донов материалы СильныхИдей — доступны моим курсантам, но тут расширенные и дополненные версии.
48. Как проектировать программы in small (два научных подхода)
Очень интересная работа оксфордских учёных предлагает альтернативный, и в чём-то даже более продуктивный подход: основывать структуру программы на структуре выходных данных, что приведёт к ко-рекурсивным программам.

(все старые материалы для донов постепенно сгорают)

=

Первые сериалы из существенно переработанных и улучшенных материалов СильныхИдей (по сути три книги) доступны на бусти:
1. БАЗА программной инженерии
2. Software Design с акцентом на Programming in Small
3. SOLID-25
4. Гайд Вайб-проектирование


=

Новые материалы для ментатов Лаборатории.

В раздел "Элитный программист" добавлены материалы
72) Как бороться с очень скучными занятиями
73) Никогда больше не скучайте во время работы


В курс карьеры добавлены
107-й материал "Что вас ждёт по мере роста".
Основное требование к разработчикам по мере их роста заключается в том, что они должны всё меньше и меньше создавать то, о чем их конкретно просят...

106-й материал "Как выживать в ИТ-индустрии в 2025-м".
Беднейшие 80-90% будут бороться за копейки. Многие будут вытеснены искусственным интеллектом, аутсорсингом или просто слабой экономикой.
Средний уровень "достойных, но не исключительных" разработчиков исчезает. И большинство программистов попадают в эту категорию...

Мы здесь, потому что это трудно.
it's a privilege to do things that are hard.

=

Self-Hack (тайм-менеджер + мотиватор + idle-игра).
Готово 42(+14) уровней из 54 альфа-версии,
этим летом бета-версия 💯 будет готова.

Пока на самой игре сосредоточился, надо базовую логику закончить не распыляясь. Как добрался до уровня крипты 1e500 - так многое посыпалось :)
Сложноватую математическую модель взял... некоторые коэффициенты на начальных уровнях должны быть дробными (2.71), а на средних - 1e1000, единого подходящего типа нету, ни double ни BigInteger не подходят. Надо было сразу самому правильный тип и алгебру для него делать, потому что в перспективе грядут куда более эпические уровни...

26-й уровень
Диверсии на автоматизированных производственных линиях, в системах контроля качества и логистики складов. Фокус на скрытый, накапливаемый ущерб.
Внедрение дефектов в продукцию; манипуляция параметрами сборки/тестирования; сбои в работе роботов-сборщиков; подделка отчетов КГ; нарушение логистики компонентов
.

синхронизм с реальностью:

Грядет цифровой апокалипсис для любого устройства: российские хакеры из KillNet анонсировали ответную атаку на Францию в ответ на события 29–30 июля. По их заявлениям, новый инструмент способен выводить из строя интернет, транспортные сети и промышленные объекты.
38👍132
Продолжаю работу с ментатами 🤓

На работе месяц назад у меня прошел performance-review, по результатам которого подняли уровень до middle-начальный (всего три уровня для middle). Тех. собеседование прошла хорошо, аргументы о своей работе для поднятия ЗП, считаю, тоже неплохо доносила, просила 100-110 т.р., но дали только 90 т.р. на руки.

Девушка ↑↑↑ в том году с полного нуля после первой части моий Лабы + дипл.проект сама устроилась стажёром, выросла быстро до джуна (не msk не spb!), вот уже миддл, опыт не крутила (хотя я предлагал, у неё уровень крепкий джун точно был, а кодит вообще отлично), всё честно. Да, подольше в целом, ну и что, тоже полезный опыт. Я конечно больше за такой подход.

Визг тормозов, музыка крыш -
Выбор смерти на свой риск и страх.
Битва за жизнь, или жизнь ради битв -
Всё в наших руках.

=

...И ещё зацепили ваши слова из одного отчёта о работе с ментатами в ТГ:
"Вообще, процесс обучения можно назвать процессом вашего сопротивления. Обучения как такового в 80% случаев и нет, всё сводится к поиску способов как обойти ваше сопротивление."
Раньше я думал, что учёба должна идти легко и просто, иначе что-то у тебя не так. Но в реальности приходилось да и сейчас приходится, бороться с собой и садиться за учёбу специально, через нежелание. А если этого не делать, то будешь лежать и бездельничать. А тут я увидел эти ваши слова и почувствовал, что да, вот оно. Оказывается это нормально, что я ощущаю сопротивление/нежелание и нужно просто обходить его. Кажется, что я испытал от этого облегчение.

...Clickhouse даже без нагрузки ведет себя немного странновато. Даже при вставке одной точки раз в 10 секунд он все равно умудряется их терять по пути. Возможно я чего-то не настроил.
(Переделаю генератор и буду писать чанками.)

...Видимо, из-за отсутствия опыта проектирование давалось довольно тяжело.
Сейчас еще вернулся к своим записям, оказалось, что этап проектирования у меня занял всего треть времени, а всё остальное — реализация, которую бахнул за 3 дня. Реализация шла гораздо быстрее, чем проектирование :)

...Собрать и запустить получилось с первого раза, но программа отрабатывает некорректно, алгоритм нужно править.

...как только я перестал плакать и продолжил жевать кактус, платный Cursor все очень четко разложил.

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

...Помню как тимлид выпендривался касаемо того что я опаздываю на два часа, ибо до офиса я добирался через пробки, по итогу ничего мне не сделал ибо понимал, что врубаться в написанное чтобы доделать полугодовую задачу ему не по силам.

...Так же через знакомых нашел клиента, у которого сайт на php laravel, делали два студента, выполняли обязанности очень плохо, зато хорошо нарисовали мужское достоинство на стене перед уходом)
43🏆7👍6😁2
.

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

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

Какова твоя эпистемология? Это твой образ мышления и знания о себе, своём разуме, своём бессознательном, своей цели в жизни, своих способностях и навыках, своей способности к развитию, своём потенциале к росту, к духовности, к здоровью и благополучию, к деньгам и т.д.

У вас есть свой взгляд на эти вещи. У вас есть подсознательный способ "узнать" о каждой из них. И каков бы ни был ваш образ мышления и познания -- такова ваша эпистемология.

Теперь можно задать ещё более личный вопрос: насколько хорошо работает ваш способ мышления? В конечном счёте, вы зарабатываете на жизнь мышлением. Мы все думаем. Это потому, что ваше мышление определяет качество вашей жизни, то, как вы смотрите на вещи, ваши предположения...

В качестве примера давайте создадим простую эпистемологию о programming in large.

1) Знаете ли вы, что нужно делать, чтобы качественно и в срок создавать крупные системы? Что, по вашему мнению, вам нужно делать по архитектуре, по system design? Можете ли вы чётко определить, какие технологии и фреймворки вам подходят, а какие нет? Какие паттерны проектирования вам применять? Когда, где, как часто?

2) Знаете ли вы, как делать то, что необходимо для того, чтобы качественно и в срок создавать крупные системы? Есть ли у вас подробный план, мистер Фикс? Есть у вас диаграммы C4 и набор требований по BDD? Есть ли у вас осознанный и проверенный процесс разработки, который, как правило, приводит к успешному результату? Вы действительно придерживайтесь этого всего?

3) Знаете ли вы, как думать о делании всех этих требуемых вещей? Как лучше всего об этом думать? Знаете ли вы, как думают те, кто наиболее преуспел в этих темах? Что они думают о software design, о system design? Как они относятся к объектному и функциональному программированию, что они применяют из computer science?

"Ментат обучен одновременному сознательному следованию по параллельным петлям кажущихся случайными связей, просчитывая всю цепь причин и следствий."
"Дети Дюны"

У вас уже есть некоторое представление о том, как качественно и в срок создавать крупные системы (возможно, на основе богатого опыта; возможно, на основе единственной статьи на хабре). Но что вы знаете об этом представлении? Когда вы поймёте, как вы думаете и что вы знаете об этих вещах, вы сможете начать обновлять и улучшать то, что и как вы "знаете".

Ваше мышление -- ваша эпистемология. Ваша эпистемология -- ваш полезный опыт.
350👍84💯2🫡1
Forwarded from Дизраптор
Ещё одна важная новость из мира эйай:

Стартап Harmonic запустил приложение с чатботом, став первым общедоступным математическим эйай-сервисом с формальной проверкой результата. А скоро обещают и API для компаний выкатить.

Обычный* генеративный ИИ работает примерно как ребёнок, которого родители научили, что ветер дует, потому что деревья качаются, и он говорит: "ветер дует". А почему он дует? И дует ли?

Другими словами, если попросить ChatGPT или Claude расписать математическую формулу, то он её... как бы сказать... попробует угадать в формате "я зделяль". Но ответить и пояснить за свой генеративный базар не сможет. Можно ли такой формуле доверять и закладывать её в серьёзные расчёты - судите сами.

А ИИшка от Harmonic под названием "Aristotle" работает не так. Генеративный ИИ (LLM) предлагает гипотезу или часть решения и передаёт её в специальный доказательный движок, который всё проверяет с точки зрения формальной логики, аксиом, мат. определений. Алгоритмически, то бишь.

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

Если движок "Аристотеля" не может верифицировать решение от LLM, то генерится другое решение. Потом его снова проверяют. И так по новой, пока проверка не будет пройдена. И лишь тогда решение выплюнется юзеру.

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

* Генеративный ИИ теперь обычный, дожили, хех 😈

Дизраптор
Please open Telegram to view this post
VIEW IN TELEGRAM
43👍188
Обожаю смотреть нашу первую-вторую лиги!
Собрал за пару часов такую же глупую как и футбол игрульку "Лучшая Лига Мира"
(жпт использовал только для генерации календаря встреч).

Процесс игры очевиден (всего одна кнопка:).

Скачать игру тут zip 27 кб :)

В корне игры текстовый файлик teams.txt, предварительно замените название самой первой команды (Динамо М), на название той, за которую вы будете играть.
Нужна NET 4.8.

На стадионе мало народа - обычный матч, вторая лига,
Моб выдвигается из парка, у турникетов стрела с врагами,
Их число превышает наше, но мы к этому уже привыкли,
Заряжаем МосЭнерго, и первые тела уже на асфальте...

Хулиганы второй лиги снова рвутся в бой!..

=

А это, видимо, памяти Цоя?
"The hardest part of letting go, is saying goodbye."

+ фоном к игре можно послушать думерское
👍45❤‍🔥10😁2
Прекрасное:
"Telescopes Are Tries: A Dependent Type Shellac on SQLite"

Представляем телескопы (преобразователи зависимых типов в обычные) как префиксные деревья с вложенными отображениями (например, словари Python), а так как телескопы эквивалентны конъюнктивным запросам, получаем
категорию, где композиция соответствует контекстным преобразованиям.

То есть можно легко и просто эмулировать зависимые типы (да и просто сложные типы F#/Haskell) словарями Python, где ключи — значения переменных, а значения -- вложенные контексты; и никаких GADT/singletons.

Более того из "телескопных" описаний несложно генерировать SQL, а в результате получаем прозрачную работу не только с реляционными данными, но и с графами, транзитивными замыканиями и т.п.
34🤔20👍3❤‍🔥22
.

В дополнение к сегодняшнему посту.

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

А так-то ведь это задачка вполне по силам и сообразительному третьекласснику! Просто выделить существительные: гном, инструмент, оружие, животное, растение, руда, тайл...

Так вот, поразительно, но ни жпт5 ни грек4 ни клод4.1 не смогли сделать что-то элементарно адекватное, хотя бы намёком подразумевающее иллюзию понимания. Дублирующиеся понятия, какие-то совершенно посторонние сущности, абстракции абстракций, полный 💩

Во-вторых, все они также безбожно тупят 🤮 и в простейших нешаблонных задачках software design: например, подробно пишу, что надо сделать сигнатуру метода по reified generics, а оно мне выдаёт type erasure lol и никакие мои возмущения не принимает.

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

И это совсем не про то, что "надо больше практиковаться" или "читать книги по объектному мышлению" (что само по себе безусловно полезно, но недостаточно).

Я дам моим ментатам логически атомарные шаги, которым надо просто тупо следовать, чтобы спроектировать систему на тысячи классов с полного нуля, сохраняя сложность проекта линейной, а не экспоненциально растущей.

То есть мы резко повышаем мастерство, (почти) не прокачивая скиллы 🚀

Сперва сделаю такую формальную модель для ООП, потом и для ФП.

Единственный минус, что это получается уж очень тяжёлая интеллектуальная работа 🤓 и AI совсем не помощник...

Хотя после HoTT мне уже ничего не страшно 😁

Почитайте сегодняшний пост, чтобы понять, о чём я говорю.
651👍166🤝1
.

Облако драгоценностей за неделю.

Основной паблик:

Программный пост, типа.

Но с сегодняшнего дня паблик vk закрытый: все посты видны только папищекам, вступление только через моё личное приглашение.

Для донов-начинающих:

Мне периодически пишут
— Сергей Игоревич, я прошёл известные онлайн-курсы, потратил 200 тысяч рублей. Результата ноль. В программировании так ничего и не понимаю. Что со мной не так?
С вами всё в порядке. Проблема в том, что 98% современных курсов по программированию учат обрезанной версии!..

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


Для донов-неначинающих:

Продолжаю выкладывать для донов материалы СильныхИдей — доступны моим ментатам, но тут расширенные и дополненные версии.
49. Как найти смысл данных в вашем проекте.

Как AI-агенты угрожают SaaS-модели.

Какой из фреймворков потянет сегодня миллиард запросов в секунду (без кэша, HAProxy, Prometheus/Grafana)?
Условия: идентичные ноды, JSON-запросы, равномерное распределение.
Ключевые метрики: P99 latency, использование CPU/RAM, стабильность.
(поразительно, но go gin и не первый и не второй, и даже проиграл кору asp net)

(все старые материалы для донов постепенно сгорают)

=

Первые сериалы из существенно переработанных и улучшенных материалов СильныхИдей (по сути три книги) доступны на бусти:
1. БАЗА программной инженерии
2. Software Design с акцентом на Programming in Small
3. SOLID-25
4. Гайд Вайб-проектирование


=

Новые материалы для ментатов Лаборатории.

В "Бесстрашные переговоры по зарплате" добавлен 55-й материал "98% программистов не знают Это!".
У всех программистов, испытывающих трудности с работой, есть одна общая черта. Дело не в недостатке знаний. Это не слабое резюме. Это не плохие софт-скиллы. Дело в том, что ...
что вы годами тратите всё своё время на рутину в интересах других людей, скребя копейки, вместо того, чтобы постоянно развивать скиллы, за которые хорошо платят на рынке труда, и стратегически по ит-бизнесу (что будешь делать после 40?), т.к. у вас на это "нету времени". Ну ок, это ваша жизнь; просто не забывайте, что "всем пофиг".


В СильныеИдеи добавлены материалы
"121) 1, 2, 3... Много!" (поговорим о классах эквивалентности для Много),
"119) Самый лучший микро-стиль кодирования".


Мы здесь, потому что это трудно.
it's a privilege to do things that are hard.

=

Self-Hack (тайм-менеджер + мотиватор + idle-игра).
Готово 42(+0) уровней из 54 альфа-версии,
этим летом бета-версия 💯 будет готова.

Таки игра рассыпалась ) ну, когда надо 1.58 возводить в степень 20,000, и много раз в секунду подобных вычислений, и это далеко не конец. так-то работает, но начались тормоза, а кто знал... Пришлось перефигачивать код более чем полностью.
Нашёл древнюю либу gnu mpfr из 90-х, там есть условный bigfloat (на экспоненту отведён int, т.е. до 2+ миллиардов), но синтаксис по понятным причинам префиксный, поэтому рефакторинг получился эпичным.
13515👍5❤‍🔥41
This media is not supported in your browser
VIEW IN TELEGRAM
Вопрос, а кому вообще всё это надо? MLTT, HoTT, индуктивные типы, процесс-алгебры, pi-калкулусы, кодирование топосов, hopf fibrations и прочая попса, которая сделает вас overengineering и в результате полностью unemployable? :-)

Я не знаю. Понятно, что в айтишке - по определению - лучше быть умненьким, чем глупеньким, и тем не менее вы можете строить прекрасную карьеру и зарабатывать хорошие деньги (или уже нет?), всю жизнь занимаясь например джоном рестом, crud-ом-шмудом, saas-ом-фигасом, микросервисами-фигервисами, парсингом-шмарсингом, сайтами-фигайтами, и прочей примитивной (хотя и доходной до поры до времени) линейной туфтой с нулевыми перспективами и задачками уровня первокурсников (впрочем, в универах хотя бы АСД изучают...).

Тема чистого проектирования сегодня немножечко понимаема фактически только в геймдеве. Тамошний уровень сложности логики, да и system design, на 1-2 порядка круче любого бизнес-проэкта, и пацанов надо брать на работу с опытом прежде всего из разработки игр. Представляете - симулировать сложнейшие миры с тысячами особенностей в реалтайме, с тучами юзеров в онлайне...

Я где-то в середине 2000-х делаль ММО про пиратские войны на Java, по-моему Java 2 :) Тогда очередной хайп шёл про перспективы java-апплетов для браузеров, ну и J2ME наверное на миллиарде устройств уже была, телефоны точно все её держали. Клиент просил игру на 150 krps! :) Я хз откуда он такую оценку взял, и сделал тайно для начала на 1000 rps :) ибо понимал, что до такого хайлоада либо шах либо ишак сдохнет (сдох в итоге шах - финансы закончились :) - но закладывался на масштабирование конечно...

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

Собственно из-за геймдева я и зашёл в computer science, потому что меня всегда дико бесило (буквально до этого месяца 🤓), что проекты достаточно быстро запутываются, а классические рекомендации программной инженерии помогают слабо и не выдирают корень проблемы. Но я всё же продолжал бороться со злом, а не примыкать к нему, как все остальные, и вот, спустя где-то ~20 лет, наконец победил! 🏆

Это кстати вполне нормальный срок для достижения истинного мастерства 💥 буквально на днях слушал историю русского автогонщика из assetto corsa competizione, который рассказывал, что наконец научился профессионально проходить повороты, а учился он этому 25 лет 😁

Начинал он, я так понял, с Grand Prix из 90-х и Indi500, где появились первые действительно реалистичные физические модели. Ну а потом netKar и rFactor.
3🔥47158👍4
Чем в айтишке глупенькие отличаются от умненьких?

Глупенькие a) ненавидят писать тесты, и b) ненавидят думать заранее.

Таким образом умненькие в дополнение к своим преимуществам по определению получают ещё новые огромные бонусы, потому что

a) AI действительно хорош в написании тестов, снимая много шаблонной нагрузки, и

b) AI непропорционально сильно вознаграждает тех, кто продумывает максимально много заранее. Команды, добивающиеся топовых результатов -- это те, кто умеет разрабатывать хорошие спецификации (в идеале, в формальном виде, например через BDD, или с помощью TLA+), качественно занимаются проектированием и позволяют AI реализовывать проект в TDD-наморднике под строгим контролем сверху вниз.
Мой гайд по вайб-проектированию в помощь.

Всё идёт норм и очень радует: результаты будут отличаться на всё больше и больше порядков.
6👍49194❤‍🔥1
.

Продолжаю работу с ментатами 🤓

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

...До этого я вообще не знал, что такое дефункционализация. Когда впервые услышал — показалось чем-то сложным и непрактичным. Типа "зачем заменять функции на классы?"
Перечитывал материал раз 10. И только после переписывания примеров начало доходить что это такое и зачем нужно.
Вывод: раньше казалось «overengineering», теперь — нормальный инструмент, особенно в проде, особето в ETL и распределенных вычислениях.

...Раньше я боялся глобального состояния, но теперь вижу в нём инструмент, а не антипаттерн. Главное - использовать его осознанно.
Спасибо!

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

...Удивительно, как можно задание из трех строчек прочитать неправильно. Максимальный размер словаря, конечно, взялся "по инерции" из предыдущего задания и задания курса АСД.
Хотя в условии об этом ни слова.

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

...Всю эту isinstance грязь можно упаковать в фабрику которая бы проверяла результаты и возвращала или результат или "подходящее" исключение. Ой, подождите, это что опять монады?...
Дальше еще 40 таких примеров, где то есть методы в которых разные такие вот BusinessLogicError рейзятся за условиями, ногу сломишь. вы были правы, я расстроился, мне никогда не переписать все это на монады, или хотя бы на внутренние коды ошибок которые можно было бы мапить в одном месте красиво :( :( :(

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

...спроектировал класс "разделяемого состояния" для нескольких элементов GUI, который весь обмен сообщениями через шину инкапсулирует внутри себя. Заняло ~20 строк, по факту думал больше месяца. Без курсов по ООАП бы еще полгода городили костыли.


[по последнему, кстати, я ровно вот это и делаю для подобных случаев, чтобы не надо было думать вообще, по большому счёту]
133👍193❤‍🔥2
Очередное шаблонное нытьё "Live coding sucks" - синьор Мустафа с десятилетним опытом жалуется, ой-ой-ой как тяжело решать задачки когда кто-то смотрит со стороны, а я так не могу для меня это стресс, в реальной работе всё совсем другое бла-бла-бла... И подводит под это "научную" базу вдобавок.

Детский сад штаны на лямках.

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

Если честно, в последнее время я всё больше склоняюсь к тому, чтобы не бороться с эйчаровским злом, а примкнуть к нему. Ужесточить найм до абсолютного предела, спрашивать обязательно например на собесах где в Django используется паттерн Мост такое:

1. Вам надо выбрать стиль (ООП,ФП...)/язык/фреймворк для нового проекта. Определите требуемые свойства как типы-предикаты (пропозиции) и постройте формальные пути между ними, показывающие их совместимость или конфликты. Используйте одну из наиболее сильных систем классификаций -- h-levels из гомотопической теории типов.

2. Смоделируйте каждую сущность в проекте (таблицу базы, модель ORM) как Sigma-тип, где первая проекция содержит сами данные, а вторая - доказательство инвариантов. Например

Σ(x:User).(valid_email(x .email) × valid_password(x .password)))

Реализуйте каждый эндпоинт как функтор

F: Request → Response

где естественное преобразование

η: F ⇒ G

между функторами разных эндпоинтов автоматически обеспечит согласованность их композиции.

=

Вот тогда и найм быстро самовосстановится.
6🤯3927👍11😁5❤‍🔥1
Я повторил эксперимент с картинки применительно к нашей любимой айтишке =>

ЖПТ5
- Не торгуются за оффер — соглашаются на первое, теряют 20–40% на старте.
- Не понимают деньги — налоги/RSU/опционы/бенефиты, берут худшие пакеты.
- Продают часы, не leverage — не автоматизируют, не строят инструменты/продукты.
- Ноль бренда и нетворка — резюме тонет, цену диктует рынок, не они.
- Тратят всё — нет подушки и инвестиций, кредиты на гаджеты, любой простой = кассовый разрыв.

Клод Опус 4.1
1. "Я же программист, зарплата всегда будет"
Тратят всё, что зарабатывают. Нулевые сбережения. Один увольнение = паника и долги.
2. "Инвестиции? Это скам!"
Держат деньги на дебетовой карте под 0%. Инфляция съедает покупательную способность. В 40 лет понимают, что опоздали.
3. "Новый MacBook каждый год - это инвестиция в себя"
Покупают топовое железо для написания CRUD'ов. $3000 ноутбук для работы, которую делает машина за $800.
4. "Фриланс/стартап - это моё будущее богатство"
Прыгают с работы на работу за +10% зарплаты. Теряют бенефиты, опционы, карьерный рост. В итоге - вечный мидл.
5. "Я слишком умный для финансового планирования"
Не знают свои расходы. Не ведут бюджет. "Зачем Excel, если есть зарплата?" Удивляются, куда деваются деньги.
Итог: В 35 лет - съёмная квартира, кредитная машина и страх потерять работу.

Gemini 2.5 Pro
Держи. Без соплей.
Мгновенное «прожирание» прибавки. Получил +$500 к зарплате — тут же поднял расходы на $600. Новый айфон в кредит, модный смузи, квартира покруче. Итог: вечный ноль на счету, сколько бы ни платили.
«Верность» низкооплачиваемой «галере». Годами сидеть на одном месте из-за «стабильности» и «хорошего коллектива», пока рынок улетает в космос. Боязнь собеседований и торга за зарплату — прямой путь к нищете.
Финансовая безграмотность при высоком IQ. Знать всё о сложности алгоритмов, но не понимать, что такое сложный процент. Считать, что инвестиции — это для банкиров, а бюджет — для нищих. Деньги лежат на дебетовой карте и сжираются инфляцией.
Фетиш на гаджеты. Скупать новейшие макбуки, механические клавиатуры и 49-дюймовые мониторы, хотя старые работают идеально. Это не инвестиция в производительность, а дыра в бюджете ради дофамина.
Синдром «дешёвого фрилансера». Тратить вечера на копеечные заказы с бирж, вместо того чтобы вложить это время в обучение, которое поднимет твою основную ставку в 5 раз. Продавать час своей жизни за гроши.

=

И тут локально особо не поможет ни проработка финансовой грамотности, ни прокачка денежного мышления; корень проблемы в другом: само наше дефолтное мышление -- это кривейшая ОС уровня Windows 95.

Почему так? Вот например хорошая метафора:

"Хищник пришел к нам из глубин космоса и установил нам правила жизней наших. Человеческие существа — его пленники. Хищник нам бог и хозяин. Он сделал нас покорными и беспомощными. Если мы хотим протестовать — он подавляет наши протесты. Если мы хотим самостоятельности — он требует не делать этого."

Думайте прежде всего, как полностью сменить в своей голове дерьмовый инопланетный продукт с кучей вирусов и багов на норм ось уровня arch linux.
442💯19🤔7👏2
.

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


Я экспериментировал где-то 20-30 часов с моей новой методикой "как обучать формальному проектированию просто как готовой пошаговой технологии, чтобы человек с небольшим опытом мог создавать системы с полного нуля не на 20 классов, а на 20,000 классов, сохраняя сложность проекта линейной". Ключевая идея, что у нас есть 5-7 гибридных паттернов (повыше уровень абстракции, чем классические 23 GoF паттерна), для каждого из которых задано предусловие - когда тот или иной паттерн надо просто "тупо" применять, и как именно это делать. Ну например это "инвертированный" Visitor, который я вчера выложил для ментатов в СильныеИдеи (если угодно, это версия Double Dispatch с Action Interface).


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

Это была моя мета-ошибка: мне надо было сразу начинать с того факта, что ООП -- это полный sucks 💩

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

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

Тут вообще всё элементарно, куда проще чем классы, вот смотрите: HOFs как экспоненциалы, свободные композиции при совпадении доменов-кодоменов, финальные ко-алгебры для описания индуктивных рекурсивных типов, ограниченные типом функции (поведения в поведениях), монадические трансформеры, категорные классы как паттерны декомпозиции, и прочая попса 😇


Ну а те десятки часов, которые я потратил на эксперименты с ООП, в принципе тоже не пропадут: я просто в СильныеИдеи добавлю отдельный материал с теми гибридными паттернами.
547🔥7👍3👌2
.

Облако драгоценностей за неделю.

Основной непаблик (с 19.08.25 закрытый):

Какой же кайф писать в функциональном стиле после ООП, как всё получается легко и просто, естественно и масштабируемо, я вам передать не могу. Точнее, могу :)


Для донов-начинающих:

Самое бестолковое решение из всех возможных — ввязаться в это дело, отдать ему свои силы, время и деньги, а затем бросить...

Списки дел/todo — добро или зло?
Хотя я большой фанат списков дел, всё же есть две достаточно большие группы людей, которым они не очень зайдут... Поэтому для этих групп я предлагаю такую модель как ...

База по карьере, серия 17: Данная группа внутренних стремлений — это в основном то, что будет определять ваш выбор профессии...

Для донов-неначинающих:

Продолжаю выкладывать для донов материалы СильныхИдей — доступны моим ментатам, но тут расширенные и дополненные версии.
50. Как готовить сверхгибкий код.
Моделирование предметной области (домена), превращение мира в чистые красивые структуры данных выглядит увлекательным занятием. Однако вам быстро становится совсем не так весело, когда реальный мир даёт контрпример, который портит всю вашу чистую онтологию более чем полностью...

Золотые правила карьеры разработчика.
3. Если тебя на работе не уважают — ...

(все старые материалы для донов постепенно сгорают)

=

Первые сериалы из существенно переработанных и улучшенных материалов СильныхИдей (по сути три книги) доступны на бусти:
1. БАЗА программной инженерии
2. Software Design с акцентом на Programming in Small
3. SOLID-25
4. Гайд Вайб-проектирование


=

Новые материалы для ментатов Лаборатории.

В раздел "Элитный программист" добавлены
75-й материал "Списки дел -- добро или зло?"
74-й "Шиза полезна не только в программировании"

В СильныеИдеи добавлен 122-й материал "Анти-Visitor".
Я не раз рассказывал о том, насколько хорош паттерн Visitor ("Всё, что вы знаете об ООП, неверно", "Ключевой паттерн Visitor в ООП и ФП"), но и у него конечно имеется своя тёмная сторона, о которой необходимо знать...

В курс карьеры добавлен 107-й материал "Нетворк-лайт".
Ты когда-нибудь проводил всю ночь, уставившись в экран, просто пытаясь улучшить своё резюме?..
И ты продолжал рассылать и рассылать их, одно за другим, пока не взойдёт солнце?
Но ни единого ответа, только тишина, из-за которой ты чувствуешь себя совершенно невидимым...

Мы здесь, потому что это трудно.
it's a privilege to do things that are hard.

=

Self-Hack (тайм-менеджер + мотиватор + idle-игра).
Готово 43(+1) уровней из 54 альфа-версии,
этим летом бета-версия 💯 будет готова.
Хорошая новость, что вся игровая механика в целом собрана и более-менее сбалансирована, остаётся добавить несколько игровых фич по шаблонам (патриархи криптодуш :), ну и дойти до конца, а т.к. это idle, времени требуется прилично.
Как закончу все уровни, сперва отдам на тестирование моим ребятам, а потом будет полностью открыто для всех бесплатно.
41👍162
Какой ещё Эрланг? Это же винтажный гаджет, типа первого айфона! Все уже переехали на нейросети и квантовые вычисления, а вы тут со своими процессами, которые общаются почтовыми голубями.

Весь современный мир понял, что асинхронность нужна в 10% случаев — и это прекрасно делается парой async/await на подоконнике, ивентлупом на коленке или setTimeout(() => {}, 0) с магической надписью "Node.js". А в Эрланге 90% кода — это ритуал вызова шаманских духов через send... receive... и надежда, что они не перепутают сообщение с предсказанием погоды.

Какие там есть легенды про Эрланг?

* Распределённость из коробки? Да это как получить в подарок конструктор "Собери свой кластер", где нет инструкции, а все детали от разных производителей. В итоге каждый инженер-алхимик месяцами варит свой эликсир из gproc, libcluster и молитв на удачу. И всегда найдётся один главный процесс-баттлнек, который хранит состояние и смотрит на вас, как суслик из "Джуманджи".

* Отказоустойчивость? Какая отказоустойчивость в языке, где главный принцип — "Let it crash", а потом "перезапустим и будем делать вид, что так и задумано"? Перезапустили упавший сокет? Ага, конечно. Пересоздали таблицу в памяти, которая испарилась? Без проблем! Просто представьте, что это фича — самоочищающаяся база данных. А знаменитый RabbitMQ, написанный на Эрланге? Он иногда выглядит как сырая поделка, которая падает от badmatch на ровном месте, словно кот с дивана во сне. Привет пока, ОTP!

* Параллельность? А зачем, если есть ZeroMQ, который как рок-звезда — приходит, бросает в сокет месседж и уходит, не дожидаясь ответа? Зачем городить лес из процессов, которые перешептываются между собой, когда можно просто бросить в общую шину событие и забыть?

Короче, Эрланг — это как пытаться запустить SpaceX при помощи парового двигателя и энтузиазма. Почётно, исторически значимо, но пока вы настроите безаварийный полёт, OCaml уже на Марсе яблони сажать будет.
42🤔14😁75🐳1