Почему дядя Боб предлагает не записывать стандарты кодирования, если вы можете избежать этого?
Если вы спрашиваете причины своего мнения, тогда вы можете получить ответ, только если он опубликует ответ здесь ( наше мнение просто не имеет значения), однако ...
Почему я не должен записывать Стандарт кодирования?
Если вы спрашиваете, прав ли он в этом: позвольте мне быть единственным (пока непопулярным), чтобы сказать, что у вас нет причин избегать этого.
НАПИШИТЕ ЭТО ВНИЗ . Однако я постараюсь объяснить мои причины ...
Дэвид предположил в комментарии, что основной смысл ответа Стивена заключается не в том, почему вы не должны писать документы, а в том, в какой форме они находятся. Если руководящие принципы оформлены в виде инструментов (а не просто ручного просмотра кода), тогда я могу согласиться (когда закон не требует чего-то еще). Обратите внимание, что, к сожалению, инструменты не могут проверять все (теория вычислений не наш друг) часто, потому что они ограничены определенной единицей перевода или пакетом или любым другим языком, который ваш язык называет границей .
Однако формулировка дяди Боба не заставляет меня думать, что он говорит об этом.
Могу ли я не согласиться с таким старшим экспертом? Я делаю, почти для каждого пункта в цитируемом сообщении (см. Также вторую часть этого ответа для деталей). Давайте попробуем понять, почему (если вы уже знаете, что правила кодирования касаются не только незначительных проблем форматирования ).
- В некоторых случаях письменные стандарты кодирования требуются по закону.
- Я читаю документацию и уверен, что я не одинок. Члены команды могут со временем меняться, знания не могут быть в 5-10-летней базе кода или в головах членов команды. Организации должны увольнять людей, которые не следуют внутренним правилам.
- Стандарты кодирования, как только они будут утверждены , не будут часто меняться, и если они это сделают, вы хотите знать об этом. Если стандарты изменились, то ваша документация (в коде) устарела, потому что весь ваш код не соответствует новому стандарту. Переформатирование / рефакторинг может быть медленным, но у вас всегда есть письменное авторитетное руководство.
- Лучше прочитать 5-страничный документ, чем проверять 10 / 20K LOC, чтобы экстраполировать правило (которое вы можете неправильно понять, кстати), без сомнения об этом.
- Ирония в том, что кто-то, кто написал много книг о принципах дизайна и стиле кодирования, предлагает вам не писать свои собственные правила, разве не лучше, если он бросит нас с некоторыми примерами кода? Нет, потому что в письменных руководствах говорится не только о том, что делать, но и о двух других вещах, которых не хватает в коде: что не следует делать и причины делать это или нет.
«Свободное самоорганизующееся программирование» хорошо для 16-летнего парня-ниндзя, но у организаций есть другие требования :
- Качество кода должно быть предоставлено (и определено) на уровне компании - это не то, что может решить одна команда. Они могут даже не иметь навыков, чтобы решить, что лучше (например, сколько разработчиков имеют все необходимые навыки для проверки MISRA или даже просто понимают каждое правило?)
- Участники могут перемещаться в разные команды: если все придерживаются одних и тех же стандартов кодирования, интеграция проходит гладко и менее подвержена ошибкам.
- Если команда самоорганизуется, то со временем, когда члены команды меняются, стандарты будут развиваться - и тогда у вас будет огромная база кода, которая не соответствует действующим принятым стандартам .
Если вы думаете о людях до процесса, я могу только предложить прочитать о TPS: люди являются центральной частью Lean, но процедуры очень формализованы.
Конечно, небольшая организация, в которой есть только одна команда, может позволить команде решить, какие стандарты следует принять, но затем она должна быть записана. Здесь, на Programmers.SE, вы можете прочитать посты Эрика Липперта: я полагаю, мы все согласны с тем, что он опытный разработчик, когда он работал в Microsoft, ему приходилось придерживаться их письменных рекомендаций (даже если некоторые правила могут быть неправильными , неприменимыми или бесполезными). ему.) Как насчет Джона Скита? Правила Google довольно строгие (и многие люди с ними не согласны), но он должен придерживаться таких правил. Это неуважительно к ним? Нет, они, вероятно, работали над определением и улучшением таких рекомендаций, компания не состоит из одного члена (или одной команды), и каждая команда не является островом .
Примеры
- Вы решили не использовать множественное наследование и вложенные классы в C ++, потому что вы, члены команды , плохо понимаете это . Позже кто-то, желающий использовать множественное наследование, должен просмотреть весь 1M LOC, чтобы увидеть, использовалось ли оно когда-либо. Это плохо, потому что если проектные решения не задокументированы, вам нужно изучить всю кодовую базу, чтобы понять их. И даже тогда, если он не использовался, это потому, что он противоречит стандарту кодирования или это разрешено, но просто не было более ранних ситуаций, когда множественное наследование подходило?
- В C # у вас были перегруженные методы для предоставления параметров по умолчанию, потому что ваша кодовая база началась, когда дополнительные параметры были недоступны в C #. Затем вы изменили и начали использовать их (рефакторинг старого кода, чтобы использовать их каждый раз, когда вам приходилось изменять такие функции). Еще позже вы решили, что необязательные параметры являются плохими, и вы начали избегать их использования. Какое правило ваш код говорит вам? Это плохо, потому что стандарт развивается, но кодовая база развивается медленнее, и если это ваша документация, то у вас проблемы.
- Джон перешел из команды А в команду Б. Джон должен выучить новый стандарт; во время обучения он, вероятно, представит более тонкие ошибки (или, если повезет, просто займет много времени, чтобы понять существующий код и сделать проверку кода более длительной).
- Команда A переходит на кодовую базу, ранее принадлежавшую команде B. У нее совершенно другие стандарты кодирования. Переписать? Адаптировать? Смешать? Все они одинаково плохи.
Дядя боб
Пусть они развиваются в течение первых нескольких итераций.
Правда, до тех пор, пока у вас нет стандарта и ваша организация не поставит вам задачу его создать .
Пусть они будут конкретными для команды, а не для конкретной компании.
Нет, по всем причинам, изложенным выше. Даже если вы думаете формализовать только форматирование кода (наименее полезная вещь, которую вы можете захотеть формализовать), у меня все еще есть память о бесконечных (и бесполезных) войнах за форматирование. Я не хочу жить ими снова и снова, установить это раз и навсегда.
Не записывайте их, если можете этого избежать. Скорее пусть код будет способом, которым стандарты собраны.
Нет, по всем причинам, описанным выше (конечно, если вы не будете проводить рефакторинг всего своего кода за один раз при изменении руководящих принципов). Вы хотите оставить свой код как есть? Как вы проверяете кодовую базу, чтобы понять текущие рекомендации? Поиск по возрасту файла и адаптация вашего стиля кодирования к возрасту исходного файла?
Не издавайте закон о хорошем дизайне. (например, не говорите людям не использовать goto)
Правда, руководящие принципы должны быть краткими, иначе никто не будет их читать. Не повторяй очевидное.
Убедитесь, что все знают, что стандарт касается общения, и ничего больше.
Мало того, что хороший стандарт касается качества, если вы не хотите иметь стандарт только для мелких деталей.
После первых нескольких итераций соберите команду, чтобы решить.
Смотрите первый пункт и не забывайте, что стандарт кодирования - это, как правило, процесс, который разрабатывался и совершенствовался долгими годами: несколько итераций, может быть, у начинающих разработчиков? В самом деле? Вы хотите положиться на память одного старшего (если есть) члена?
Три ноты:
- На мой взгляд, недостатки в некоторых языках более серьезны, чем в других, например, в C ++ стандарт уровня компании еще более необходим, чем в Java.
- Это рассуждение может не применяться полностью (а причины дяди Боба могут быть менее экстремальными ), если вы работаете в очень маленькой компании, где у вас всего одна небольшая команда.
- Вы наняты (как команда), и вы будете работать в одиночку с одним новым проектом, тогда вы забудете его и продолжите. В этом случае вам может быть все равно (но ваш работодатель должен ...)