Когда я задавал этот вопрос, у меня почти всегда было определенное да, у вас должны быть стандарты кодирования.
Какое было самое странное стандартное правило кодирования, которому вы когда-либо были вынуждены следовать?
Под странным я имею в виду самое смешное, худшее или просто странное.
В каждом ответе, пожалуйста, укажите, на каком языке, какой размер вашей команды был, и какие негативные последствия это вызвало у вас и вашей команды.
coding-style
Брайан Р. Бонди
источник
источник
Ответы:
Я ненавижу, когда использование нескольких возвратов запрещено.
источник
обратный отступ. Например:
и:
источник
Возможно, не самый странный, который вы получите, но я действительно очень не хочу, когда мне нужно вводить имена таблиц базы данных с помощью 'tbl'
источник
Почти любой вид венгерской нотации.
Проблема с венгерской нотацией заключается в том, что ее очень часто неправильно понимают. Первоначальная идея заключалась в том, чтобы префикс переменной, чтобы смысл был ясным Например:
Но большинство людей используют его для определения типа.
Это сбивает с толку, потому что, хотя оба числа являются целыми числами, все знают, вы не можете сравнить яблоки с грушами.
источник
Территориальный оператор, где я сейчас работаю, не допускается:
... потому что не каждый "получает это". Если бы вы сказали мне: «Не используйте это, потому что нам пришлось переписывать их, когда структуры становятся слишком сложными» (вложенные троичные операторы, кто-нибудь?), Тогда я бы понял. Но когда вы говорите мне, что некоторые разработчики их не понимают ... хм ... Конечно.
источник
НИКОГДА не удаляйте код при внесении изменений. Нам сказали, чтобы прокомментировать все изменения. Имейте в виду, что мы используем контроль источников. Эта политика длилась недолго, потому что разработчики были в шуме из-за этого и того, как он сделает код нечитаемым.
источник
Я когда - то работал под тиранией Могучей Б. Кинг .
VB король был чистый мастером MS Excel и VBA, а также баз данных ( отсюда его фамилии: Он играл с Excel в то время как разработчики работали с составителями, и бросить ему вызов на базах данных может иметь пагубные последствия для вашей карьеры ... ).
Конечно, его огромные навыки дали ему уникальное видение проблем разработки и решений по управлению проектами: хотя VB King не совсем точно соответствовал стандартам кодирования в самом строгом смысле, у него регулярно появлялись новые идеи о «стандартах кодирования» и «лучших практиках», которые он пробовал (и часто удавалось) навязать нам. Например:
Все массивы C / C ++ должны начинаться с индекса 1, а не с 0. Действительно, использование 0 в качестве первого индекса массива устарело и было заменено проницательным управлением индексами массива в Visual Basic 6.
Все функции должны возвращать код ошибки: в VB6 нет исключений, так зачем они вообще нужны? ( т.е. в C ++ )
Поскольку «Все функции должны возвращать код ошибки» непрактично для функций, возвращающих значимые типы, все функции должны иметь код ошибки в качестве первого параметра [in / out].
Весь наш код будет проверять коды ошибок ( это привело к худшему случаю VBScript if-indentation, который я когда-либо видел в своей карьере ... Конечно, так как предложения «else» никогда не обрабатывались, никакой ошибки на самом деле не было найдено, пока не стало слишком поздно ». ).
Поскольку мы работаем с C ++ / COM, начиная с сегодняшнего дня, мы будем кодировать все наши служебные функции DOM в Visual Basic.
Ошибки ASP 115 - это зло. По этой причине мы будем использовать On Error Resume Next в нашем VBScript / ASP-коде, чтобы избежать их.
XSL-T является объектно-ориентированным языком. Используйте наследство, чтобы решить ваши проблемы ( тупой сюрприз чуть не сломал мне челюсть в один прекрасный день ).
Исключения не используются, и поэтому должны быть удалены. По этой причине мы снимем флажок, запрашивающий вызов деструктора в случае отмены исключения ( эксперту потребовались дни, чтобы найти причину всех этих утечек памяти, и он чуть не пришел в бешенство, когда узнал, что они добровольно проигнорировали (и скрытый) его техническая записка о проверке варианта снова, отправлено несколько недель назад ).
перехватить все исключения в COM-интерфейсе наших COM-модулей и утилизировать их молча ( таким образом, вместо сбоя модуль будет казаться быстрее ... Shiny! ... Поскольку мы использовали обработку ошибок über, описанную выше, нам даже потребовалось некоторое время, чтобы понять, что на самом деле происходит ... У вас не может быть ни скорости, ни правильных результатов, не так ли? ).
Начиная с сегодняшнего дня наша кодовая база будет разделена на четыре ветви. Мы будем управлять их синхронизацией и интегрировать все исправления / изменения ошибок вручную.
Все, кроме массивов C / C ++ , служебных функций VB DOM и XSL-T в качестве языка ООП, были реализованы, несмотря на наши протесты. Конечно, с течением времени некоторые из них были обнаружены, хм , сломаны и вообще заброшены.
Конечно, авторитет В.Б. Кинга никогда не пострадал за это: среди высшего руководства он оставался техническим экспертом "высшего класса" ...
Это вызвало некоторые забавные побочные эффекты, как вы можете увидеть, перейдя по ссылке.
Какой самый лучший комментарий в исходном коде вы когда-либо встречали?источник
Еще в 80-х / 90-х годах я работал в компании по авиационным симуляторам, которая использовала FORTRAN. Наш компилятор FORTRAN имел ограничение в 8 символов для имен переменных. Стандарты кодирования компании зарезервировали первые три из них для информации в стиле венгерской нотации. Поэтому мы должны были попытаться создать значимые имена переменных всего за 5 символов!
источник
Я работал в месте, где произошло слияние двух компаний. У «доминантного» был основной сервер, написанный на K & R C (то есть до ANSI). Они вынудили команды Java (из обоих офисов - вероятно, всего 20 разработчиков) использовать этот формат, который радостно проигнорировал 2 столпа «дебатов о скобках» и сразу сошел с ума:
источник
Запрещено:
Разрешается:
источник
for (;;) {
это идиома C для первого.мой друг - назовем его CodeMonkey - получил свою первую работу в колледже [ много лет назад], занимаясь разработкой в COBOL. Его первая программа была отклонена как «не соответствующая нашим стандартам», потому что в ней использовались ... [содрогаться!] Вложенные операторы IF
стандарты кодирования запрещали использование вложенных выражений IF
теперь CodeMonkey не стеснялся и был уверен в своих способностях, поэтому он настойчиво расспрашивал всех по цепочке и по проходу, почему существует это правило. Большинство заявили, что они не знают, некоторые сочинили материал о «читабельности», и, наконец, один человек вспомнил первоначальную причину: первая версия используемого им компилятора COBOL содержала ошибку и неправильно обрабатывала вложенные операторы IF.
Эта ошибка компилятора, конечно, была исправлена в течение по крайней мере десятилетия, но никто не оспаривал стандарты . [baaa!]
CodeMonkey удалось изменить стандарты - в конце концов!
источник
Когда-то работал над проектом, где подчеркивания были запрещены. И я имею в виду полностью запрещен. Таким образом, в приложении ac # winforms, всякий раз, когда мы добавляли новый обработчик событий (например, для кнопки), нам приходилось переименовывать имя метода по умолчанию из buttonName_Click () во что-то другое, просто чтобы удовлетворить эго парня, написавшего код стандарты. По сей день я не знаю, что он имел против скромного подчеркивания
источник
Абсолютно бесполезные соглашения об именах баз данных. Каждое имя таблицы должно начинаться с цифры. Числа показывают, какие данные находятся в таблице.
Это затрудняет поиск таблицы, если вы знаете только первую букву ее имени. Также - поскольку это база данных mssql - мы должны везде окружать имена таблиц квадратными скобками.
источник
Мы делали проект на C ++, а руководителем команды был парень из Pascal.
Итак, у нас был стандартный код включения, чтобы переопределить весь этот надоедливый синтаксис C и C ++:
но подождите, это еще не все!
и т. д. Трудно запомнить после всего этого времени.
Это взяло то, что было бы прекрасно читаемым кодом C ++ и сделало его неразборчивым для всех, кроме руководителя группы.
Мы также должны были использовать обратную венгерскую нотацию, т.е.
хотя, как ни странно, мне это нравилось.
источник
На прежней работе:
Да это правильно. Все поля в каждой таблице. Так что мы можем сказать, что это поле.
источник
Мой приятель столкнулся с этим правилом, работая на правительственной работе. Использование ++ (до или после) было полностью запрещено. Причина: разные компиляторы могут интерпретировать это по-разному.
источник
=
как он может быть использован, чтобы вызвать неопределенное поведение.Половина команды предпочла отступ в четыре места; другая половина отдавала предпочтение отступу в два пробела.
Как вы можете догадаться, стандарт кодирования предписал три, чтобы «обидеть всех одинаково» (прямая цитата).
источник
Не имея возможности использовать Reflection, так как менеджер утверждал, что в нем слишком много «магии».
источник
Самый странный случай, который у меня был, и тот, который потребовал у меня довольно много времени на свержение, был, когда владелец нашей компании потребовал, чтобы наш новый продукт был только IE. Если это могло работать на FireFox, это было бы нормально, но это должен был быть только IE.
Это может показаться не слишком странным, за исключением одного небольшого недостатка. Все программное обеспечение предназначалось для серверного программного пакета, работающего на Linux, и все клиентские коробки, которые покупал наш клиент, были Linux. Если не считать попыток выяснить, как настроить Wine (в те дни очень ненадежный) и запустить его на всех этих компьютерах, и посмотреть, сможем ли мы запустить IE и научить их администраторов отлаживать проблемы Wine, это просто невозможно удовлетворить просьбу владельца. Проблема заключалась в том, что он занимался веб-дизайном и просто не знал, как сделать веб-сайты совместимыми с FireFox.
Возможно, вас не шокирует, что наша компания обанкротилась.
источник
Использование имен с общим номером
В моей текущей работе у нас есть два правила, которые действительно имеют значение:
Правило 1: Каждый раз, когда мы создаем новое поле в таблице базы данных, мы должны добавлять дополнительные резервные поля для будущего использования. Эти резервные поля пронумерованы (потому что никто не знает, какие данные они будут хранить в один прекрасный день). В следующий раз, когда нам понадобится новое поле, мы сначала ищем неиспользуемое резервное поле.
Таким образом, мы в конечном итоге с
customer.reserve_field_14
указанием адреса электронной почты клиента.Однажды наш босс подумал о введении резервных столов , но, к счастью, мы смогли убедить его не делать этого.
Правило 2: один из наших продуктов написан на VB6, а VB6 имеет ограничение на общее количество имен различных идентификаторов, и, поскольку код очень велик, мы постоянно сталкиваемся с этим ограничением. В качестве «решения» все имена локальных переменных нумеруются:
Lvarlong1
Lvarlong2
Lvarstr1
Хотя это эффективно обходит ограничение идентификатора, эти два правила в совокупности приводят к красивому коду:
Вы можете представить, как трудно исправить старый или чей-то код ...
Последнее обновление: теперь мы также используем «резервные процедуры» для частных пользователей:
РЕДАКТИРОВАТЬ: Кажется, что этот шаблон кода становится все более и более популярным. Смотрите этот пост The Daily WTF, чтобы узнать больше: астигматизм :)
источник
В свое время на C ++ нам не разрешали использовать ==,> =, <=, && и т. Д. Для этого были макросы ...
очевидно, это было связано со «старым случайным присваиванием в условной ошибке», однако у нас также было правило «ставить константы перед переменными», поэтому
Я только что вспомнил, что самым простым стандартом кодирования, который я когда-либо слышал, было «Пиши код, как будто следующий сопровождающий - злобный психопат, который знает, где ты живешь»
источник
Венгерская нотация в целом.
источник
У меня было много глупых правил, но не так много, которые я считал совершенно странными.
Самая глупая была на работе в НАСА, в которой я работал в начале 90-х. Это была огромная работа с более чем 100 разработчиками. Опытные разработчики, написавшие стандарты кодирования, решили, что каждый исходный файл должен начинаться с четырехбуквенной аббревиатуры, а первая буква должна обозначать группу, ответственную за файл. Вероятно, это была отличная идея для старых проектов FORTRAN 77, к которым они привыкли.
Тем не менее, это был проект Ada с хорошей иерархической библиотечной структурой, поэтому он не имел никакого смысла. Каждый каталог был полон файлов, начинающихся с той же буквы, за которыми следовали еще 3 бессмысленных письма, подчеркивание, а затем часть имени файла, которая имела значение. Все пакеты Ады должны были начинаться с этой же бородавки из пяти символов. Предложения Ada «use» также не допускались (возможно, это хорошо при нормальных обстоятельствах), поэтому это означало, что любая ссылка на любой идентификатор, не являющийся локальным для этого исходного файла, также должна включать эту бесполезную бородавку. Вероятно, должно было произойти восстание по этому поводу, но весь проект был укомплектован младшими программистами и только что принят в колледж (я сам был последним).
Типичный оператор присваивания (уже многословный в Ada) будет выглядеть примерно так:
К счастью, они были по крайней мере достаточно просвещены, чтобы позволить нам более 80 колонн! Тем не менее, объект бородавки был настолько ненавистен, что превратился в шаблонный код в верхней части всех исходных файлов, чтобы Ада «переименовала», чтобы избавиться от бородавки. Там будет одно переименование для каждого импортированного ("увядшего") пакета. Как это:
То, что более творческий среди нас занимался, пыталось использовать бородавку, чтобы сделать осмысленно (или глупо) название пакета. (Я знаю, о чем ты думаешь, но выговоры не были позволены и позор тебе! Это отвратительно). Например, я был в группе кода C ommon, и мне нужно было создать пакет для взаимодействия с группой W orkstation. После мозгового штурма с парнем с рабочей станции мы решили назвать наши пакеты так, чтобы кто-то, кому нужны оба, должен был написать:
источник
Когда я начал работать в одном месте и начал вводить свой код в систему контроля версий, мой босс неожиданно подошел ко мне и попросил меня прекратить совершать так много. Он сказал мне, что не рекомендуется делать более 1 коммита в день для разработчика, потому что это засоряет систему контроля версий. Я просто уставился на него ...
Позже я понял, что причина, по которой он даже пришел ко мне по этому поводу, заключается в том, что сервер SVN будет отправлять ему (и еще 10 руководителям) почту для каждого коммита, который кто-то делает. И, засоряя систему контроля версий, я догадался, что он имеет свой почтовый ящик.
источник
Выполнение всех запросов к базе данных с помощью хранимых процедур в Sql Server 2000. От сложных многостоловых запросов до простых, таких как:
select id, name from people
Аргументы в пользу процедур были:
Я знаю, что тема процедуры довольно спорная, поэтому не стесняйтесь оценивать мой ответ отрицательно;)
источник
На 1000 строк кода должно быть 165 модульных тестов (не обязательно автоматизированных). Это работает в одном тесте примерно для каждых 8 строк.
Излишне говорить, что некоторые строки кода довольно длинные, и функции возвращают эти указатели, чтобы разрешить цепочку.
источник
function(x).should == 2
что это один тест, тогда как другие объединят 10 из них и назовут его одним тестомНам пришлось отсортировать все функции в классах по алфавиту, чтобы их было «легче найти». Не берите в голову, что у идеи был выпадающий Это было слишком много кликов.
(тот же технический руководитель написал приложение, чтобы удалить все комментарии из нашего исходного кода).
источник
Примерно в 1987 году я устроился на работу в компанию, которая меня наняла, потому что я был одним из небольшого числа людей, которые знали, как использовать Revelation. Откровение, если вы никогда не слышали об этом, было, по сути, реализацией операционной системы Pick на базе ПК, которая, если вы никогда о ней не слышали, получила свое имя от своего изобретателя, легендарного имени Дика Пика. О Pick OS можно сказать многое, но в основном это хорошо. Ряд производителей Supermini (по крайней мере, Prime и MIPS) использовали Pick или свои собственные пользовательские реализации.
Эта компания была главным магазином, и для своих внутренних систем они использовали информацию. (Нет, на самом деле это было его имя: это была реализация Пика Праймом.) У них был контракт с государством на создание системы на базе ПК, и они вложили около года в свой проект Revelation, прежде чем парень сделал всю работу, который также был их директором MIS, решил, что не может больше выполнять обе работы, и нанял меня.
Во всяком случае, он установил ряд стандартов кодирования для их программного обеспечения на основе Prime, многие из которых основывались на двух основных условиях: 1) использование немых терминалов с 80 столбцами и 2) тот факт, что с тех пор как Prime не сделал ' у меня нет визуального редактора, он написал свой собственный. Из-за волшебной переносимости кода Pick он перевел свой редактор в Revelation и с его помощью создал весь проект на ПК.
Разумеется, Revelation, основанный на ПК, имел совершенно хороший полноэкранный редактор и не возражал, когда вы проходили мимо колонки 80. Однако в течение первых нескольких месяцев, когда я был там, он настоял, чтобы я использовал его редактор и его стандарты.
Итак, первым стандартом было то, что каждая строка кода должна быть закомментирована. Каждая строка Без исключений. Он обосновал это тем, что даже если в вашем комментарии было написано именно то, что вы только что написали в коде, необходимость его комментирования означала, что вы хотя бы дважды подумали о строке. Кроме того, как он радостно указал, он добавил в редактор команду, которая форматировала каждую строку кода, чтобы вы могли добавить комментарий в конце строки.
О да. Когда вы комментировали каждую строку кода, это было с комментариями в конце строки . Короче говоря, первые 64 символа каждой строки были для кода, затем была точка с запятой, а затем у вас было 15 символов, чтобы описать то, что сделали ваши 64 символа. Короче говоря, мы использовали соглашение на ассемблере для форматирования нашего кода Pick / Basic. Это привело к вещам, которые выглядели так:
(На самом деле, спустя 20 лет я окончательно забыл синтаксис продолжения строки в R / Basic, поэтому он мог выглядеть иначе. Но вы поняли идею.)
Кроме того, всякий раз, когда вам приходилось вставлять многострочные комментарии, правилом было использование цветочной рамки:
Да, эти закрывающие звездочки на каждой строке были обязательны. В конце концов, если вы использовали его редактор, это была просто простая команда редактора, чтобы вставить цветочную коробку.
Заставить его смягчиться и позволить мне использовать встроенный редактор Revelation, было настоящей битвой. Сначала он был настойчив, просто потому что это были правила. Когда я возразил, что а) я уже знал редактор Revelation, б) он был значительно более функциональным, чем его редактор, в) другие разработчики Revelation имели бы такую же точку зрения, он ответил, что если бы я не тренировался над его редактором, я бы не стал когда-нибудь сможет работать с базой кодов Prime, что, как мы оба знали, не произойдет, пока ад останется незамерзшим. Наконец он сдался.
Но стандарты кодирования были последними. В частности, комментарии к ящикам с цветами были глупой тратой времени, и он сразил меня изо всех сил, сказав, что, если я просто воспользуюсь правильным редактором, поддерживать их будет очень легко. (Все это стало довольно пассивно-агрессивным.) Наконец я тихо сдался, и с тех пор весь код, который я привел к обзорам кода, получил его драгоценные комментарии в цветочном ящике.
Однажды, несколько месяцев на работе, когда я в значительной степени зарекомендовал себя более чем компетентным (особенно по сравнению с замечательным парадом других программистов, который проходил через этот офис, пока я там работал), он смотрел через мое плечо, когда я работал, и он заметил, что я не использовал комментарии к цветочному ящику. О, я сказал, что написал средство форматирования исходного кода, которое преобразует мои комментарии в ваш стиль, когда я их распечатываю. Это проще, чем поддерживать их в редакторе. Он открыл рот, немного подумал, закрыл его, ушел, и мы больше никогда не говорили о стандартах кодирования. После этого обе наши работы стали легче.
источник
На моей первой работе все программы на Си, независимо от того, простые они или сложные, имели только четыре функции. У вас была основная функция, которая вызывала остальные три функции по очереди. Я не могу вспомнить их имена, но они были чем-то вроде begin (), middle () и end (). begin () открывал файлы и соединения с базой данных, end () закрывал их, а middle () делал все остальное . Само собой разумеется, что middle () была очень длинной функцией.
И просто, чтобы сделать вещи еще лучше, все переменные должны быть глобальными.
Одним из моих самых гордых воспоминаний об этой работе было участие в общем восстании, которое привело к разрушению этих стандартов.
источник
goto
.Написанный извне стандарт C-кодирования с правилом «не полагайтесь на встроенный приоритет оператора, всегда используйте скобки»
Справедливости ради, очевидным намерением было запретить:
в пользу:
Дело в том, что это было обеспечено инструментом, который следовал правилам синтаксиса C, которые '=', '==', '.' и доступ к массиву являются операторами. Так что код вроде:
должен был быть написан как:
источник