Несомненно, программирование – это тяжелая работа. Одно дело – изучать языки и алгоритмы, но это далеко от того, что называется создать работающее приложение, от вида кода которого не хочется выколоть глаза.
В некотором смысле, писать чистый код напоминает рисование, готовку или искусство фотографии, где теорию довольно сложно идеально воплотить в жизнь. Тогда почему чистота кода так важна? Вот плюсы чистого кода:
- Проблемы будет намного проще решить. Как только вы начнете думать о том, как писать чистый код, вы станете на путь решения многих проблем. Без каких-то жестких и быстрых решений алгоритмы будут работать более исправно.
- Меньше времени будет затрачено на обслуживание. Чистый код намного проще прочесть и понять, поэтому вы будете тратить меньше времени на то, чтобы определить за что отвечает тот или иной блок кода, а также меньше времени будет занимать исправление и проверка кода.
- Более ясное выражение задачи. Если вы работаете с другими программистами, чистый код способствует избежанию недопониманий между членами команды, что также ведет к уменьшению багов.
Как писать чистый код?
1. Указывайте имена, говорящие сами за себя
Что такое переменные, классы и функции? Ответить на данные вопросы можно разными способами, но если задуматься, все эти вещи – не что иное, как связующее звено между программистом и базовой логикой приложения.
Поэтому, когда вы используете нечеткие и не исчерпывающие имена для переменных, классов и функций, вы по сути усложняете логику приложения для любого программиста, который будет читать код, включая себя.
Что означает переменная с именем dxy? Кто знает. Вам, вероятно, придется прочитать весь код, чтобы хотя бы понять его смысл. Например, значение переменной distanceBetweenXY логически понятно. То же самое верно для классов и функций. Не пишите CalcTan (), если можно написать CalculateTangent () или CalcTangentAngle ().
2. Каждый класс/модуль должен заниматься только одним набором конкретных функций
Вы когда-нибудь разбирали фрагмент кода, который длился сотни или даже тысячи строк? Если у вас есть такой опыт, то вы знаете, насколько это трудно просто прочесть данный код, не говоря уже о его понимании и редактировании. Комментарии, конечно, могут помочь, но они “не вытянут” плохой код.
“Программирование представляет собой разбиение одного большого невозможного таска в несколько мелких вполне возможных.”
— John Woods
Чистый код представляет собой код, разбитый на мелкие части. Где каждая функция должна отвечать только за одну вещь, и каждый класс должен стремиться реализовывать одну конкретную идею. На практике сложный расчет, как GetCreditScore (), следует разбить на несколько вспомогательных функций, таких как GetCreditReports (), ApplyCreditHistoryAge () и FilterOutstandingMarks ().
3. Избавляйтесь от ненужного кода
Данная плохая привычка обычно проявляется, когда вы хотите исправить или оптимизировать кусок кода, вы его комментируете и переписываете чуть ниже – и хотя новый код работает, вы сохраняете старый на всякий случай.
Со временем накапливается большое количество подобных ненужных блоков кода, загромождающих мои исходные файлы. И самое забавное, что через некоторое время данный код вовсе не будет работать из-за постоянного редактирования стороннего кода. Если вы не используете Git или Mercurial, вам нужно сразу же начать их использовать. И да будет чистый код.
4. Читаемость > Умный код
“Все знают: отладка в два раза сложнее написания первоначального кода. Если вы также умны, как и код, который вы написали, скажите, как его теперь отлаживать? ”
— John Woods
Говоря о чистом коде, оставьте где-то далеко этот „умный” код. Под умным кодом подразумевается тип кода, который больше похож на загадку, чем на решение, и существует только для того, чтобы показать, насколько вы умны. На самом деле, никого это не волнует.
Примером „умного кода” будет вместить как можно больше логики в одну строку. Другим примером является использование специфических особенностей языка для написания странных, но работающих операций. Примером умного кода будет все то, что может заставить кого-то сказать «Погоди, что это?» при просмотре вашего кода.
Хороший программист и читаемый код идут рука об руку. Делайте комментарии при такой необходимости. Придерживайтесь определенного стиля, независимо от того, диктуется ли он языком (например, Python) или компанией (например, Google). Наблюдайте за языковыми идиомами и прекратите писать Java-код на Python или наоборот. См. Нашу статью о советах по написанию более чистого кода.
5. Придерживайтесь последовательности в написании кода
Я ничего не имею против хороших обучающих программ, но одним из их подводных камней является то, что новички в конечном итоге набираются абсолютно разных несовместимых привычек, особенно в том, что касается стиля кодирования.
Но что бы вы ни делали, оставайтесь последовательными!
Если вы собираетесь использовать camelCaseNaming, не используйте тогда underscore_naming. Если вы используете GetThisObject () в одном месте, не используйте FetchThatObject () где-то еще.
6. Выбор правильной архитектуры
Существует множество различных парадигм и архитектур, которые вы можете использовать для создания своих проектов. Обратите внимание, что данный пункт касается выбора правильной архитектуры, которая подойдет именно под ваш проект, а не выбора лучшей. Не существует «лучшей» архитектуры.
“Если опустить требования и дизайн, программирование – это искусство создания багов в пустом текстовом файле.”
— Louis Srygley
Например, шаблон MVC очень популярен в веб-разработке, поскольку он помогает организовать и сконструировать ваш код таким образом, чтобы минимизировать затраты на обслуживание.
Шаблон Entity-Component-System (ECS) очень популярен сейчас в разработке игр, потому что он помогает распределить игровые данные по блокам и построить логику таким образом, чтобы упростить работу, при этом создавая код, который легче читать.
7. Изучайте особенности языка
Одной из трудностей в освоении нового языка программирования является изучение нюансов, которые отличают тот или иной язык от всех других языков. Сравним Python, Java и JavaScript. Они все очень отличаются друг от друга, до такой степени, что нужно строить мышление другим образом, переходя от одного языка к другому.
“Язык, не влияющий на ваше восприятие процесса программирования, не стоит изучения.”
— Alan J. Perlis
В то время как Python – это компактный код и латентная типизация, Java больше наглядный и четкий язык. В каждом языке есть определенные идиомы, диктующие определенный стиль написания кода. Их следует хорошо изучить.
Существуют также антипаттерны – это распространённый подход к решению класса часто встречающихся проблем, являющийся неэффективным, рискованным или непродуктивным. Рассмотрение антипаттерна включает в себя как неправильное решение проблемы с его признаками и последствиями, так и выход из ситуации. Вам следует изучить и проанализировать все распространенные антипаттерны, связанные с изучаемым вами языком.
8. Перенимайте опыт у более опытных программистов
Если вы хотите написать чистый код, самое лучшее, что вы можете сделать, это понять, каким он должен быть. И нет лучшего способа сделать узнать, что такое этот легендарный “чистый код”, чем изучать исходный код опытного разработчика.
Понятно, что вы не можете просто заглянуть в штаб-квартиру Microsoft и взять парочку проектов, но в интернете полно проектов с открытым исходным кодом.
“Любой дурак может написать код, который компьютер поймет. Хорошие программисты пишут такой код, который будут понимать другие люди.”
— John Woods
9. Оставляйте исчерпывающие комментарии
«Нужно писать исчерпывающие, понятные комментарии» – это, пожалуй, самый старый совет в сфере программирования. Иногда новички в программировании начинают перегибать палку и комментируют то, что в общем-то понятно. Так тоже делать не нужно.
“Всегда пишите код так, как будто заканчивать за вами проект будет чокнутый садист, который знает, где вы живете.”
— John Woods
Вот хорошее правило: комментарии существуют, чтобы объяснять ДЛЯ ЧЕГО этот кусок кода, а не ЧТО он делает. Чистый код не нужно комментировать, чтобы пояснить, что он делает – комментарий должен пролить свет на причину написания того или иного фрагмента кода.
В комментариях нужно писать о последствиях изменения или удаления определенного фрагмента (т. е. «Удаление этого кода приведет к падению A, B и C»), но самое важное – раскрывать вещи, которые нельзя сразу же почерпнуть из кода.
10. Рефакторинг, рефакторинг и еще раз рефакторинг
Так же, как постоянное редактирование является частью рабочего процесса писателя, рефакторинг является неотъемлемого частью процесса программирования. Ненадлежащее отношение к рефакторингу – это самый быстрый способ получить невыполняемый код, поэтому во многих отношениях это самый важный аспект.
Короче говоря, рефакторинг – термин, определяющий процесс редактирования кода, который не повлияет на его функциональность.
«Каждый раз, когда задумываетесь, за что отвечает код, спрашивайте себя, можете ли вы его как-то реорганизовать и сделать более читаемым».
— Martin Fowler
«Не комментируйте кусок плохого кода. Просто перепишите его».
Если код вам показался запутанным и его нужно, по вашему мнению, закомментировать, лучше будет его переделать. Если вы вернулись к какому-либо фрагменту кода и увидели некоторые недочеты, исправьте их. На начальном этапе это может быстро утомлять, но в будущем ваши старания принесут плоды (это даже может предотвратить эмоциональное выгорание).
Постоянное самосовершенствование и самообразование
Программист, который учится писать чистый код, сродни писателю, который учится писать “чистую” прозу: на самом деле, нет точного правила, как писать чистый код, но есть нет много неверных путей, по которым придется пройти на пути к чистому коду. Абсолютно всем программистам нужно стремиться к написанию чистого кода, даже если на это придется потратить всю свою жизнь.
Если у вас есть мечта стать разработчиком программного обеспечения и вы хотите пройти самый прямой путь к достижению этой цели, определенно стоит потратить время на прохождение курсов программирования в Минске.
Записаться сейчас / Бесплатная консультация