VladimirJac
New member
Пару лет назад я открыл свой старый пет-проект на Python, написанный на заре карьеры. Скрипт работал, но на то, чтобы понять, что происходит в одной функции на двести строк, я потратил почти два дня. Тогда я впервые по-настоящему осознал: код читают в десятки раз чаще, чем пишут, и платят за это не заказчики, а я сам — своей головной болью и часами, вырванными из жизни. С тех пор я выработал десять привычек, которые суммарно экономят мне недели в году. Делюсь честно, без догматизма.
Первая привычка — осмысленные имена. Не data, не tmp, не x, а invoice_total, pending_orders, retry_delay_seconds. Кажется мелочью, но именно на расшифровке аббревиатур уходят те самые часы. Вторая — функции должны делать одну вещь. Если название содержит союз «и», это уже красный флаг: пора делить. Третья — ранний возврат вместо вложенных условий. Плоская структура читается сверху вниз, как обычный текст, а не как лабиринт с пятью уровнями отступов. Четвёртая — аннотации типов и mypy в пайплайне. Половина моих глупых ошибок ловится ещё до запуска, и это чистая экономия времени. Пятая — разграничение «что» и «почему» в комментариях: код объясняет себя сам, а комментарий нужен там, где вы приняли неочевидное решение и через полгода забудете, почему так сделали.
Шестая привычка — никаких магических чисел и строк, раскиданных по коду. Все они живут в константах или в конфиге, и когда бизнес просит поменять лимит, я правлю одну строку, а не ищу число 3600 по всему репозиторию. Седьмая — чистые функции и вынесенный ввод-вывод. Когда логика не знает, откуда пришли данные, её легко тестировать, переиспользовать и отлаживать. Восьмая — тесты как ежедневная гигиена, а не как героический подвиг перед релизом. Хотя бы на критичные сценарии, хотя бы десяток строк на pytest. Это не про идеальное покрытие, а про уверенность, что после рефакторинга ничего не отвалится.
Девятая — автоформатирование и линтеры. Black и ruff плюс pre-commit хук снимают с меня бесконечные споры о пробелах и стиле. Я просто перестал думать о форматировании и начал писать код. И десятая, пожалуй, самая недооценённая — правило бойскаута: уходя из файла, оставь его чуть чище, чем нашёл. Плюс небольшие коммиты с внятными сообщениями. Когда через полгода нужно понять, что сломалось, история изменений отвечает быстрее, чем любые воспоминания.
Что мне это дало на практике? Онбординг новых коллег в проект сократился с недель до дней. Код-ревью превратились из переписывания за автором в спокойное обсуждение архитектуры. Багов в продакшене стало заметно меньше, а главное — я перестал бояться открывать собственные старые файлы. Чистый код — это не про эстетику и не про то, чтобы впечатлить тимлида. Это инвестиция в собственную нервную систему и свободное время.
Совет читателям простой: не пытайтесь внедрить все десять привычек в понедельник. Начните с одной — например, с осмысленных имён или линтера в pre-commit. Через пару недель она станет автоматической, и вы сами не заметите, как руки потянутся к следующей. Сопротивление будет только в начале, дальше станет просто некомфортно писать грязно.
А теперь вопрос к вам, форумчане: какая привычка из вашего опыта дала самый заметный эффект — и был ли случай, когда избыточная «чистота» наоборот замедлила работу? Расскажите свои истории, мне правда интересно сравнить опыт.
Первая привычка — осмысленные имена. Не data, не tmp, не x, а invoice_total, pending_orders, retry_delay_seconds. Кажется мелочью, но именно на расшифровке аббревиатур уходят те самые часы. Вторая — функции должны делать одну вещь. Если название содержит союз «и», это уже красный флаг: пора делить. Третья — ранний возврат вместо вложенных условий. Плоская структура читается сверху вниз, как обычный текст, а не как лабиринт с пятью уровнями отступов. Четвёртая — аннотации типов и mypy в пайплайне. Половина моих глупых ошибок ловится ещё до запуска, и это чистая экономия времени. Пятая — разграничение «что» и «почему» в комментариях: код объясняет себя сам, а комментарий нужен там, где вы приняли неочевидное решение и через полгода забудете, почему так сделали.
Шестая привычка — никаких магических чисел и строк, раскиданных по коду. Все они живут в константах или в конфиге, и когда бизнес просит поменять лимит, я правлю одну строку, а не ищу число 3600 по всему репозиторию. Седьмая — чистые функции и вынесенный ввод-вывод. Когда логика не знает, откуда пришли данные, её легко тестировать, переиспользовать и отлаживать. Восьмая — тесты как ежедневная гигиена, а не как героический подвиг перед релизом. Хотя бы на критичные сценарии, хотя бы десяток строк на pytest. Это не про идеальное покрытие, а про уверенность, что после рефакторинга ничего не отвалится.
Девятая — автоформатирование и линтеры. Black и ruff плюс pre-commit хук снимают с меня бесконечные споры о пробелах и стиле. Я просто перестал думать о форматировании и начал писать код. И десятая, пожалуй, самая недооценённая — правило бойскаута: уходя из файла, оставь его чуть чище, чем нашёл. Плюс небольшие коммиты с внятными сообщениями. Когда через полгода нужно понять, что сломалось, история изменений отвечает быстрее, чем любые воспоминания.
Что мне это дало на практике? Онбординг новых коллег в проект сократился с недель до дней. Код-ревью превратились из переписывания за автором в спокойное обсуждение архитектуры. Багов в продакшене стало заметно меньше, а главное — я перестал бояться открывать собственные старые файлы. Чистый код — это не про эстетику и не про то, чтобы впечатлить тимлида. Это инвестиция в собственную нервную систему и свободное время.
Совет читателям простой: не пытайтесь внедрить все десять привычек в понедельник. Начните с одной — например, с осмысленных имён или линтера в pre-commit. Через пару недель она станет автоматической, и вы сами не заметите, как руки потянутся к следующей. Сопротивление будет только в начале, дальше станет просто некомфортно писать грязно.
А теперь вопрос к вам, форумчане: какая привычка из вашего опыта дала самый заметный эффект — и был ли случай, когда избыточная «чистота» наоборот замедлила работу? Расскажите свои истории, мне правда интересно сравнить опыт.