Понимание Собственного Кода

Перевод статьи Оли Бендерского - Понимание собственного кода.

Недавно я наткнулся на утверждение, которое меня очень озадачило.

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

Гордился ли он тем, что пишет столько кода каждый день? Кто готов платить ему просто за написание кода? Позвольте мне немного прояснить свое мнение по этому поводу: неспособность понять код, написанный неделю или год назад, абсолютно неприемлема для профессионального программиста.

Раз уж я это сказал, позвольте мне объяснить.

Имею серьезный опыт программирования около 15 лет. И в какой-то момент (довольно рано) я освоил некоторые практики, которые использую до сих пор.

Я до сих пор легко понимаю код, который написал год назад, два года назад и даже двенадцать лет назад. Код написан на разных языках и охватывает разные области.

Алгоритмы, парсеры, веб-приложения, встроенные контроллеры, скрипты, компоновщики и многое другое в этом роде.

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

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

Читабельно для вас – читабельно для других.

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

И это совсем не то, чем стоит гордиться.

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

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

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

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

Очевидно, что код, который вы не понимаете, не может стать частью такого инструмента.

Было бы неправильно закончить этот пост, даже не попытавшись объяснить, как можно достичь такого подвига.

Честно говоря, это не так-то просто выразить словами, но я все равно попробую.

Я уверен, что писатели (и, возможно, представители других творческих профессий) используют тот же трюк.

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

Прочтите и перечитайте несколько раз.

Постарайтесь дистанцироваться от понимания проблемы, представляя, что кто-то читает этот код без полезного контекста, который уже есть у вас в голове, потому что вы пишете этот код. Поймет ли этот человек написанное? Если нет, то почему? Не стесняйтесь использовать приемы «читаемого кода» из таких книг, как «Code Complete», пока не будете уверены, что код понятен.

И как только вы будете довольны результатом, прочитайте его еще раз.

И снова через несколько дней.

Этот процесс напоминает мне о написании более глубоких исследовательских статей для этого блога.

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

Это часто справедливо для кода, который я пишу.

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

Поскольку я не одарен предыдущим, я придерживаюсь второго.

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

Улучшение качества кода — одна из тонких побочных задач нашей профессии.

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

Теги: #перевод #код #программирование

Вместе с данным постом часто просматривают: