Хотя велик соблазн просто позволить командам разработчиков работать как им удобно, без стандартов и правил, это создаст проблемы в будущем по мере роста проекта. Вы не захотите иметь дело с большими блоками кода, от которых зависит успешная работа всего бизнеса, но которые при этом до такой степени сложные и хрупкие, что только горстка людей осмеливается вносить в них изменения. В каждой компании есть свои «священные блоки кода», обросшие мифами из-за их легендарной сложности, и когда кто-нибудь предлагает их переписать – ответом ему бывают долгие, тяжкие вздохи, а старожилы команды качают головами и советуют вообще не трогать этот код, не то что пытаться его переписать.
Как уже неоднократно отмечалось, технический руководитель должен не только решать текущие проблемы, но и думать о будущем. Разрабатываемые сейчас системы будут нуждаться в поддержке и расширении еще долгие годы, когда вы уже, возможно, покинете свою должность.
Стандарты помогают разработать и продвигать общий подход к тому, как писать и структурировать код. Добиться читабельного и легко расширяемого кода непросто, в том числе потому, что многие разработчики считают, что их код неприкосновенен и не должен никем поверяться. Если вы столкнетесь с таким подходом – искореняйте его, а если люди не хотят меняться – придется с ними попрощаться.
Программирование является в большей степени творчеством, чем строгой наукой, и разработчик всегда выбирает какой-то вариант реализации из множества возможных. При этом то, что один считает логичным и естественным, для другого выглядит надуманным и неуклюжим. У программистов есть дурная привычка: если они чего-то не понимают, они просто полностью переписывают это. Слышали поговорку «Из огня да в полымя»? Поэтому всем выгодно, чтобы код было легко прочитать и понять и чтобы в нем использовались одни и те же подходы и паттерны.
Хорошая новость в том, что эта проблема давно известна. Для всех основных языков программирования существуют стандарты, поэтому вам не нужно будет изобретать велосипед. Соблюдение базовых стандартов легко обеспечить с использованием сторонних инструментов, совместимых с большинством IDE. Также существуют программы, которые можно использовать в процессе сборки приложения для автоматического анализа кода перед деплоем. SonarQube – популярный инструмент с открытым кодом, поддерживающий все распространенные языки, который находит в том числе неиспользуемые переменные, работу с неинициализированными указателями, логические тупики (области, из которых нет выхода), а также многие другие проблемы.
Стандарты кодирования касаются не только форматирования кода в текстовом файле. Они могут определять общие шаблоны проектирования – например, как взаимодействовать с базами данных или регистрировать события в журнале. Что еще более важно, они должны помогать структурировать код, определять размер функций, иерархию классов, вплоть до правил выбора названий.
Стандарты можно создавать и внедрять постепенно, шаг за шагом. Необходимо организовать постоянную проверку кода (review), и никто не должен исходить из того, что его код безупречен, включая и вас, если вы, будучи техническим директором, все еще программируете.
Код должно быть легко читать и поддерживать, и, что самое главное, в нем должно быть как можно меньше ошибок. Стандарты и ревью кода помогут вам добиться этого.