Как убедить коллегу, что дублирование кода плохо? - PullRequest
31 голосов
/ 19 ноября 2010

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

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

Как я могу убедить его, что такое дублирование кода это плохо?

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

Ответы [ 14 ]

26 голосов
/ 19 ноября 2010

Спросите его, что он будет делать, когда обнаружит ошибку в своем коде.Сколько мест ему теперь нужно будет исправить?

Вы также можете показать ему ответы на этот вопрос (Почему опасно копировать и вставлять код?).*

12 голосов
/ 19 ноября 2010

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

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

10 голосов
/ 19 ноября 2010

Здесь есть два варианта:

  1. Он рациональный человек, у которого просто нет большого опыта .В этом случае вы можете рационализировать свой аргумент, возможно, показав ему более понятный пример дублирования кода кем-то еще в вашем коде.Вы также можете найти ошибку в оригинальной копии (или, что еще лучше, несколько ошибок), и сказать ему, что теперь его код неисправен, и он должен это исправить.

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

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

И, наконец, если ваш начальник думает, что вы не правы, вы, вероятно, не в том месте.

8 голосов
/ 19 ноября 2010

Дайте ему копию Рефакторинг .

5 голосов
/ 19 ноября 2010

Улучшите свою версию кода настолько, что он будет разочарован ревностью, а затем скажите - если вы только что связались с моим кодом ...

3 голосов
/ 22 ноября 2010

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

Вы можете запустить детектор клонов поверхкод и просто представить результаты своему менеджеру.

См. Википедия с дублирующим кодом для списка.

Вы можете увидеть примеры обнаружения клонов для различных языков, используя CloneDR детектор.Он предназначен для обнаружения больших блоков кода с непротиворечивыми переименованиями и может точно показать, что произошло.

3 голосов
/ 19 ноября 2010

Потому что, когда вы найдете ошибку, вам нужно изменить ее в двух местах. Потому что, когда вы хотите добавить новую функцию, вам нужно добавить ее в двух местах.

2 голосов
/ 19 ноября 2010

Есть много веских причин, чтобы не дублировать код, а просто спросить ... хочет ли ваша команда поддерживать 100К строк кода (с дублированием кода) или 50К строк кода? Может показаться, что дублирование кода на этом этапе минимально, поэтому ваш коллега не видит важности концепции DRY, но представьте, будет ли он дублировать все больше и больше кода в течение следующих 5 лет. Кто будет поддерживать этот код? Твоя команда? Что если он уйдет с работы однажды? Ваша команда хочет сохранить это дерьмо? :) Если нет, то вы уже сделали очень убедительный аргумент, чтобы не дублировать код, не говоря уже о «больше дублирований» = «более склонных к появлению большего количества ошибок в будущем».

2 голосов
/ 19 ноября 2010

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

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

Ему может быть стыдно, и он не сделает этого в следующий раз (большая победа). Я использовал это 4 раза, и это всегда работало!

Удачи.

2 голосов
/ 19 ноября 2010

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

...