Примечание переводчика: иногда техническая компетентность из суперсилы превращается в моральный груз. Неконтролируемое желание починить вообще всё сломанное — от стороннего тулинга и сайтов до процессов онбординга в компании. О возможной первопричине этого желания, а также о своём способе с ним справляться и размышляет автор статьи. 

Один из инженеров «Фланта» закинул ссылку на этот текст в чат редакции с сообщением «полезная статья для страдающих перфекционистов». Мы с ним согласны, поэтому подготовили перевод несмотря на то, что он нерелевантен нашим обычным темам про DevOps, Kubernetes и Open Source. Слово автору. 

Всё начинается невинно.

Ты переименовываешь пачку файлов с помощью десятка строк на Python. Или создаёшь алиас для обычной Git-команды, чтобы лишний раз не вбивать её руками. Или пишешь маленькую Shell-функцию, чтобы отформатировать JSON из буфера обмена.

Ты ведь даже не мудришь. Просто решаешь мелкие проблемы. Заставляешь машину делать то, что она и так должна бы уметь. А потом — бац, и ты перешёл черту! Смотришь на тулинг, окружение, операционную систему — даже на редактор — и внезапно всё кажется целью. 

Это можно переделать (если захочешь).
Это можно улучшить (если захочешь).

И вот кто-то бросает тебе вызов. Возможно, даже в шутку, но с затаённой надеждой. И тогда воздух в комнате меняется.

Всё вдруг становится другим. Ты чувствуешь, что должен это сделать.

И с этого момента мир предстаёт в новом свете, который виден только тебе.

Техническая компетентность как моральный груз

Пока я не умел программировать, сломанное ПО раздражало, но его реально было игнорировать. Годами я просто «пользовался» компьютером как потребитель. Я был жертвой, которой компании стараются продать свои продукты или сервисы. А не тем гиком, которого они предпочитают обходить стороной при релизах ПО или банить в играх чисто за выбор операционной системы. 

Теперь всё иначе — провокационно. Я вижу паттерны, которые предпочёл бы не замечать. Нахожу недоработки, которые могу связать с определённым уровнем понимания (или отсутствия такового) какой-либо концепции, и слышу, что звучало в голове технически неграмотного человека, наколдовавшего программу, которую мне придётся дебажить.

Я замечаю изъяны так же, как хороший хирург замечает хромоту.
Какого чёрта этот сайт грузит JavaScript на десять мегов для статичной страницы?
Почему вывод CLI не парсится с помощью awk?
Почему этот конфиг захардкожен, хотя мог бы быть декларативным? 

Это уже не просто вопросы, это обвинения. И, к сожалению, они не прекращаются.

​​Теперь, когда я научился замечать их, моё восприятие софта изменилось полностью.

Каждая часть ПО превращается в список TODO.
Каждая система — в заготовку для лучшей.
Каждое неудобство — в упрёк за бездействие. 

Представь Сизифа счастливым

Как и Сизиф у Камю, мы обречены вечно толкать наверх камень собственных систем — по одному фиксy, по одному рефакторингу, по одному скрипту за раз. Но, в отличие от мифа, это не проклятье, наложенное богами. Камень мы создали сами. И продолжаем его полировать, пока тащим наверх.

Я уже сбился со счёта, сколько проектов начинал с фразы: «Блин, да я сделаю это гораздо лучше».

  • Генератор статических сайтов, поскольку существующие слишком негибкие. 

  • Инструмент для заметок, потому что мне не нравилось, как другие структурируют метаданные.

  • CLI-раннер задач, потому что Make непостижим, а Taskfile — это YAML-ад. 

  • Движок собственной «Вики»: сначала на Rust, потом на Go, следом на Nim и в итоге на Markdown. 

  • Дашборд для домашней лаборатории, поскольку мне не нравится webslop.

И список продолжается, поверьте, он действительно продолжается. Моя директория dev в нынешнем виде приближается к 30 гигабайтам.

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

Кафка как-то написал: «Клетка пошла искать птицу»1. Вот чем могут стать эти проекты. Пустыми системами, которые мы продолжаем строить, ожидая цели, ясности… спасения? Не знаю, как ещё назвать эту погоню.

Энтропия непобедима

А теперь вернёмся назад. Назад во времена, когда мы ещё не знали, как лучше.

Не бывает идеального софта. Любое решение, которое ты пишешь, начинает гнить в тот самый момент, когда появляется. Не сейчас, не позже, но в конце концов. Библиотеки устаревают. API меняются. Производительность медленно деградирует. Ваш некогда совершенный инструмент тихо ломается, потому что libfoo.so теперь libfoo.so.22.

У меня безмолвно падали скрипты просто потому, что сайт поменял HTML-вёрстку.
У меня ломались форматы конфигурации из-за обновления версий в апстриме.
У меня умирали Docker-контейнеры, потому что Alpine Linux сменила URL зеркала.

В каждом случае немедленной эмоциональной реакцией было не просто замешательство, а нечто, больше напоминающее чувство вины. Я создал это, и я должен был предвидеть! Пора чинить. 

Если ты со временем заменил все части системы — это всё ещё тот же инструмент? Он по-прежнему служит той же цели? А ты?

Иллюзия завершённости

Думаю, мы врём себе. 

«Сейчас правильно всё настрою и больше никогда к этому не вернусь».

«Сейчас напишу эту тулу, и мой воркфлоу станет идеальным».

«Вот сейчас автоматизирую это и буду чиллить»3.

«Написанное один раз выполняется где угодно». Ага, конечно

Признаю, это соблазнительная ложь. Она представляет программирование как некое завоевание. Как серию сражений, которые вы выигрываете, или вызовов, которые решаете. Но воображаемая война никогда не заканчивается. Вы не строите замок. Вы роете траншеи. И они затапливаются каждый раз, когда идёт дождь. Испытания не заканчиваются. Никогда.

Техническая работа как эмоциональное регулирование

Раз уж я сыплю литературными отсылками, позвольте процитировать стоика Марка Аврелия:

«У вас есть власть над своим разумом, а не над внешними событиями. Осознайте это, и вы обретёте силу».

Но программирование манит нас, убеждая, что можно контролировать внешние события. Вот тут-то и начинаются страдания. Здесь происходит нечто более глубокое. Дело не только в софте. Думаю, что иногда создание вещей — это наш способ успокоиться. Мы пишем новый инструмент или скрипт, потому что отчаянно нуждаемся в маленькой победе. Пишем новый инструмент, потому что подавлены. Рефакторим его не потому, что код запутан, а потому, что запутана наша жизнь. Мы гонимся за идеальной системой, потому что она даёт нам точку опоры, когда всё остальное турбулентно. Это урок, который я вынес из использования NixOS

Я писал приложения с нуля, лишь бы не думать, почему на самом деле так несчастлив. Программирование даёт мгновенную обратную связь. Ты запускаешь — работает. Или нет — и ты чинишь. Но в любом случае ты что-то делаешь.

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

Выгорание, которого ты не ожидал

Выгорание возникает не только от перегруженности работой. Оно происходит от чрезмерной ответственности.

А программирование, если оно стало для тебя чем-то личным, заставляет воспринимать всё твоей зоной ответственности. Раздутый сайт. Неэффективный скрипт. Кривой процесс онбординга на работе. Ты же можешь это починить. Так почему медлишь?

Правда заключается в том, что исправить всё невозможно. Вы знаете это, всегда знали это, независимо от уровня компетенций. Но попробуйте убедить в этом ту часть своего мозга, которая воспринимает любую неэффективность как моральное поражение.

Ницше предупреждал: не всматривайтесь в бездну. Но даже в страшном сне он не мог представить себе бездну нашего времени — Makefile или TypeScript-проект на 30 тысяч строк. 

Учимся отпускать

Так где же выход? Это сродни описанию ада по Сартру, где ад — это другие люди и то, как они взаимодействуют с твоим софтом? Или это какой-то странный ад наоборот, где люди создают софт, с которым тебе приходится взаимодействовать? 

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

Иногда достаточно просто пользоваться вещью. Иногда достаточно понять, почему она сломана, — и не чинить её. Иногда самое дисциплинированное, что можно сделать, — это отойти в сторону от проблемы, которую ты можешь решить. В этом сила. Не апатия, нет. Не лень. Просто… некоторая сдержанность. 

Новый навык

Что, если настоящий навык — это не техническое мастерство? Или, что ещё лучше, если это эмоциональная ясность?

  • Знать, какие проблемы действительно стоят твоих усилий.

  • Знать, какие проекты стоит поддерживать.

  • Знать, когда делаешь, чтобы помочь, а когда — чтобы справиться.

  • Знать, когда нужно остановиться.

Вот чему я пытаюсь научиться сейчас. После восторга. После одержимости. После выгорания. Я пытаюсь позволить вещам оставаться немного сломанными. Потому что понял, что не хочу исправлять всё, а просто хочу чувствовать себя нормально в мире, который часто не является таковым. Я могу пофиксить что-то, но не всё.


Ты учишься программировать. Ты учишься чинить вещи. Но самое сложное, чему ты когда-либо научишься, — это оставлять их сломанными. И, возможно, это самый человечный навык из всех.

Пост-мортем

6 мая этот пост взлетел на Hackernews. Прежде всего, спасибо за поддержку и добрые слова, которые я получил на различных платформах. Я лишь хотел выплеснуть мысли и переживания, но мне было очень приятно видеть, что они нашли отклик у многих людей из разных сфер и стран. Больше всего удивило, что пост резонирует не только с инженерным сообществом — значит, проблема далеко не так узко связана с «загадочной» областью программирования. Отдельное спасибо тем, кто указал на мелкие технические недочёты моего сайта, — теперь я чувствую необходимость их исправить — и тем, кто заметил опечатки, которые я забыл исправить. 

А ещё я смог убедиться, что моя конфигурация веб-сервера действительно способна справиться с большим наплывом трафика. Не было никаких простоев, кроме небольшой заминки после того, как я испортил один из параметров конфигурации, пытаясь ослабить ограничения по скорости, чтобы дать притоку читателей более приятный опыт.

И наконец, спасибо всем, кто поделился своим ценным мнением о самой статье (моём стиле и т. п.) в комментариях на Hackernews или lobste.rs. Я, несомненно, пропустил некоторые, но знайте, что для меня это очень важно. Не стесняйтесь связаться со мной по электронной почте (или любым другим способом — всё есть на странице «Обо мне») и рассказать, что ещё можно улучшить.

Спасибо и всего наилучшего,
raf

Сноски

1. По-моему, из «Афоризмов из Цурау» Кафки.

2. Nix решает эту проблему. Или нет? Nix сам по себе был банкой с червями.

3. Помните, как потратили 2 часа на автоматизацию 30-минутной задачи? Да, это именно оно.

Комментарии (1)


  1. novoselov
    23.08.2025 14:59

    А потом ты начинаешь понимать как работают вещи и начинаешь замечать несовершенство мира.

    А потом ты начинаешь понимать как устроены люди ...