TGViewer
Good dev knows Good dev knows @gooddevknows · 2K subscribers
Post #93 3.53K
Offensive programming

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

Продолжим разговор про методики обработки нестандартных ситуаций. В прошлый раз мы рассматривали технику Defensive programming, когда наша программа старается продолжить работать, несмотря на проблемы. А сегодня поговорим про технику offensive programming.

Offensive programming это вариант дизайна ПО, когда мы обрабатываем исключения и ошибки так, что программа прекращает выполнение бизнес логики, при любой неожиданной ситуации. Т.е. fail fast.

Например, у нас есть кусок кода, который работает со state и логикой подразумевается, что когда наш кусок кода будет вызван, то state будет заполнен, и не будет null. Но вдруг! Мы понимаем что в переменной все такие null. Наши действия?

При Defensive programming мы бы могли подстелить соломки, и еще раз попробовать “наполнить” state, может быть узнать его у какого-то сервиса. Но при Offensive programming мы сразу же бросаем исключение. Мы не пишем дополнительный код, который обрабатывает и старается исправить исключительные ситуации.

В некоторых технологиях уже присутствуют методы, которые помогают писать код в таком стиле. Например, assert в Node.js. А в Kotlin их даже больше — require, check, assert, requireNotNull.

Вы можете написать:
val state = checkNotNull(someState) { "State must be set beforehand" }

И быть уверенными, что со state все отлично.

Основное преимущество Offensive programming — вы пишете меньше кода. Меньше кода — в меньшем количестве мест что-то может пойти не так. А значит, это требует меньше поддержки. Из минусов — если вы не обрабатываете эту ситуацию, то она должна быть обработана в другом месте, возможно другой командой или другой компанией. Где-то новый код все равно объявится.

⬛️ Еще раз — когда команды не падают из-за любой ошибки это хорошо, но это требует разработки более сложных программ. А сложные программы это плохо. Поэтому, если ситуация позволяет, можно использовать offensive programming и следить за тем, чтобы работал только happy path.

Используете Offensive programming? Пишите в комментариях.

#хардскиллы, 🌄Instagram |🤝Patreon
  • 👍 29
More from @gooddevknows
  1. Aug 27, 2026🛰 Я придбав Starlink! Ще поза-вчора вранці я не збирався купляти ніякий Starlink. Але, пр…
  2. Jul 1, 2026photo post
  3. Jul 1, 2026✨ Crash Course: Storytelling для інженерів ✨ 📅 9 — 13 липня 2026 1️⃣ Чому історії працюют…
  4. Jul 1, 2026Post #278
  5. Apr 1, 2026We have one ticket left for: https://fwdays.com/event/tech-lead-course-5 . Code LIFE_BY_PP…
  6. Mar 9, 2026Hi friends, For those who have missed it, I now regularly post in my 🇺🇦 channel: https:/…
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 →