Как стать автором
Обновить

Соглашаемся на некачественный код?

Время на прочтение 3 мин
Количество просмотров 641
Рано или поздно все программисты сталкиваются с проблемой написания кода надлежащего качества. Но что за этим качеством скрывается? Отсутствие ошибок? Правильно оформленные названия полей и методов? Жесткое распределение файлов проекта по директориям?


По мнению Стива Макконнела, качество системы снижает расходы на ее разработку; чем меньше мы усилий тратим на понимание своего же кода, тем легче мы добавляем новый функционал. И, как следствие, — чем меньше мы допускаем запутанности кода, тем выше качество. Многие разработчики повторяют: «Чтобы в будущем было легче разобраться в коде, нужно выработать “Соглашение о наименовании”». Такое соглашение имеет смысл, но с качеством кода связанно косвенно.

На начальных этапах разработки сложных приложений ведущие разработчики и менеджеры проектов ставят перед командой вопрос о принятии «Соглашения о наименовании» (Coding & Naming Convention, сокращенно — CNC). Тем самым они, фактически, дают разрешение на «религиозную» войну. Соглашение — это способ документирования опыта, предпочтений и привычек одного из разработчиков. Преимущественно документируется (навязывается) опыт ведущего разработчика. В противном случае количество соглашений становится равным количеству членов команды. Многие коллективы, чтобы избежать разногласий, выбирают соглашение, рекомендуемое авторитетным источником (Java, .Net). Также существует вариант, когда команда принимает соглашения уровня корпоративного стандарта.

Если посмотреть со стороны на процесс принятия соглашения, то можно заметить, что происходит парадоксальная ситуация: команда забывает, что суть соглашения не в наименовании и не в авторитете, а в облегчении поддержки и передачи смысла написанного кода. Проведем аналогию с русским языком. Грамматика и пунктуация являются неким соглашением. Но если так, ТО Сей4ас Я наPушИЛ соГлашеНИЕ По НАИМеноВанИЮ. Но смысл понятен и я легко могу внести изменения.

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

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

Руководствуясь первым, всегда думайте, сможет ли другой человек прочитать и понять написанный вами код. Второй принцип подсказывает, что требуется выбирать наиболее простое решение, а любую сложную функциональность (например, метод больше 10 строк) декомпозировать на несколько простых. Гибкость — самый сложный принцип и за его реализацией я предлагаю обратиться к шаблонам проектирования (design patterns).

Исходя из указанных принципов, можно строить уже не стилистическое соглашение CNC, а смысловое. Косвенно о таком соглашении идет речь в книге «Совершенный код» Стива Макконнела. Еще больше о реализации трех принципов рассказывает Кент Бек.

На проводимых мной практических занятиях выбран другой, но не менее важный подход — «от обратного», широко используемый в математике. Определив соглашение в виде положительных утверждений, мы не определяем случаи злоупотребления конструкциями, которые не несут ярко выраженного отрицательного эффекта. Такие случаи только потенциально могут привести к сложности кода; их называют «smells». Так, если каждый программист будет допускать их появление, то они будут накапливаться, словно снежный ком. Как следствие, через пару месяцев разработки, код, корректный с точки зрения «соглашений», будет совершенно нечитаемый с точки зрения смысла. На семинарах я предлагаю командам принять новое соглашение, которые должно сформироваться на основе каталога «smells». Один из первых авторов, поднявших тему рефакторинга и работы со smell’ами — Мартин Фаулер.

Для совершенствования качества кода недостаточно ограничиться формальным «Соглашением о наименовании». Улучшение качества — это сложный процесс, требующий постоянного повышения квалификации разработчиков, принятия новых соглашений (как по форме, так и по смыслу) и адаптивных принципов работы.

Автор статьи — Денис Миллер, — тренер и независимый консультант по гибким методологиям в области разработки программного обеспечения. Основная область интересов: улучшение процессов разработки и повышение качества кода программистов.
Теги:
Хабы:
+8
Комментарии 6
Комментарии Комментарии 6

Публикации

Истории

Ближайшие события

Московский туристический хакатон
Дата 23 марта – 7 апреля
Место
Москва Онлайн
Геймтон «DatsEdenSpace» от DatsTeam
Дата 5 – 6 апреля
Время 17:00 – 20:00
Место
Онлайн
PG Bootcamp 2024
Дата 16 апреля
Время 09:30 – 21:00
Место
Минск Онлайн
EvaConf 2024
Дата 16 апреля
Время 11:00 – 16:00
Место
Москва Онлайн