Что вообще означает «Чистый код»?

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

«Я думаю, что вы имеете в виду «чистый» код, то есть существует некоторая форма или вид кода, который является «идеальным», «нетронутым»… «чистым»», — сказал он.

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

Нет ничего более далекого от правды.

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

Разговор закончился, и мы пошли дальше.

Что ж, он пошел дальше.

Я довольно часто вспоминал этот разговор, поскольку он преподал мне очень ценный урок.

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

Относительная аналогия

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

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

Эффективность и коммуникация умирают, прогресс останавливается, проект терпит неудачу.

Когда я учился в старшей школе, каждому ученику требовалось определенное количество кредитов по определенным предметам, чтобы закончить учебу. Предметом, который требовал больше всего баллов (5, если я правильно помню), был английский язык.

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

Однако с кодом многие из нас в отрасли готовы мириться с такими же низкими стандартами.

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

В коде опечатка может означать запутанное имя переменной или функции. Предложение с продолжением может означать длинную строку или большую функцию, компонент, класс или файл. Грамматические ошибки могут означать сложные, трудные для понимания логические выражения, в которых для определенных пограничных случаев есть скрытые ошибки. Код, не относящийся к теме, может означать код, который делает несколько вещей (несет более одной ответственности). Отсутствие структуры может означать плохое разделение задач, большие каталоги с множеством файлов, которые на самом деле не связаны друг с другом, и так далее.

Поэтому, говоря о «чистом коде», мы имеем в виду код, который

  • Легко читать и понимать
  • Четко сообщает о своем намерении
  • Легко изменить
  • Можно использовать повторно, когда представится возможность

Остерегайтесь ловушки качества/времени

«Чистый код звучит великолепно, но давайте смотреть правде в глаза, его приятно иметь. У нас просто нет времени и/или бюджета». — оправдание, данное снова и снова за невнимательность.

Когда вы покупаете машину, вы ожидаете, что дверь однажды отвалится, когда вы попытаетесь ее открыть?

Покупая холодильник, вы ожидаете, что он перестанет периодически охлаждать продукты?

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

Конечно, нет.

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

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

«Мы просто исправим патч позже», — везде руководители проектов.

Я думаю, что это серьезная ошибка и напрашивается на неприятности. Нередки случаи, когда ошибки программирования стоят жизни. Катастрофа Boeing 737 Max — один из примеров. Чем больше мы внедряем технологии в нашу жизнь, тем больше мы зависим от программного обеспечения. Мы ежедневно взаимодействуем с банковскими системами, доверяя свои деньги компьютерному коду. Скоро беспилотные автомобили станут обычным явлением. Инцидентов, подобных 737 Max, будет больше. Когда это произойдет, в дело вмешаются правительства, как они и должны делать, и начнут регулировать отрасль способами, которые, как бы они ни были благонамерены, скорее всего, создадут столько же проблем, сколько и решат.

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

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

Чистый код — это эффективный код. Эффективный код экономит время и деньги.

Если чистый код — это код, который легко понять, ясно сообщает о своем назначении, легко модифицируется и может быть повторно использован при появлении возможности, то «беспорядочный» код — это код, который трудно понять, неясно сообщает о намерениях, сложен для понимания. изменять и делает повторное использование кода невозможным.

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

Дальнейшее чтение

Теперь вы знаете, что такое «чистый код». Как научиться его писать?

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

Чистый код: руководство по гибкому программному мастерству Роберта К. Мартина

Рефакторинг: улучшение дизайна существующего кода Мартина Фаулера

Мастерство программного обеспечения: профессионализм, прагматизм, гордость Сандро Манкузо

Чистая архитектура: Руководство мастера по структуре и дизайну программного обеспечения Роберта С. Мартина

Спасибо за чтение.

Свяжитесь со мной в LinkedIn.