TGViewer
Лаборатория Математики и Программирования Сергея Бобровского Лаборатория Математики и Программирования Сергея Бобровского @lambda_brain · 1.41K subscribers
Post #2201 864
Продолжаю работу с ментатами 🤓

Работая над этими задачами, я понял, как важно внимательно изучать схему БД перед написанием запросов...

Я долго не понимал, почему мои тесты разваливаются после каждого рефакторинга. Решил изменить структуру агрегата, перенёс логику — тест сломался. Хотя с точки зрения бизнеса ничего не поменялось, правило как обновлялось, так и обновляется.
В общем, дошло до меня не сразу. Я проверял не то. Проверял, как код работает внутри, а надо было — что он делает.
С TDD у меня поэтому не складывалось раньше. Я думал, это про "напиши тест, потом код". А на самом деле это про другое: сначала пойми, что должно работать, потом напиши тесты на это понимание, и только потом реализуй. Тесты и код не связаны напрямую, они оба следуют из спецификации...

Раньше пытался всё запихнуть в классы с наследованием. Теперь вижу, что часто проще использовать обычные функции.
Теперь перед написанием кода задаю себе вопрос: "Что может измениться в будущем, и как сделать так, чтобы эти изменения не ломали существующий код?"
Думаю во многих случаях ответ почти всегда: "Вынести изменяющуюся часть в отдельные функции и сделать механизм композиции"...

Мне долго доказывали, что код вида
spring-hibernate-n1-problem не приводит к проблеме N+1. Не знаю, зачем нужен был этот спор, если можно просто написать тест на количество запросов. Все равно от версии к версии Hibernate поведение может поменяться).

Доп. задания АСД, конечно посложнее, на коленке за 5 минут не сделаешь, но в целом все достаточно доступно, как раз на новогодние праздники то, что надо было, чтоб и отдохнуть и не отупеть...

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

Тут множество циклических зависимостей, и никак нельзя сказать, что проект соответствует принципу МУРА. Когда я писала проект, под конец у меня было ощущение сильной запутанности. Глядя на этой график, понимаю, почему. Здесь все зависит друг от друга...

Позавчера я завершил обновлённый курс по ФП.
Чувствую, что на меня стал сильно влиять C++. Он и на новой работе, и в pet-проекте. Ваш курс - как глоток свежего воздуха.
Больше всего впечатлили следующие вещи:
Totality - очень подходящее слово, мощное. Нужно решиться писать программы, которые гарантированно завершаются, такие, где можно эти гарантии доказать. Это как минимум побуждает писать более чистый код без запутанных конструкций с высокой цикломатической сложностью. Так проще доказывать завершимость.
Ко-рекурсию можно и потерпеть, тем более, что в математике её не мало - те же универсумы в теории типов.
Призмы - "А что, так можно было что ли?" (с)
То есть, можно просто писать код без кучи if-ов, и он не будет падать. Без всяких "Rectangle has no attribute radius" и прочих проблем.
Expression problem. Больше всего в Python я скучаю по multiple dispatch. Это было красиво, хоть и многословно и полностью ломало работу тайпчекера.
Errors as values. Вот это стал активно применять в своём pet-проекте. Тем более, что на работе такая практика очень распространена - ни разу не видел там выбрасывания или обработки исключения.
Расширяемые эффекты. Даже сделал такую штуку в рабочем проекте. Потом, правда, придумал другой способ, о котором расскажу дальше.
В рабочем проекте возникла необходимость организовать несколько цепочек вычислений и синхронизировать их в ключевых точках. Там это было частично сделано через глобальное (в масштабах экземпляра класса) состояние с кучей полей.
Благодаря курсу по ФП я придумал полностью stateless решение через функции высшего порядка. Можно собрать всю логику запуска и синхронизации задач, а также передачи данных, в одном абсолютно линейном методе (с нулевой цикломатической сложностью). Потом запустить это в режиме fire&forget. Даже поля класса не нужны.
  • 👍 37
  • ❤ 14
  • ✍ 2
  • 🤔 2
More from @lambda_brain
  1. Oct 1, 2026Ребята спрашивают, ну ок, моё скромное мнение. у вас где-нибудь можно прочитать ваше мнени…
  2. Sep 30, 2026Ладно, вот вам база, почему так трудно переучиваться с императивного/объектного стиля коди…
  3. Sep 30, 2026Ну, с Днём Рунета! Многие годы Рунет был эталонным примером свободы, а сегодня превратился…
  4. Sep 28, 2026. Облако драгоценностей за неделю. Дипломный проект разросся уже так, что расширил его до…
  5. Sep 27, 2026GELU (Gaussian Error Linear Unit) -- базовая фича архитектуры трансформеров, да и вообще в…
  6. Sep 27, 2026Продолжение сериала "Совершенно не удивлён, и дальше будет только хуже" (с) На этой неделе…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →