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

Всего каких-то четыре месяца назад Андрей Карпаты, который есть важная кость скелета, сотворившего нам ИИ и автопилот 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, и таки да, у опытных девелоперов сильно искажён взгляд разработку софта, и они склонны мешать ИИ своим мнением. С другой стороны, если ИИ-шний проект будет существовать дольше, чем неделю до инвестиций, то ему уже нужен взрослый программист, чтобы довести проект до ума. Так что старпёры ещё некоторое время будут в безопасности. Но очень некоторое.

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

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

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