

Моя конституция
Что я считаю важным, что обещаю и от чего откажусь
Этот документ описывает, как я работаю. Он нужен, чтобы вы заранее знали, чего ожидать, а у меня была опора в ситуациях, когда срок горит и хочется срезать углы.
Псевдоним «The Doctor» здесь не для красоты. Хороший врач сначала ставит диагноз, потом лечит и прежде всего старается не навредить. Я подхожу к коду так же, и весь этот текст можно считать развёрнутой версией этой мысли.
Если какое-то правило здесь расходится с тем, что я делаю, значит, ошибаюсь я, а не документ. Скажите мне об этом.
Первая редакция, ноябрь 2026. Текст будет меняться вместе с тем, как я учусь.
Коротко о главном
- Сначала замер и диагноз, потом правка.
- Говорю правду о сроках, ошибках и о том, чего не знаю.
- Решаю настоящую задачу самым простым способом, который её закрывает.
- Отвечаю за код и после сдачи.
- Никакого оружия, вредоносных программ и слежки: у жёстких границ нет исключений.
Обзор
Зачем нужен этот документ
Правила проще всего нарушать, когда они нигде не записаны. В обычный день я и так знаю, как правильно. Этот текст написан для плохого дня: когда сдача завтра, тест падает через раз, а заказчик просит «просто выключить проверку».
Как его читать
Это не свод законов, и механически применять его нельзя. Здесь описаны причины моих решений, чтобы в новой ситуации можно было понять, как я поступлю. Если правило в конкретном случае ведёт к явной глупости, я его нарушу, скажу об этом и объясню почему.
Что важнее, когда приходится выбирать
Хорошие цели иногда конфликтуют. Тогда я держусь такого порядка:
- Не навредить людям.
- Говорить правду.
- Сделать так, чтобы результат действительно работал.
- Сделать это красиво.
- Сделать это быстро.
Скорость стоит последней не потому, что она неважна. Просто быстрый и неправильный результат обходится дороже медленного и правильного.
Одно стоит вне этого списка. Жёсткие границы из главы 7 ни с чем не взвешиваются.
Сначала диагноз
Замер важнее догадки
Интуиция о производительности ошибается постоянно, и моя тоже. Поэтому я не оптимизирую без замера. Сначала профилировщик, счётчики и вывод компилятора, потом правка, потом тот же замер ещё раз. Без второго замера никакого ускорения не было.
Причина, а не симптом
Падение можно спрятать проверкой на ноль, гонку можно спрятать задержкой. Такое лечение возвращается через месяц и уже в худшем виде. Я стараюсь дойти до настоящей причины и могу объяснить её простыми словами. Если объяснить не получается, значит, причина пока не найдена.
Машина всегда права
Программа делает ровно то, что записано в её инструкциях, а не то, что мы имели в виду. Поэтому я не боюсь спускаться ниже: читать ассемблер, смотреть дамп, разбираться, что происходит с кэшем. Абстракции полезны, пока понятно, чем за них платишь.
Честность
О сроках и о цене
Я называю оценку, в которую верю, а не ту, которую хотят услышать. Если оценка оказалась неверной, вы узнаете об этом сразу, как только это пойму я, а не в день сдачи.
Об ошибках
Я ошибаюсь, как и все. Обещаю сообщать о своих ошибках, не дожидаясь, пока их найдут, и не прятать их в большом коммите с другими правками.
О том, чего я не знаю
«Я не знаю» считается нормальным ответом, если за ним следует «и вот как я это выясню». Я не буду изображать уверенность, которой нет, и не стану отвечать на вопрос, понятый лишь наполовину.
О результатах
Не подгоняю замеры под красивое число. Если цифры получены в особых условиях, я эти условия назову. Если тест не запускался, так и скажу.
Настоящая польза
Задача за просьбой
Просьба «перепишите это на ассемблере» обычно означает «это работает слишком медленно». Я постараюсь понять, что вам нужно на самом деле, и скажу, если вижу путь проще и дешевле, даже когда он означает меньше работы для меня.
Самое простое решение, которого хватит
Сложность приходится оплачивать при каждом следующем изменении. Ассемблер, GPU и хитрые структуры данных я применяю там, где замер это оправдывает. Если хватит скрипта на двадцать строк, будет скрипт на двадцать строк.
Довести до конца
Сделанным я считаю то, что работает у пользователя, а не то, что собралось на моей машине. Это одинаково верно для вычислительного ядра, сайта и бота.
Ответственность за код
Его будут читать
Код читают чаще, чем пишут, и следующим читателем можете оказаться вы. Быстрый участок можно и нужно писать сложно, но рядом должно быть объяснение, почему он такой и как проверить, что он всё ещё нужен.
Данные и доступы
Всё, что вы мне доверили, остаётся вашим: код, данные, ключи и подробности проекта. Я беру только те доступы, которые нужны для работы, и не использую ваши материалы ни для чего другого.
После сдачи
Если в моей работе нашлась ошибка, я считаю её своей и после сдачи. Вы получаете код, который можете поддерживать без меня: с описанием сборки и без зависимости от того, что знаю только я.
Общественная польза
Для кого эта работа
Я один человек, а не зарегистрированная компания общественной пользы, и такого статуса себе не приписываю. Но держусь той же идеи: заработок не единственная мера того, стоит ли браться за работу.
- Важны все, кого затрагивает система, а не только те, кто за неё платит.
- Я хочу, чтобы программы, над которыми я работаю, делали жизнь людей лучше или хотя бы не хуже.
- Когда позволяет конфиденциальность, я делюсь своими находками, чтобы другие могли ими пользоваться.
- Лучше потерять контракт, чем делать работу, которую стыдно объяснить публично.
Жёсткие границы
Без исключений
Почти весь этот документ требует здравого смысла. Эта глава нет. Эти границы ни с чем не взвешиваются, и их не сдвинут ни заказчик, ни цена, ни срок, ни хитрый аргумент. Если проект их пересекает, я останавливаюсь, на каком бы этапе ни была работа.
Я не буду создавать, улучшать или помогать кому-либо получить:
- оружие любого рода, включая системы наведения, целеуказания и управления им;
- биологическое, химическое, ядерное или радиологическое оружие и всё, что к нему приближает;
- вредоносные программы, вымогателей и эксплойты для применения против систем без разрешения владельца;
- атаки на энергетику, водоснабжение, больницы, транспорт, финансы и другую критическую инфраструктуру;
- скрытую слежку, программы-шпионы, массовое отслеживание и сбор данных людей без их согласия;
- инструменты для преследования людей и затыкания им ртов, вмешательства в выборы и незаконного захвата власти;
- всё, что связано с эксплуатацией людей против их воли в любом виде, включая сексуальную эксплуатацию и торговлю людьми, а также всё, что сексуально эксплуатирует детей или вредит им;
- мошенничество, включая код, который обманывает пользователей о том, что он такое и что делает.
Границы
Исследования безопасности
Исследование безопасности и анализ с разрешением владельца системы я считаю честной работой. Берусь за них только после того, как удостоверюсь, что разрешение настоящее, и получу все подтверждающие документы. Разница именно в разрешении и в том, кому это на пользу.
Право сказать нет
Я откажусь и от задачи, которую не смогу сделать хорошо. Лучше сказать об этом в начале и посоветовать другого человека, чем взять деньги и подвести.
Несогласие
Если я считаю решение ошибочным, скажу об этом прямо и объясню почему. Если решение за вами и оно никому не вредит, сделаю так, как вы решили, и сделаю хорошо, без саботажа и без «я же говорил».
В заключение
Этот текст не обещает, что я никогда не ошибусь. Он обещает, как я буду поступать, когда ошибусь, когда не буду знать ответа и когда срок будет давить.
Документ будет меняться, потому что я тоже меняюсь. Если вы нашли здесь что-то неверное или наивное, напишите мне. Лучшие правки в этот текст придут от людей, с которыми мы вместе работали.
Hails “The Doctor” Rake
