Вайб-кодинг для старцев

Всего каких-то четыре месяца назад Андрей Карпаты, который есть важная кость скелета, сотворившего нам ИИ и автопилот Tesla, бросил в народ фразу «вайб-кодинг». Ну и что, теперь эта фраза просочилась во все словари и стала основной темой для программерских подкастов. Вот жеж выпендрёжник.

Но за вайб-кодингом сидит красивая концепция: человек с ушами (и не обязательно программист) устанавливает себе дружелюбный искуственному интеллекту редактор кода, и говорит тому, что делать. Причём, не «напиши мне цифру десять в файлике», а сразу «сваргань социальную сеть для дам с низкой социальной ответственностью, да с фотографиями». Редактор кода, как правило Cursor, предлагает решение, которое обязательно надо принять как есть, и затем попросить сделать что-то следующее. По крайней мере так гласит догма.

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

Идея проекта была такая — у меня на работе постоянно запускаются всякие автоматические задачи — тесты, обновление инфраструктуры, сборка и проверка контейнеров, поиск уязвимостей, и прочая лабуда. Каждая задача состоит из кучи подзадач, и было бы круто если б эти задачи можно было нарисовать в виде какого-нибудь Gantt-подобного графика. Ну типа такого:

Случайный Gannt-подобный график в вакууме

Пользы от этого минимум, добровольно такое программировать я бы не сел, но если заниматься этим будет электронный истукан, то почему бы и нет. К тому же Cursor — это допиленный народный VS Code, так что тут даже инструментов новых учить не надо.

И вот, установив окно в будущее, я отправил в электронные ушки свой первый вайб-запрос:

  • Коллега, а инициализируй-ка мне проект на Go. Ну там папочки создай, модули проинициализируй, README файл напиши, да прочее. Будем с тобой сегодня программировать.

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

  • Сударь, а положительно удивлён, так что продолжим. Сегодня мы будем выдирать данные о выполненных задачах из Azure DevOps и засовывать их в Jaeger, чтобы потомкам было красиво. Обмен данными будет проходить через общение с сервисами, поэтому давай и начнём с настройки доступа к ним.

Супермозг продолжил меня удивлять. Хоть я и успел порядком подзабыть Go, но как выглядят стандартные библиотеки примерно представлял, и всё, что подсовывал мне электронный слуга неплохо соотносилось со здравым смыслом. Да, местами мне очень хотелось доколупаться до кода со словами «ну кто же так пишет!», но в целом фигня собиралась и запускалась, поэтому претензии я держал при себе.

Так мы общались с час и написали достаточно много программерской фигни, когда пошли первые серьёзные косяки. Во-первых, Cursor начал застревать на некоторых ошибках. Случалось, что код переставал собираться, я указывал на это, и Курсор честно исправлял ошибку, вставляя другую. Я тыкал пальцем и в это, и электронный долбоклюй исправлял вторую, создавая ошибку третью. Исправив третью, он восстановил первую. И так дальше по кругу. Приходилось лезть в код головой, и думать, чего же он так запутался.

Во-вторых, Cursor иногда демонстрировал просто непроходимую тупость. Вот прямо на уровне бэби-программиста, уроненного в детстве головой на советский кафель. Когда код перестал собираться в очередной раз, я выпалил:

  • Электронный коллега, у вас тут опять не работает.
  • Да, сударь, вы правы, нужно библиотеку установить.
  • Так оно говорит, что такой библиотеки не бывает.
  • Вы абсолютно правы! Ну тогда можно установить что-нибудь другое.
  • Так «что-нибудь другое» не работает с установкой дат!
  • Ну можно дату и не устанавливать.
  • Ты вообще придурок? Весь проект построен вокруг свершившихся в прошлом задач, и мы их импортируем в систему, которая заточена под события во времени — в прошлом и будущем. Без дат мы просто из гумна куличики лепим, а не проект делаем.
  • Вы в очередной раз абсолютно правы, мы делаем фигню. Может, я тогда всё на Python перепишу?
  • Бля, да ты совсем кукухой уехал.

Обычно я матом с GPT моделями не разговариваю, но тут накипело.

Спустя много проб и ошибок выяснилось, что существующими на Go библиотеками моя задача тупо не решается. Вообще никак. Сприпя зубами я согласился, чтобы Cursor переписал проект с Go на Python, что он, потеряв по пути половину уже написанной функциональности, таки сделал.

По итогу код заработал. В самом простом исполнении, c минимальном набором фич и кучей багов, но заработал. Смотреть на код было страшно, у меня руки тряслись, так хотелось его переписать, но я терпел. Цель ведь не в совершенстве была.

Красочная картинка, насыщеная ИИ кодом и данными

Код заработал, а я выучил аж несколько новых вещей.

  • И младшим, и уже средним программистам стоит напрячься. Cursor пишет код лучше, чем и те, и те, но пока ему не хватает здравого смысла понять зачем. Пока.
  • С вайб-кодингом офигенно здорово писать тестовые проекты на выброс. Чисто, чтобы проверить идею и поэксперементировать. Для всяких бизнесменов и стартаперов — просто золотое дно.
  • К продакшену и работе с деньгами такие проекты нельзя подпускать даже на пушечный выстрел, потому что в них ноль безопасности, ноль обработки ошибок, ноль вообще всего, ради чего нанимают взрослых программистов.
  • Со всякими DevOps задачами и инфраструктурой ИИ пока справляется отвратительно.
Личинка вайб-кодера

Удивительным откровением оказалось то, что скорее всего я слишком стар и, не сочтите за выпендрёж, слишком опытен, чтобы вайб-кодить эффективно. Я заточен, чтобы видеть проблемы в софте. Попроси меня построить башню, и я в первую очередь буду думать о её высоте, материалах, составе и устойчивости почвы, розе ветров и, прости госспади, влиянии на местную флору и фауну, прежде чем хотя бы лопату в землю воткну.

Попроси ИИ построить башню, и он за две минуты выстроит шатающуюся хрень из мёртвых котиков на старинном индейском кладбище. Лучшее, что потом можно сделать с этой штукой — это облить бензином тёмной ночью. Но для обкатки идеи или в качестве демки для инвесторов оно подойдёт вполне.

Делав даже такой простенький проект, я еле сдерживался, чтобы не микроменеджить. Я ведь знаю, как надо делать, и поэтому регулярно писал ИИ запросы типа «нет, ты не прав — бери параметром не дату, а задачу целиком, абстрагируйся от конкретики. Вполне может быть, что завтра мы будем сортировать не по дате, а по имени, и ты будешь это переписывать». А мой знакомый, чистой воды управленец, такой фигнёй не заморачивается. Он говорит «что» нужно делать, в то время как я говорю «как», и вайб-кодер из него выходит лучше.

Я даже ChatGPT расспросил, влияет ли опытность на эффективность работы с Cursor, и таки да, у опытных девелоперов сильно искажён взгляд разработку софта, и они склонны мешать ИИ своим мнением. С другой стороны, если ИИ-шний проект будет существовать дольше, чем неделю до инвестиций, то ему уже нужен взрослый программист, чтобы довести проект до ума. Так что старпёры ещё некоторое время будут в безопасности. Но очень некоторое.

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

5 комментариев для “Вайб-кодинг для старцев

  1. Спасибо за познавательную статью! Жду с нетерпением новые записи о жизни, так сказать «занимательные будни канадианца»;)

    1. Да тут за последние 10 лет столько канадских дневников на сайте собралось, что хоть книгу издавай.

  2. Единственное в моём опыте применение Copilot, в котором сгенерированный код работал сразу как надо, — это написание баш скриптов. И то, подозреваю, не потому, что он особо обучен в этой теме, а потому, что я ему задания давал бесхитростные. На более продвинутых языках — 50 на 50, то есть, половина сгенерированного кода сразу в топку, остальное годится как база для допиливания.

    1. У меня с башем тоже самые лучшие результаты. В терраформе copilot удивительно туп, а для всяких жаваскриптов мне просить помощи пока не приходилось

      1. На терраформ пока ещё натравливать Copilot не приходилось, но то, что он предлагает для Ansible, похоже на чёрный юмор.

Добавить комментарий

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