Лаборатория Математики и Программирования Сергея Бобровского
1.39K subscribers
1.42K photos
28 videos
1.07K links
ЛаМПовое с Бобровским
Download Telegram
Вы сеньор архитект тим/тех лид. Делаете ли вы ревью кода/архитектуры, сгенерённых AI-агентами?
Anonymous Poll
30%
Регулярно ревьюим всё
16%
Ревьюим разумно
1%
Изредка, случайно/нерегулярно
3%
Почти никогда
51%
Я пока не этот
👍36
Вы сеньор архитект тим/тех лид. Выполняете ли вы *вручную* рефакторинг кода/архитектуры, сгенерённых AI-агентами?
Anonymous Poll
11%
Регулярно рефакторим всё
23%
Рефакторим разумно
8%
Изредка, случайно/нерегулярно
4%
Почти никогда
54%
Я пока не этот
👍32
РКН, пощади!

YouTube наблюдает, как вся их инфраструктура взрывается из-за того, что 32 128 512 concurrent viewers не удалось развернуть.

Навайбкодили.
😁44🐳7🏆4
Ставь китика, если не знаешь, что это за логотип.
😁92🐳43🤓133🤔2
Делаю для ментатов "свой ai-агент", будет код ревью, рефакторинг и обучалка в одном. Сперва для учебных решений, потом можно будет и ваш рабочий код проверять, а потом и архитектуру.

Сам движок, альфа-версию, собственно, я сделал (handmade 100%), на F#, модельку любую вообще можно выбрать (но хочу, чтобы работало в итоге вообще на любых дешёвых бесплатных нейронках).

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

Конечно, говорить агенту "сделай code review, вот тебе шаблонные skiils", это детский сад. Я сделал для начала базовый пайп 5-7 шагов, с разбором кода до AST, рефакторинг чистой семантики, program synthesis, вся база computer science. Вытаскиваем самые глубины смысла :)

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

Поэтому крайне важна соответствующая интуиция. Ну примерно как покермэны, получив десятку и туз, могут только по двум картам весьма точно оценить вероятность выигрыша :) Они тренируются специальным софтом, на рынке немало equity/odds trainers, покерных калькуляторов солверов, exploits, apd gto-комбы... При том, что тут есть глубокие инсайты из теории групп (вы же смотрели "Поедем с тобой в Макао"?).
Вот делаю примерно такое, только для программистов, с учётом, что человеческие скиллы стремительно сдвигаются именно в этом направлении (системные/архитектурные инсайты).


...Ну а пока добавьте в ваши агентские skills самую малышовую базу =>

1) Extract pure functions (separate effects)
2) Replace loops with map/filter + fold(reduce)
3) Reduce mutation / prefer immutability
4) Replace null/exceptions with Option/Result-style explicit handling
5) Function composition / pipelines
5🔥47❤‍🔥85
Ну что айтишники, и особенно программисты -- лохи от природы, это база. Сам такой :)

А так как зарплата даже крепкого миддла входит в топ 3-5% зарплат по России, а манипулировать программистом в социальном плане легко и просто, + в гаджетах он хорошо разбирается, вот девушки и не теряются 👍

Как понять, лох ты или нет? Ну вот если трусишь скрыть на собесе свою зп, когда об этом хмурая хрюша спрашивает прокуренным голосом, значит лох 💯
Ну в самом крайнем случае, если совсем трусишка, назови +50% к текущей, а если будут что-то вякать про "проверим", "а по нашим данным", ссылайся (если голос не задрожит :) на защиту персональных данных - за подобное ведь, если не давал согласия на их сбор и использование, сразу штрафы, статьи.
43😁127🤝2👍1
Логика "буду использовать жпт и агентов, чтобы побыстрее делать рабочие задачки" настолько безмозглая, что представьте, что вы отказываетесь от всей своей профессии вместо того, чтобы приложить хоть каплю усилий, чтобы действительно преуспеть в ней.
Такое мышление сделает тебя бесполезным вообще на любой работе.
1🤔31💯189👍4
"Онлайн-образование топчется на месте"
"...заметно ухудшились показатели школ программирования: если по итогам 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