Свои правила есть у каждого языка. Они определяют построение предложений, расстановку знаков препинания и другие аспекты. Люди, которые только начали изучать новый язык, делают ошибки, но постепенно речь становится все более правильной, красивой и понятной. Это касается и языков программирования: профессионалы стремятся писать красивый код.
Рассказываем, что это такое, а также — как и зачем этому учиться.
Чистописание по-программистски
Практика показывает, что даже плохой код может работать. Но он всегда будет осложнять развитие проекта: большое количество ресурсов будет уходить на то, чтобы в нем разобраться.
Представьте, что достаете из шкафа гирлянду для новогодней ёлки: если в прошлом году вы подумали наперед и свернули ее аккуратно, то остается только закрепить ее на дереве и включить. А если вы закинули ее в шкаф как попало, то она, конечно, все еще может гореть и мигать, но придется потрудиться, чтобы ее распутать. Вот и с кодом так же: позаботьтесь о себе, других разработчиках и развитии проекта заранее, пишите чисто.
Чистый код — код, который легко читается, понятен любому разработчику и прост в поддержке. Это понятие было сформулировано американским инженером и программистом Робертом Мартином, известным в среде разработчиков как «Дядя Боб». Подробно концепция изложена в его книге «Чистый код: создание, анализ и рефакторинг», вышедшей в 2008 году.
Красивый код с нуля
Хороший код соответствует принятым стандартам программирования, а также — принципам, которые делают его удобным для чтения и сопровождения. Красота кода — это его простота и эффективность: благодаря ей можно повысить производительность и снизить количество ошибок. Поэтому чем раньше разработчик освоит навык писать чисто и качественно, тем лучше.
Красота кода — это не абстрактное понятие. Картина или мелодия могут быть красивыми для одного человека и не вызывать никаких положительных эмоций у другого. Но программирование — более объективная сфера, поэтому здесь и у красоты есть достаточно четкие критерии.
- Код должен легко читаться, быть понятным для других программистов. Для этого нужно использовать описательные имена переменных и функций. Не стоит, например, называть их абракадаброй из латинских букв: название должно отражать суть.
- Код должен быть простым. Стоит избегать излишней вложенности или длинных блоков кода. Например, начинающие программисты нередко используют для решения задач так называемые костыли, которые усложняют код. Да, они решают проблему, но согласитесь: идти без костылей проще и быстрее, чем с ними. Вот и с кодом так же: убирайте лишнее, не оставляйте понятных только вам сложных фрагментов.
- Код не должен требовать большого количества комментариев. Они уместны там, где программист применяет какой-то оригинальный подход, который может быть незнаком другим. Но не нужно писать так, чтобы каждую строку приходилось сопровождать пояснениями. Структуру важно продумывать заранее, а также следить, чтобы каждый метод решал только одну задачу. В этом случае, когда сервису потребуются развитие и доработка, новый функционал можно будет добавить, не рискуя «сломать» старый.
- Код должен быть эффективным и оптимизированным. Например, для этого можно использовать философский принцип бритвы Оккама — не создавать лишнего без надобности, отсекать его. Это поможет избежать повторяющегося кода, неуклюжих «костылей», которые замедляют работу программы.
Также выделяют три уровня красоты кода: эстетика, читаемость, эффективность.
- Эстетика. Если вы пишете код не «в стол», он не должен выглядеть как исписанный черновик. Представьте, что вам нужно подключиться к чужому проекту, вы открываете текст программы, а там все пестрит комментариями, нет никакого форматирования. Скорее всего, его захочется сразу закрыть, а не разбираться. Чтобы таких проблем не возникало, в IT-командах есть стандарты написания кода — свод правил, который определяет, как должен выглядеть текст программы.
- Читаемость. Допустим, код оформлен правильно — с отступами, цветовыми выделениями, без «закомментированных» строк. Но это еще не значит, что его легко прочитать. Не менее важна логика в названиях объектов, размеры функций и методов, отсутствие большого количества условий, выделяющих частные случаи.
- Эффективность. У кода должна быть продуманная, выверенная архитектура, строгая логика. Можно сравнить программу со зданием. Если у вас нет четкого плана работы и вы просто расширяете дом, пристраивая к нему одну комнату за другой, он не будет ни красивым, ни безопасным. Поэтому архитекторы заранее продумывают, как будет выглядеть здание, какие в нем будут помещения, как они будут связаны между собой. Только такой подход позволяет построить надежное и элегантное здание. Аналогично и с написанием программного кода: он будет действительно красив, только если вы заранее проработаете структуру и логику.
Следование стандартам с самого начала — лучшее решение для начинающего программиста. Начните с документации языка, на котором пишете, — там вы найдете принятые правила оформления кода. Так, для Python «подсказки» следует искать в документе PEP-8, для работы с JavaScript изучите Airbnb JavaScript Style Guide и Google JavaScript Style Guide. Найти документацию можно для любого языка, просто введите в строку поисковика его название и «code style».
Важно также взаимопонимание с командой: практически в каждой IT-компании есть свои рекомендации по оформлению, чтобы разработчики не тратили свои часы, пытаясь разобраться в коде друг друга. Многие среды программирования можно настроить под нужные стили написания кода, общепринятые или внутренние, — это удобно и сэкономит вам время.
Зачем нужен чистый код
Чистота кода — не простая формальность. Привычка следовать правилам программирования и поддерживать порядок в текстах программ имеет большое практическое значение.
Рефакторинг: генеральная уборка в коде
Бывает, что код работает и на вид соответствует стандартам, но разработчику все равно кажется, что что-то не так. Для таких ситуаций есть термин «code smells» — с английского эта фраза переводится как «код попахивает». «Источник запаха» можно найти и устранить с помощью рефакторинга.
Рефакторинг — это переработка программы, которая не меняет ее поведение, но делает код более структурированным и понятным.
В рефакторинг не входит поиск и исправление багов, добавление нового функционала. Это именно «уборка», редактура кода. Вот несколько примеров исправлений, которые сделают код лучше:
- Удаляем весь визуальный мусор. Фрагмент кода закомментирован? Текст программы станет только лучше без него.
- Меняем названия переменных, функций, классов, значения которых непонятны без пояснений. Имена должны давать разработчикам информацию о том, зачем нужен тот или иной объект.
- Находим и убираем переменные, методы или классы, которые уже не применяются в программе. Такие «мертвые элементы» могут появиться, если меняется функционал, переписываются отдельные фрагменты, но после этого код не перечитали и не очистили.
- Разбиваем слишком длинные методы и функции. Лучше создать несколько небольших, каждая из которых выполняет свое действие, и собрать их воедино общей функцией, которая будет их запускать. Ищем повторяющиеся фрагменты кода и «чистим». Программа будет работать эффективнее, если вынести все эти повторы в отдельную функцию.
- Без жалости стираем длинные запутанные комментарии. Они не делают ваш код лучше, а только загромождают программу, мешают чтению, сбивают с толку. Чистый код должен быть понятен без пояснений к каждой строке.
Как понять, что пора «наводить порядок»:
- чтобы внести изменения в программу, разработчику приходится сначала разбираться в ней;
- приходится точечно вносить одни и те же правки в разные фрагменты кода;
- доработки растягиваются на большое количество часов, заранее невозможно оценить, сколько займет решение задачи.
А еще лучше — не ждать, когда код начнет «попахивать», а проводить «поддерживающую уборку». Регулярный рефакторинг позволяет сократить число ошибок, делает текст программы читабельным, сокращает затраты времени на развитие проекта. Например, можно проводить рефакторинг после введения новых переменных, после каждой итерации тестирования и правок. Так вы не «размножите» ошибки, не дадите появиться «мертвым» фрагментам кода. Убираться понемногу, но регулярно легче, чем «запустить» текст программы и потом вычищать его.
Как научиться писать код красиво
Даже если вы только начинаете учиться программированию, не пренебрегайте правилами написания чистого кода. В будущем это значительно сэкономит вам время — и нервы.
- Используйте отступы для обозначения блоков кода, форматируйте код в соответствии с требованиями среды или компании, в которой работаете. Даже обычный текст без форматирования, выделения абзацев сложно читать — получается «простыня».
- Плагины и скрипты — ваши лучшие друзья. Для разных сред программирования давно существуют инструменты, которые помогут привести текст программы к единому стандарту, сделать его легко читаемым и понятным. Поищите их в интернете, изучите отзывы коллег и научитесь пользоваться.
- Пишите так, чтобы не приходилось добавлять комментарии к каждой строке. Используйте понятные имена переменных и функций, подучите английский язык для этого.
- Учитывайте, что практически любой сервис требует развития, поэтому его код должен быть масштабируемым — не ломаться при внесении изменений, добавлении нового функционала. В этом разработчикам помогают, например, принципы SOLID, сформулированные автором «Чистого кода» Робертом Мартином.
- Читайте то, что написали. Если нужно — несколько раз, последовательно отсекая все лишнее. Если программа может работать без какого-либо фрагмента кода, то его можно смело удалять. Рефакторинг, рефакторинг и еще раз рефакторинг!
- Не стесняйтесь просить более опытных коллег, тимлидов о code review. Это поможет подсветить ошибки, которые вы не замечаете сами, понять, как можно сделать код лучше и лаконичнее.
- Не изобретайте велосипеды. Многие задачи, особенно стандартные, уже были неоднократно решены другими разработчиками, и эти решения можно найти в интернете. У популярных языков программирования есть большие и активные комьюнити, где можно попросить совета. Это лучше, чем вставлять «костыли» в свою программу.
- Не останавливайтесь в учебе. Программирование — это стремительно развивающаяся сфера, новые методы, более простые решения появляются постоянно. Держите руку на пульсе, изучайте код новых opensource-проектов, читайте статьи и книги.
Как написать комментарий, который не отправится «в мусор»
«И что, теперь вообще забыть про возможность комментирования кода?» — могут спросить некоторые разработчики. Нет, такие крайности не нужны: иногда комментарии действительно необходимы, но они тоже должны быть чистыми. Объясняем, как их писать:
- комментируйте только то, что считаете нестандартным;
- опишите причину, по которой нестандартное решение показалось вам более выигрышным;
- пишите кратко, перечитывайте написанное, чтобы не получалось сумбурного и запутанного текста;
- не пересказывайте код — другие разработчики и так его видят.
Также следует отличать комментирование от документирования, хотя часто можно встретить употребление этих понятий как синонимов. Они действительно похожи, но есть различия:
Итак, комментарии помогают понять отдельные строки кода, а документация — структуру и работу всего проекта. Встречается мнение, что хорошему коду документация не нужна. Но это не так: документировать стоит даже код, чистый как слеза.
Качественная, структурированная документация позволит легче масштабировать команду проекта: новые разработчики быстрее вникнут в суть, разберутся в архитектуре. Хорошим решением будет ведение базы знаний о проекте, в которой будут:
- хронология изменений, которые вносились в проект;
- хорошие и плохие решения с объяснениями;
- сложности, с которыми столкнулись разработчики.
Такая информация позволит не повторять ошибок при доработках, избегать путаницы в версиях, эффективно рефакторить текст программы.
Подведем итог
Умение писать красивый код — один из тех навыков, которые разработчику стоит усвоить в самом начале карьеры. Даже студенту стоит заботиться о том, как его программу будут читать другие программисты, да и он сам через некоторое время. Поэтому важно запомнить основные правила:
- не пишите такой код, в котором не хотели бы разбираться сами;
- не множьте сущности без необходимости — принцип бритвы Оккама;
- называйте объекты своими именами, а не набором символов, — иначе через время вы и сами не вспомните, что имели в виду;
- думайте об архитектуре программы в начале работы, а не в конце;
- используйте полезные инструменты, которые помогут настроить среду программирования под необходимый стиль оформления.
Как и любой текст, код требует редактуры. Чтобы он не получился, как ноты в советском скетче — «здесь играем, здесь не играем, здесь рыбу заворачивали», обязательно перечитывайте написанное, проводите рефакторинг. Важно смотреть на свой код «со стороны»: представляйте, что вы читаете чужие наработки — все ли понятно, нет ли путаницы? Это поможет оптимизировать его, позволит другим разработчикам понимать вас без лишних пояснений.
И помните, что сфера программирования не статична, она непрерывно развивается, появляются все новые инструменты. Чтобы код был красивым, важно решать задачи как можно изящнее, использовать актуальные, а не устаревшие методы. Поэтому важно постоянно учиться новому, следить за тем, что происходит в профессиональном сообществе. Читайте свежие статьи, обменивайтесь опытом с другими разработчиками в интернете и на офлайн-мероприятиях, обращайтесь за код-ревью к программистам, мнению которых доверяете, — так вы сможете повысить качество своей работы.