Лаборатория Математики и Программирования Сергея Бобровского
1.39K subscribers
1.42K photos
28 videos
1.07K links
ЛаМПовое с Бобровским
Download Telegram
"Онлайн-образование топчется на месте"
"...заметно ухудшились показатели школ программирования: если по итогам 2024 года они росли быстрее всего сегмента (около 36%), то по итогам 2025 года многие из них вышли в минус."

С чего бы это? :)

Я год никого не брал, весной протестирую текущую ситуацию: возьму 1-2 человека на обучение с полного нуля, и 1-2 из тех, кто уже работает. Раньше места кончались за 5 минут, но совершенно не удивлюсь, если вообще желающих не будет. Я к этому давно подготовился через нетворк :)

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

p.s. Никита второй!!!11 🏆🏆🏆
14611👍6
Пример, как работает мой агент. Вот я загнал в него ценный пейпер "Recursive Program Synthesis using Paramorphisms".

Как пишут рекурсию 98% программистов:

int SumPositiveNodes(Node node)
{
if (node == null) return 0;

int left = SumPositiveNodes(node.Left);
int right = SumPositiveNodes(node.Right);

int self = node.Value > 0 ? node.Value : 0;
return self + left + right;
}


Вот как напишут 2% ребят с хорошим университетским образованием (и кто вдумчиво решал мои доп.задачки на второй части АСД :) =>

int FoldTree(Node node, Func<Node, int, int, int> f, int seed)
{
if (node == null) return seed;
int left = FoldTree(node.Left, f, seed);
int right = FoldTree(node.Right, f, seed);
return f(node, left, right);
}

int SumPositiveNodes(Node root)
{
// чистая нерекурсивная логика
return FoldTree(root, (n, l, r) =>
{
int self = n.Value > 0 ? n.Value : 0;
return self + l + r;
}, 0);
}


Да, но это пока классический fold (катаморфизм), когда достаточно только одного результата.

Параморфизм требуется, когда в рекурсивной ветке нам нужно также иметь доступ к самой структуре (хвосту/поддереву).

ListNode DropLast(ListNode list)
{
if (list == null) return null;
if (list.Next == null) return null;

return new ListNode(list.Value, DropLast(list.Next));
}


=>

TOut Para<TOut>(ListNode list,
Func<int, ListNode, TOut, TOut> cons,
TOut nil)
{
if (list == null) return nil;
var rec = Para(list.Next, cons, nil);
return cons(list.Value, list.Next, rec);
}

ListNode DropLast(ListNode list)
{
return Para(list, (head, tail, rec) =>
{
if (tail == null) return null;
return new ListNode(head, rec);
}, null);
}


Результат: исходный код был краток и прозрачен для понимания, а нового кода стало существенно больше, и теперь нифига не понятно :)

Вот в чём сермяга: Para -- это универсальный рекурсивный каркас (порядок обхода и базовые случаи единообразны), который мы тестируем 1 раз.

Далее нам достаточно только проверять нерекурсивную логику внутри различных cons под этот паттерн в нашем проекте.

+ можем использовать Para как fold:

int SumPositive(ListNode list)
{
return Para(list, (head, tail, rec) =>
{
int self = head > 0 ? head : 0;
return self + rec;
}, 0);
}


Где это полезно? В работе со списками и деревьями, в обработке json и подобных структур, в ETL - сокращаем кучу рекурсивного кода (возможно, вообще до одного параморфизма), а добавлять новую логику можно императивно. Но это конечно уровень больше архитектурного code review.

К весне, надеюсь, кто у меня (пере)проходит тему АСД, бета-версия агента будет периодически делать такое ревью решений через клода4.6 и жпт5.3 (бесплатно).
👍37153
Любой, кто серьёзно относится к разработке программного обеспечения, должен сегодня учиться программировать с помощью искусственного интеллекта.

По иронии судьбы, любой, кто несерьёзно относится к разработке программного обеспечения, также должен сегодня учиться программировать с помощью искусственного интеллекта.
😁42💯1764
Все хотят использовать искусственный интеллект.
Никто не хочет использовать свой мозг.
👍35❤‍🔥14😎103🤔2
Вот как надо норм делать (а не эта ваша хипстерская клешня) => mimiclaw

Run OpenClaw on a $5 chip. No OS(Linux). No Node.js. No Mac mini. No Raspberry Pi. No VPS. Local-first memory. Shareable. Portable. Privacy-first. Smarter than PicoClaw.
👌27🏆84👍1
Или вот ещё, от самого Карпатого: микрожпт

Обожаю =>
random.seed(42)

200 строк кода (с комментами), ноль зависимостей.

The most atomic way to train and run inference for a GPT in pure, dependency-free Python.
This file is the complete algorithm.
Everything else is just efficiency.


Это лучшее в мире обучение программистов искусственному интеллекту, которое только существует сегодня в Сети.
2468👍1🔥1
Свежий пейпер "Evolution of Stacks and Moduli" (современные методы построения пространств модулей) Вашингтонского универа, где не рассказывается, а мы уже сами, по заветам Гротендика, выводим в наши интересы, что тамошний "стек" -- это "тип с контекстом выполнения", где равенство типов заменено эквивалентностью морфизмов. То есть это прямая аналогия между 2-категориями/стеками (пруф) и типизированными эффектами!

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

Монады -- это частный случай стеков (категория Клейсли для монады), и мы можем теперь композировать эффекты не только последовательно, но и параллельно, с синхронизацией по изоморфизмам!

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

Ну и? Ну это всё например хаскелевские темки Parameterized monads и Graded monads, которые можно поразвивать.

А для моего обучающего агента я выжал отсюда чек-лист "корректен ли код с точки зрения теории категорий". Например, что ты будешь делать, если у объекта появится нетривиальный автоморфизм?:)
👍2896❤‍🔥1
Простите меня дурака, дорогие! 🙏

И я, кого обидел, всех прощаю! 😇

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

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

Завтра начинается Пост + 23ф, в честь такого, кто начнёт новый курс до весны-26, на него будет скидка 50% 🔥 (а для дам срок продляется до 09.03.26 вкл).
49👍12🙏6
Теперь это звучит ещё более жалко, когда программисты говорят, что устали после "долгого рабочего дня" потому что много думали, поскольку всё, что мы делаем сейчас -- это буквально заставляем компьютеры выполнять всю нашу прежнюю работу.
3213😁52🐳2
Большинство людей, которые утверждают, что разбираются в программном обеспечении, понятия не имеют, как создавать программное обеспечение.

Если вы думаете, что разработка ПО -- это программирование/написание/генерация кода, то вы никогда не были действительно хороши в разработке.
34💯146👍5
.

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

Кто начнёт новый курс до весны-26, на него будет скидка 50% 🔥 (а для дам срок продляется до 09.03.26 вкл).

Начинаю с сегодняшнего дня тестировать моего обучающего ai-агентa на живых, отдельно напишу.

Приватный клуб.

null

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


- Обучаете ли вы программированию на C++ с нуля?
- Нет, C++ не обучаю и никому не советую в качестве первого языка, потому что ...

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

Продолжаю выкладывать для донов материалы СильныхИдей — доступны моим курсантам, но тут расширенные и дополненные версии.
76. И снова про тесты и TDD
Важно: всё что я пишу про тесты -- это тестирование спецификации! Это база, и я продолжаю рекомендовать TDD: сперва пишем тесты, потом реализацию...

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

=

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

=

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

В "Бесстрашные переговоры о зарплате" добавлен материал
"56) Самый сложный тип компаний для ведения переговоров о зарплате - 2".
В продолжение "Самый сложный тип компаний для ведения переговоров о зарплате" (с курса карьеры). Но в 2026-м уже надо учитывать, что ...

"Математика высокой продуктивности - 5" - дополнение.

Новый п.7.0.5 правил: как избавляться от набранных предупреждений.

💪🏻

it's a privilege to do things that are hard.

=

Гайд про функциональные архитектуры, 53 топика (+0), как наберётся 64, дам ментатам доступ.

=

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

"Бог-Император Дюны"
32👍82
Мой handmade агент ↑↑↑ правит стиль Карпатого :)

не ну а чо, Андрей же не профессиональный кодер.

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

AK не мог попросить своего агента простейший код ревью сделать?

Математики вообще жутко косячат в software design, достаточно на внутрянку экосистемы хаскеля посмотреть ахаха
(а уж как они там срутся друг с другом, одна из топовых эко по токсичности...).

На этой неделе у некоторых из ментатов в лк будет появляться ссылочка "Code Review", просто проходите по ней, и там будет ревью какого-либо вашего кода -- может, с занятий по АСД, может по архитектурам, может по Hard Work и т.д., разберётесь.

Пока бета-версия, отлаживаю скорее свою агентскую технологию (handmade 100%). Я её делаю сразу с прицелом на многое чего, обучение лишь одна из сторон.

Поэтому слишком в рекомендации не погружайтесь :) они сейчас не то чтобы не актуальные, а скорее оверинжинирные.

К тому же карпатовскому коду можно придраться, что дескать
keys[li].append(k) - мутабельное зло
и надо делать чистую функцию (при том что сразу экспоненциально просядем в эффективности, т.к. cpython делает append за O(1)).

Все эти все вещи пофикшу постепенно.
🙏336👏63
Есть такой прекрасный дурацкий набор antigravity-awesome-skills: 900+ скилов про всё-всё-всё в айтишке, все мыслимые темки для твоих агентов. От стиля кода и фреймворков до архитектур и проектирования.

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

А даже если и применит правильный скилл "проведи рефакторинг, улучши читаемость, выдели абстракции", то сделает это формально: может разбить код на 10 маленьких функций, но не поймёт бизнес-смысл этих абстракций.

Нет, я например в восторге, это лично мне позволяет стать гипер-продуктивным, это по сути библиотека "сниппетов" для мышления. А из агента (и даже из белкового миддла :) эти 900+ скиллов никогда не делают сеньора. У него нету контекста реального мира, он будет тупо сувать паттерн CQRS/Event Sourcing для скрипта, который запускается раз в день. Сделает всё идеально-правильно, и убьёт проект сложностью.
Да и в целом, CQRS-скилл не нужен, чтобы агент написал систему. Он нужен, чтобы сеньор дал чёткий промпт для его точечного применения.

Ну и так-то, в нейронке уже есть миллионы книг, зачем ей ещё одна библиотечка промптов? Она знает эти паттерны лучше, чем любой сеньор, который их читал. "Спроектируй мне CQRS для сайта заказов" -- и она выдаст усреднённый академически правильный ответ, смешанный из сотен прочитанных книг и тысяч проектов с гитхаба. Это всё статичные веса, поймите! Их невозможно затюнить под твой конкретный проект. Когда нейронка пишет код, она не "думает" про CQRS, а просто предсказывает следующий токен.

"Спроектируй мне CQRS для сайта заказов" -- напишет как умеет.
"Спроектируй мне CQRS для сайта заказов, вот детальное ТЗ, используй скилл-1024" -- напишет примерно так, как хочешь ты.
Не забываем, что агент последует рекомендациям процентов на 50 в лучшем случае. Остальное -- это иллюзия следования, когда агент делает вид, что понял, но на самом деле просто имитирует.

"Обеспечь high cohesion модуля 123"
"Готово, модуль высокосвязный!"

Но на самом деле агент просто переставил пару функций местами, и назвал это "рефакторингом". Настоящая связность -- это про семантику, про смысловые связи, а не про синтаксис. Нейронка этого не проверит в принципе, потому что не понимает смысл кода так, как человек.

База: агент сам НЕ должен решать, какой скилл применить. Но этой базе, понятно, не следуют и 98% использующих агенты человечков. А по хорошему, чтобы продуктивно использовать агентов, человеку самому надо знать эти 900++ скиллов, и каждый на неплохом прикладном уровне.
455👍5💯1
Нейронка знает, что "CQRS -- это паттерн, разделяющий команды и запросы. Команды меняют состояние, запросы читают.". Но это не скилл.

Скилл:
"При аудите безопасности проверь:
1) SQL-инъекции во всех входных параметрах,
2) JWT-токены не старше 5 минут,
3) CORS настроен только на доверенные домены..."

Это не знание, это алгоритм действий. Агент тупо пройдётся по списку и ничего не забудет (вероятно:).

И есть ещё корпоративные стандарты (супер-полезные, но их вы не найдёте в публичных репах):
"В этом проекте все названия команд должны оканчиваться на CommandHandler, все репозитории должны лежать в папке Infrastructure/Repositories, и ни в коем случае не использовать слово Service в названиях классов."

Это тот уникальный контекст, которого нет в миллионах книг, и который и надо готовить для агентских систем. Это то, ради чего всё и затевалось!!1
(да только как обычно мэйнстрим снова всё обкакал :)
Но это просто нормальная организация работы.

То есть ты берёшь скилл @ code-review из репозитория antigravity, добавляешь туда 10 пунктов, которые так ненавидит твой тимлид ("проверять, что нет магических чисел", "все строки вынесены в ресурсы и названы капслоком" и т.д.), и сохраняешь это в корпоративную версию. Профит!

=

Ещё раз: если в твоих скиллах фразы вроде

"Код должен быть читаемым"
"Архитектура должна быть масштабируемой"
"Добавь обработку ошибок"


Штош... Читаемый для кого? Для джуна или для разработчика хаскеля?
Масштабируемый до 100 пользователей или до миллиарда?
Обработка ошибок -- логировать и падать, или бросать эксепшен непонятно куда, или пытаться восстановиться?

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

То есть, не пишите и не используйте универсальные скиллы вида "будь умным". Пишите скиллы вида "сделай эти 15 конкретных действий в этом порядке" под свой проект. И, да, это работа профессионального архитектора/техлида, причём очень хорошего уровня.

Соответственно, вот очевидные идеи для ai-консалтинга.

1. У компании 100500 правил, записанных в Confluence, которые никто не читает :) Трансформируем их в работающие SKILL md файлы для их агентов.
Конечно, придётся смотреть их код, тесты, доки, архитектуру, стандарты кодирования, перекладывать "устное народное творчество" тимлида с код-ревью в конкретные промпты. Учим разработчиков не писать агентам тупо "сделай рефакторинг", а "используй @ refactor-to-clean-architecture".

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

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

Например, "1С-разработчик": скиллы, которые учат агента писать код в стиле, принятом в экосистеме 1С (не шутка :). Или такое уже есть?

Такие наборы могут быть в виде SaaS по подписке, а могут быть заказной разработкой ("Хотите, чтобы агенты полноценно понимали вашу легаси-систему? Я спроектирую набор 16/64/256 скиллов за $1600/$6400/$25600 и вы сможете уволить всех своих мидлов"). Не конкурируем с агентами, а делаем их реально/измеряемо умнее в своей нише/в конкретном проекте.

Единственный момент, что прямой такой консалтинг продавать тяжело, потому что любой CTO будет до последнего упираться и не признавать очевидный факт, что это именно его ослиное руководство привело к текущему состоянию проекта, требующему тотального аудита: полный бардак, хаос, зоопарк технологий, и BIG Ball of Mud.
32👍8❤‍🔥62
Когда человек говорит "я беру ответственность за проект", а потом заявляет "ой я не смог", "не получилось, "не сумел", "не вышло", "были объективные причины", "я заболел" бла-бла-бла -- это никакая не ответственность, а детский сад штаны на лямках.
35💯19👍9🤔4😇2
Не знаю, читал ли хотя бы один папищек легендарную книгу "Мифический человеко-месяц" Брукса (1975-й!), суть которой собственно понятна из названия, а за полвека она стала лишь ещё сермяжнее: добавление новых программистов проект не ускорит, а замедлит - из-за экспоненциального роста накладных расходов на коммуникацию и обучение.

Но вы видели за свою жизнь хотя бы одного ит-менеджера, который бы это действительно понимал?

От Брукса же и база, что 10 топовых программистов с зарплатой x3 заменят сотни средних программистов с зарплатой x1. Но риторический вопрос тот же самый.

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

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

Качество продукта, создаваемого агентами, стало на порядок сильнее завязано на скиллы человека в контуре управления. Software design, архитектура и принятие решений сильно усложнились в ситуации, когда написание гигабайтов (говно)кода стало почти бесплатным, и теперь мы имеем "Мифический агенто-месяц": добавив новых агентов в проект, вы только ухудшите ситуацию по срокам, бюджету и качеству, если у вас нет сильного архитектора.
136💯198👍4❤‍🔥1
...И куда же мы в итоге приходим? Ну, к супер-инженерам, которые

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

во-вторых, сильные системные аналитики: способны декомпозировать мутное и нечёткое ТЗ тупого заказчика в некое BDD-like описание, но больше всё же на естественном языке (точнее, на "естественном" языке a la SKILLS md , понятном агентам:),

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

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

А скрипач больше не нужен.
🔥4213💯6🤔2
А вы уже пользуетесь кодексом жпт5.3? :)

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

=>

God-file: слишком много ответственности
В одном файле: определение E8, эквивалентные характеризации, матричный базис, целочисленность, норма, топология, упаковка, плотность.

Сигналы technical debt прямо в коде

Слишком длинные леммы с proof script soup: вынести общий шаг в локальную лемму по индексу/шаблону вектора, убрать copy-paste.

Хрупкие доказательства через simp only/linear_combination..
Такое часто ломается от малых изменений в импортах/леммах simp.
Более устойчиво: маленькие промежуточные леммы с осмысленными именами + меньше глобального simp.

Неочевидные имена h1, h2, hv, this, test и т.д.
Для математики терпимо, но в большом formalization это сильно бьет по читабельности.

Смешение уровней абстракции: рядом стоят высокоуровневые теоремы и низкоуровневые algebraic-manipulation детали.

Чрезмерная зависимость от decide +kernel: для матриц над Q это практично, но читаемость/объяснимость падает.


etc

Математики такие математики. Не имеют ни малейшего представления о базе программной инженерии, которой сегодня владеет любой джуниор. Код ревью? нет, не слышали.
😁27👍10🤔861
Всё больше сколоняюсь к тому, чтобы помогать в целом в ИТ-карьере тем, кому 50..55++. К молодым менторам им идти как-то некошерно, а из моих ровестников в России только я такой один )))
Так-то понятно уже и сегодня 45+ полный карьерный кризис, а к 2027-му уже и 35+ будет полным стариком считаться.

База такая, что
a) придётся прежде всего проявить смирение (но временно), и
b) получится только у достаточно энергичных "айтишных пенсионеров".
Ну и всякие контринтуитивные фишки (например, опыт -- это сейчас отнюдь не плюс, ага).

Завтра кстати в приватном клубе дам базу:

"Одни и те же компании. Одна и та же экономика. Но совершенно разные результаты.
Почему, Карл??
Разница заключается не в таланте. Не в усилиях или трудолюбии. И даже не в опыте."

С другой стороны, в таком возрасте часто уже много и не нужно, и в айтишке сейчас вообще будет прекрасно: сиди себе на удалёнке, попивай кофеёк и плюй в потолок, а всю работу за тебя делают агенты ахаха

"У меня есть знакомый сварщик, он получает на руки около 90 тысяч рублей и при этом считается высокооплачиваемым. И он не слышал о зарплатах в 150-200 тысяч в своей профессии" пруф
38🐳12👍65😁1
В ФП мы используем функции, которые принимают функции в качестве параметров и/или возвращают функции в качестве результата. И этого достаточно: как прокачаешь функциональщину, 98% книг по шаблонам проектирования ООП можно выбрасывать. Они существуют только для замены отсутствующих в ООП фич из ФП, где подобные шаблоны присутствуют по определению и суть first-class citizens самого языка.

Только вот научить этой "простоте" своих агентов сложнее на порядок.
👌2813🎉75💯4