← Усі статті

Програміст-прагматик: звички, що переживають стек

Не конспект, а розбір Ганта і Томаса: ортогональність, DRY, розбиті вікна й трасувальні кулі — з кейсами, контекстом ШІ та діями на сьогодні.

Програміст-прагматик: звички, що переживають стек
Зміст

Чому два розробники з однаковим стажем будують зовсім різні системи? Один вічно гасить регресії й «незрозумілі» каскади. Інший роками спокійно розвиває продукт: правки локальні, борг видимий, поставка передбачуваніша. Різниця рідко в мові чи фреймворку. Частіше — в інженерному мисленні: що вважати зміною, де живе істина, як перевірити гіпотезу до гарної архітектури.

Саме про цей шар — The Pragmatic Programmer (Програміст-прагматик) Ендрю Ганта й Девіда Томаса. Нижче не «відома книга про…», а карта ідей, перевірена на живих проєктах і перечитана вже в епоху Cursor, Copilot і ШІ-рев’ю. Вижимка не замінює оригінал.

Теза книги

Програмна інженерія — ремесло з відповідальністю за наслідки. Майстерність росте не від сертифікатів і зірок на GitHub, а від дисципліни в чотирьох площинах: як ви змінюєте код; як дублюєте знання; як перевіряєте гіпотези; як ставитеся до «дрібниць», що вчать команду поганим нормам.

Прагматик обирає те, що працює в контексті — терміни, успадкований код, регуляторика, склад команди. Він не плутає «модно на конференції» з «знижує ризик поставки цього тижня». І не ховає халтуру за словами «ми ж прагматики»: тут прагматизм — про чесність і оборотність, а не про лінь.

Ключові ідеї

Ортогональність: одна зміна — один сенс

Що каже автор. Осі відповідальності мають перетинатися рідше. Добра зміна зачіпає один сенс: правило знижки, формат відповіді, політику доступу. Погана «дрібна» зміна тягне інтерфейс, SQL, чергу й звіт, бо шари вже склеєні неявним контрактом.

Як це виглядає в Enterprise. Правка прапорця в адмінці вимагає погодження трьох команд. Один сенс названий по-різному в трьох сервісах. Модуль «священний» — «не чіпай, упаде все». Типова історія: «додамо одне поле в замовлення» перетворюється на тиждень, бо замовлення вже знає про білінг, склад, маркетинг і звіт CFO.

Як це змінюється з AI. Помічник прискорює набір тексту й із задоволенням посилює наявну склеєність: копіює той самий антишаблон у сусідній файл охайним стилем. Корисний запит не «напиши функцію», а «винеси сенс X за адаптер / не чіпай осі Y». ШІ-рев’ю ловить стиль, але рідко питає: скільки осей зачепила ця зміна?

Де порада може не спрацювати. Передчасні мікросервіси «ради ортогональності» часто дають розподілений моноліт. У жорсткому успадкованому коді спочатку потрібен шов і тест, а не ідеальна сітка модулів. Іноді тимчасова зв’язаність усвідомлена — якщо поруч лежить план розрізання й дата.

Що зробити вже сьогодні. У наступному PR опишіть одним реченням навіщо існує кожен новий файл. Якщо не виходить — осі вже переплутані.

Мій досвід. Ортогональність окупається на другій і третій зміні політики, а не на першому коміті. Я гонюся за нею там, де правила бізнесу живуть довше за фреймворк. Де код — одноразовий клей до вендора на квартал, платити повною «чистотою» не завжди розумно.

Якщо запам’ятати одну думку — змінюйте одне місце сенсу, не влаштовуючи доміно по репозиторію.

DRY — про знання, не про заборону копіювання

Що каже автор. Небезпечно дублювати знання, а не будь-які дві схожі строки. Політика «скасування замовлення за 24 години» у фронті, API й звіті розійдеться. Два однакові цикли for можуть бути випадковою схожістю і не вартувати спільної утиліти.

Як це виглядає в Enterprise. Правило знижки «полагодили на сайті», а лист клієнту й звірка бухгалтерії живуть за старою логікою. Або навпаки: «спільна» бібліотека зв’язує неродинні домени заради економії рядків — і будь-яка зміна ламає чужий квартальний звіт.

Як це змінюється з AI. Модель розмножує одне правило в п’яти файлах за хвилину. Компілюється, виглядає розумно, тести зелені на щасливому шляху. Прагматик після генерації питає не «гарно?», а «де тепер єдине джерело істини». Генерація коду й шаблони корисні, якщо джерело знання одне.

Де порада може не спрацювати. Нав’язливий DRY народжує передчасні абстракції. «Не повторюй» без питання «це одне знання чи два схожі випадки?» — шлях до Utils на тисячу рядків.

Що зробити вже сьогодні. Оберіть одне бізнес-правило з останнього тікета. Порахуйте, скільки місць доведеться правити і пам’ятати, якщо воно зміниться.

Мій досвід. Я майже завжди дозволяю локальне копіювання на межі систем, поки контракт нестабільний. Зате всередині одного обмеженого контексту за дублювання політики б’юся жорстко — там ціну дрейфу вимірюють інцидентами, а не естетикою.

Якщо запам’ятати одну думку — рахуйте вартість зміни правила, а не число збігів рядків.

Розбиті вікна і культура «раз уже так»

Що каже автор. Дрібний видимий безлад знижує поріг наступного. Незакритий TODO, проковтнута помилка, тест «потім», криве ім’я «як у сусіда» — сигнали команді, що можна.

Як це виглядає в Enterprise. Раз «заглушили алерт на п’ятницю» — і через квартал моніторинг мовчить системно. Або: у модулі вже п’ять # noqa і три ignore у лінтері; нова людина додає шостий без докорів. Код рідко розвалюється миттєво. Зазвичай він повільно гниє, поки команда перестає помічати запах.

Як це змінюється з AI. Генерація легко лишає «майже правильний» код: порожній catch, магічні числа, коментар «потім». Рев’юер втомився — прийняв. Помічник не соромиться розбитих вікон; соромитися має культура злиття.

Де порада може не спрацювати. Косметика заради косметики під час пожежного інциденту — шкода. Не все сіре в дифі — вікно. Вікно — те, що вчить поганій нормі. Перше можна відкласти явно; друге краще закрити в тому ж PR або завести борг із власником і терміном.

Що зробити вже сьогодні. У файлі, який уже чіпаєте, закрийте одне справжнє вікно — або назвіть власника боргу в тікеті, не в повітрі.

Мій досвід. Найдешевший ремонт — «раз уже я тут». Найдорожчий — героїчний рефакторинг половини системи під соусом «розбиті вікна». Я надаю перевагу маленьким видимим перемогам, що змінюють норму команди.

Якщо запам’ятати одну думку — безлад заразливий; лагодьте сигнал, а не лише симптом.

Трасувальні кулі проти нескінченного прототипу

Що каже автор. Трасувальна куля — тонкий наскрізний зріз від входу користувача (або події) до спостережуваного результату. Вона не зобов’язана бути гарною. Вона зобов’язана бути реальною: справжній канал даних, справжня межа, справжня помилка на стику.

Як це виглядає в Enterprise. Півроку «ідеальної платформи» на слайдах, потім два тижні паніки на першому користувацькому шляху. Або навпаки: демо на моках, де «потім підключимо» чергу, SSO і білінг — і правда спливає за тиждень до релізу.

Як це змінюється з AI. Легко отримати охайний прототип інтерфейсу й навіть «робочий» щасливий шлях з чату. Інтеграційна правда як і раніше дорога. Використовуйте ШІ, щоб швидше зібрати зріз — але мірою лишайте реальний стик систем, а не скрін.

Де порада може не спрацювати. Вічний «тонкий зріз» без узагальнення теж борг: десять тимчасових шляхів, нуль платформи. Після того як знання оплачене болем — узагальнюйте. У регульованих контурах зріз усе одно має поважати аудит і доступ; «лише б вистрелило» недостатньо.

Що зробити вже сьогодні. Для поточної функції запишіть один сценарій успіху й одну явну відмову, які можна провести наскрізь цього тижня. Решта — після фактів.

Мій досвід. Трасувальні кулі рятують терміни частіше, ніж ідеальні ADR. Але я бачив і зловживання: «ми прагматики» як відмова проєктувати контракти взагалі. Зріз — інструмент навчання, не культ хаосу.

Якщо запам’ятати одну думку — спочатку шлях, що бреше менше за слайд; краса — потім.

Інструменти, автоматизація болю й «збірка в Івана»

Що каже автор. Якщо крок болючий і повторюється — автоматизуйте, приберіть або зробіть помилку неможливою. Ручні ритуали на проді й збірка на одній машині — фабрики інцидентів.

Як це виглядає в Enterprise. Реліз «за інструкцією з Confluence на 40 кроків». Секрети в особистому менеджері паролів. Тести, які ганяє лише одна людина. Біль вартує години скрипта, якщо він щотижневий; вартує дня пайплайна, якщо блокує поставку.

Як це змінюється з AI. Помічник пише скрипти й конфіги CI швидко — і так само швидко лишає крихку магію. Перевіряйте ідемпотентність, секрети, права. ШІ-агент у CI без огород — нове розбите вікно корпоративного масштабу.

Де порада може не спрацювати. Автоматизація хаосу масштабує хаос. Спочатку приберіть крок, потім обгорніть у пайплайн. Інструмент, яким ніхто не користується, — рядок у резюме, не частина продукту команди.

Що зробити вже сьогодні. Назвіть один ручний крок у поставці, який дратував вас минулого місяця. Оцініть: видалити, спростити чи автоматизувати?

Мій досвід. Найкращі інвестиції — скорочення часу «від червоного до зеленого» й зняття людини з критичного шляху релізу. Найгірші — генератори обгорток заради галочки «зручності для розробника».

Якщо запам’ятати одну думку — біль, що повторюється, — баг процесу, не риса характеру команди.

Оцінка, невизначеність і оборотність

Що каже автор. Оцінюйте терміни й ризики, але не вдавайте з себе пророка. Де можна — лишайте рішення оборотними: прапорці, адаптери, межі модулів, версії контрактів. Необоротне (міграція без відкату, публічний API без версій) — рідко й із записом чому.

Як це виглядає в Enterprise. Тиждень суперечки про гіпотетичне майбутнє замість дня експерименту. Або «єдина СУБД на десять років» без адаптера — і зміна вендора стає проєктом року.

Як це змінюється з AI. Легко нагенерувати три архітектури за вечір. Складніше лишити двері назад. Просіть у моделі не лише «як зробити», а й «як відкотити» і «що стане необоротним».

Де порада може не спрацювати. Нескінченна оборотність дорога. Іноді треба обрати й жити з вибором. Прагматизм — у свідомому необоротному кроці, не в страху рішень.

Що зробити вже сьогодні. У поточному дизайн-документі позначте рішення: оборотно / дорого відкотити / майже назавжди. Хоча б три пункти.

Мій досвід. Вартість з’ясування часто нижча за вартість суперечки. Я за маленький експеримент раніше великого погодження — особливо коли ШІ дешевить прототип, але не дешевить політичний відкат.

Якщо запам’ятати одну думку — пишіть код (і контракти), які завтра простіше змінити.

На практиці

У код-рев’ю

Питайте не лише про стиль:

  • Скільки місць тепер «знає» це правило?
  • Зміна ортогональна чи тягне приховані осі?
  • Чи з’явилося нове розбите вікно?
  • Чи можна відкотити рішення без кровавої міграції?

У плануванні функції

Спочатку трасувальний зріз: один успіх, одна явна відмова. Потім інтерфейс і узагальнення. Якщо зріз не можна за дні — ви недооцінили невідоме; ріжте обсяг.

На інциденті

Шукайте вікна поруч із багом: чому моніторинг мовчав, чому повтори були нескінченними, чому конфіг правили руками. Інцидент без ремонту вікна — запрошення до повтору.

В успадкованому коді

Ортогональність наказом не з’являється. Почніть із шва: тест навколо небезпечної зміни, адаптер на межі, заборона новому коду повторювати стару зв’язаність. Тут книга добре стикується з Feathers і Fowler — див. список найкращих книг.

Зі ШІ-помічниками

Контур простий: помічник пропонує, людина перевіряє ортогональність, єдиність джерела істини й оборотність. «Виглядає розумно» — та сама ілюзія, що й швидке перечитування чужого коду.

Кому яка ідея корисніша

Ідея Junior Middle Senior
DRY як знання ★★★★★ ★★★★ ★★★
Ортогональність ★★★ ★★★★★ ★★★★★
Розбиті вікна ★★★★★ ★★★★ ★★★★
Трасувальні кулі ★★ ★★★★ ★★★★★
Оборотність рішень ★★ ★★★★ ★★★★★

Оцінки — редакційні, не «наука»: орієнтир, з чого почати розмову в команді.

Обмеження та критика

Книга афористична. Легко цитувати гасла без вимірювання й без домовленостей команди. Конкретні інструменти видання старіють швидше за ідеї.

У жорстких корпораціях «просто зроби ортогонально» впирається в політику володіння, аудит і вендорів. Тоді прагматизм — у найменш шкідливому наступному кроці, а не в ідеалі з підручника.

Коротке порівняння. The Pragmatic Programmer ближче до розмови з сильним сеньором про звички, ніж до підручника. Clean Code сильніше тисне на локальну естетику коду й ритуали — і частіше викликає релігійні війни. DDD (Evans) копає модель предметної області глибше, ніж прагматичні афоризми. XP сильніший про командну інженерію й зворотний зв’язок циклу. Беріть «Прагматику» за словник ремесла; не чекайте від неї ні повної моделі домену, ні формальних гарантій стійкості — для цього сусідні книги серії (Evans, Kleppmann, Nygard).

Кому читати

Варто почати тут, якщо ви junior→middle і втомилися від хаотичних правок; якщо тімлід хоче спільну мову про якість змін; якщо команда сперечається про фреймворки й мовчить про зв’язність знання.

Можна відкласти як першу книгу, якщо ви вже живете безперервною поставкою й культурою «зріз раніше слайда» — але словник усе одно корисний для онбордингу.

Читайте критично, якщо шукаєте курс мови чи довідник шаблонів підприємства: це книга звичок.

Що зробити сьогодні

Спробуйте один-два пункти цього тижня:

  1. Закрийте одне справжнє розбите вікно у файлі, який уже чіпаєте — або призначте власника боргу.
  2. Для поточної функції проведіть (або заплануйте на дні) один наскрізний сценарій успіху й одну відмову.
  3. Знайдіть одне бізнес-правило й порахуйте, у скількох місцях воно «живе».
  4. Один раз на рев’ю запитайте вголос: «чи можна простіше / оборотніше?»

Коментарі

Завантаження коментарів…