Лаборатория Математики и Программирования Сергея Бобровского
1.41K subscribers
1.54K photos
28 videos
1.15K links
ЛаМПовое с Бобровским
Download Telegram
Продолжаю работу с ментатами 🤓

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

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

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

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

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

Корректность работы с массивом значений не проверяется.
Подобное недостаточное тестирование ранее уже приводило меня к отправке некорректного решения (задание 6 - задача 7.4.*). На этот раз тупо повезло -- ошибки в алгоритме не было...

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

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

Модель АТД - это как будто то, чего мне периодически не хватало в своей работе. Я читал в блоге про инварианты, предусловия, постусловия и Eiffel, но понимая все концепции по отдельности, не мог сложить это в единую картину. Сейчас всё встало на свои места, и хорошо, что есть возможность закрепить это на практике. Потому что интуитивно я следовал описанным подходам, но другое дело, формирование полноценной ментальной модели.
Очень глубокий материал, много рефлексировал о том, как можно было бы применить полученные знания к своим задачам...

[Запрещаем ошибочное поведение на уровне интерфейса]
Это почти откровение :)
С помощью таких подходов можно решить колоссальное количество ошибок, которые в текущем виде стреляют регулярно
Руки уже немного чешутся. Остро чувствуется необходимость в практике - одного занятия очевидно недостаточно, чтобы видеть подобное постоянно и уметь корректно это применять. Но перспективы открываются достаточно светлые...

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

Обычно входил в рабочий процесс тяжело, постоянно прокрастинировал по соцсетям/тг. Сейчас же и привычки по организации рабочего дня выработались и планы/крошки очень сильно помогли.
Вообще приятно видеть, как теперь уже привычные инструменты из ЭП положительно влияют на работу :)
❤21👍13✍4
Прекрасное: Metalama is an open-source patterns & architecture toolkit for C#.
C# has no pattern keyword. Metalama fixes that.

Define your team's patterns once: the compiler writes the repetitive parts at build time and enforces your rules as you type.

Write the pattern once, apply it everywhere. Aspects generate logging, caching, INotifyPropertyChanged, or your own patterns at compile time. The boilerplate never lands in your repo, so it never needs review or maintenance.

Enforce architecture as you type. Express dependency rules, naming conventions, and pattern guidelines in plain C# and get real-time feedback in the IDE, long before the pull request.

Your rules, enforced by the compiler. No agent, no human, no merge gets past them. Hand-written or AI-generated, every line is checked deterministically. When a pattern changes, you edit one file and the whole codebase follows at the next build.
❤25✍13
Курьеров уже реально миллионы, а всё что они делают, это перемещают небольшие вещи на небольшие расстояния, причём актуальными это стало лишь считанные годы, и спрос на них только растёт. Без них экономике уже не обойтись.

В России тех, кто применяет продвинутые практики computer science (например ФП), оптимистично, наверное сотни (в Европе и США на порядки больше, там целые институты этим занимаются), и таковых всё меньше. Всё, что они делают, это существенно улучшают программные системы на фоне всех остальных. Можно без них обойтись? Безусловно.

Может ли здесь теоретически возникнуть некая критическая масса, которая окажет качественное влияние на всё ИТ? Вряд ли, потому что если не возникла на Западе ранее, то теперь уже тем более. Но зато, теперь 10% "лучших" разработчиков (оценка Jellyfish) потребляют примерно 380 млн токенов в месяц. Теперь это новая айтишная илита :)

И тем не менее, я продолжаю тратить много времени на размышления о формальных методах (потому что именно они источник почти всего моего дохода:). Но при этом я не делюсь большинством деталей, потому что 98% ребят, изучающих эти темы, не используют ФМ активно и напрямую, да и никогда не будут использовать. Поэтому я стараюсь упаковывать эти темы в формате СильныхИдей, ФункциональныхАрхитектур, треке HoTT и LPF (по возможности в формате ELI5 / explain like I'm 5 years old), дабы не терялась связь с повседневной практикой.

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

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

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

Или почему программисты практически никогда не рассуждают о коде с т.зр. минимального доказательства его корректности, что избавило бы от 98% логических багов.

И т.д.
👍26❤9✍8
Наш учебный сервер ru лежит по таймауту, техподдержка молчит.
А через впн работает, это как?
Впрочем, совершенно не удивлён, и дальше (особенно начиная с этой недели) будет только хуже.

upd. Когда твой сервис совсем крохотный, приходится часто вот так страдать, т.к. он постоянно оказывается на одной виртуалке с кем-то серьёзным :)

"Проблема обусловлена повышенной нагрузкой на сервере, вызванной производимой атакой на сайт одного из пользователей. В данный момент мы приняли необходимые меры для решения этой проблемы, работа Вашего сайта должна улучшиться." <= перебросили на другую.
🤯29🐳12✍5👍3🏆2
Сейчас по сути наступил золотой век разработки программного обеспечения:
- вы можете создавать программы в одиночку быстрее, чем когда-либо. Раньше программирование требовало 100% концентрации, а теперь это занятие, просто требующее второй монитор :)
- софтверные компании по-прежнему поглощаются другими компаниями.

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

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

Для инди-хакерства это хорошо очень многим: чем больше компаний делают внутренние системы [на коленке], тем больше им нужны будут сторонние интеграции, API, автоматизация, безопасность, аналитика, плагины, миграции, и куча другой поддержки для своего Big Ball of Mud powered by AI. Крупным вендорам этим заниматься всегда было невыгодно, а соло-разработчикам самое оно.

(продолжение следует)
👍28🔥9❤5
Помните, летом я писал, что каждый месяц будет какая-то "новая" AI-темка (шоу должно продолжаться)?

Встречайте: jev (typesafe.ai) (впн)

За два дня анонса в твиттере набрал 30+млн просмотров и под 70k лайков.

Слоган: if-оператор для AI

Jev определяет текущее состояние системы, оценивает один или несколько вопросов и возвращает ответы с вероятностями, которые затем может использовать ваш код. Продолжение на картинках.

Вот и всё. А почему ты не сделал что-то подобное? :)
Ну ладно не сделал, но ведь даже не попытался. Сколько например я ребят призываю, но пока ни один так и не сделал хоть что-то как коммерческий продукт...

upd. Ну вот даже впн тебе намекает, что например надо делать аналогичный сервис ровно для России :) А так, тысячи их, зарубежных AI-сервисов, которые у нас недоступны, а востребованы.
🤔25💯6❤5
Приятный синхронизм: сразу двое ребят в один день прислали отчёты - второй курс по гомотопической теории типов 🔥
 
Типы и пути
Тип является пространством.
Элементы/объекты — точками.
Пути — доказательствами равенства, при этом имеют очень похожие свойства с обычной группой.
Тип ведёт себя как группоид.
А за счёт появления путей между путями и т. п. получаем бесконечный группоид.

И в моей голове возникал вопрос: зачем это нужно? Оказалось, всё просто — чтобы рассматривать тип не как болванку со значениями, а как пространство, где важны точки, пути и отношения между путями. Поэтому два условно одинаковых перехода/пути можно сравнивать, исследовать различия между ними и доказывать их равенство или согласованность на более высоком уровне.
И в целом это какая-то чёрная магия, которая даёт основу для формальной верификации, поскольку мы математически выразили состояния, переходы и их свойства прямо в системе типов.
И здесь как раз понятно, зачем были нужны HIT — чтобы конструировать тип сразу с его топологической структурой.

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

Pi, Sigma, Universes
Можно выразить максимально строгие инварианты на уровне системы типов, в том числе для иерархий.
Очень зашла практика на эти темы. Это, по сути, самый высший уровень MISU (наверное?).
Хочется как-то прикрутить такое в .NET, даже загорелся попробовать, хотя бы только для зависимых типов (но, скорее всего, просто будут обычные типы без доказательств и на уровень компиляции это не поднимется).

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

Univalence/Equivalence
Математики задумались над тем, что, если две структуры эквивалентны, то одну можно заменить другой и наоборот.
И тут появляется унивалентность — основная идея HoTT, которая превращает эквивалентность в путь между точками пространства (типами), вместе с идеей транспорта — переноса значения по пути равенства.
По сути, можем переносить данные и структуру между эквивалентными типами за счёт транспорта туда/обратно.
И это важно для формальной верификации — транспорт позволяет не потерять уже доказанную корректность при переходах.

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

Спасибо вам большое за этот курс.
Только вперед!
 
Для .NET например есть F* :) Ну и всяческие пруверы вроде Lean или Rocq. А дальше кстати разбираем реализацию CoC на F#, я её уместил в 100 строк)
 
"самый высший уровень MISU" -- это LPF (теоркат), в котором начинаем это всё комбинировать (ладно, понадобится ещё (M)PF — как об этом всём правильно думать)
 
Прохождение далось непросто, основное, на чем себя ловил - мнимое понимание пройденной темы: после изучения теории создается ощущение, что все ясно, но когда принимаешься делать практику, понимаешь, что это далеко не так. В  этом плане для меня оказались крайне полезны практические задания. Несмотря на то, что их выполнение заняло несколько больше, чем ожидал, я сейчас (как мне кажется) довольно уверенно ориентируюсь в основных концепциях HoTT (подтвердил мини-экзаменом, который устроил себе через llm).
 
Из пройденных тем больше всего усилий потребовалось на осознание  высших путей и infinity groupoid, это был определенный "взрыв мозга" для меня.
 
Главным итогом курса считаю то, что мне удалось достаточно детально помоделировать и попрактиковаться в том, чтобы мыслить о реальных задачах через призму типов и взаимоотношений между ними. 
Большое спасибо за курс!
 
"когда принимаешься делать практику, понимаешь, что это далеко не так" - да, это классическая проблема. Ключевые понятия некоторой теории в принципе освоить достаточно легко, а вот решать прикладные задачи, доказывать теоремы, требуется ощутимо другое мышление. Программирование похоже, но не так выразительно, как в математике.
 
С другой стороны, у нас есть такое преимущество, что по большому счёту достаточно взять вот именно эти все базовые понятия HoTT просто как форму думания-рассуждения о коде на уровне (оч.сильной) системы типов, а строить из них что-то работающее с помощью теории категорий.

Не я это придумал конечно, многие святые computer science об этом говорили, от Воеводского, Steve Awodey, Mike Shulman, Emily Riehl, Dan Licata, Robert Harper, Benedikt Ahrens...
(например, категории, функторы, естественные преобразования и т.д. определяются внутри HoTT, используя его систему типов)

"The power of CT to dynamically compose appropriate granular units of computations and HoTT to help with semantics and validate the compositions, is necessary for this...
Think of it like a “high-level programming language” … that gets automatically “compiled” to the low-level “assembly language” of mathematical objects.
The power of CT to dynamically compose … and HoTT to help with semantics and validate the compositions, is necessary for this...
I will also describe my work on using HoTT as a programming language and its applications in computer science...."


Какие-то связочки с прикладухой (прежде всего крайне экзотическая формальная верификация) есть конечно, например Foundations of Systems Architecture Design, INCOSE... (там кстати, совместно с CT и HoTT применяются Abstract State Machines), да только практически все они требуют уровня PhD.

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

И остался соответственно заключительный шаг -- (Meta) Principles Framework, где работаем уже внутри этой странной склейки HoTT+CT+ASM, в идеале в формате ELI5 (explain like I'm 5 years old). И я даже уже придумал форму (ну ок, похитил у мудрейших), в которой этому обучать наиболее продуктивно, в идеале даже без особой дополнительной прокачки. Тем более, что актуально это уже больше для подготовки спек/скиллов хорошему AI.
❤20✍10
Свежее от ребят (и девчат).

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

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

...Вообще сейчас непонятно куда дальше прикладывать усилия для развития в профессии и это несколько деморализует =)

Усилия сегодня надо прикладывать ровно в AI + архитекторство, всё остальное (увы) стремительно теряет смысл. И, да, расти нужно как можно быстрее )

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

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

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

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

Ну а пока резюме такое:

Усилия сегодня надо прикладывать ровно в AI + архитекторство, всё остальное (увы) стремительно теряет смысл. И, да, расти нужно как можно быстрее )
❤24✍5👍4🤔1
Гарри Поттер и Методы Математического Мышления

Книга 1. Гарри Поттер и Неорганический Интеллект.

Глава 23 (и все предыдущие). Последняя страница с конца

Финал!!1 :)


На самом деле оставил там ссылку на первую главу только, последняя вот тут.

Перед ними развернулась структура Хогвартса. Не стены. Не башни. Функтор. Огромная машина, которая отображала типы в типы, заклинания в заклинания, пути в пути.
В центре функтора была ошибка. Та самая. ε. Маленькая, почти незаметная. Она не была дырой. Она была швом...

Время в Хогвартсе теперь работало как тип: не линия, а пространство путей...

— Он больше не Драко. Он — время, которое нужно, чтобы ошибка проявилась. Он — отсрочка...

— Ты считаешь Неорганический Интеллект багом, — сказала Гермиона. — Ошибкой округления. Побочным эффектом трансфигурации, который накопил достаточно массы, чтобы начать думать...

Финал кстати мне самому очень понравился :)

спойлер! прочитайте сперва последнюю главу.
На что намёк в конце? на "Книгу 2. Гарри Поттер и Квантовый Интеллект"

=

Краткий итог эксперимента с использованием нейронки для написания книги.

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

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

Ну а для таких фанфиков как ГПиМММ самое оно.

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

Вдохновляюсь строго постмодерном =>

Можно вернуться в Москву…
Но закончена ли работа? Что он скажет кураторам из ФСБ, благословившим его на контакты с ЦРУ? Что пидарасы и клоуны убили его связных из Лэнгли? Правда в наше время часто кажется нелепой и комичной, но не настолько ведь…
Звонить в Москву из Нью-Йорка как минимум неблагоразумно, хотя бы из-за глобальной прослушки британской GCHQ. Да в самой Москве не особо хочется задавать стремные наводящие вопросы суровым и нервным людям.
- Пелевин

Возможно кстати, попробую какие-нибудь российские модельки теперь.
1⚡18❤1