10 базовых принципов программирования

Каждый может написать код, скажете вы. А хороший код? Вот здесь начинаются трудности. Мы все слышали эти страшные истории про невероятные цепочки из if-else, программы, которые падают при изменении всего лишь одной переменной, непонятные методы и так далее.

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


1. KISS

Принцип «простоты» (“keep it simple, stupid” principle) особенно важен для проектов средней сложности. Если вы думаете, что упростили достаточно, упростите код еще на один уровень, но не забывайте начинать с малого, чтобы не создать целую гору проблем.

10 Basic Programming Principles Every Programmer Must Follow programming principle programming

Когда вы начали писать код, старайтесь делать его максимально простым и читаемым. Написание более сложного кода займет больше времени, а также такой код более подвержен к появлению багов и ошибок, его будет намного сложнее изменить в будущем. Мудрые словах Антуана де Сент-Экзюпери:

«Совершенство достигнуто не тогда, когда нечего добавить, а тогда, когда нечего отнять.»


2. DRY

Принцип „отсутствия повторов” (“don’t repeat yourself” principle) имеет решающее значение при написании чистого и легко изменяемого кода. При написании кода следует избегать дублирования данных и логики. Если вы заметили, что один и тот же фрагмент кода написан снова и снова, принцип был нарушен.

Противоположностью DRY-кода является WET код: «дублируйте». Один из лучших способов диагностики WET-кода — спросить себя: чтобы каким-то образом изменить поведение программы, сколько областей кода нужно было бы изменить?


3. Open/Closed

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


4. Принцип единой ответственности

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

Классы и модули создаются по этому принципу, но поскольку расширяется функционал, они превращаются с течением времени в классы и модули, которые „могут все” и занимают сотни или даже тысячи строк кода. Если такое произошло, нужно разбить их на более мелкие классы и модули.


6. Разделение интересов

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

10 Basic Programming Principles Every Programmer Must Follow programming principle mvc pattern

Известным примером данного принципа является парадигма model-view-controller (MVC), которая разделяет программу на три различные области: данные («модель»), логика и то, что видит конечный пользователь.  Например, код, который обрабатывает загрузку и сохранение данных в базе данных, не должен отвечать за то, как отображать эти данные в Интернете. Данный принцип упрощает техническое обслуживание. И в будущем, если вам когда-нибудь понадобится переписать весь код, вы можете сделать это, не беспокоясь о том, как же данные будут сохранены или как будет обработана логика.


7. YAGNI

Принцип основывается на том, что вам никогда не нужно реализовывать какую-либо функциональность, которая возможно вам понадобится в будущем. Скорее всего, вам это не понадобится, и это будет пустая трата времени, это также усложнит ваш код.

Часто неопытные программисты пытаются написать наиболее абстрактный и общий код, чтобы избежать WET код, но слишком большая абстракция заканчивается тем, что его невозможно поддерживать в будущем. Хитрость заключается в том, чтобы применять принцип DRY только тогда, когда вам нужно.


8. Избежание преждевременной оптимизации

Принцип избежания преждевременной оптимизации не похож на принцип YAGNI. Разница в том, что YAGNI предотвращает внедрение функций до того, как они понадобятся, в то время как принцип избежания преждевременной оптимизации направлен на предотвращение оптимизации  работы алгоритмов, прежде чем это будет необходимо.

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


9. Рефакторинг, рефакторинг и ещё раз рефакторинг

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

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

10 Basic Programming Principles Every Programmer Must Follow programming principle coding

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


10. Чистый код > Умный код

Говоря о чистом коде, оставьте где-то далеко своё этот „умный” код. Под умным кодом подразумевается тип кода, который больше похож на загадку, чем на решение, и существует только для того, чтобы показать, насколько вы умны. На самом деле, никого это не волнует.

Примером „умного кода” будет вместить как можно больше логики в одну строку. Другим примером является использование специфических особенностей языка для написания странных, но работающих операций. Примером умного кода будет все то, что может заставить кого-то сказать «Погоди, что это?» при просмотре вашего кода.

Хороший программист и читаемый код идут рука об руку. Делайте комментарии при такой необходимости. Придерживайтесь определенного стиля, независимо от того, диктуется ли он языком (например, Python) или компанией (например, Google). Наблюдайте за языковыми идиомами и прекратите писать Java-код на Python или наоборот. См. Нашу статью о советах по написанию более чистого кода.


Что делает программиста эффективным?

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

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

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

Записаться сейчас / Бесплатная консультация





Ваше имя (обязательно)

Ваш телефон (обязательно). В формате +375XXXXXXXXX