Как вы справляетесь с намеренно плохим кодом?


21

Есть много историй о намеренно плохом коде, не только на TheDailyWTF, но и на SO. Типичные случаи включают в себя:

  • Наличие бесполезной тратой времени конструкции (например, пустой цикл, считающий до некоторого огромного значения), так что программисты могут легко «ускорить» приложение, удалив его, когда им будет поручено.
  • Предоставление намеренно вводящей в заблуждение, неправильной или отсутствующей документации для создания дорогостоящих запросов на поддержку.
  • Легко генерировать ошибки или, что еще хуже, генерировать, хотя все работало нормально, блокировать приложение, поэтому для разблокировки требуется дорогой вызов в службу поддержки.

Эти точки показывают более или менее злое отношение (хотя иногда и случайно), особенно первый пункт встречается довольно часто.

Как бороться с такими конструкциями? Проигнорируйте проблему или просто удалите оскорбительный код? Уведомить своего менеджера или поговорить с человеком, который ввел «функцию»?


10
Это «случайно» или «намеренно плохо»? Я не понимаю, как это может быть и то и другое.

Ответы:


7

Большинство плохого кода происходит из-за недостатка понимания, а решение - это образование.

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

То, как я поступлю с политикой, зависит от многих (неустановленных выше) обстоятельств. То, как я справлюсь с кодом, - это сначала убедиться, что я не единственное недопонимание - что это действительно плохой код, - а затем исправить очевидные недостатки. Если это возможно, напишите тесты, чтобы плохой код не удался. Двойная проверка, которую я правильно понял, будет означать разговор с человеком, который написал код. Это должно быть сделано очень хорошим, вежливым способом, не предполагая намерения, и может помочь найти основную (политическую) причину, необходимую позже.

Доставка важнее совершенства башни из слоновой кости, но есть два момента, на которые стоит обратить внимание. Устранение очевидных недостатков дает вам 80% результатов при 20% усилий, и этот вид низко висящих фруктов редко стоит игнорировать. Но что еще более важно, если вы не решите основную (политическую) причину, вероятно, будет написан более намеренно плохой код, который вызовет дальнейшие проблемы и, возможно, предотвратит доставку.


28

Я никогда (за 20 с лишним лет) не сталкивался с преднамеренно плохим кодом, но приведенные вами примеры кажутся (по крайней мере мне, но IANAL) попытками обмануть работодателя или клиента, поэтому у вас, вероятно, есть законный Обязанность указать это вашему менеджеру.


2
Согласовано. Никто не пишет намеренно плохой код. Они решают проблему и решают ее наилучшим из известных им способов. Они могут быть ошибочными, недооцененными, невежественными и т. Д. Но я не могу понять, как разработчик намеренно пишет что-то, что, по его мнению, является плохим.
Дэн Рэй

8
Даже если это не законно, по крайней мере, есть этическое обязательство.
Крис Фармер

@ChrisFarmer Вы не можете отделить этические обязательства от более широкого контекста - в некоторых случаях преднамеренно плохой кодекс представляет законное коллективное сопротивление, будь то экономическое или политическое. (А трудовой договор заслуживает того, чтобы его добросовестно
оформляет,

11

Зависит от культуры компании. Чаще всего это не ваша работа - исправлять и очищать весь плохой код.

От « Кодеров на работе» , Джейми Завински (Jamie Zawinski) размышляет о переобработке, которая также может быть применена в этой ситуации:

В конце дня отправь эту чертову штуку! Здорово переписать ваш код и сделать его чище, а в третий раз он станет действительно красивым. Но дело не в этом - вы здесь не для написания кода; Вы здесь, чтобы отправлять продукты.

Есть много плохих кодеров и кода, и просто попытка исправить их все, когда вы сталкиваетесь с этим, за счет текущего проекта / задачи, может просто не стоить того, если продукт «работает». Слишком часто мы все просто программисты с клейкой лентой.

Также см. Пост Джоэла Спольски: Программатор магнитофонов


+1 Я действительно фанат концепции доставки товаров. Я думаю, что слишком много технических профилей просто не хватает этой концепции.

+1 Я тоже. Существует слишком много «чистого кода» - книг и т. Д., Которые поддерживают искаженное представление о том, что важно. Качество кода очень важно. Победителями становятся не те, у кого лучший продукт. Это те, у кого достаточно хороший товар отправлен достаточно быстро.
Joonas Pulakka

4
Я думаю, что вы упустили суть вопроса - парень говорил о намеренно плохом коде, а не просто коде, который был написан плохими программистами.
Хила

@ Хила Я считаю, что моя точка зрения остается верной, был ли плохой код умышленным или нет. Если это не проблема, которая была назначена в списке проектов / задач, программист на клейкой ленте не несет ответственности за исправление и очистку всего плохого кода . Культура там не академическая и писать чистый / красивый код. Речь идет о доставке и поддержке продукта / бизнеса. Я лично хотел бы исправить весь плохой код, с которым я столкнулся, но я не могу посвятить этому 100% своего времени - я просто никогда не смог бы закончить задачу / проект, назначенный мне тогда.
Спонг

3
@sunpech Но чистка намеренно плохого кода - это не то же самое, что чистка любого кода. Речь идет не о том, чтобы сделать ваше приложение более «красивым», а о том, чтобы исправить вредоносный код, который был помещен туда специально. Это все равно что сказать, что врач не должен вынимать ножницы, которые коллега забыл у пациента, потому что кардиоторакальная операция - это спасение жизни, а не то, насколько красивы швы.
Хила

4

Такое отношение является симптомом чего-то худшего.

  • Поддерживает ли руководство конкуренцию разработчиков?

  • Где командный дух?

  • Задачи назначаются кем-то другим, кроме самой команды?

  • ...

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

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

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

Если это действительно не работает. Удалите этого разработчика из команды.


4

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


2

Как бороться с такими конструкциями? Проигнорируйте проблему или просто удалите оскорбительный код? Уведомить своего менеджера или поговорить с человеком, который ввел «функцию»?

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

Однако, учитывая, что мы не знаем реальных фактов и реальных людей, вовлеченных в процесс, никто из тех, кого вы описываете, не должен уделять много внимания нашему совету / стоимость 2 цента.

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.