Этот документ стиля программирования имеет общее правило, которое гласит:
Правила могут быть нарушены, если против них есть серьезные личные возражения.
Это противоречит тому, как я думаю, и есть много статей, в которых говорится, что стиль кодирования действительно важен. Например, это говорит:
Документ о стандартах кодирования говорит разработчикам, как они должны писать свой код. Вместо того, чтобы каждый разработчик писал свой собственный предпочтительный стиль, он будет писать весь код в соответствии со стандартами, изложенными в документе. Это гарантирует, что большой проект закодирован в едином стиле - части не пишутся по-разному разными программистами. Это решение не только облегчает понимание кода, но и гарантирует, что любой разработчик, который просматривает код, будет знать, чего ожидать от всего приложения.
Итак, я что-то неправильно понимаю из этого документа и цитаты в верхней части этого вопроса? Могут ли люди просто игнорировать стиль кодирования?
Возможно, я не был достаточно ясен, поэтому с этим редактированием я собираюсь немного уточнить.
Я пишу документ о стиле кодирования для нашей команды и хочу проверить стиль с помощью некоторых статических анализаторов. Если это не удастся, Дженкинс отправит электронные письма. И я хочу пропустить проверку кода, если стиль не совпадает. Это явно противоречит первой цитате.
Но тогда, если цитата верна, какая польза от документа в стиле кодирования, если кто-то может делать что хочет?
источник
Ответы:
Насколько я могу судить, заявление, которое вас смутило, является прагматическим компромиссом, сделанным для того, чтобы руководящие принципы служили максимально широкой аудитории. В зависимости от вашего конкретного контекста (подробнее об этом ниже) у вас может быть возможность изменить его и более эффективно использовать рекомендации.
Видите ли, руководящие принципы ссылаются на "серьезные личные возражения" в качестве средства для оправдания нарушения. Такие возражения не следует игнорировать, особенно если они исходят от опытных разработчиков.
Заметьте, что эти возражения могут быть неверными, но (и это очень ОЧЕНЬ БОЛЬШОЕ, НО) они также могут указывать на то, что конкретное правило неверно - либо в целом, либо в контексте конкретного проекта (один пример несоответствия правила - это требование предоставить детальная регистрация в критичном к производительности коде).
Я думаю, что любое разумное руководство по стилю должно принимать во внимание вышесказанное и пытаться приспособиться к возможной необходимости подстройки. Теперь, если руководство, которое вас смущало, предназначалось только для зрелых команд с эффективными и гладкими процессами и средой, его можно было бы сформулировать гораздо менее двусмысленно, например, так:
Возможно, вам понравится вышеупомянутое, и вы можете пожелать, чтобы это было так везде, для всех, но посмотрите ближе на эту часть «вызов поднят / оставьте без внимания / отрегулируйте» и спросите себя, как это можно реализовать. Спросите себя, сколько времени это может занять в зависимости от проекта и команды. Если это займет час, это приемлемо? Что если это займет день, или неделя, или ... месяц?
Видите ли, этот подход «вызов и игнорирование до разрешения» может открыть широкую дверь для злоупотреблений, если он будет представлен в качестве руководства для любого проекта. «Да, да, мы вас слышим, давайте сделаем так, как говорится в руководстве. Сначала заполните эту форму запроса и получите одобрения генерального директора / финансового директора / технического директора; ожидайте, что это займет неделю или две. После этого подождите, пока мы не обновим наши проверки кода. Это может занять еще неделю или две. Между тем, пожалуйста, убедитесь, что ваш критичный к производительности код рвет правильно отформатированные операторы регистрации каждого перемещения регистра. "
Я не могу прочитать мысли авторов руководства, но кажется разумным предположить, что они хотели избежать использования его для оправдания путаницы, как описано выше. С этой точки зрения просто безопаснее четко заявить, что руководство не предполагает какого-либо принуждения - этот способ, хотя и неуклюжий, все же позволяет использовать его для произвольно широкого круга команд и проектов. Вероятно, ожидается, что такое широкое пособие оставляет более зрелым и эффективным командам возможность разумно сузить его, не нанося ущерба производительности разработчиков.
Применительно к вашему конкретному случаю, написание документа стиля кодирования для вашей команды и неудача проверки кода, если стиль не соответствует - я думаю, вам нужно выяснить, сколько времени потребуется разработчикам, чтобы оспорить конкретное правило, игнорировать его, разрешено и может быть изменено или восстановлено в зависимости от разрешения.
Если вы придумали способ заставить этот процесс работать, не создавая много препятствий в вашем рабочем процессе разработки, тогда стоит рассмотреть формализованный и легко отслеживаемый подход «вызов / разрешение», а не хаотичное «нарушать, если вы кричите достаточно громко».
В качестве примечания я хотел бы остановиться на том, что вы написали в другом комментарии : «Предположим, что стиль кодирования идеален, а если это не так, и т. Д.»
Это действительно опасное предположение. Я сломал ему нос (дважды! В одном проекте! Где у меня был огромный опыт и я подумал, что я все знаю об этом, пойди разберись), и я настоятельно рекомендую тебе бросить его. Безопаснее предположить, что в руководстве по стилю могут быть ошибки, и попытаться подумать о том, что делать в случае обнаружения таких ошибок.
источник
Позволять людям игнорировать стили кодирования из-за личных предпочтений - плохая идея.
Цитата в вашем вопросе, кажется, позволяет любому разработчику просто сказать: «Я не собираюсь использовать этот стиль, потому что он мне не нравится».
Это противоречит всему, что заставляет всех в команде делать то же самое для согласованности и читабельности.
Я согласен, что стиль документа с таким утверждением, вероятно, бессмысленно.
Тем не менее, некоторая гибкость в соблюдении правил стиля рекомендуется:
В заключение: предоставьте гибкость в соблюдении правил стиля, чтобы наилучшим образом удовлетворить потребности вашей команды, но не по произвольным причинам, таким как личные предпочтения.
источник
Стиль кодирования и руководства по стилю существуют для того, чтобы сделать код более читабельным. И читабельность существует, чтобы помочь со сложностью.
Следовательно, в конечном счете, нарушать или нет (я бы назвал это адаптацией) стиль кодирования в соответствии с вашими организационными потребностями, зависит от того, насколько он помогает сделать вещи понятными.
Помните, что все, и я подчеркиваю, ВСЕ, от ОО-программирования до функциональных парадигм, до различных моделей параллелизма, существует только для того, чтобы помочь людям справиться со сложностью.
источник
Организации предпочитают иметь стили кодирования - нет необходимости иметь их в первую очередь.
Таким образом, цитата, которую вы читаете, касается самой большой проблемы, которую я вижу в кодировании «стиля» и настоящих суперзвезд «хакеров»: вы привели нового парня на борт, и он написал код, который будет сбрасывать зомби и заставлять ваши старые серверы быстро кричать. ... но его стиль кодирования отличается от вашего "принятого организационного стиля". Он отказывается меняться, и процесс для того, чтобы заставить всех соответствовать его определенному стилю, будет трудоемким и дорогим. Что теперь?
Большинство известных мне супер-хакеров имеют такие же эго, как и их навыки, и они хотят, чтобы организация адаптировалась к ним , а не наоборот. Так что, возможно, ваш стандарт стиля кодирования должен быть больше похож на руководство по стилю кодирования, чтобы вы могли позволить этому хакерскому парню-убийце продолжать писать потрясающе быстрый и удивительный код с некоторым отклонением стиля, но будьте уверены, что все остальные понимают это, пока не дойдут до своего эпического хакера статус, они должны следовать правилам (или даже помочь убирать за ним).
Конечно, это управленческий кошмар, но в целом управление техническими людьми немного походит на выпас кошек. Таким образом, у большинства компаний есть «правила стиля», а не «стандарты стиля». И сборки не терпят неудачу, и обзоры кода не терпят неудачу автоматически из-за нарушений стиля во всех компаниях. Вы решаете проблему управления, которую хотите иметь, - позволяете хакерам суперзвезд и иметь «руководящие принципы», или теряете суперзвезд и более согласованное стилевое оформление кода.
источник
Это зависит.
В том месте, где я сейчас нахожусь, нет руководства по стилю, и это не имеет большого значения. Между программистами есть некоторые небольшие различия, но не настолько, чтобы влиять на читабельность, обнаруживаемость или согласованность каким-либо значимым образом. И у нас достаточно большая группа и достаточно сильная культура, чтобы обеспечить, что любой новый член команды попадет в линию (или еще).
В предыдущих компаниях мы быстро росли, и у нас были люди, незнакомые с языком и его идиомами. В этой компании приток людей означал, что не было культуры, которая навязывала бы хорошее письмо. И люди, плохо знакомые с языком, означали, что нужно было многое изменить. Там автоматические проверки стиля были наиболее эффективным способом внесения корректировок, а фактическое письменное руководство было лучшим способом обучить новых людей нашим ожиданиям.
Лично мне не очень важны руководства по стилю, и еще меньше меня волнует автоматизированное применение стилей. Если человек не может даже усвоить основные идиомы, почему вы используете их как программиста? И если они настолько плохой командный игрок, что постоянно пишут код, с которым другим трудно работать, почему вы вообще их используете?
источник
Это скорее психологическая уловка вместо некоторой буквальной интерпретации того, как лучше всего управлять стилями кодирования. Это делает команду / компанию / менеджера / лидера менее авторитарной. Я бы сосредоточился на ситуационных исключениях, а не на личных. Независимо от документа кодирования, цель состоит в том, чтобы сделать вещи легкими для чтения. Запутанный код должен быть исправлен и изменен в случае необходимости. Есть много инструментов, чтобы позаботиться о маленьких утомительных вещах, так что используйте их.
Есть исключения из каждого правила. Дайте людям "некоторую" комнату для маневра. Чем меньше всех принимают правила стиля кодирования (добро пожаловать, новый парень), тем больше они склонны сопротивляться. Многие вещи черно-белые, но некоторые открыты для интерпретации.
Цель должна состоять в том, чтобы вовлечь всех в дух руководящих принципов кодирования, вместо того, чтобы бороться за каждую мелочь и интерпретацию.
Да, придет время, когда документ в стиле кодирования не будет иметь смысла для использования, и профессиональные и взрослые разработчики должны знать разницу.
источник
Исходя из ваших правок, вы стремитесь к правильной цели.
Использование руководства по стилю имеет много преимуществ, но, на мой взгляд, два наиболее важных - это удобочитаемость кода между членами команды и отсутствие «глупых» коммитов (например, только пробел или дополнительные строки и т. П.).
Чтобы достичь своей цели, выбранное (или созданное) руководство по стилю должно быть простым и легким для соблюдения. Постарайтесь действительно сосредоточиться на том, что вам нужно. Никому не нравится возвращаться и переписывать огромный код, чтобы осчастливить линтера. Но все еще может быть какая-то выгода.
Убедитесь, что члены вашей команды одобряют руководство по стилю. Вы собираетесь придерживаться их, убедитесь, что они согласны, или это будет вечная борьба.
Убедитесь, что нарушения стиля являются «предупреждением», а не «неудачей», пусть человек решает, встречается ли нарушение с ошибкой. Причина этого проста. Я верю в простой рабочий процесс. Если где-то на этапе «тестирования» происходит «сбой», то вы не можете подтолкнуть к производству. Я использую это как безопасность. Даже исправления должны пройти этап тестирования (хотя и более короткий). Неужели вы действительно можете сказать, что вы не будете выдвигать это критическое исправление ошибки в производство, потому что кто-то использовал «вместо»? Как насчет использования цикла for вместо каждого? Что, если цикл for имеет некоторое улучшение по сравнению с каждым? Это решения, которые машина (линтер) не может принять, поэтому убедитесь, что у вас есть человек, судите предупреждение, а не машина выдает сбой.
Что касается игнорирования руководства по стилю, вам придется судить об этом в каждом конкретном случае. Убедитесь, что у «отклонения» есть реальная причина. Они придут. Работа рецензентов заключается в том, чтобы убедиться, что для отклонения есть веская причина, а не тривиальная.
источник
Я думаю, что музыка настроения здесь такова, что если общепринятая мудрость заключается в том, что стандарты кодирования являются неправильными или неполными, то меньшее из двух зол будет давить, если разработчики будут в общем согласны, а не пройдут трудный процесс получения документ изменен и пересмотрен.
Следует также отметить, что стандартные правила принудительного применения кода прошлых лет, как правило, не так, как сейчас.
В старые времена вы просто держали том в конце рабочего стола разработчиков и цитировали главу и стих, почему его код нарушает раздел 34.5.5767.
Теперь у нас есть инструменты для статического анализа кода и автоматического документирования, которые устраняют большую часть рутинных стандартов кода.
Если все это не удастся, вы все равно можете отправить его обратно разработчику, поднять его в обзоре кода или просто изменить самостоятельно, если хотите.
источник
Ваш вопрос сосредоточен вокруг согласования двух цитат. Я думаю, что написанный древовидный код отвечает на ваш вопрос в целом. Он представляет ваш руководящий принцип в написании руководящих принципов стиля.
Если говорить более конкретно, поскольку вы несете ответственность за установление принципов стиля кодирования (это мое предположение, поскольку вы являетесь автором документов), вы можете решить, что является необязательным или нет, и в какой степени вы позволите гибкость в индивидуальном стиле вашего команда. Вы получите отзыв при необходимости. Но как только руководящие принципы будут приняты, придерживайтесь их.
Таким образом, вы можете примирить два кажущихся противоречия, как это:
Подумайте о первой цитате, адресованной вам как лицу, принимающему решения о стиле, до того, как документ с инструкциями будет завершен. Если определенный стандарт стиля не работает для вашей команды, это считается «сильным личным возражением», и ваши рекомендации будут отражать его.
Подумайте о второй цитате, адресованной вашей команде, после того, как документ будет завершен. После того, как вы определили руководящие принципы для группы, и документ написан, важно, чтобы все разработчики в вашей команде придерживались руководящих принципов стиля.
источник
Не имеет большого значения, какой стиль кодирования у людей, если у них есть стиль кодирования. Если компания настаивает на стиле кодирования, она сильно наступает на ноги примерно 49% своих разработчиков.
Проблема состоит в том, что большое количество разработчиков не возражают против того, чтобы адаптировать свой стиль кодирования к какому-либо распространенному стандарту в компании, но они очень возражают, когда им говорят те, кто лучше (или просто больше заботится) о политике компании.
Это означает, что создание стандарта стиля кодирования может быть огромной тратой времени, источником бесконечных споров, причиной бесконечной обиды и в целом огромной траты времени и энергии.
источник
Я годами разбирался с рекомендациями по стилю кода, как и многие другие на этом форуме. Это включает в себя как руководства по стилю борьбы, которые я нахожу ненавистными, так и попытки побудить других использовать руководства по стилю, чтобы обуздать их стиль, чтобы он мог быть более читабельным в целом.
Корпорация извлекает выгоду из общего стандарта кодирования. При разработке программного обеспечения для компании необходимо учитывать много важных моментов, например, как мы будем обучать новых разработчиков воспринимать код предыдущего поколения. Когда вы пишете код, вы не всегда думаете об этом. Фактически, многие кодеры предпочитают даже не задумываться о том, как другие захотят подойти к коду через 5 или 10 лет после того, как они ушли. Руководство по стилю кодирования - это способ, с помощью которого корпорация может сосредоточиться на этих 5 и 10-летних целях, упрощая разработчикам возможность работать в более широком плане.
С другой стороны, руководства по стилю кодирования общеизвестно несовершенны, поскольку невозможно разработать идеальный стиль кодирования и записать его. На самом деле вы начинаете сталкиваться с забавными угловыми случаями, когда математические доказательства начинают терпеть неудачу, если вы пытаетесь сделать их совершенными. Итак, мы знаем, что руководства по стилю кодирования несовершенны. Они могут не полностью сосредоточиться на том, что нам нужно, через 5-10 лет.
Если бы мы «навязали» стиль кодирования, мы бы сейчас пожертвовали ценностью ради ценности позже. Это можно было бы назвать «инвестицией», если бы мы могли быть уверены, что получим отдачу от наших усилий, но любой разработчик, работавший с плохо написанным руководством по стилю кодирования, может засвидетельствовать, что эти «читабельные» выгоды дорого оплачиваются отвлекающими разработчиками. подальше от их кода. По моему опыту, есть только очень небольшое количество случаев, когда применение стилей принудительного кодирования имеет смысл, как правило, для программного обеспечения для уникальных клиентов, где программное обеспечение может использоваться в течение 30 или 40 лет!
Вместо этого я считаю, что наиболее эффективно рассматривать руководство по стилю кодирования как манифест: «Это то, что мы считаем лучшим стилем кодирования для нашей группы». Это куча текучих мыслей, задокументированных словами. Слово «верить» важно: если верования меняются, то вместе с ним должны меняться и руководства по стилю кодирования.
Вот тут и вступают ваши цитаты из «сильных личных возражений». В том, что я бы назвал «идеальным» миром, вы пишете любой код, который считаете лучшим, и вы живете с последствиями. Нам часто нравится игнорировать «мягкие» последствия при программировании, но в этом случае они важны. У меня нет проблем с тем, что ты пишешь в своем собственном стиле, если ты не возражаешь, чтобы я никогда не давал тебе ничего важного и надолго развивающегося.
Думайте о всей системе как о поле для гольфа. Стиль кодирования прокладывает легкий путь по фарватеру. Если вы придерживаетесь стандарта кодирования, мы позаботимся о том, чтобы жизнь была как можно проще. Чем дальше вы начнете работать, используя свои собственные стандарты кодирования, тем больше вам придется доказать свою ценность в команде.
Если я приеду утром в понедельник и обнаружу, что все выходные вы потратили на решение проблемы, которую мы мучили в течение года, и вы сделали это в своем собственном «специальном» стандарте кодирования, я не собираюсь говорить вам почини это. Я скажу тебе пойти принять душ. Если ваш «специальный» стандарт кодирования является исключительно «особым», я мог бы даже предложить разработчику начального уровня «пересмотреть» код, чтобы распространить знания о том, как работает ваш код, и безоговорочно упомянуть, что если что-то кажется трудным для чтения, он / она должен убери это. В эти выходные вы предоставили компании достаточную ценность, так что не стоит даже упоминать о вопиющих нарушениях стандартов кодирования, которые вы совершили.
Конечно, эта метафора игры в гольф не имеет границ. Если я попрошу вас выполнить какую-то задачу ранга и файла, возможно, добавив новые поля в какую-либо форму, и вы решите использовать возможность реорганизовать весь код заполнения формы в соответствии с вашим конкретным стилем, используя набор теневых символов, таких как определение макросов и какую-то ужасную технику метапрограммирования шаблонов, которую вы только что узнали из обмена стека, вас попросят вернуться и исправить это. Вы решили действовать, это последствия.
( Отказ от ответственности: я полностью написал эту реализацию,
is_base_of
чтобы решить черную задачу, и заработал каждый бит ада, который я получил за это от старших разработчиков. Я говорю, что оно того стоило. Я все еще получаю веселый пузырь смеха каждый раз, когда я посмотрите, как этот шаблон вклинивается в 7 несвязанных частей спецификации C ++, чтобы сделать что-то удивительное. Примите это, старшие разработчики! Это то, что вы получаете за запретboost
на этот конкретный проект! )источник
Лучше всего использовать автоматический форматировщик кода, который является встроенной функцией практически любой спускаемой IDE и должен существовать практически для любого более или менее распространенного языка программирования. Это незаметно устраняет ненужную работу и трения во время проверки кода.
Вполне разумно требовать от всех разработчиков выработать привычку применять средство форматирования к вновь созданному разделу кода.
Худшее, что вы можете сделать, это потребовать некоторый пользовательский стиль кодирования, который не поддерживает существующий форматировщик кода.
В относительно редких случаях некоторые разделы могут быть отформатированы по-разному, если форматировщик делает это действительно ужасно, но обычно лучше настроить форматер для всех, чтобы лучше форматировать.
Это могут быть некоторые полезные правила, которые форматер не может поддерживать (например, как называть переменные), но если только они остаются, их относительно легко соблюдать.
источник
Актуальное решение (не только философия)
Разрешить комментариям кода переопределять пометку и составлять списки этих комментариев, если хотите (как это часто делается с комментариями todo)
Дайте вашим разработчикам возможность работать вне соглашения явно и по причине - и во время проверки кода людьми это может быть исследовано по мере необходимости.
источник