Как я стал вайбкодером (а казался, наверное, приличным человеком)

от автора

Почему вы видите этот скрин? — читайте дальше, объяснение будет. В целом это не про игры.

Почему вы видите этот скрин? — читайте дальше, объяснение будет. В целом это не про игры.

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

Все-таки Java, Spring Boot, Vaadin, Flowable, Camunda, Jmix, RabbitMQ — вполне себе энтерпрайзно. И поначалу казалось, что все эти ИИ-шечки об такой стек зубы пообломают. Потому что эти фреймворки не настолько популярны, чтоб им было на чем учиться, что документация далеко не полна и некоторые вещи приходилось просто спрашивать конкретного человека, потому что иначе никак.

О себе: Я, конечно, не настоящий разработчик. Мой путь в ИТ был достаточно извилист и разнообразен, но чтоб прям код писать — это было очень давно.

Мой первый язык был PL/I, и это было интересно. Потом Fortran, Pascal — и сразу C++ на курсах в Интерквадро, если кто помнит такую контору. C++, конечно, изрядно вправил мозги и можно было бы двигаться по пути разработчика. Но дальше унесло меня в сторону продаж софта, тут уже кодить не приходилось, но приходилось знать понемногу обо всем, потому что интернета не было (скоро мы все ощутим, как это) и нужно было помнить про все софтины, что стояли у нас на полке.

Потом всякое было — внедрял документооборот, руководил проектом, строил партнеров, был журналистом, редактором журнала про авиацию, аналитиком, дистрибутором одного западного вендора — странная какая-то смесь))

О, среди этого затесался короткий инженерный эпизод: взяли меня на проект внедрения ECM в Дубае — оказалось, руки-то помнят! Но это было, как бы сейчас сказали, лоукод.

А потом мне попался Jmix, и я увидел, что даже с моим скромным опытом, я могу собрать работающее приложение и показать клиенту — причем, на Java, которой я раньше в глаза не видел. Но таки, имея C++ в анамнезе даже после 30-летнего перерыва это оказалось не так больно.

В последнее время занимался тем, что вел курсы по BPM для Java-разработчиков. Да, такое бывает. Тут встречаются два мира, два шапиро: для нормальных разрабов весь этот BPMN это что-то на аналитическом. Но без разработки BPM-проект не взлетает, аналитики сами, кроме как диаграммы рисовать, ничего не могут. Вот я и пытался свести эти два мира — и попутно приходилось кодить, иначе, как бы я мог преподавать?

Первые опыты

Вот что-то банальное написать, какой-нибудь конвертер или посчитать что-то по определенному алгоритму или там подключить какую-то библиотеку — это они могут. Но чтоб прям целое приложение сгенерить — это вряд ли.

С огромным скепсисом я читал в сети, как люди рассказывают, что агенты им пишут прям готовые штуки, прям всю жизнь их автоматизировали вдоль и поперек, что программисты вовсе не нужны — вот оно, будущее!

Ага, щас! Так и поверил. Я ж понимаю — одно дело, когда оно просто как-то работает и совсем другое, когда надо ставить в прод.

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

Также офигительно он пишет всякие regex’ы, работу с json’ами и прочую рутину, это у него не отнять. Потом стал давать ему задачки посложнее, типа подключить мне RabbitMQ. Руками я такое делал, в принципе представляю как, но тоже ведь вполне рутинная задачка — путь робот вкалывает. Признаю, он сделал лучше.

Вот так понемногу я и втянулся. Сначала в режиме чата и копипаста — я ему вопрос и кусок кода, он мне ответ и свой код. А дальше оно то ли работает, то ли нет — тогда я ему стек-трейс, исправляй давай!

И даже в таком режиме это было большое подспорье. Мы с чатиком стали делать уже довольно сложные вещи.

Большой проект

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

Сначала вместе с ChatGPT мы проектировали архитектуру и набрасывали модель данных. Да, это отличный напарник, хотя и чрезмерно льстивый. Что ни скажешь — а от такой: «Божечки, какой ты умный! Как ты офигительно придумал!» — Понимаю, что врет, стервец, однако ж приятно. Тем не менее, мысли он подкидывает дельные и это помогает думать.

Короче, сделали мы с ним большое прекрасное ТЗ, как говорит нынешний американский президент — а дальше-то что? Официально я аналитик, кодить мне не положено, ресурсов нет, разработчики заняты на много лет вперед.

Типичная картина, не правда ли? — Хорошие идеи годами лежат мертвым грузом, потому что нет рук, чтобы их реализовать. Даже чтоб запилить MVP и потестить гипотезу. Тут надо либо иметь админресурс, либо уж очень хорошо подвешенный язык, чтобы уболтать руководство дать бюджет. Не имея ни того, ни другого, оставалось только задвинуть идею в долгий ящик.

Потому что даже с помощью ChatGPT и всей их честной компании чат-ботов, копипастом из браузера такие проекты не делаются. Масштаб имеет значение, как ни крути. Точечно это может помочь, но проект в целом тяжело будет вытянуть.

И тут мы познакомились с Курсором. Слышать-то я о нем слышал, но как-то все руки не доходили попробовать. А зачем? — Я и так сижу в удобной Intellij IDEA, у меня есть Jmix, который на раз генерит сущности и экраны — зачем мне какая-то другая IDE?

Пожалуй, это было ключевым стоппером — привычка к удобству и привязанность к инструментам. Хочешь сделать навороченный JPQL-запрос — вот тебе конструктор, только кликай мышкой. Хочешь листенер привязать — пожалуйста, один клик. Что еще человек надо?

Тут надо сказать, что ранние версии Курсора не очень-то возбуждали. Ну, подумаешь, есть встроенный ИИ-ассистент. Тот же ChatGPT в отдельном окне это решает. Tipping point, переломный момент, как говорит Малколм Гладуэлл, случился в октябре 25-го года, когда он превратился в кодинг-агента. Это действительно был прорыв!

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

Вы скажете, что Клод был раньше. Согласен. Но сама мысль делать проект без IDE, только из командной строки — как-то фу, это как переехать с Windows на DOS. Тут меня, конечно, закидают мокрыми тряпками апологеты Линукс, но по мне нужна наглядность, когда у тебя в проекте под тысячу классов. В общем, Клод едва ли бы мне подошел.

И вот, мы познакомились с Курсором в январе и понеслась! За три месяца мы сделали не только оргмодель с процессами, как я задумывал изначально. Мы еще прикрутили к этому делу агентов — ибо если у меня уже есть оргструктура и исполнители, то не все ли равно, кого назначать на задачу — человека или агента?

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

Масштаб такой

Масштаб такой

Lessons Learned

Что я могу сказать — это офигительный опыт! Действительно получается продвигаться очень быстро. Да, агент часто косячит — то усложняет на ровном месте, то переделает, что уже работало и оно снова не работает. Но он же и исправит, если что. Но неприятно, что на этом зазря сгорают токены.

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

Для себя я выработал такую схему:

  • Проект открыт в IntelliJ IDEA, где у меня все привычно и все тулзы под рукой; отсюда же я делаю коммиты. Передать это агенту — пока не пробовал.

  • Этот же проект открыт в Cursor, где я пишу задания агентам. Вглубь пока не залазил — скиллы, субагенты, разные тонкие настройки, с этим еще разбираться, целый новый мир.

  • Когда агент докладывает, что все сделал, запускаю сборку, если есть баги кидаю ему обратно. Знаю, тут не очень эффективно, просто пока не готов переехать целиком на новую IDE. Если все ОК, даю следующую задачу.

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

В сухом остатке:

  • Программисты реально не нужны. Те, которые только кодят и ничего больше не делают. Это не значит, что уволят всех. Потому что реальные люди всегда делают что-то еще, кроме того что кодят. Просто работы по кодингу станет в разы меньше.

    Это месседж для руководителей и самих программистов.

  • Открылось окно возможностей для тех, кто знает, что надо делать, но не имеет ресурса делать это вручную — ни своих сил, ни кого-то нанять.

    Как говорится, дерзайте!

Just for Fun

Чисто для развлекухи мы с Курсором как-то вечером решили забацать игру. Но не просто игру, а на нашем стеке — Spring Boot, Vaadin, Jmix.

Ну действительно, чем ваши менеджеры будут заниматься, пока агенты делают за них их работу? — Пусть сидят, играют. Но в безопасном корпоративном контуре! И что может быть лучше, чем старый добрый Сапер из Windows? (Если кто-то думает, что может — валяйте, делайте свое.)

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

Тут я поставил себе условие — ни строчки кода руками — и таки получилось!

Нашел в интернете описание игры, руками только сгенерил проект, а дальше закинул все это агенту. Иногда приходилось ловить его за руку — например, он собрался было все запилить на CSS и сделать чисто браузерную игру. Нет, дружище, это не наш путь! Мы делаем нормальную Jmix-форму, программно генерим gridLayout, в каждую клетку кладем button, вешаем события на клик и на дабл-клик, чтобы открыть поле или поставить флаг.

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

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

Репозиторий здесь: https://github.com/digitilius/jmix-minesweeper
Ставьте звезды!

ссылка на оригинал статьи https://habr.com/ru/articles/1025262/