Video Thumbnail

Is Cursor A Net Negative? | Prime Reacts

ThePrimeTime31:24
https://www.youtube.com/watch?v=pQzwlzS2AT0

Содержание

Краткое резюме

  • AI-инструменты для программирования популярны, но часто плохо справляются с задачами и могут снижать продуктивность.
  • Пример AI-сгенерированного кода из редактора Cursor показывает, что код часто избыточен, содержит бесполезные проверки и спорные решения.
  • Основная проблема — не в самом инструменте Cursor, а в том, как огромные языковые модели (LLM) обрабатывают и генерируют код без контекста и осознанных решений.
  • AI решает только конкретные задачи, не понимая контекста, что приводит к повторению однотипных, плохо структурированных фрагментов и недоработкам.
  • Чтобы добиться пользы от AI, программисту необходимо критически оценивать и дорабатывать код — без этого риски ошибки и уязвимостей возрастают.
  • Важнейшие решения в программировании нельзя полностью передать AI — нужен человеческий контроль и понимание.
  • Безответственное использование AI-кода может привести к крупным проблемам, особенно в безопасности.

Анализ AI в программировании: пример с редактором Cursor

Автор видео, опытный разработчик, который предпочитает использовать редактор Neoim, кратко делится впечатлениями по поводу AI-ассистированных редакторов. Он признаёт, что периодически пользуется Cursor и другими AI-инструментами, но скептически относится к эффективности таких систем.

Негативные эффекты AI на продуктивность

«Эти инструменты могут быть хуже, чем бесполезны — они снижают продуктивность».

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

Пример из Cursor: «лучший» AI-сгенерированный код

Cursor демонстрирует генерацию кода для функции, считывающей строку с ограничением по длине из бинарного протокола на Rust.

Основные ошибки и недочёты:

  • Бесполезная проверка длины строки:
    Код читает длину в U16, но вводит проверку if length > max_length, где max_length — максимальное значение для U16. Эта проверка избыточна и никогда не будет истинной. Вместо неё логично использовать более реалистичный лимит или вовсе пропустить условие.

  • Сомнительная «санитизация» строки:
    Код фильтрует байты, считая символы ниже 32 «плохими», но подобная фильтрация недостаточно чётко определена. Различные контрольные символы и пробельные символы по-русски и в Unicode трактуются неоднозначно, некоторые из них могут быть важны в определённых контекстах.

  • Некорректное использование байтов вместо символов:
    Работа напрямую с байтами, а не с Unicode-символами, усложняет понимание и может вести к ошибкам при обработке текста.

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

Цитата авторитетного эксперта:

«Лучшие инструменты, вроде Clippy в Rust, подскажут программисту, что условие никогда не может выполниться».

Таким образом, AI часто не совершает простых оптимизаций и предупреждений.

Почему AI сгенерировал такой код?

Автор обращает внимание, что проблема не в Cursor, а в самих языковых моделях, которые генерируют код «по поводу и без» без понимания контекста и целей.

Он подчёркивает, что AI буквально реализует инструкцию в промпте, но не может оценить смысл или качество:

«AI — это очень быстрая автозаполнение, она не думает и не рассуждает».

Пример с проверкой длины показывает, что AI выполнил задание (добавить проверку), но с точки зрения логики и здравого смысла сделали это непродуманно.


Споры о «подходящем» коде и контексте валидации

Касаясь санитизации строк в бинарном протоколе, подняты вопросы:

  • Как правильно обрабатывать управляющие символы и пробелы с учётом различных стандартов ASCII и Unicode?
  • Нужна ли строгая валидация со сбоем при ошибке (ошибка протокола), или достаточно просто отфильтровывать символы?

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

«Программирование — это принятие большого количество решений, и AI не предлагает объяснений или альтернатив, он просто выбирает один вариант, зачастую неудачный».


Ограничения AI: неспособность принимать глобальные решения

Автор делится наблюдением, что AI склонен к повторению однотипных вычислений и не выделяет повторяющийся код в функции — то, что сделал бы человек:

«AI встраивает всю математику и логику тысячи раз подряд вместо того, чтобы выделить отдельные функции».

Это происходит из-за природы языковых моделей — они не строят внутреннюю структуру программы, а просто продолжают текст.


Как лучше использовать AI в программировании

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

Ошибки безопасности и риски

Особое внимание уделено безопасности. Пример из видео — сгенерированная система сессий позволяет злоумышленнику подделывать user-id, так как данные не защищены криптографически.

«Люди, которые слепо используют AI, рискуют выпустить в продакшен уязвимый код, непреднамеренно создавая дырки в безопасности».

Автор вспоминает свой опыт ручного создания JWT-подобного механизма с SHA-256, что показывает необходимость понимания фундаментальных принципов безопасности.


Итоговые мысли и личная позиция автора

  • Автор поддерживает критику и аргументы, приводимые в статье, отмечая высокую информативность и важность осознания ограничений AI.
  • В то же время он считает, что AI-инструменты, вроде Cursor, были неправильно обвинены в проблемах, которые больше связаны с LLM и неправильным использованием.
  • Сам автор не использует AI активно, но признаёт, что иногда применяет его для разработки и генерации простой или неважной части кода.
  • Главное — человеческий контроль и принятие решений остаётся ключевым фактором.

«Писать код — это не только решение задачи, но и принятие важных решений, которые AI пока не может взять на себя».


Заключение

На данный момент AI — полезный, но несовершенный помощник в программировании. Он:

  • генерирует много «шума» и дублирует код,
  • не понимает глубины задач и контекста,
  • не принимает ответственность за качество и безопасность,
  • требует от разработчика внимательного подхода, исправлений и контроля.

Потенциал AI велик, но нужна разумная интеграция в рабочие процессы и чёткое понимание его ограничений.