Зміст
The Pragmatic Programmer Ендрю Ганта і Девіда Томаса (у рос. виданні часто «Програміст-прагматик») з’явилася наприкінці 1990-х і знову стала обов’язковим читанням після ювілейного видання. Це не підручник мови, не каталог фреймворків і не «Agile для слайдів». Книга про ремесло: як інженер відповідає за зміни в живій системі, як не плутає моду з доведеною користю і як будує звички, які переживають стек.
Нижче — розгорнута вижимка своїми словами. Вона глибша за короткий конспект, але не замінює оригінал: у книзі більше історій, вправ і нюансів епохи. Мета тексту — дати карту ідей, яку можна одразу перевірити в рев’ю, на інциденті й у плануванні фічі.
Теза книги
Програмна інженерія — ремесло з відповідальністю за наслідки. Майстерність росте не від колекції сертифікатів і не від числа зірок на GitHub, а від дисципліни в чотирьох площинах:
- Як ви змінюєте код — локально чи каскадом по системі.
- Як ви дублюєте знання — правила бізнесу, схеми, домовленості.
- Як ви перевіряєте гіпотези — план на папері проти тонкого робочого зрізу.
- Як ви ставитеся до «дрібниць» — дрібний безлад як відсоток за техборг.
Прагматик обирає те, що працює в контексті: терміни, команда, успадкований код, регуляторика. Він не плутає «модно на конференції» з «знижує ризик поставки цього тижня». І він не виправдовує халтуру фразою «ми ж прагматики» — прагматизм тут про чесність і оборотність, а не про лінь.
Ключові ідеї
Ортогональність: одна зміна — один сенс
Ортогональність — коли осі відповідальності перетинаються рідше. Добра зміна зачіпає один сенс: правило знижки, формат відповіді, політику доступу. Погана «дрібна» зміна тягне інтерфейс, SQL, чергу й звіт, бо ці шари вже склеєні неявним контрактом.
На практиці ортогональність відчувається так: ви можете пояснити навіщо файл існує одним реченням; тест падає локально, а не «десь у пайплайні»; нова людина знаходить місце правки без археології з п’яти репозиторіїв.
Антиортогональність впізнається за симптомами: «не чіпай цей модуль — він священний»; правка прапорця в адмінці вимагає погодження з трьома командами; один і той самий сенс названий по-різному в трьох сервісах. Тоді спочатку ріжуть зв’язки (адаптери, явні контракти), а не додають ще одну «тимчасову» гілку if.
DRY — про знання, не про заборону копіювання
Класична помилка читання DRY: «ніколи не повторюй рядок». Гант і Томас точніше: небезпечно дублювати знання. Одна політика («клієнт може скасувати замовлення за 24 години») у трьох місцях — фронт, API, звіт — неминуче розійдеться. Два однакові рядки циклу for можуть бути випадковою схожістю і не вартувати спільної абстракції.
Практичний тест: якщо змінюється бізнес-правило, скільки місць доведеться правити і пам’ятати? Якщо більше одного — знання розмазане. Якщо абстракція «спільна утиліта» зв’язує неродинні сенси заради економії рядків — ви купили зв’язаність, а не DRY.
В епоху генерації коду й ШІ-помічників ризик інший: модель охоче розмножить одне й те саме правило в п’яти файлах охайним стилем. Прагматик після генерації питає не «чи компілюється», а «де тепер живе істина».
Розбиті вікна і культура «раз уже так»
Метафора розбитих вікон з міського планування переноситься на код: дрібний видимий безлад знижує поріг наступного безладу. Незакритий TODO, мовчазне ковтання помилки, тест «потім», криве ім’я «як у сусіда» — сигнали команді, що можна.
Прагматик лагодить вікно рано не з перфекціонізму, а з економіки: відсоток за боргом нараховується кожен спринт. Важливо відрізняти косметику заради косметики від вікна, яке вчить команду поганим нормам. Перше можна відкласти; друге — лагодити в тому ж PR, де ви вже в файлі, або виділити явний борг із власником.
Трасувальні кулі проти нескінченного прототипу
Трасувальна куля — тонкий наскрізний зріз, який уже «стріляє» від входу користувача (або події) до спостережуваного результату. Він не зобов’язаний бути гарним. Він зобов’язаний бути реальним: справжній канал даних, справжня межа сервісу, справжня помилка на стику.
Чим це не «прототип заради демо»: прототип часто бреше про інтеграцію («потім підключимо»). Трасувальний зріз бреше менше: ви рано бачите, що контракт API інший, що черга губить повідомлення, що права доступу ламають сценарій. План уточнюється фактами, а не слайдами.
Коли зрізу немає: команда півроку проєктує «ідеальну платформу», а перший користувацький шлях збирають у паніці за два тижні. Прагматик перевертає порядок: спочатку шлях, потім узагальнення — коли знання вже оплачене болем.
Інструменти, автоматизація болю й «збірка в Івана»
Ремісник інвестує в інструменти. Якщо крок болючий і повторюється — автоматизуйте, приберіть або зробіть неможливим помилитися. Ручні ритуали «на проді», секрети в особистому менеджері паролів, збірка лише на одній машині — фабрики інцидентів.
Критерій: біль вартує години скрипта, якщо він щотижневий; вартує дня пайплайна, якщо блокує поставку. Інструмент, який ніхто не запускає, — прикраса резюме. Інструмент, який скорочує час «від червоного до зеленого», — частина продукту команди.
Оцінка, невизначеність і оборотність рішень
Оцінюйте терміни й ризики, але не вдавайте з себе пророка. Де можна — лишайте рішення оборотними: прапорці функцій, адаптери до зовнішньої системи, явні межі модулів, версіонування контрактів. Необоротний вибір (міграція даних без відкату, публічний API без версій, «єдина» СУБД на десять років) робіть рідко й усвідомлено — із записом, чому.
Прагматик окремо поважає вартість з’ясування: іноді дешевше витратити день на експеримент, ніж тиждень на суперечку про гіпотетичне майбутнє.
Комунікація, відповідальність і «кіт у мішку»
Книга постійно повертається до комунікації: специфікація, яку ніхто не читає; «готово» без критерію; мовчання про ризик до демо. Прагматик робить неявне явним: що входить у «готово», що лишається боргом, що зламається при наступній зміні політики. Відповідальність тут — не героїзм нічних чергувань, а раннє попередження й прозорі компроміси.
На практиці
У код-рев’ю
Питайте не лише про стиль. Корисні питання в дусі книги:
- Скільки місць тепер «знає» це бізнес-правило?
- Ця зміна ортогональна чи тягне приховані осі?
- Чи є тут нове розбите вікно (проковтнута помилка,
TODOбез власника)? - Чи можна відкотити рішення без кровавої міграції?
У плануванні фічі
Спочатку трасувальний зріз на один сценарій успіху й одну явну відмову. Потім полірування інтерфейсу, узагальнення, «краса». Якщо зріз не можна провести за дні — ви недооцінили невідоме; ріжте обсяг до того, що можна перевірити.
На інциденті
Шукайте не лише баг, а й вікна поруч: чому моніторинг мовчав, чому повтори були нескінченними, чому конфіг правили руками. Інцидент без ремонту вікна — запрошення до повтору.
У команді з успадкованим кодом
Ортогональність і DRY не з’являються наказом. У моноліті 2012 року почніть із шва: тест навколо небезпечної зміни, адаптер на межі, заборона новому коду повторювати стару зв’язаність. Тут книга добре стикується з Feathers (Working Effectively with Legacy Code) і Fowler (Refactoring) — див. список найкращих книг.
Зі ШІ-помічниками
Генерація прискорює набір тексту й розмноження знання. Прагматичний контур: помічник пропонує, людина перевіряє ортогональність, єдиність джерела істини й оборотність. «Виглядає розумно» — той самий клас ілюзії, що й швидке перечитування чужого коду.
Обмеження та критика
Книга афористична. Легко цитувати гасла («будь прагматиком», «не лишай розбитих вікон») без дисципліни вимірювання й без домовленостей команди. Частина прикладів і інструментів ювілейного видання все одно старіє швидше за ідеї: конкретні редактори, мови, «срібні кулі» екосистеми.
У жорстких корпоративних середовищах «просто зроби ортогонально» впирається в політику володіння, аудит, вендорів і контракти на успадкований код. Тоді прагматизм — у виборі найменш шкідливого наступного кроку, а не в ідеалі з підручника. Прагматизм також не ліцензія на «і так зійде»: якщо коротке рішення створює необоротний борг, це не прагматизм, а відкладений інцидент.
Нарешті, книга слабша там, де потрібні глибокі моделі предметної області або формальні гарантії (DDD, формальні методи, серйозна експлуатаційна стійкість). Для цих зон дивіться сусідні книги серії: Evans, Kleppmann, Nygard.
Кому читати
Варто почати тут, якщо ви junior→middle і втомилися від хаотичних правок «бо так вийшло»; якщо тімлід хоче спільну мову команди про якість змін; якщо команда багато сперечається про фреймворки й мало — про зв’язність знання.
Можна відкласти як першу книгу, якщо ви вже живете безперервною поставкою, жорсткими межами модулів і культурою «зріз раніше слайда» — але навіть тоді текст корисний як словник для онбордингу.
Читайте критично, якщо шукаєте покроковий курс мови чи архітектури підприємства: це книга звичок, не довідник шаблонів і не підручник DDD.

