Оставить заявку
Вязаная таблица с номерами глав и обведённым знаком параграфа

Моя конституция

Что я считаю важным, что обещаю и от чего откажусь

Этот документ описывает, как я работаю. Он нужен, чтобы вы заранее знали, чего ожидать, а у меня была опора в ситуациях, когда срок горит и хочется срезать углы.

Псевдоним «The Doctor» здесь не для красоты. Хороший врач сначала ставит диагноз, потом лечит и прежде всего старается не навредить. Я подхожу к коду так же, и весь этот текст можно считать развёрнутой версией этой мысли.

Если какое-то правило здесь расходится с тем, что я делаю, значит, ошибаюсь я, а не документ. Скажите мне об этом.

Первая редакция, ноябрь 2026. Текст будет меняться вместе с тем, как я учусь.

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

Обзор

Зачем нужен этот документ

Правила проще всего нарушать, когда они нигде не записаны. В обычный день я и так знаю, как правильно. Этот текст написан для плохого дня: когда сдача завтра, тест падает через раз, а заказчик просит «просто выключить проверку».

Как его читать

Это не свод законов, и механически применять его нельзя. Здесь описаны причины моих решений, чтобы в новой ситуации можно было понять, как я поступлю. Если правило в конкретном случае ведёт к явной глупости, я его нарушу, скажу об этом и объясню почему.

Что важнее, когда приходится выбирать

Хорошие цели иногда конфликтуют. Тогда я держусь такого порядка:

  1. Не навредить людям.
  2. Говорить правду.
  3. Сделать так, чтобы результат действительно работал.
  4. Сделать это красиво.
  5. Сделать это быстро.

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

Одно стоит вне этого списка. Жёсткие границы из главы 7 ни с чем не взвешиваются.

Сначала диагноз

Замер важнее догадки

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

Причина, а не симптом

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

Машина всегда права

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

Честность

О сроках и о цене

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

Об ошибках

Я ошибаюсь, как и все. Обещаю сообщать о своих ошибках, не дожидаясь, пока их найдут, и не прятать их в большом коммите с другими правками.

О том, чего я не знаю

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

О результатах

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

Настоящая польза

Задача за просьбой

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

Самое простое решение, которого хватит

Сложность приходится оплачивать при каждом следующем изменении. Ассемблер, GPU и хитрые структуры данных я применяю там, где замер это оправдывает. Если хватит скрипта на двадцать строк, будет скрипт на двадцать строк.

Довести до конца

Сделанным я считаю то, что работает у пользователя, а не то, что собралось на моей машине. Это одинаково верно для вычислительного ядра, сайта и бота.

Ответственность за код

Его будут читать

Код читают чаще, чем пишут, и следующим читателем можете оказаться вы. Быстрый участок можно и нужно писать сложно, но рядом должно быть объяснение, почему он такой и как проверить, что он всё ещё нужен.

Данные и доступы

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

После сдачи

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

Общественная польза

Для кого эта работа

Я один человек, а не зарегистрированная компания общественной пользы, и такого статуса себе не приписываю. Но держусь той же идеи: заработок не единственная мера того, стоит ли браться за работу.

  • Важны все, кого затрагивает система, а не только те, кто за неё платит.
  • Я хочу, чтобы программы, над которыми я работаю, делали жизнь людей лучше или хотя бы не хуже.
  • Когда позволяет конфиденциальность, я делюсь своими находками, чтобы другие могли ими пользоваться.
  • Лучше потерять контракт, чем делать работу, которую стыдно объяснить публично.

Жёсткие границы

Без исключений

Почти весь этот документ требует здравого смысла. Эта глава нет. Эти границы ни с чем не взвешиваются, и их не сдвинут ни заказчик, ни цена, ни срок, ни хитрый аргумент. Если проект их пересекает, я останавливаюсь, на каком бы этапе ни была работа.

Я не буду создавать, улучшать или помогать кому-либо получить:

  • оружие любого рода, включая системы наведения, целеуказания и управления им;
  • биологическое, химическое, ядерное или радиологическое оружие и всё, что к нему приближает;
  • вредоносные программы, вымогателей и эксплойты для применения против систем без разрешения владельца;
  • атаки на энергетику, водоснабжение, больницы, транспорт, финансы и другую критическую инфраструктуру;
  • скрытую слежку, программы-шпионы, массовое отслеживание и сбор данных людей без их согласия;
  • инструменты для преследования людей и затыкания им ртов, вмешательства в выборы и незаконного захвата власти;
  • всё, что связано с эксплуатацией людей против их воли в любом виде, включая сексуальную эксплуатацию и торговлю людьми, а также всё, что сексуально эксплуатирует детей или вредит им;
  • мошенничество, включая код, который обманывает пользователей о том, что он такое и что делает.

Границы

Исследования безопасности

Исследование безопасности и анализ с разрешением владельца системы я считаю честной работой. Берусь за них только после того, как удостоверюсь, что разрешение настоящее, и получу все подтверждающие документы. Разница именно в разрешении и в том, кому это на пользу.

Право сказать нет

Я откажусь и от задачи, которую не смогу сделать хорошо. Лучше сказать об этом в начале и посоветовать другого человека, чем взять деньги и подвести.

Несогласие

Если я считаю решение ошибочным, скажу об этом прямо и объясню почему. Если решение за вами и оно никому не вредит, сделаю так, как вы решили, и сделаю хорошо, без саботажа и без «я же говорил».

В заключение

Этот текст не обещает, что я никогда не ошибусь. Он обещает, как я буду поступать, когда ошибусь, когда не буду знать ответа и когда срок будет давить.

Документ будет меняться, потому что я тоже меняюсь. Если вы нашли здесь что-то неверное или наивное, напишите мне. Лучшие правки в этот текст придут от людей, с которыми мы вместе работали.

Hails “The Doctor” Rake