...Удачно наткнулся на свежую книгу "Hexagonal Architecture Explained" - вышла в этом году! - Алистера нашего Коберна, автора легендарной гексагональщины (а также one of the "42 Greatest Software Professionals of All Times"). Предвкушаю наслаждение от её изучения и последующей декомпозиции :)
btw, в этом году на GOTO Copenhagen 2025 Алистер проводил свой однодневный воркшоп по гексагональной архитектуре на несколько десятков человек, каждый из которых платил около 800 долларов :)
"Шестиугольная архитектура настолько же неправильно понимается, насколько ее популярно цитировать", ну и конечно же, только "на этом однодневном семинаре вы узнаете, как это сделать правильно".
"По итогам этого семинара вы получите два сертификата уровня A Heart of Agile Academy: один за упражнение "Карпаччо из слоновьего мяса" (Elephant Carpaccio), и один за гексагональную архитектуру."
=
Хотел тут пошутить про инфоцыганщину, штрафы за обучение с выдачей сертификатов без лицензии, и в кутузку за курсы когда "всё это есть в интернете бесплатно", но как-то не получается...
btw, в этом году на GOTO Copenhagen 2025 Алистер проводил свой однодневный воркшоп по гексагональной архитектуре на несколько десятков человек, каждый из которых платил около 800 долларов :)
"Шестиугольная архитектура настолько же неправильно понимается, насколько ее популярно цитировать", ну и конечно же, только "на этом однодневном семинаре вы узнаете, как это сделать правильно".
"По итогам этого семинара вы получите два сертификата уровня A Heart of Agile Academy: один за упражнение "Карпаччо из слоновьего мяса" (Elephant Carpaccio), и один за гексагональную архитектуру."
=
Хотел тут пошутить про инфоцыганщину, штрафы за обучение с выдачей сертификатов без лицензии, и в кутузку за курсы когда "всё это есть в интернете бесплатно", но как-то не получается...
❤39✍16😁4
лол что? :)
We Spent $47,000 Running AI Agents in Production. Here’s What Nobody Tells You About A2A and MCP.
Last year, our team deployed what we thought was a simple multi-agent system to production. Four LangChain agents coordinating via A2A to help users research market data.
Week 1: $127 in API costs. Perfect.
Week 2: $891. Hmm, usage growing.
Week 3: $6,240. Wait, what?
Week 4: $18,400. Panicking
Total damage: $47,000 before we finally pulled the plug.
The culprit? Two agents got stuck in an infinite conversation loop. For 11 days. While we slept. While we worked. While we believed "it’s just running smoothly."
We Spent $47,000 Running AI Agents in Production. Here’s What Nobody Tells You About A2A and MCP.
Last year, our team deployed what we thought was a simple multi-agent system to production. Four LangChain agents coordinating via A2A to help users research market data.
Week 1: $127 in API costs. Perfect.
Week 2: $891. Hmm, usage growing.
Week 3: $6,240. Wait, what?
Week 4: $18,400. Panicking
Total damage: $47,000 before we finally pulled the plug.
The culprit? Two agents got stuck in an infinite conversation loop. For 11 days. While we slept. While we worked. While we believed "it’s just running smoothly."
🤯47😁14🐳5❤2🏆1
...В процессе изучения функциональных архитектур проявился такой совершенно неожиданный инсайт 💥 что в качестве языка формальных спецификаций вообще не нужны специализированные языки вроде tla, dafny, typespec, veil, loom/velvet! Последний кстати зафигачен на lean4, и с его помощью уже успешно перетаскивают код с dafny на лин. При том, что этот процесс бессмысленен :) Не так сложно написать даже просто алгоритмический код, который не выйдет полноценно верифицировать на dafny, а главное, что оно не имеет доступа ни к каким реальным библиотекам, то есть абсолютно далеко от реального прода.
Главное же, что даже крутые системы зав.типов от пруверов вроде Lean не нужны, а достаточно Хаскеля!!1 🚀
В целом я этот язык здорово недолюбливаю, в математическом смысле он местами сильно кривой, а для реальных проектов не подходит во многом по техническим причинам (хотя есть немало исключений). Но, блин, до чего же хороша его система типов! 💪🏻 Точнее, она прежде всего строгая, и тот же F# конечно от неё далёк. Нам не нужно искать и читать исходный код, чтобы узнать, эта функция чистая или нет: вы можете просто посмотреть на её тип!
Поэтому хаскеля по сути достаточно, чтобы формально думать о чём угодно в программировании, включая и архитектурный уровень! 😇 А огромный плюс, что всё же Haskell -- это немножечко мэйнстрим, и его сегодня вполне может освоить илегко и просто задействовать любой нормальный программист, причём конкретно для правильного рассуждения о своих прозаических повседневных задачках, и даже с учётом конкретного фреймворка! Ну и так как любой ввод-вывод в хаскеле -- это вызов внешних сишных функций, мы получаем вообще идеальные возможности для гладкой интеграции!
Вот честно, синхронизм: вчера, когда я это писал себе в важные заметки, добавил
"...Но для правильного применения данного подхода в контексте функциональной архитектуры надо как следуеть изучить монадные трансформеры :)"
(На самом деле, это совсем простая вещь (и часто вообще достаточно функторов), кто мои гайды по ФП проходил, уже в теме автоматически.)
Так вот, сегодня наткнулся на вышеупомянутый loom/velvet, а там "Loom uses Monad Transformer Algebras." 🤘
Я знал, я знал!!1 )))
...Без понимания этой алгебры, ваш ум, искорёженный императивщиной и ООП, будет гуглить на каждом шагу "Is it possible to convert an IO Int into an Int ??" :)
p.s. Умненький читатель к этому моменту должен получить понимание, какая связь между "convert an IO Int into an Int", функциональной и гексагональной архитектурами.
Главное же, что даже крутые системы зав.типов от пруверов вроде Lean не нужны, а достаточно Хаскеля!!1 🚀
В целом я этот язык здорово недолюбливаю, в математическом смысле он местами сильно кривой, а для реальных проектов не подходит во многом по техническим причинам (хотя есть немало исключений). Но, блин, до чего же хороша его система типов! 💪🏻 Точнее, она прежде всего строгая, и тот же F# конечно от неё далёк. Нам не нужно искать и читать исходный код, чтобы узнать, эта функция чистая или нет: вы можете просто посмотреть на её тип!
-> Int или -> IO Int !Поэтому хаскеля по сути достаточно, чтобы формально думать о чём угодно в программировании, включая и архитектурный уровень! 😇 А огромный плюс, что всё же Haskell -- это немножечко мэйнстрим, и его сегодня вполне может освоить и
Вот честно, синхронизм: вчера, когда я это писал себе в важные заметки, добавил
"...Но для правильного применения данного подхода в контексте функциональной архитектуры надо как следуеть изучить монадные трансформеры :)"
Так вот, сегодня наткнулся на вышеупомянутый loom/velvet, а там "Loom uses Monad Transformer Algebras." 🤘
Я знал, я знал!!1 )))
...Без понимания этой алгебры, ваш ум, искорёженный императивщиной и ООП, будет гуглить на каждом шагу "Is it possible to convert an IO Int into an Int ??" :)
p.s. Умненький читатель к этому моменту должен получить понимание, какая связь между "convert an IO Int into an Int", функциональной и гексагональной архитектурами.
2✍40🔥8❤🔥6⚡1🤔1
.
Облако драгоценностей за неделю.
Для донов-начинающих:
Вы знаете, что общего у 1% лучших программистов?
Для донов-неначинающих:
Продолжаю выкладывать для донов материалы СильныхИдей — доступны моим курсантам, но тут расширенные и дополненные версии.
61. Страшное слово в ваших спецификациях
...Их аргументы железны, предлагаемые альтернативы подробно описаны, и я предоставляю вам самим ознакомиться с ними. И тут между строк скрыт крайне поучительный обобщённый урок в плане проектирования систем, правильного думания над проектом, мета-правило, которое мы сейчас разберём...
(все старые материалы для донов постепенно сгорают)
=
Первые сериалы из существенно переработанных и улучшенных материалов СильныхИдей (по сути три книги) доступны на бусти:
1. БАЗА программной инженерии
2. Software Design с акцентом на Programming in Small
3. SOLID-25
4. Гайд Вайб-проектирование
+ На неделе выйдет моя новая книга "Software Design с акцентом на Programming in Large", и цены на это всё вырастут.
=
Новые материалы для ментатов Лаборатории.
В курс карьеры добавлен 118-й материал "Про лайв-кодинг на собесах"
Вы всё ещё думаете, что провалили собеседование по программированию, потому что мало тренировались на литкоде в задачках по АСД?
Или потому, что они задали вам настолько случайный вопрос, что никакая подготовка вам бы не помогла...
На самом деле важно не решение вопроса. Важно то, как вы справляетесь с ситуацией, когда она становится запутанной.
Вот что они на самом деле ждут от тебя на собеседовании/лайв-кодинге по программированию: 3 ключевых момента.
В раздел "Элитный программист" добавлены материалы
79) Плюсы и минусы Pomodoro.
Я несколько десятков лет практикую технику Pomodoro, и обнаружил, что (для меня) она исключительно эффективна для 90% видов работы. Однако есть также некоторые категории, где использовать помидорки надо, как минимум, по другому...
80) Pomodoro подходит не всем.
Или вам приходится заставлять себя делать пятиминутный перерыв, хотя вам не терпится вернуться к своей задаче после всего лишь одной минуты отдыха. Что, если вы относитесь к тому типу людей, которые полностью теряют интерес к задаче, если не могут приступить к ней в течение ближайшей минуты или около того? Поверьте мне, я действительно встречал таких людей!
💪🏻
Мы здесь, потому что это трудно.
it's a privilege to do things that are hard.
"ЛаМПовое": Composing Continuations на плюсах, мышление в парадигме C++11 и Rust, простые числа и фракталы, Муравейник Хеллстрома.
=
Насчёт темки про функциональные архитектуры, я в принципе уже немало понаписал полезного что можно использовать прямо сейчас. Но если делать из этого полноценный курс/трек, как например уже есть по объектно-ориентированному анализу и проектированию или функциональному программированию, то на это могут уйти и годы, потому что вдумчиво обработать тысячи страниц плотного английского технического текста из десятков книг по архитектурам, ну такое себе :) А я тут в тему подцепил ещё одну мощную книгу "Французская школа программирования 2024" Бертрана Мейера на 400+ страниц :)
Поэтому я решил, что сделаю из этого книгу/гайд, в которую буду короткими итерациями (например, недельными спринтами) добавлять более-менее законченные, достаточно автономные топики, которые вы сразу сможете применять в своих проэктах. Я так пытался делать по Software Design, но как-то не покатило с самого начала, а с архитектурщиной прямо легко и естественно идёт.
В этом ноябре, рассчитываю, мои ментаты получат первую дозу :)
Облако драгоценностей за неделю.
Для донов-начинающих:
Вы знаете, что общего у 1% лучших программистов?
Для донов-неначинающих:
Продолжаю выкладывать для донов материалы СильныхИдей — доступны моим курсантам, но тут расширенные и дополненные версии.
61. Страшное слово в ваших спецификациях
...Их аргументы железны, предлагаемые альтернативы подробно описаны, и я предоставляю вам самим ознакомиться с ними. И тут между строк скрыт крайне поучительный обобщённый урок в плане проектирования систем, правильного думания над проектом, мета-правило, которое мы сейчас разберём...
(все старые материалы для донов постепенно сгорают)
=
Первые сериалы из существенно переработанных и улучшенных материалов СильныхИдей (по сути три книги) доступны на бусти:
1. БАЗА программной инженерии
2. Software Design с акцентом на Programming in Small
3. SOLID-25
4. Гайд Вайб-проектирование
+ На неделе выйдет моя новая книга "Software Design с акцентом на Programming in Large", и цены на это всё вырастут.
=
Новые материалы для ментатов Лаборатории.
В курс карьеры добавлен 118-й материал "Про лайв-кодинг на собесах"
Вы всё ещё думаете, что провалили собеседование по программированию, потому что мало тренировались на литкоде в задачках по АСД?
Или потому, что они задали вам настолько случайный вопрос, что никакая подготовка вам бы не помогла...
На самом деле важно не решение вопроса. Важно то, как вы справляетесь с ситуацией, когда она становится запутанной.
Вот что они на самом деле ждут от тебя на собеседовании/лайв-кодинге по программированию: 3 ключевых момента.
В раздел "Элитный программист" добавлены материалы
79) Плюсы и минусы Pomodoro.
Я несколько десятков лет практикую технику Pomodoro, и обнаружил, что (для меня) она исключительно эффективна для 90% видов работы. Однако есть также некоторые категории, где использовать помидорки надо, как минимум, по другому...
80) Pomodoro подходит не всем.
Или вам приходится заставлять себя делать пятиминутный перерыв, хотя вам не терпится вернуться к своей задаче после всего лишь одной минуты отдыха. Что, если вы относитесь к тому типу людей, которые полностью теряют интерес к задаче, если не могут приступить к ней в течение ближайшей минуты или около того? Поверьте мне, я действительно встречал таких людей!
💪🏻
Мы здесь, потому что это трудно.
it's a privilege to do things that are hard.
"ЛаМПовое": Composing Continuations на плюсах, мышление в парадигме C++11 и Rust, простые числа и фракталы, Муравейник Хеллстрома.
=
Насчёт темки про функциональные архитектуры, я в принципе уже немало понаписал полезного что можно использовать прямо сейчас. Но если делать из этого полноценный курс/трек, как например уже есть по объектно-ориентированному анализу и проектированию или функциональному программированию, то на это могут уйти и годы, потому что вдумчиво обработать тысячи страниц плотного английского технического текста из десятков книг по архитектурам, ну такое себе :) А я тут в тему подцепил ещё одну мощную книгу "Французская школа программирования 2024" Бертрана Мейера на 400+ страниц :)
Поэтому я решил, что сделаю из этого книгу/гайд, в которую буду короткими итерациями (например, недельными спринтами) добавлять более-менее законченные, достаточно автономные топики, которые вы сразу сможете применять в своих проэктах. Я так пытался делать по Software Design, но как-то не покатило с самого начала, а с архитектурщиной прямо легко и естественно идёт.
В этом ноябре, рассчитываю, мои ментаты получат первую дозу :)
❤40👍14
This media is not supported in your browser
VIEW IN TELEGRAM
"Вот же, вот, посмотрите! -- вопят вайб-кодеры. - Я сделал всё это, и я ничего не смыслю в программировании! Это реально работает, и это круто!".
Вместо того, чтобы приложить хотя бы немного усилий к обучению программированию, или хотя бы даже к тому, чтобы научиться просто разговаривать с программистом в соответствующей онтологии и задавать правильные вопросы, они празднуют собственный абсолютный дилетантизм, считая его своим достоинством, несмотря на огромные и очевидные (для профи:) риски.
Ну, да, в программировании же думать надо много, годами трудиться до соответствующего уровня понимания, а это дискомортно. И тут на помощь(?) приходит ЖПТ.
ужос ужос =>
"...По данным Forbes Education, 2025 год стал рекордным для российского рынока онлайн-образования в сфере искусственного интеллекта: он демонстрирует стремительный рост.
- За первое полугодие 2025 года было запущено 17 новых онлайн-школ, обучающих работе с ИИ. Для сравнения: в 2023 году стартовало 6 проектов, а в 2024 — 10.
- Количество оплаченных заказов возросло до 27 744 курсов, превысив результаты предыдущих лет.
- Совокупный оборот школ, обучающих взаимодействию с ИИ и его применению, достиг почти 572 млн рублей.
- Общее число студентов превысило 28 000 человек только за первые шесть месяцев 2025 года..."
Как раньше "из каждого утюга" лезла реклама курсов по программированию для начинающих средняя зарплата 250 тысяч рублей (но там хотя бы был (да и остаётся) хоть и небольшой, но вполне реальный шанс стать программистом, ну и чел учился писать код), так сегодня происходит массовое перепрофилирование на новую золотую жилу: обучение "взаимодействию с ИИ" -- только уже совершенно бессмысленное и бесполезное. Даже скорее вредное, по большому счёту...
Вместо того, чтобы приложить хотя бы немного усилий к обучению программированию, или хотя бы даже к тому, чтобы научиться просто разговаривать с программистом в соответствующей онтологии и задавать правильные вопросы, они празднуют собственный абсолютный дилетантизм, считая его своим достоинством, несмотря на огромные и очевидные (для профи:) риски.
Ну, да, в программировании же думать надо много, годами трудиться до соответствующего уровня понимания, а это дискомортно. И тут на помощь(?) приходит ЖПТ.
ужос ужос =>
"...По данным Forbes Education, 2025 год стал рекордным для российского рынока онлайн-образования в сфере искусственного интеллекта: он демонстрирует стремительный рост.
- За первое полугодие 2025 года было запущено 17 новых онлайн-школ, обучающих работе с ИИ. Для сравнения: в 2023 году стартовало 6 проектов, а в 2024 — 10.
- Количество оплаченных заказов возросло до 27 744 курсов, превысив результаты предыдущих лет.
- Совокупный оборот школ, обучающих взаимодействию с ИИ и его применению, достиг почти 572 млн рублей.
- Общее число студентов превысило 28 000 человек только за первые шесть месяцев 2025 года..."
Как раньше "из каждого утюга" лезла реклама курсов по программированию для начинающих средняя зарплата 250 тысяч рублей (но там хотя бы был (да и остаётся) хоть и небольшой, но вполне реальный шанс стать программистом, ну и чел учился писать код), так сегодня происходит массовое перепрофилирование на новую золотую жилу: обучение "взаимодействию с ИИ" -- только уже совершенно бессмысленное и бесполезное. Даже скорее вредное, по большому счёту...
1👍41❤17
И вот куда это всё приходит 😁 =>
Forget Data Science—This New AI Role is Exploding with 800% More Postings
AI-related job losses (and future non-hires) are the talk of the software town right now, but (at least in the short/near term) a new AI-led tech role has emerged with a massive increase of job postings (800%) over the last 9 months:
Forerunners in the AI race, such as Anthropic and OpenAI, are actively recruiting software engineering specialists called forward-deployed engineers (FDEs) to help with tailoring AI models to meet customer needs. More than just working with back-office coders, these engineers are embedded within customer and product engineering teams...
Unlike traditional software engineers, FDEs go beyond writing code to go out in the field and understand where AI can make the biggest impact. Their mission is to bridge the “last mile” of AI: transforming a general-purpose model into scalable AI solutions that reflect complex client requirements and solve their problems...
Forget Data Science—This New AI Role is Exploding with 800% More Postings
AI-related job losses (and future non-hires) are the talk of the software town right now, but (at least in the short/near term) a new AI-led tech role has emerged with a massive increase of job postings (800%) over the last 9 months:
Forerunners in the AI race, such as Anthropic and OpenAI, are actively recruiting software engineering specialists called forward-deployed engineers (FDEs) to help with tailoring AI models to meet customer needs. More than just working with back-office coders, these engineers are embedded within customer and product engineering teams...
Unlike traditional software engineers, FDEs go beyond writing code to go out in the field and understand where AI can make the biggest impact. Their mission is to bridge the “last mile” of AI: transforming a general-purpose model into scalable AI solutions that reflect complex client requirements and solve their problems...
😁29🤔18❤5🫡1
База функционального (да и объектного) software design -- это CQS. Если вам нужно прочитать исходный код функции/метода, чтобы понять, что она делает (в частности, чистая она или нет), значит, инкапсуляция критически нарушена.
🤔33👍11❤7
3 типовые проблемы программиста мэйнстрима (детский сад штаны на лямках).
1. Я не видел ошибки, когда делал изменения в коде.
2. Я не проверял эту часть своего модуля, когда тестировал изменения.
3. Мне понадобился целый час, чтобы исправить эту дурацкую ошибку, потому что я не смог сразу найти точку, где она была.
2 - вообще база QA, хотя по большому счёту линтеры/стат.анализаторы + инспекции кода (метод пристального взгляда) в целом работают даже лучше, чем покрытие тестами (вчера в приватном клубе выложил материал на эту тему). но, нужно уметь держать в голове всю модель целиком хотя бы на уровне текущего модуля/класса с его контекстом использования.
3 - потому что код мутный и тотально запутанный, а про инварианты и слыхом не слыхивали (начьните хотя бы ассерты в коде почаще ставить).
1 - потому что код тотально хрупкий; решать задачу надо не тупым подбором синтаксических инструкций, а комбинированием абстракций (для начала прокачать автоматическое думание триплами Хоара); а потом make illegal states unrepresentable и функциональные паттерны.
1. Я не видел ошибки, когда делал изменения в коде.
2. Я не проверял эту часть своего модуля, когда тестировал изменения.
3. Мне понадобился целый час, чтобы исправить эту дурацкую ошибку, потому что я не смог сразу найти точку, где она была.
2 - вообще база QA, хотя по большому счёту линтеры/стат.анализаторы + инспекции кода (метод пристального взгляда) в целом работают даже лучше, чем покрытие тестами (вчера в приватном клубе выложил материал на эту тему). но, нужно уметь держать в голове всю модель целиком хотя бы на уровне текущего модуля/класса с его контекстом использования.
3 - потому что код мутный и тотально запутанный, а про инварианты и слыхом не слыхивали (начьните хотя бы ассерты в коде почаще ставить).
1 - потому что код тотально хрупкий; решать задачу надо не тупым подбором синтаксических инструкций, а комбинированием абстракций (для начала прокачать автоматическое думание триплами Хоара); а потом make illegal states unrepresentable и функциональные паттерны.
❤37🫡13✍3👍2🏆1
.
Мой новый гайд "БАЗА Software Design: Programming in Large" доступен на бусти.
Цена 2,400 рублей, завтра будет дороже.
16 материалов, чистого текста 160 тыс. знаков =>
7 неочевидных проектных ошибок
Один из лучших методологических подходов, прекрасно работающий во многих инженерных областях, и в частности, в программировании – это "не позволять разработчику делать то, что запрещено, и запрещать исходно по возможности вообще всё".
5 советов по повышению качества проектирования программных систем
Как повысить качество проектирования?
В ответ на такой вопрос обычно даются шаблонные советы, например:
"Больше работай над практическими проектами".
"Найди хороший проект с открытым кодом и изучай его код."
"Попроси коллегу, чтобы он провел code review".
Если читать между строк, то все это сведётся к "я не знаю".
Как проектировать программы in small (два научных подхода)
Хорошие идеи для возможного дизайна можно найти, внимательно изучив структуру входных данных...
4 универсальных принципа проектирования API
В своей знаменитой книге "Как стать хакером" Эрик Рэйнмонд заявил: "ни одна проблема не должна решаться дважды"...
Страшное слово в ваших спецификациях
Ответы на вопросы проектирования нужно искать не в коде, а в спецификациях.
Как справляться с краевыми случаями
Частные/исключительные/граничные случаи -- это большая боль программирования. Когда вы пишете код, вам надо на одном уровне, внутри одной функции, реализовать не только основной алгоритм, но и учесть немало краевых случаев...
Как найти смысл данных в вашем проекте
Это фундаментальная концепция в программировании: у всех изменяемых сущностей имеется своя идентичность (в смысле "самобыстности", личной уникальности). А у иммутабельных -- нет.
Как правильно думать над моделью данных в проекте
Основополагающий принцип -- делать нелегальные состояния непредставимыми...
О вреде форматов сериализации
Для того, чтобы некоторую пользовательскую информацию можно было технически скрывать, очевидно, она должна быть в проекте формально описанной, чтобы существовали ясные способы что-то с ней делать...
Как правильно проектировать систему в парадигме состояний
Что такое состояние? Это прежде всего описание того, как обстоят дела в данный момент.
Важный инсайт про раздутость кода
Раздутость -- это когда в системе копится множество конкурирующих "фич", и вы не можете работать над одной конкретной функциональностью, если не будете при этом дополнительно заботиться о куче других "фич"...
Как готовить сверхгибкий код
Моделирование предметной области (домена), превращение мира в чистые красивые структуры данных выглядит увлекательным занятием. Однако вам быстро становится совсем не так весело, когда реальный мир даёт контрпример...
Как писать код для веб-фреймворков, который работает в 100 раз быстрее
ORM -- это такая кривейшая приляпка, реализованная однако практически в каждом популярном веб-фреймворке...
Что делает тест хорошим
Есть прекрасная теория тестирования, которая объясняет, что делают тесты, что должно и что не должно проверяться при тестировании. Увы, это удивительно, но эта теория практически не была представлена в общедоступном виде для массовых разработчиков...
Формализуем многослойную (многоуровневую) архитектуру
Я сейчас дам вам достаточно простую формальную модель слоистой архитектуры, которая представляет её весьма наглядно, и при этом может масштабироваться до огромных размеров.
Формализуем понятие надёжности системы
Попросту говоря, мы хотим создавать системы, которые гарантированно будут правильно функционировать при наличии сбоев, перегрузок и т. п.
"БАЗА Software Design: Programming in Large", цена 2,400 рублей, через 24 часа вырастет.
Мой новый гайд "БАЗА Software Design: Programming in Large" доступен на бусти.
Цена 2,400 рублей, завтра будет дороже.
16 материалов, чистого текста 160 тыс. знаков =>
7 неочевидных проектных ошибок
Один из лучших методологических подходов, прекрасно работающий во многих инженерных областях, и в частности, в программировании – это "не позволять разработчику делать то, что запрещено, и запрещать исходно по возможности вообще всё".
5 советов по повышению качества проектирования программных систем
Как повысить качество проектирования?
В ответ на такой вопрос обычно даются шаблонные советы, например:
"Больше работай над практическими проектами".
"Найди хороший проект с открытым кодом и изучай его код."
"Попроси коллегу, чтобы он провел code review".
Если читать между строк, то все это сведётся к "я не знаю".
Как проектировать программы in small (два научных подхода)
Хорошие идеи для возможного дизайна можно найти, внимательно изучив структуру входных данных...
4 универсальных принципа проектирования API
В своей знаменитой книге "Как стать хакером" Эрик Рэйнмонд заявил: "ни одна проблема не должна решаться дважды"...
Страшное слово в ваших спецификациях
Ответы на вопросы проектирования нужно искать не в коде, а в спецификациях.
Как справляться с краевыми случаями
Частные/исключительные/граничные случаи -- это большая боль программирования. Когда вы пишете код, вам надо на одном уровне, внутри одной функции, реализовать не только основной алгоритм, но и учесть немало краевых случаев...
Как найти смысл данных в вашем проекте
Это фундаментальная концепция в программировании: у всех изменяемых сущностей имеется своя идентичность (в смысле "самобыстности", личной уникальности). А у иммутабельных -- нет.
Как правильно думать над моделью данных в проекте
Основополагающий принцип -- делать нелегальные состояния непредставимыми...
О вреде форматов сериализации
Для того, чтобы некоторую пользовательскую информацию можно было технически скрывать, очевидно, она должна быть в проекте формально описанной, чтобы существовали ясные способы что-то с ней делать...
Как правильно проектировать систему в парадигме состояний
Что такое состояние? Это прежде всего описание того, как обстоят дела в данный момент.
Важный инсайт про раздутость кода
Раздутость -- это когда в системе копится множество конкурирующих "фич", и вы не можете работать над одной конкретной функциональностью, если не будете при этом дополнительно заботиться о куче других "фич"...
Как готовить сверхгибкий код
Моделирование предметной области (домена), превращение мира в чистые красивые структуры данных выглядит увлекательным занятием. Однако вам быстро становится совсем не так весело, когда реальный мир даёт контрпример...
Как писать код для веб-фреймворков, который работает в 100 раз быстрее
ORM -- это такая кривейшая приляпка, реализованная однако практически в каждом популярном веб-фреймворке...
Что делает тест хорошим
Есть прекрасная теория тестирования, которая объясняет, что делают тесты, что должно и что не должно проверяться при тестировании. Увы, это удивительно, но эта теория практически не была представлена в общедоступном виде для массовых разработчиков...
Формализуем многослойную (многоуровневую) архитектуру
Я сейчас дам вам достаточно простую формальную модель слоистой архитектуры, которая представляет её весьма наглядно, и при этом может масштабироваться до огромных размеров.
Формализуем понятие надёжности системы
Попросту говоря, мы хотим создавать системы, которые гарантированно будут правильно функционировать при наличии сбоев, перегрузок и т. п.
"БАЗА Software Design: Programming in Large", цена 2,400 рублей, через 24 часа вырастет.
❤39❤🔥9⚡4🏆3😎1
Смотрю, F# плюс продолжают активно пилить!!1
F#+ builds upon FSharp, using generic programming techniques to help you avoid boiler plate code.
Generic Functions and Operators like map, which can be extended to support other types
Generic and customizable Computation Expressions, like monad
A generic Math Module
Generic methods that help you with parsing
Some new types that work well with the abstractions, such as NonEmptyList, DList and Validation
Abstractions that capture common FP patterns, such as the standard monads Cont, Reader, Writer, State and their Monad Transformers
A polymorphic Lenses/Optics to easily read and update parts of immutable data
Срочно ставим.
F#+ builds upon FSharp, using generic programming techniques to help you avoid boiler plate code.
Generic Functions and Operators like map, which can be extended to support other types
Generic and customizable Computation Expressions, like monad
A generic Math Module
Generic methods that help you with parsing
Some new types that work well with the abstractions, such as NonEmptyList, DList and Validation
Abstractions that capture common FP patterns, such as the standard monads Cont, Reader, Writer, State and their Monad Transformers
A polymorphic Lenses/Optics to easily read and update parts of immutable data
Срочно ставим.
❤43👍12🤔3
Помогает ли AI? Кто знает? Но он, несомненно, наполняет мой день существенно большим количеством работы, которую нужно выполнить.
Именно так чувствовали себя миллионы людей, когда в 1990-е компьютеры появились на множестве рабочих мест. Всё та же работа, но более быстрая и лихорадочная. Больше выгорания для тебя, и больше денег для твоего начальника...
Именно так чувствовали себя миллионы людей, когда в 1990-е компьютеры появились на множестве рабочих мест. Всё та же работа, но более быстрая и лихорадочная. Больше выгорания для тебя, и больше денег для твоего начальника...
1💯48✍17❤3🐳3🤔2
Такие IDE как Visual Studio предлагают множество мощных функций рефакторинга, автозаполнения, включая рекомендации AI, всплывающие подсказки и расширения...
Однако гораздо чаще они мешают нам работать, а чтобы найти, где та или иная фича IDE отключается, придётся потратить прилично времени и нервов.
Однако гораздо чаще они мешают нам работать, а чтобы найти, где та или иная фича IDE отключается, придётся потратить прилично времени и нервов.
1💯37🤔13❤9🐳2
Более сильная система типов существенно упрощает понимание кода и позволяет избавиться от множества классов ошибок (как например F# в сравнении с C#, или TypeScript и JavaScript, или Kotlin и Java, или Rust и C++), потому что существенно ограничивает пространство допустимых компилируемых состояний вашего кода.
...пока вы не получите непонятную ошибку типа, которая не имеет видимого смысла, и с которой совершенно непонятно что делать :)
Теперь вам нужно приложить дополнительные усилия (вплоть до переписывания всего с нуля), чтобы убедить систему типов в том, что она правильная.
...пока вы не получите непонятную ошибку типа, которая не имеет видимого смысла, и с которой совершенно непонятно что делать :)
Теперь вам нужно приложить дополнительные усилия (вплоть до переписывания всего с нуля), чтобы убедить систему типов в том, что она правильная.
👍42😁12❤4✍2
Десятки лет я прекрасно справлялся с проектами без всех этих "продвинутых" технологий и методик, не говоря уже об ai, и хотя они действительно добавляют некоторые преимущества, они также добавляют кучу расходов ресурсов, неудобства и проблемы.
Я совсем не уверен, что заявленные преимущества того стоят.
Я совсем не уверен, что заявленные преимущества того стоят.
1❤🔥39💯16❤8🤝3👍2
Вместо обучения императивщине последовательностям выполнения инструкций, привязанных к синтаксису конкретного языка, что сильно сбивает начинающих, которые начинают "мыслить" комбинированием команд и токенов, подчас просто пытаясь угадать решение, и в дальнейшем приучаются к такому кривому стилю,
почему бы сразу не обучать операционной семантике (универсально применимой к любой программе)? А от неё совершенно естественный переход будет и к формальным темам (верификация, доказательство корректности, теория типов...).
В TaPL есть несколько главок по такому подходу, я на треке по вычислительным моделям предлагаю лайт-версию этой темки, но вопрос, конечно, риторический... Зачем, когда у всех теперь есть ЖПТ.
почему бы сразу не обучать операционной семантике (универсально применимой к любой программе)? А от неё совершенно естественный переход будет и к формальным темам (верификация, доказательство корректности, теория типов...).
В TaPL есть несколько главок по такому подходу, я на треке по вычислительным моделям предлагаю лайт-версию этой темки, но вопрос, конечно, риторический... Зачем, когда у всех теперь есть ЖПТ.
1❤41👍18❤🔥6
.
Облако драгоценностей за неделю.
Приватный клуб.
Если бы для разработки критических информационных инфраструктур использовались мэйнстримовские (== абсолютно недисциплинированные) методы разработки (например, предоставление IDE миллиону обезьян), то единственное, на что можно было бы надеяться — это что на каждую кодовую обезьянку найдётся целая армия тестировщиков...
Для донов-начинающих:
База по карьере, серия 20:
...И это подводит нас к вашим сильным сторонам. Мы не только оцениваем свои сильные стороны, основываясь на неправильных "игровых досках": даже когда у нас есть на примете правильная игровая доска, мы часто не умеем определить реальные сильные стороны, которые необходимы для успешной игры.
Бесплатное образование доступно всем, в интернете его пруд пруди. Чего не хватает, так это...
— Сергей Игоревич, я изучаю серверную часть на Java Spring, но Quarkus выглядит безумно быстрым. Он примерно в 10 раз быстрее и поставляется со всеми встроенными функциями. Должен ли я переключиться на Quarkus?
Вопрос выглядит просто, но на самом деле он указывает на нечто более глубокое...
Это то чувство, когда хочется бросить всё, чему ты научился, и гнаться за тем, что кажется новым, быстрым, модным или крутым -- Quarkus, Micronaut...
И я полностью вас понимаю...
Для донов-неначинающих:
...Вы действительно достигли своих целей на октябрь?
Или месяц СНОВА пролетел незаметно в суматохе забот?
Если вам всё-таки удалось достичь своих целей, то поздравляю!
Но если вы этого не сделали, тогда нам нужно серьезно поговорить...
Продолжаю выкладывать для донов материалы СильныхИдей — доступны моим ментатам, но тут расширенные и дополненные версии.
62. Проектные требования или проектная онтология?
Прежде всего, всегда исходите из того, что "требования заказчика" всегда надо воспринимать как "фантастические представления заказчика о требованиях" :)
(все старые материалы для донов постепенно сгорают)
=
Первые сериалы из существенно переработанных и улучшенных материалов СильныхИдей (по сути четыре книги) доступны на бусти:
1. БАЗА программной инженерии
2. Software Design с акцентом на Programming in Small
3. SOLID-25
4. Гайд Вайб-проектирование
5. Software Design с акцентом на Programming in Large (new)
=
Новые материалы для ментатов Лаборатории.
В курс карьеры добавлен 119-й материал "Смейся и учись!".
Проблемы -- это неотъемлемое качество жизни.
Правильное мышление -- вот решение и ответ.
А теперь перейдем к этому важному и неизбежному вопросу:
КАК вы взаимодействуете с трудностями в карьере и жизни?
В СильныеИдеи добавлены материалы
"127) Что должен уметь архитектор в реальных проектах"
Что должен уметь архитектор (сеньор, техлид...) в реальных проектах прежде всего...
"128) Три признака, что ваш ООП неверный"
Старая школа учит, что массово распространённое сегодня словосочетание "вызов метода" -- это слабый и поверхностный подход, в котором нету никакой глубины. Можно упомянуть и Алана Кэя, и формальное описание ООП (сигма-исчисление Луки Карделли), которые всегда учили, что правильное понимание объектного подхода -- это прежде всего "отправка сообщения"...
💪🏻
Мы здесь, потому что это трудно.
it's a privilege to do things that are hard.
"ЛаМПовое": Lean на микроконтроллере, Хищник лол, Киану Ривз коммунист, свежак от Страуструпа.
=
Гайд про функциональные архитектуры в активной работе, готово 40 топиков.
Пока такие модули: База, Архитектура портов и адаптеров, ФА и системы типов, Архитектуры: разное, Теория и продакшен, Архитектуры и ООП, Архитектуры и гомотопии.
Облако драгоценностей за неделю.
Приватный клуб.
Если бы для разработки критических информационных инфраструктур использовались мэйнстримовские (== абсолютно недисциплинированные) методы разработки (например, предоставление IDE миллиону обезьян), то единственное, на что можно было бы надеяться — это что на каждую кодовую обезьянку найдётся целая армия тестировщиков...
Для донов-начинающих:
База по карьере, серия 20:
...И это подводит нас к вашим сильным сторонам. Мы не только оцениваем свои сильные стороны, основываясь на неправильных "игровых досках": даже когда у нас есть на примете правильная игровая доска, мы часто не умеем определить реальные сильные стороны, которые необходимы для успешной игры.
Бесплатное образование доступно всем, в интернете его пруд пруди. Чего не хватает, так это...
— Сергей Игоревич, я изучаю серверную часть на Java Spring, но Quarkus выглядит безумно быстрым. Он примерно в 10 раз быстрее и поставляется со всеми встроенными функциями. Должен ли я переключиться на Quarkus?
Вопрос выглядит просто, но на самом деле он указывает на нечто более глубокое...
Это то чувство, когда хочется бросить всё, чему ты научился, и гнаться за тем, что кажется новым, быстрым, модным или крутым -- Quarkus, Micronaut...
И я полностью вас понимаю...
Для донов-неначинающих:
...Вы действительно достигли своих целей на октябрь?
Или месяц СНОВА пролетел незаметно в суматохе забот?
Если вам всё-таки удалось достичь своих целей, то поздравляю!
Но если вы этого не сделали, тогда нам нужно серьезно поговорить...
Продолжаю выкладывать для донов материалы СильныхИдей — доступны моим ментатам, но тут расширенные и дополненные версии.
62. Проектные требования или проектная онтология?
Прежде всего, всегда исходите из того, что "требования заказчика" всегда надо воспринимать как "фантастические представления заказчика о требованиях" :)
(все старые материалы для донов постепенно сгорают)
=
Первые сериалы из существенно переработанных и улучшенных материалов СильныхИдей (по сути четыре книги) доступны на бусти:
1. БАЗА программной инженерии
2. Software Design с акцентом на Programming in Small
3. SOLID-25
4. Гайд Вайб-проектирование
5. Software Design с акцентом на Programming in Large (new)
=
Новые материалы для ментатов Лаборатории.
В курс карьеры добавлен 119-й материал "Смейся и учись!".
Проблемы -- это неотъемлемое качество жизни.
Правильное мышление -- вот решение и ответ.
А теперь перейдем к этому важному и неизбежному вопросу:
КАК вы взаимодействуете с трудностями в карьере и жизни?
В СильныеИдеи добавлены материалы
"127) Что должен уметь архитектор в реальных проектах"
Что должен уметь архитектор (сеньор, техлид...) в реальных проектах прежде всего...
"128) Три признака, что ваш ООП неверный"
Старая школа учит, что массово распространённое сегодня словосочетание "вызов метода" -- это слабый и поверхностный подход, в котором нету никакой глубины. Можно упомянуть и Алана Кэя, и формальное описание ООП (сигма-исчисление Луки Карделли), которые всегда учили, что правильное понимание объектного подхода -- это прежде всего "отправка сообщения"...
💪🏻
Мы здесь, потому что это трудно.
it's a privilege to do things that are hard.
"ЛаМПовое": Lean на микроконтроллере, Хищник лол, Киану Ривз коммунист, свежак от Страуструпа.
=
Гайд про функциональные архитектуры в активной работе, готово 40 топиков.
Пока такие модули: База, Архитектура портов и адаптеров, ФА и системы типов, Архитектуры: разное, Теория и продакшен, Архитектуры и ООП, Архитектуры и гомотопии.
❤38🔥10❤🔥1
Из сегодняшней переписки с техподдержкой:
...Ваш сервер находится сейчас в зоне риска, и мы уже приняли меры по его защите. Однако, хотим обратить Ваше внимание, что услуга виртуального хостинга довольно уязвима для подобных ситуаций, так как сайты разных клиентов находятся в едином пространстве. DDoS-атака затрагивает Ваш общий с другими клиентами IP-адрес, и под ударом может оказаться целый ряд ресурсов. Более устойчивым решением является VPS-сервер, так как каждый сервер имеет свой выделенный IP.
Ага. На виртуальном хостинге все сидят в одной коляске, и если её заденут, качнётся каждый. Но VPS выдали лично тебе, мол, теперь ты главный по своему падению, а от нас отстань. Теперь ты можешь упасть самостоятельно, без помощи соседей, и только сам несёшь за это полную ответственность. Я останусь один на один со всеми своими ошибками в настройках, уязвимостями, и полной ответственностью за апдейты и бэкапы.
При ддосе можно хотя бы посетовать на плохую охрану, а VPS повышает до звания "сам себе охранник, дворник и сантехник". Теперь атака будет направлена лично на меня, и отбиваться от неё придётся самостоятельно, вооружившись гуглом и молитвой.
Скучно не будет!
=
Выбирайте такие сервисы, где ответственность можно делегировать поставщику по максимуму, а проект готовьте так, чтобы его можно было легко и просто перетащить к другому сервису автоматическим скриптом.
...Ваш сервер находится сейчас в зоне риска, и мы уже приняли меры по его защите. Однако, хотим обратить Ваше внимание, что услуга виртуального хостинга довольно уязвима для подобных ситуаций, так как сайты разных клиентов находятся в едином пространстве. DDoS-атака затрагивает Ваш общий с другими клиентами IP-адрес, и под ударом может оказаться целый ряд ресурсов. Более устойчивым решением является VPS-сервер, так как каждый сервер имеет свой выделенный IP.
Ага. На виртуальном хостинге все сидят в одной коляске, и если её заденут, качнётся каждый. Но VPS выдали лично тебе, мол, теперь ты главный по своему падению, а от нас отстань. Теперь ты можешь упасть самостоятельно, без помощи соседей, и только сам несёшь за это полную ответственность. Я останусь один на один со всеми своими ошибками в настройках, уязвимостями, и полной ответственностью за апдейты и бэкапы.
При ддосе можно хотя бы посетовать на плохую охрану, а VPS повышает до звания "сам себе охранник, дворник и сантехник". Теперь атака будет направлена лично на меня, и отбиваться от неё придётся самостоятельно, вооружившись гуглом и молитвой.
Скучно не будет!
=
Выбирайте такие сервисы, где ответственность можно делегировать поставщику по максимуму, а проект готовьте так, чтобы его можно было легко и просто перетащить к другому сервису автоматическим скриптом.
1❤49✍11⚡5
Продолжаю работу с ментатами 🤓
...После завершения курса по ООАП-3 имеется дикое желание всё бросить и больше никогда не приступать к этому.
(Аналогично у 98%, кто никогда не занимался проектированием по-взрослому :)
...уничтожение ООП пугает. ))) Хотя мой друг устроился работать аналитиком данных в компанию, занимающуюся облигациями, и он давно и плотно использует R. И ему непонятны вызовы в стиле result.filter(args), прям гадость, говорит. То ли дело filter(result, args). )))
...Сейчас работаю над time-shift аугментацией, разбираюсь в чужом коде, пытаюсь применить требуемые в рамках моего задания изменения. Тот факт, что я невзлюбил ООП, сейчас мне аукается)))
...Я применял некоторые элементы ФП (вот этот класс будет иммутабельным, вот та функция будет рекурсивной с аккумулятором), но даже близко не проносилось мысли о том, что на ФП можно заниматься проектированием проекта. Особенно восхитило, порадовало, возмутило и огорчило одновременно то, что все паттерны проектирования, которым меня учили последователи ООП можно отправить в утиль после того, как ФП впитается в кончики пальцев.
Также очень сложно было укладывать такое понимание основного цикла видеоигры: это не цепочка состояний, а цепочка событий.
...Рассматриваем ООП и ФП в частности через призму OCP. Удивительно, что в одной парадигме к нужно целенаправленно стремиться OCP (как и вообще к многим хорошим практикам в ООП), а в другой -- всё есть из коробки.
...Реальные примеры в работе... Ну опять – линзы! линзы классные, мне нравится! Если язык достаточно выразительный, то здорово иметь еще и определение линзы, прям классная "интерфейсность", понятно что извлекается. на текущей работе я в таком положении что могу писать такой код, лишь бы была задача)))) Коллеги все равно ничего не понимают из того что делают, а курсор увидив мой код будет... Получше код дописывать (правда, LLM фп код лучше понимает чем ооп лапшу)
...Вот и прошла вторая неделя в новом формате карьеры.
За данный период я получил оффер на позицию Senior Go-разработчик (формально), хотя себя я чувствую на middle/middle+. Уже успел окунуться в рабочие процессы и понять как все устроено.
...вчера меня официально подписали на позицию старшего разработчика (хотя по компетенциям я себя чувствую на мидла);
- получил зп в размере 350 тыс. руб;
...Продолжил откликаться на hh. Сделал 30 откликов, получил 2 тестовых задания(сейчас в работе), 2 созвона с hr. На одном созвоне по вакансии full stack предложили рассмотреть их вакансию по backend на грейд middle
(Такого в чатах у меня много кстати, и что все плачут что найм сломан? Стандартная конверсия 10% в созвоны вполне реальная, так и всегда так было, и 10 лет назад).
...После завершения курса по ООАП-3 имеется дикое желание всё бросить и больше никогда не приступать к этому.
(Аналогично у 98%, кто никогда не занимался проектированием по-взрослому :)
...уничтожение ООП пугает. ))) Хотя мой друг устроился работать аналитиком данных в компанию, занимающуюся облигациями, и он давно и плотно использует R. И ему непонятны вызовы в стиле result.filter(args), прям гадость, говорит. То ли дело filter(result, args). )))
...Сейчас работаю над time-shift аугментацией, разбираюсь в чужом коде, пытаюсь применить требуемые в рамках моего задания изменения. Тот факт, что я невзлюбил ООП, сейчас мне аукается)))
...Я применял некоторые элементы ФП (вот этот класс будет иммутабельным, вот та функция будет рекурсивной с аккумулятором), но даже близко не проносилось мысли о том, что на ФП можно заниматься проектированием проекта. Особенно восхитило, порадовало, возмутило и огорчило одновременно то, что все паттерны проектирования, которым меня учили последователи ООП можно отправить в утиль после того, как ФП впитается в кончики пальцев.
Также очень сложно было укладывать такое понимание основного цикла видеоигры: это не цепочка состояний, а цепочка событий.
...Рассматриваем ООП и ФП в частности через призму OCP. Удивительно, что в одной парадигме к нужно целенаправленно стремиться OCP (как и вообще к многим хорошим практикам в ООП), а в другой -- всё есть из коробки.
...Реальные примеры в работе... Ну опять – линзы! линзы классные, мне нравится! Если язык достаточно выразительный, то здорово иметь еще и определение линзы, прям классная "интерфейсность", понятно что извлекается. на текущей работе я в таком положении что могу писать такой код, лишь бы была задача)))) Коллеги все равно ничего не понимают из того что делают, а курсор увидив мой код будет... Получше код дописывать (правда, LLM фп код лучше понимает чем ооп лапшу)
...Вот и прошла вторая неделя в новом формате карьеры.
За данный период я получил оффер на позицию Senior Go-разработчик (формально), хотя себя я чувствую на middle/middle+. Уже успел окунуться в рабочие процессы и понять как все устроено.
...вчера меня официально подписали на позицию старшего разработчика (хотя по компетенциям я себя чувствую на мидла);
- получил зп в размере 350 тыс. руб;
...Продолжил откликаться на hh. Сделал 30 откликов, получил 2 тестовых задания(сейчас в работе), 2 созвона с hr. На одном созвоне по вакансии full stack предложили рассмотреть их вакансию по backend на грейд middle
(Такого в чатах у меня много кстати, и что все плачут что найм сломан? Стандартная конверсия 10% в созвоны вполне реальная, так и всегда так было, и 10 лет назад).
❤41❤🔥9👍7😎1
Что выбираешь?
Anonymous Poll
5%
MCP
7%
AI-агент с bash/cli
13%
AI-плагин в IDE
47%
Ручками + чат с веб-AI
14%
Ручками only
14%
Я и так робот
🤔31✍7😁4
Свежак: Гвидо наш Россум рубит сермягу про будущее программирования и сражается с корпорациями ветряными мельницами:
"... I honestly think the importance of the GIL removal project has been overstated. It serves the needs of the largest users (e.g. Meta) while complicating things for potential contributors to the CPython code base (proving that new code does not introduce concurrency bugs is hard) ...
...But we don’t use “vibe coding” — we stay in control where it comes to architecture and API design."
"... I honestly think the importance of the GIL removal project has been overstated. It serves the needs of the largest users (e.g. Meta) while complicating things for potential contributors to the CPython code base (proving that new code does not introduce concurrency bugs is hard) ...
...But we don’t use “vibe coding” — we stay in control where it comes to architecture and API design."
1✍36❤8😁4👍3