Недавно я посмотрел запись одного выступления, и она особенно долго не выходила у меня из головы. Это был доклад на Prodacity 2026, а читал его Кент Бек (Kent Beck) — создатель Extreme Programming, благодаря которому о TDD узнал весь мир. Доклад назывался Software Engineering in the Age of AI, и речь в нём шла о том, что значит хорошо делать софт сейчас, когда значительную часть кода пишет ИИ. Длится он чуть больше 52 минут, и сильнее всего меня в нём зацепили два слова и короткая история об одном виолончелисте.
Кент Бек рассматривал разработку софта по двум осям: features и futures. Первая — это фичи, которые мы реализуем. Вторая — варианты того, как этот софт можно будет изменить в будущем, иначе говоря, простор для изменений (optionality). Он объяснял, что проект стартует из состояния, где нет ни одной фичи, зато возможности бесконечны, и с каждой реализованной фичей futures сокращаются. В итоге, говорил он, если только и делать, что наращивать фичи, получится мёртвый софт, в котором трудно тронуть хоть что-то, а значение futures равно нулю.
В каком-то смысле я и сам как инженер давно прочувствовал на практике, насколько важен рефакторинг. Если во время работы над фичей что-то можно было улучшить, я параллельно делал рефакторинг. А если до следующей фичи оставалось немного свободного времени, считал и его временем для рефакторинга. Но в какой-то момент я начал заказывать у ИИ код целиком, и мне пришло в голову, что с тех пор я упускаю это «время для рефакторинга». Я поймал себя на том, что, когда делаю фичи, продумываю разную обвязку (механизмы, которые корректируют работу ИИ: тесты, линтер, хуки, промпты с ограничениями и проверяющие агенты), а «отдельной работы над рефакторингом» у меня нет.
Очень откликнулась мне и следующая мысль Кента Бека — о том, что «раньше сотне человек нужно было десять лет, чтобы дойти до состояния, где futures равны нулю, а теперь благодаря ИИ один человек за неделю может устроить полный бардак». Что именно у меня произошло, подробно рассказать здесь не могу. Но всё время, пока я слушал доклад, ошибки, на которых я спотыкался по ходу, одна за другой накладывались на график Кента Бека. Если оглянуться назад, я, кажется, напрочь забыл, как важен cool down между фичами.
Объясняя, в чём альтернатива, Кент Бек вспомнил историю о виолончелисте Пабло Казальсе (Pablo Casals). Он рассказал, что услышал её в молодости, когда изучал классическую гитару на музыкальном факультете. Виолончель требует от исполнителя много физических сил, и, говорят, в одной из пьес, которые играл Казальс, был фрагмент, где шестнадцатые ноты идут без конца. Когда кто-то спросил его, не устаёт ли он играть все эти шестнадцатые, Казальс ответил: «Нет, я отдыхаю между нотами». На самом деле, по словам Бека, Казальс никогда такого не говорил: история выдумана. Но она настолько хороша, добавил Кент Бек, что не рассказать её он не может.
Пусть это и выдумка, но, слушая историю об отдыхе между нотами, я лишний раз подумал, что и в быстром темпе работы с ИИ нужно «время выровнять дыхание и приготовить руки, чтобы точно взять следующую ноту», а по сути — «время для наведения порядка». То самое «время для рефакторинга», о котором я писал выше, и было этим промежутком между нотами. То, что гибкий и при этом расширяемый софт получается, только если между фичами наводить порядок, — азы, которые знает любой разработчик. Но, кажется, именно сейчас, когда фичи сыплются одна за другой, к этим азам пора вернуться. Как Казальс отдыхал даже среди бесконечных шестнадцатых, так и между features, которые делаются в быстром темпе, наверное, нужно выделять время, чтобы навести порядок: сделать рефакторинг и почистить тест-кейсы. Сравнение, которое привёл Кент Бек, мне тоже сразу показалось наглядным: «Пока режешь, нож не вытрешь, но вытирать его надо».
Следы того, что я бежал вперёд, не наводя порядка, нашлись не только в коде. Они в целости сохранились и на моём макбуке. Когда долгий аврал закончился и выдалось немного свободного времени, стало видно то, что замечаешь, только когда отрываешься от дел. Повсюду скопились git worktree и контейнеры с БД, которые я так и не успел привести в порядок, а свободное место на диске подходило к концу. Если бы я так и нырнул в следующую задачу, в какой-то момент свободное место дошло бы до нуля и всё могло бы встать. Только когда я одно за другим удалил всё, что накопилось, у макбука снова появился запас для следующей работы. Выходит, futures моего макбука тоже немного вернулись.
Недавно мы всей семьёй съездили на остров Чеджу. Больше всего из этой поездки запомнился рассвет, который мы встретили в Согвипхо. Было очень хорошо встать рано утром и смотреть на восход. Облака-барашки, затянувшие всё небо, окрашивались в оранжевый, начиная снизу, а из-за силуэтов пальм понемногу выглядывало солнце.
Удивительно, но после возвращения атмосфера по утрам у нас дома моментально изменилась. Мы и не заметили, как всей семьёй вошли в ритм: встаём рано утром и начинаем день. И я чувствую, что от этого понемногу крепнет и здоровье. Получается, та поездка и была для нашей семьи наведением порядка между нотами. Если так посмотреть, то и жизнь, похоже, не так уж сильно отличается от софта. Будь то работа или забота о ребёнке, дни несутся один за другим к следующей feature, и если между ними не наводить порядок, не сгорают ли понемногу и futures жизни?