Другое

Антипаттерны программирования. Какая польза и есть ли она вообще?

Lorem ipsum dolor

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

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

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

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

Сегодняшняя наша статья посвящена антипаттернам, поэтому приведем несколько популярных примеров.

 

Антипаттерны

На самом деле, антипаттернов тьма тьмущая. Они возникают как грибы после дождя. Это связано с тем, что само программирование не стоит на месте и постоянно растет объем разработок. Иногда складывается ощущение, что антипаттернов больше, чем паттернов. Их даже делят на 3 основные группы:

  1. Антипаттерны архитекторов;

  2. Антипаттерны разработчиков;

  3. Антипаттерны руководства.

 

Антипаттерны архитекторов

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

Такие антипаттерны приводят к следующим проблемам:

  • скрывается часть функционала, которую считают ненужной для пользователя;

  • создается программа, у которой невозможно распознать структуру;

  • необоснованно сложный дизайн;

  • необоснованно сложный интерфейс, который очень трудно разработать;

  • нет возможности предугадать, как зависят события от действий пользователей;

  • программа решает только узкую задачу и не способна решать более широкие задачи;

  • и др.

 

Антипаттерны разработчиков

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

Такие антипаттерны приводят к следующим проблемам:

  • один класс использует большое разнообразие методов;

  • использование объектов в неподходящем состоянии;

  • когда одни объекты передают данные другим объектам;

  • неправильное применение классов и функций;

  • лишняя сложность при решении задачи;

  • нет возможности проверить работу подпрограммы;

  • постоянное добавление новых скриптов для решения найденных ошибок;

  • неправильное наименование переменных, методов, функций и т. д.;

  • нет возможности удалить код низкого качества, потому что его удаление приводит к фатальным ошибкам;

  • запутанная реализация кода;

  • нет возможности проводить рефакторинг кода;

  • наличие объектов, которые только «притворяются», что содержат какие-то данные;

  • неоправданное использование паттернов;

  • когда копируются и применяются повторяющиеся скрипты;

  • замена функциональности документацией;

  • уверенность, что часто используемое решение спасет ситуацию и в этот раз;

  • уверенность в том, что не сработает известная ошибка;

  • слишком ранняя оптимизация кода;

  • создаются решения с нуля, при том что есть уже готовые отличные решения задач;

  • создается плохое решение, когда есть уже готовое отличное решение;

  • ошибки, приводящие к краху программы и невозможности ее реанимировать;

  • новый функционал добавляется как отдельное решение вместо того, чтобы обновить старый функционал;

  • бессмысленное применение различных библиотек, приводящее к тому, что удалить старые невозможно, а установить новые очень сложно;

  • предварительный показ того, как будет работать еще не написанная функция;

  • каждое новое обновление программы требует все больше и больше ресурсов «железа»;

  • реализация функций только для демонстрации их наличия;

  • и др.

 

Антипаттерны руководства

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

Поэтому применение антипаттернов руководителем чревато последствиями. Некоторые проблемы, которые могут от этого возникнуть:

  • проект закрывается еще до старта его реализации, так как неправильно расходовались средства и было много потрачено на проектирование и анализ;

  • в проект, приносящий реальный доход, не финансируются средства на его развитие;

  • расходуются большие усилия и финансы на то, чтобы перенести разработку в новое окружение;

  • новые улучшения наносят ущерб общему состоянию программы;

  • необоснованное улучшение красоты кода приводит к ухудшению качества программы;

  • реализуется решение, даже после того, как было обосновано, что это ошибка;

  • когда игнорируется мнение специалиста ниже по статусу;

  • слишком жесткое управление;

  • непредоставление всей необходимой информации сотрудникам;

  • теряется контроль над масштабированием программы;

  • полное отсутствие личного вклада в разработку;

  • неправильное формирование команды, когда уход одного из ее членов провоцирует остановку разработки, так как все было завязано на этом человеке;

  • самостоятельное решение задач без оповещения кого-либо о том, как было достигнуто решение;

  • и др.

 

Заключение

Антипаттерны и проблемы идут рядом друг с другом. Антипаттерн — это решение, которое принял специалист в какой-то конкретной ситуации, чтобы исправить одну проблему, но по факту эти решения приводят к еще большим проблемам.

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

Схожие статьи

Как обновить Анаконду: пошаговая инструкция с картинками для вас
Другое

Как обновить Анаконду: пошаговая инструкция с картинками для вас

Как победить прокрастинацию и начать действовать, а не отдыхать
Другое

Как победить прокрастинацию и начать действовать, а не отдыхать

Логирование Java: терминология, уровни логирования, log-файлы
Другое

Логирование Java: терминология, уровни логирования, log-файлы

Screeps команды: руководство к самостоятельному созданию ММО
Другое

Screeps команды: руководство к самостоятельному созданию ММО