← Назад к обзору

Копипаста

Сначала были только книги и журналы. Код из них, конечно, можно было перепечатать, но к катастрофам это не приводило.

Появился Google (как первый удобный поисковик), и разработчики стали много гуглить. Непонятные куски кода стали появляться в проектах. «Эта штука делает то-то, и не трогайте внутри» стало нормой. Но такими кусками закрывались какие-то дыры, где компетенций не хватало.

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

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

Симптомы

  • В проекте фрагменты «откуда-то из интернета», которые никто не понимает до конца.
  • Мелкие копии одного и того же кода в разных местах.
  • «Не трогайте внутри — работает же» как принцип.
  • Код, сгенерированный ИИ, без тестов и без понимания граничных случаев.

Почему возникает

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

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

Пример

«Плохой» вариант: скопированный сниппет без понимания и с непроверенным граничным поведением:

# взято со StackOverflow, не трогать
def parse_dates(s):
    import re
    return [d for d in re.split(r'\s+', s) if d]

«Хороший» вариант: явное понимание и тест на граничные случаи:

def split_tokens(s: str) -> list[str]:
    """Разбить строку на токены по пробелам, пустые — пропустить."""
    return s.split()

def test_split_tokens():
    assert split_tokens("a b") == ["a", "b"]
    assert split_tokens("") == []

Как исправить

  • Не вставлять код, который вы не понимаете построчно.
  • Сводить дубли в библиотеки и функции.
  • Код из интернета и от ИИ — пропускать через код-ревью и тесты.
  • Объяснять «магические» фрагменты комментариями, пока не разобрались.