Как писать неподдерживаемый код

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

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

Но вы же не хотите переусердствовать? Ваш код не должен выглядеть безнадежно, хотя является по факту таковым. Ведь существует риск попасть под рефакторинг, а нам оно совершенно ни к чему.

Общие правила. Соглашения

Чтобы помешать другому программисту, вы должны думать как обычный программист. Перед ним ваш гигантский труд. У него нет времени, чтобы прочитать все это и уж точно, чтобы понять. Он хочет быстро найти проблему, внести изменения и уйти, не ожидая побочных эффектов от вмешательства. Он рассматривает ваш код маленькими кусочками, и ваша задача - добиться того, чтобы он даже не смог представить общую картину ваших действий. Но куда важнее, чтобы он не смог игнорировать ни строчки вашего творения.

Программисты тешат себя иллюзиями наличия соглашений. Но каждый раз, слегка нарушая общие правила, вы заставляете его читать каждую букву вашего кода через увеличительное стекло. Хотя, вам может показаться, что любое отклонение делает код неподдерживаемым - но это не совсем правда. Все хорошо в меру. Тщательно разбросанные по коду нарушения имеют даже лучший эффект, чем явное игнорирование правил.

Пример:
Как правило, предполагается что процелура с названием ДополнитьСтруктуруНаСервере(Структура) дополняет некоторые данные в переданную структуру. Достаточно слегка изменить процедуру с учетом особенной платформы и у программиста уже будет некоторая непонятка происходящего:

&НаКлиенте Процедура Тест_1(Команда) Структура = Новый Структура; Структура.Вставить("А", 1); ДополнитьСтруктуруКлючомБ(Структура); Структура.Вставить("В", 3); КонецПроцедуры &НаСервере Процедура ДополнитьСтруктуруКлючомБ(знач Структура) Структура.Вставить("Б", 2); КонецПроцедуры

Прочитав только процедуру "Тест_1" можно ожидать что на выходе вы получите структуру с ключами А, Б и В. Но не тут то было. На первый взгляд все сделано верно, даже объявление переменной с использованием знач соответствует правилам. В тоже время, вы можете подобный код писать с директивой &НаКлиенте и получить абсолютно ожидаемое поведение и структуру с тремя ключами. Возможно именно подобный пример сделает пару часов работы вашего коллеги особенно приятными. 

Ничего лишнего

Значительная часть искусства написания неподдерживаемого кода в именовании объектов метаданных, переменных и методов. Они ничего не значат для платформы и следовательно, предоставляют вам неограниченные возможности для того, чтобы поставить в тупик не одного сопровождающего.

1. Имена детей

Возможно вам стоит приобрести книгу "Как правильно назвать ребенка. 40000 русских и иностанных имен" и у вас никога не будет проблем с именованием переменных. В тоже время "Йцук" прекрасное имя и легко набирается. Если тем не менее вы до сих пор придумываете имена переменных, попробуйте "авыф", "апро", ну или наконец купите себе клавиатуру Дворака.

2. Однобуквенные имена переменных

Если вы называете свои переменные "и", "а", "к", их будет невозможно искать в редакторе. Кроме того, никто не догадается для чего они нужны. Если кто-нибудь упомянет о нарушении традиции называть счетчики циклов простыми буквами, чтимой со времен Fortran, напомните о том, что испанская инквизиция делала с еретиками. Более того, используйте однобуквенные переменные где угодно, кроме счетчиков циклов.

3. "Случайные" опечатки

Если же вы вынуждены использовать описательные переменные, просто "очепятайте" их. Поверьте, неправильное написание в какой-то функции или имени переменной способно свести на нет все удобства использования, не без этого, неудобного редактора от 1С. Добавляйте интернационализацию по вкусу.

4.  Будьте абстракты

Используйте абстрактные слова и понятия, вроде "все", "это", "данные", "ссылка" и т.п, аналогично можете использовать цифры: Заполнить1(), ПосчитатьВсе(), ПроверитьЭто().

5. Сокращения (Акронимы)

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

6. Синонимы

Пролистайте словарь или воспользуйтесь фантазией в поисках максимально возможного количества синонимов для одного и того же действия (например: показать, открыть, представить). Используйте их, когда хотите намекнуть, что есть тонкие различия между использованием методов. В тоже время, две подобных функции, которые могут иметь решающее значение, всегда называйте одинаковым словом. Например: "Печать" может означать: вывод печатной формы на экран, скрытую отправку на принтер или даже предварительную запись объекта.

7. Избегайте глоссария проекта

Запомните: написания глоссария - непрофессиональное нарушение принципа структурного дизайна, известного как "сокрытие информации". Если же вы вынуждены его писать, постарайтесь использовать рекурсивные определения. Дразните своего читателя, притворяясь, что вы даете информацию там, где ее нет ни грамма. Формулируйте ваши пустопорожние сентенции так, чтобы читатель испытывал чувство вины за неспособность понять что вы хотите сказать.

И никогда не используется конкретные примеры. Можете вполне оправдываться, что наличие примера будет вводить в заблуждение, будто это и есть все возможности, заложенные в программу. Запомните: люди уважают только то, что слишком абстрактно, чтобы легко понять. В конце концов еще ни одного академика не застали за приведением примеров.

8. Используйте правила других языков

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

9. Использование регистра

Можно сколько угодно спорить о правилах 1С относительно прописных букв, но намного лучше ввести собственное правило. Например: выделять псевдослова в переменных или случайным образом выделять прописные буквы. Например: ПараллелоГрамм.

10. Повторное использование переменных

Во всех случаях, допускаемых платформой, давайте переменным, глобальным, клиентским или серверным методам одинаковые имена. Желательно повторно использовать имена реквизитов внутри процедур в качестве имен параметров, переданных для обработки. Это делается для того, чтобы сопровождающий внимательно изучил область действия каждой переменной. Особенно приятно, передавая в функцию переменные А и Б, в объявлении функции поменять их местами; использовать одну переменную для разных целей или просто слегка менять назначение.

11. Подчеркивание, ваш надежный друг

Используйте _и__ в качестве имен переменных. Особенно неплохо работает приписывание их в начало или конец имени переменных, реквизитов или методов. Более того, это в целом не противоречит стандартам 1С.

12. Смешивайте

Пишите на разных языках. Если все в вашей организации пишут на русском, пишите на английском. Можете применять смешанно, например переменные называть на русском, а методы на английском.

13. Специальные или эмоциональные имена

Отлично подходят имена которые выдают себя за определенные объекты: Параметр = (счетфактура - накладная) / проценты. Также можно выбирать имена переменных с неуместным эмоциональным оттенком: Хрень = (половинаХрени - втораяПоловина) / СуперДоля.

14. Игнорируйте соглашения

Это самое простое, компилятор на это не отреагирует. Также можно предложить свои собственные правила, тогда можно обвинять окружающих в их несоблюдении.

15. Ложные имена

Убедитесь, что каждый метод делает чуть больше (или меньше), чем предполагает его название. В качестве простого примера метод ПроверитьЗаполнениеСчетФактуры(СчетФактура) в качестве побочного эффекта может записывать текущую версию документа в базу данных.

16. Ограничения возможностей человека

Просто запомните, человеческий мозг может комфортно обрабатывать не более 7 фрагментов информации одновременно. Пользуйтесь этим. Я думаю вы сами все поняли.

Комментарии

2
  • Штыров Юрий
    Было бы смешно, если б не было так грустно!
    В процессе "бесиловки" по соблюдению индивидуальных персональных данных(ИПД) некая конторка, наделенная
    полномочиями затребовала распечатанный код всех модулей нашей системы( их, на минуточку было 18!). В компилированном виде только один "экзешник" "весил" 28 мегабайт.Плюс длл-ки. На вопрос -зачем? Ответили, а вдруг там стоит жучок, который способен воровать данные! А мы, вот сейчас, прочитаем и все найдем...Принимая во внимание, что модули писались на протяжении десятилетий, содержали целый лес "сухих веток", которые даже отец-разработчик не помнил зачем, но "вырубать" не решался, задача чтения этой абракадабры была под силу только Гераклу. В качестве 14-го подвига. Но, боюсь, даже рота Гераклов не смогла бы понять что к чему, ибо программный код следовал мозговым изгибам наших законотворцев. .
    Итого: не надо запутывать код умышленно, просто исполняйте "хотелки" очередного гениального "министра без финансов" и его подручного -"экономического недоразвития".
  • тишина
    Итого: не надо запутывать код умышленно, просто исполняйте "хотелки" очередного гениального "министра без финансов" и его подручного -"экономического недоразвития".

    :)) Мне тоже кажется, что этого достаточно. Иногда бред таких "министров" невозможно понять даже на пользовательском уровне "для чего? зачем?", тайна просто.
Общество

👍 Президент подписал закон, упрощающий принятие решений на общих собраниях членов СНТ и ОНТ

Владимир Путин подписал разработанный при участии Росреестра федеральный закон, которым упрощен процесс принятия решений на общих собраниях членов садоводческих (СНТ) и огороднических товариществ.

Патентная активность российских изобретателей выросла на 7%

Более 15 000 заявок на патентование изобретений и полезных моделей подали отечественные разработчики в Федеральную службу по интеллектуальной собственности (Роспатент) с января по июнь 2024 года.

Опубликованы поручения Президента по итогам Петербургского международного экономического форума-2024

Владимир Путин утвердил перечень поручений по итогам ПМЭФ-2024, который прошел 5–8 июня.

Курсы повышения
квалификации

18
Официальное удостоверение с занесением в госреестр Рособрнадзора

Нацбюро кредитных историй назвало средний размер автокредита

По данным кредиторов, передающих сведения в Национальное бюро кредитных историй (НБКИ), в июне 2024 года средний размер выданных автокредитов составил 1,47 млн рублей.

МВД: если поменяли сим-карту, открепите номер от Госуслуг и мобильного приложения

Киберпреступники приобретают старые сим-карты, которые уже были использованы и поступили в повторную продажу.

1
УК РФ

Ответственность за цифровые преступления ужесточат

По результатам деятельности созданной в 2020 году на площадке Генпрокуратуры межведомственной рабочей группы подготовлены проекты федеральных законов об ужесточении ответственности за преступления в цифровой среде.

Опытом делятся эксперты-практики, без воды

Как разработать детальный финансовый план и бюджет для бизнеса

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

Инвестиции

Пополнил брокерский счет на 300 000 в июле. Что купил? Часть 2

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

Пополнил брокерский счет на 300 000 в июле. Что купил? Часть 2

Новые функции и улучшения на «Клерке»: обновления за июль. Выпуск #1

В июле представили обновления: сортировка главной страницы одним кликом, новый инструмент для самозанятых, возможность монетизации для авторов в "Трибуне" и продвижение материалов в блогах компаний. Также улучшен сервис "Клерк.Работа" и введены новые функции для Бизнес Аккаунта и личного кабинета.

Новые функции и улучшения на «Клерке»: обновления за июль. Выпуск #1
2
Обзоры новостей

Налог на бездетность, Ивлеева уплатила долг, НДФЛ при манипуляциях с землей в обзоре

Интересные события в налоговой сфере.

Бухгалтеры не видят актуальных данных ЕНС и не могут сформировать электронные подписи в ЛК. 🔨«Ночной бухгалтер» № 1733

Никогда такого не было... Бухгалтеры жалуются, что в личных кабинетах невозможно посмотреть актуальную информацию по сальдо ЕНС. Данные стоят на 15, 18, 19 июля. Если написать через ЛК налоговикам, сведения обновляются, но не всем. Формировать электронные подписи многие также не могут, не отправить 3-НДФЛ, не обновить электронные подписи.

Иллюстрация: Вера Ревина/Клерк.ру
Инвестиции

Физлицам и компаниям ЕС запретили участвовать в российской схеме обмена активами

Власти Евросоюза призвали инвесторов и компании не участвовать в обмене заблокированных ценных бумаг, поскольку в этом механизме участвует подсанкционный Национальный расчетный депозитарий.

ОСАГО

ОСАГО можно оформить онлайн через Сбер

Водители могут застраховать машину онлайн за несколько минут. Достаточно ввести данные документов и выбрать страховщика на маркетплейсе Сбербанка.

Для россиян тоже установят лимит на количество сим-карт

Несколько сим-карт нужны владельцам гаджетов, которые позволяют управлять умным домом и камерами наблюдения.

Сотрудников не могут заставить сдавать отпечатки пальцев

Частные компании не имеют права проводить дактилоскопическую регистрацию сотрудников, чтобы наладить пропускной режим на объекте.

Бухгалтеры

НДС на УСН в 2025 году, выбор налогового режима, топ претензий от ФНС, и господдержка бизнеса — какие вебинары пройдут в августе 2024 года

Подготовили для вас анонс предстоящих вебинаров в августе.

НДС на УСН в 2025 году, выбор налогового режима, топ претензий от ФНС, и господдержка бизнеса — какие вебинары пройдут в августе 2024 года
Новости ФНС

ФНС начнет регистрировать личные фонды россиян

Полномочия по регистрации личных фондов для управления бизнесом, имуществом и активами перешли от Минюста к ФНС.

Личные финансы

Цены на туры в Турцию выросли до 300 000 рублей за среднюю путевку

Итоги первой половины лета показали, что отдых на море в этом году стал для россиян дороже еще на несколько десятков процентов. Подорожало все — и гостиницы, и перелеты, и пакетные туры. Причем не только за границей, но и в России.

Бесплатно с Трудовое право

Трудовые споры: сколько денег можно взыскать с работодателя за неправильную запись в трудовой книжке 

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

Трудовые споры: сколько денег можно взыскать с работодателя за неправильную запись в трудовой книжке 

Интересные материалы

Кадровый учет

Перемещение работника

В данном материале рассмотрим, как выглядит процедура перемещения сотрудника. Поговорим о том, какими документами оформляется это кадровое мероприятие. Разберем, в чем состоят отличия между перемещением и переводом работника.

Иллюстрация: Вера Ревина/Клерк.ру