РЕДАКТИРОВАТЬ: я изменил свое мнение по теме, поэтому я перепишу это. Существует огромное взаимодействие между абстракцией и дублированием. Дублирование — это хорошо, когда сейчас есть похожие вещи, но они, скорее всего, будут меняться и отличаться друг от друга. Абстракция хороша, когда действительно есть одна концепция, которая является общей для разных частей кода. Однако, если есть действительно отличная абстракция, она, вероятно, уже где-то в библиотеке. Лично я не слишком много абстрагируюсь, если только не начну видеть это повсюду. Это намного проще в статически типизированных языках, потому что они позволяют вам проводить рефакторинг с меньшим страхом поломки API, но все же это возможно и рискованно для всех. Мое эмпирическое правило — не абстрагироваться, пока вы не используете один и тот же код более 3 раз. К тому времени вы либо увидите, что действительно является общим, а что часто отличается.

Ниже моя старая мысль:

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

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

Это мои мысли.