TGViewer
Лаборатория Математики и Программирования Сергея Бобровского Лаборатория Математики и Программирования Сергея Бобровского @lambda_brain · 1.41K subscribers
Post #1328 1.3K
Я закончил первый курс (База:) нового трека по software design 💥

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

Четыре основных раздела + два дополнения.

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

2. Как так получается, что вроде бы давно работающий код всё ещё содержит баги?
Ложная уверенность в исходах. Неполное покрытие тестами. Пять концептуально различающихся моментов, которые обязательно надо тестировать. Засады асинхронного программирования и многопоточности. 10 механизмов синхронизации.

3. Как код, выглядящий просто, может оказаться реально сложным, и как избегать такого.
Разбор на примерах вроде бы простого, но коварного кода.
7 способов, как не доводить простой код до неочевидных ошибок.
Защищаем код от внезапных изменений в требованиях. Три классических подхода.

4. Триплы Хоара как спецификации: вы будете видеть логику и сложность точно также напрямую, как и сам код.
Инвариант цикла. Примеры и задачки по созданию формальных спецификаций от простых до достаточно сложных (композиция и рекурсия).

5. "Знание" кода.
Вы можете нередко услышать, как опытные программисты в разговоре упоминают, что одна часть их кода "знает" о другой части кода. Что имеется в виду?
6 видов зависимостей, разбираем на примерах.

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

=

18 заданий (все с разбором), 30+ примеров, много тематических отсылок к СильнымИдеям.

Курс для Java-истов, но в принципе, и C#-истам зайдёт.

Уровень -- крепкий джуниор, ну может быть миддл-лайт.

=

На следующем, втором курсе трека займёмся демистификацией самого процесса проектирования.
  • 👍 63
  • ❤‍🔥 10
  • ⚡ 6
  • ❤ 3
  • 🎉 3
More from @lambda_brain
  1. Oct 9, 2026Ладно, вот серебряная пуля всей инженерии агентов: декомпозиция. Темка, которую святые com…
  2. Oct 9, 2026Про очередной хайп, как суперинтеллект якобы решил 700 сложных математических проблем, я п…
  3. Oct 8, 2026Пацаны волнуются, не ухожу ли я в геймдев ↑↑↑ не-не (но название dwarf fortness застолблю…
  4. Oct 5, 2026Мнения экспертов по индустрии разработки игр в целом можете при желании найти сами на ютуб…
  5. Oct 5, 2026Просили пояснить за (M)PF геймдев ↑ Сложно сегодня придумать более сложное бизнес-направле…
  6. Oct 5, 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 →