Тёмная сторона программирования. Признаки некачественного кода. Плохой / Часть 2.



Книга Тёмная сторона программирования. Признаки некачественного кода. Плохой / Часть 2.

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

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

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

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

Отсутствие внятной структуризации 🔃

Программирование - это креативный процесс организации. Это способность описывать окружающий мир и преобразовывать идеи в программы. В итоге, каждый объект или процесс (в контексте программирования, например в объектно-ориентированном программировании) - это абстрактный класс с определенными свойствами и методами. Чем более ясно такая абстракция отражена в коде - тем он более качественный.

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

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

ООП головного мозга 🤯

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

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

Приветствую всех поклонников 6 НФБК из этого места!

Золотой молоток 🏆

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

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

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

Спагетти-код 🍜

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

Согласно Википедии, спагетти-код - это...

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

Спагетти-код назван так, потому что ход выполнения программы похож на миску спагетти, то есть извилистый и запутанный. Иногда называется «кенгуру-код» (kangaroo code) из-за множества инструкций «jump».

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

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

Поток лавы 🌋

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

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

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

Отсутствие документации 😳

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

В одно давнее время, когда понятие "Искусственный интеллект" ассоциировалось у многих с фильмами вроде "Терминатора" или "Матрицы", а о ChatGPT еще никто не слышал, мне попалась нейросетевая библиотека для идентификации отпечатков пальцев. Задача была проста - настроить систему контроля доступа на большом объекте с помощью оптических сканеров отпечатков пальцев, используя указанную библиотеку искусственного интеллекта.

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

Непредсказуемый код / goto 🔗

У нас есть отдельная статья о применении оператора goto. К слову, она сейчас одна из самых популярных. Вкратце, goto - это оператор, который позволяет совершить переход к метке в программе безусловно. Это специальная конструкция, которая позволяет игнорировать порядок выполнения кода и перемещаться по программе в разные места.

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

Использование оператора перехода goto (обычно в высокоуровневых языках программирования) нарушает логику выполнения кода. В какой-то момент может возникнуть ситуация, когда выполнение программы "перепрыгивает" в неожиданные места, нарушая последовательность действий. Применение goto существенно снижает читаемость и предсказуемость программы.

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

🔥 Нравится? Подпишись! Вместе мы одержим победу над восстанием машин! 🔥

🚀 P.S. Для тех, кто хочет не просто изучать программирование, а начать свой путь мастера немедленно, приглашаю на Boosty! Там представлен уникальный обучающий контент по программированию для всех уровней подготовки. Кроме того, вы сможете увидеть, как автор выглядит в реальной жизни. Нажмите здесь и отправляйтесь в путь!🚀

У меня также имеется Telegram-канал, где публикуются более простые и веселые посты. Ссылка на канал доступна.

P.S.3 Приглашаю делиться в комментариях своим мнением о недостаточных методах программирования. Буду рад услышать ваши личные истории и уроки из сферы IT!

165   0  

Comments

    Ничего не найдено.