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

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

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

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

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

14 ответов


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

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


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

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


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

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

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

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

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


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


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


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

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

посмотреть Википедия на дубликат код список.

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


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


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


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

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

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

удачи.


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


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


Он, вероятно, предполагает, что он не сломался и не будет. Кроме того, совершенное-враг хорошего. Я не думаю, что он не осознает опасности копирования/вставки, у него просто другая оценка потенциала ошибки, чем у вас.

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


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

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

Если вы выше его, просто "попросите" его сделать по-вашему...


во-первых, признайте, что он прав: copy-paste действительно быстрее теперь.

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

Это идея Ивара Якобсона энтропия программного обеспечения