Последний месяц я провел в увлекательном взаимодействии с AI-средой для программирования, щас все расскажу. Если кратко — наступившее будущее прекрасно, настоящих программистов роботы не заменяют, но кажется это ненадолго.
Идея и реализация
У меня давно ждала своего часа идея затащить в блог посты из запрещенной ныне соцсети, подарившей нам популярность селфи и легендарного хэштега #мирдолжензнатьчтояем — по множеству причин, которые я уже описывал.
Выгрузку данных из сервиса я настроил давно, а вот импорт их в блог сделать (а лучше настроить так чтобы он был непрерывным), руки не доходили. Причем задача эта средней трудности, и для программиста-универсала вроде меня скорее скучная количеством деталей, чем сложная. Но были нюансы которых мне делать не доводилось, да и тупо синтаксис пхп вспоминать спустя много лет после крайних работ на нем пришлось бы.
Идея в общих чертах была такая: микро-сайт на хостинге рядом с блогом, такой комбайн для сервисных вещей — страничка со списком постов на импорт и возможностью их редачить, большая зеленая кнопка «сделать красиво» которая импортит сразу всё, этот же функционал доступный по апи. Также хотелось дополнительные плюшки для управления блогом — кнопку «найди все хэштеги в постах и привяжи к ним теги Эгеи» и кнопку «найди все ники и отформатируй их». Посты для импорта планировал загружать в формате инсталоадера по ftp.
В майские праздники я решил попробовать решить задачу с ассистентом, при этом я в этом слабо разбираюсь, и способы работы с нейросетями осваивал на ходу и методом тыка. Среду выбрал по отзыву Вастрика, Cursor.
Опьянение вайб-кодированием
Все довольно просто: я поставил среду (это просто VSCode с дополнительными плюшками) и начал прямо в окошке писать чего я хочу получить, а ассистент сам создавал файлы и писал в них код, каждый раз показывая изменения на манер гитовых. Я где-то слышал что роботам надо давать задания подетальней типа как джуну, да и сам на момент старта целиком проект себе не представлял, так что я начал накидывать что-то вроде:
- Вот структура базы (я положил в проект sql файл бэкапа базы). Сделай сайт который будет запрашивать логин и пароль в базу и выводить на экран список названий постов из такой- то таблицы.
- Сделай вход на сайт закрытым капчей
- Сделай список постов активными ссылками, ссылку бери из такого то поля базы
- Добавь список тегов на сайте, они лежат в такой-то таблице
- Вынеси эти два списка на отдельные страницы к которым можно будет попасть из главного меню
- Вынеси css в отдельный файл
- и так далее
После каждого сообщения нейросеть делала «трррунь», добавляла в простыню кода куски и в окне диалога подробно описывала что именно и зачем она сделала.
При этом многие вещи работали как магия — нейросеть сама без разьяснений понимала как связаны между собой таблицы в бд например, и задания я формулировал хоть и кусочками, но на довольно простом человеческом языке. Нейросеть понимала контекст, в общении можно было упоминать «предыдущую страницу» и конструкции вроде «форму импорта исправленного поста»
Другой кайф — сеть много что добавляла, что я не просил и даже не думал об этом, применяла какие-то приёмы программирования и формировала архитектуру решения на низком уровне, и даже предлагала дополнительный функционал. О некоторых вещах при постановке задачи я не подумал, а некоторые решения я бы сам так не написал. А в части дизайна, например, она сама выбирала и кодила кнопки, иконки, выбирала цвета, форму и расположение полей — то есть сразу выкидывала готовое решение от которого можно было бы двигаться дальше (или оставить как есть, что в основном и происходило).
Эйфория
У нас было пять файлов плохого html, php, css и жаваскрипта, три бесплатных чатбота, триалка среды ai-программирования и веб-сервер на шаред хостинге. Не то чтобы это был необходимый запас для вайб-кодинга, но если начал делать стартап-вебсервис ни черта не понимая в программировании, становится трудно остановиться. Единственное, что вызывало у меня опасение — это логотип. Ничто в мире не бывает более беспомощным, безответственным и порочным, чем те кто генерит логотипы через нейросеть. Я знал, что рано или поздно мы перейдем и на эту дрянь.
В целом это работа с агентом-ассистентом выглядит как реальная магия, как живой, профессиональный и настроенный угадывать твои потребности айтишник-человек — я довольно быстро стал именно как общение с партнёром или подчиненным это воспринимать. Причем, несмотря на косяки в работе, это не был подчиненный тупой, ленивый, игнорирующий или отлынивающий — поэтому чисто эмоционально я дико кайфовал от процесса, продуктивности и ощущения слаженной работы. В реальной жизни я очень редко получаю рабочий контакт такого уровня, и сильно трачусь на необходимость заставлять кожаных переделывать что-то и преодолевать их сопротивление.
Если ассистент меня не понимал или делал что-то не так, можно было сказать об этом, пояснить, и он исправлял код. Также если что-то не работало в итоге, можно было сказать об этом сообщив о результате («страница пустая», или «выясни почему запись в базу не добавилась для такого-то поста»), часто после этого сеть сама исправляла в следующей итерации код. Если предлагаемые исправления не помогали, ассистент обычно предлагал добавить расширенное легирование или проверки и прислать ему полученную подробную диагностику, после чего проблема обычно решалась.
Я шарашил функционал за функционалом, исправлял ошибки — точнее, все это делал смышлёный исполнительный программист-единомышленник, а я только принимал архитектурные решения, придумывал фичи и тестировал их работу. О, это было прекрасное время, и часы летели незаметно.
Похмелье
Довольно быстро сервис был в общих чертах готов, но с ростом функционала и размера полезли проблемы. При ошибках которые исправить нейросеть сама не могла, мне разобраться в простынях кода было непросто. Просьбы рефакторить или исправить ошибки иногда приводили к удалению нужного кода в других местах или дублированию функций — вообще в смысле функций код у ней выходил довольно плоский и громоздкий, с кучей повторов и лишнего текста. Взаимодействия блоков были логичными — но эту логику выбирал не я, а значит при необходимости что-то понять нужно было разбираться. Классно что нейросеть даёт говорящие названия переменным и функциям, но иногда понять почему именно pageID передаётся в данном конкретном месте, было тяжело.
Здесь нужно отметить, что с подобными сбоями помогают бороться правильные промпты — когда сначала ты говоришь нейросети как подходить к работе (что то типа «обдумывай трижды» « не удаляй работающий код» и «программируй как синьор после отпуска на Бали и трёх лавадовых рафов»). Это сильно влияет на результат, под это заточен функционал среды (например, можно привязывать такие инструкции к разным разделам проекта, и задавать их в настройках), а главная горячая тема у многих амбасадоров темы — обмен этими магическими заклинаниями. В целом кроме способности формулировать задачу в вайб кодинге критично важен этот скилл подбора тайных фраз — я, повторюсь, влез в эту петрушку без подготовки.
В итоге, спустя примерно часов 12 чистого вайб-кодинга буквально без единой строчки собственноручно написанного кода, я получил почти полностью рабочий но довольно неряшливый по структуре проект.
Здесь в процессе попыток исправить один баг мы с ассистентом зашли в безвыходный тупик и все полетело к чертям. Хорошо, что одна из не сильно испорченных попыткой выйти из тупика версий у меня сохранилась — это кстати странный момент, почему в IDE не встроен гит который бы комиттил каждое изменение.
Я сдался и решил приводить код в порядок, чтобы потом дописать всё вручную.
Новая надежда
В этот момент случились две вещи. Во-первых у меня закончились триальные 150 запросов (так как я мельчил этапность задач, и ещё очень много пытался поправить ассистентом код когда мы зашли в тупик). Тут я словил удивительное чувство, похожее на зависимость — мне очень хотелось продолжить и невозможность этого просто выбешивала. Я уже упоминал об удовольствии в процессе — оказалось это такой себе кайф с быстро возникающей аддикцией. Отследил и очень удивился.
Я взял тайм-аут, поискал инфу и попытался подобрать альтернативу или способ заставить курсор работать дальше. В процессе этого я узнал много нового про подходы (в том числе и про промтинг, о чем уже упоминал). Но бесплатные аналоги искались плохо, ничего из найденного не заработало, я понял что углубляюсь в тему и ухожу от первоначальной задачи, поэтому я просто оплатил месяц за 20 баксов, чтобы завершить эксперимент.
Вторая вещь — в этот момент я узнал и распробовал совместное кодирование с ассистентом. Это когда ты либо пишешь код в среде, а она автоматически угадывает и подставляет следующие строчки и слова (и это очень круто работает), либо ты описываешь небольшую задачу прямо на месте — типа, «напиши тут код который от форматирует текст так—то»
Это оказалось классным компромиссом между количеством работы которую делает робот, и контролем над этим. В таком гибридном варианте я и работал до конца.
Удивления и инсайты
Как я уже писал, многие вещи (оcобенно в плане подхода) мне, как человеку не сильно погруженному в актуальные тренды разработки веб-сервисов, были или неизвестны, или непривычны. В этом плане нейросеть — классное подспорье и в выборе концепций, и в реализации. Здорово также, что многие вещи она сразу пишет безопасно, применяет нужные техники, и на уровне элементов и блоков это добротный код.
Ещё нейросеть хорошо решает муторные простые задачи, типа написания тестов или комментариев — то, что хорошо бы сделать, но лень или жаль тратить силы. Тут ты тратишь только рублики на запросы.
Нейросеть классный эксперт и инструмент в области неприятно-сложного и редко нужного вроде регулярок. При этом она отлично понимает запросы на человеческом и модифицирует код алгоритмов под них. Например, мне нужно было находить в тексте поста ники, нейросеть это легко сделала, но при проверке всплыл нюанс, что в никах внутри могут быть точки, но точку на конце ника (если он например в конце предложения) частью ника считать не нужно. Я указал ИИ на это и сеть поправила функцию (а заодно наводящими вопросами заставила меня принять решение и по другим символам).
При этом же, довольно простую задачу по замене ников на форматированные версии, она не решила за несколько итераций, наговнив страницу кода — тут я применил джедайства времен школьных олимпиад и сделал сам в 9 строчек. Видимо, на листингах из Троицкого Байтика Sonnet не училась.
Ещё нейросеть классно обьясняет уже готовый код — в ходе проекта мне нужно было понять кое-что из оригинального кода Эгеи, и чатбот всё внятно разобрал по винтику, хотя тут можно и скопипастить нужное в обычного чатбота, именно среда тут дополнительных очков не даёт.
Нейросеть умеет в инфраструктуру — если при решении поставленной ей задачи нужно не только накодякать простыню, но и что-то поставить, настроить, зарегистрировать во внешнем сервисе и так далее, она даст подробные инструкции и поможет разобраться если что-то не взлетело. С учётом того, что уже существуют агенты, умеющие работать в интерфейсах операционок, скорее всего уже возможно полностью отдать эту работу ИИ, но это я не тестил.
Я уже упоминал про эмоциональную составляющую — на такую работу быстро подсаживаешься, а агента начинаешь воспринимать как человека, по крайней мере так у меня. Думаю, если поработать так непрерывно несколько месяцев, возникнет конкретная такая привязанность как к классному напарнику и другу.
Итоги
Пока что нейросети-программисты в режиме вайб-кодинга напоминают миддла с СДВГ: они знают и умеют дофига в технологиях, шарят в приёмах и архитектуре, хватаются за задачи творчески и выдают быстрый результат. Однако они неряшливы, теряют контекст, путаются, иногда не могут выйти из тупика даже в не очень сложных случаях, могут портить и не понимать свой же код.
Самостоятельно и полностью они вполне могут что-то написать, и в зависимости от сложности и типичности задачи это может быть даже довольно большой проект, который будет работать.
В плюсах такого подхода — низкий порог вхождения, когда даже далекий от технологий человек может получить сервис или результат. Быстрый MVP, прототип, как-то работающая иллюстрация или неглубокая реализация идеи в области программных продуктов теперь доступна буквально всем. Что-то простое и рабочее в типовых задачах с твоим именно нюансом, чего нет в готовых продуктах (своё собственное что-то с блэкджеком и шлюхами) — тоже.
Минус — при дальнейшем масштабировании этот скайнет становится монструозным и неуправляемым, при этом поправить или переделать его ИИ сам не может, а кожаному влезть становится нереалистично. Использовать серьезно такое невозможно или нельзя (на хайпе старта были истории как люди воспринимали такие макеты своей идеи за настоящий продукт и быстро обжигались, в том числе финансово). Поэтому в целом чистый вайб кодинг пока вещь нишевая, хоть и мощная.
Если же профильный специалист (даже невысокого уровня) использует ассистента для решения подзадач и как дополнятор кода, сохраняя за собой контроль архитектуры проекта — то невероятный буст к производительности и скиллам. Если проводить параллели с моим профессиональным и жизненным опытом (а я, малята, в этих ваших комплюктерах четвертый десяток разменял) — это как вместо юзания локальной справки MSDN на компе получить доступ к интернетам (причем к их нынешнему содержанию, со всей базой знаний, поиском и прочими стековерфлоу).
29 августа 97-го еще впереди
В финале — несколько ремарок.
Всё вышесказанное касается довольно примитивного уровня работы с ассистентом, промпт инжиниринг решает многие проблемы и сглаживает шероховатости, я взял первый попавшийся доступный в РФ сервис с полубесплатной подпиской и вообще это всё записки дилетанта.
Второе. Я пишу это в точке, когда публично доступным текстовым LLM всего три года, а ассистентам-программистам и того меньше, и уже сейчас агент может писать код на уровне крепкого миддла. Я смотрю на будущее профессии программиста пессимистично, потому что происходящее уже доказало жизнеспособность нейросетей в области технологий, темпы прогресса здесь очевидны и невероятны, и чисто по экономическим причинам скоро будет незачем учить и содержать программистов. И если уже существующие переквалифицируются в промпт-продактоунеров и ai-CIO или уйдут из профессии, то откуда массово возьмутся новые спецы, понимающие что там под капотом, в условиях когда нет задач для набирания опыта сисадминам-эникейщикам и программерам-джунам, непонятно.
Ну и третье — если нейросети сейчас настолько сильны в интеллектуальных и цифровых задачах, и если темпы развития такие как мы видим, то единственное что удерживает человечество от гибели это то что цифровая команда от робота пока не может на системном уровне привести к действию в реальном мире.
Пока что они (теоретически) могут не притормозить одну теслу перед пешеходом или повернуть рули у одного самолета, и это небольшая, локальная угроза. Но если мы дадим им системный интерфейс в физический мир, управление глобальными системами вооружений, инфраструктурными объектами или производством техники, будущее человечество будет предрешено. К сожалению, мировая гонка уже вошла в стадию когда разгоняться в ней можно только за счет ИИ, и все это делают, но в момент когда управлять этой телегой без ИИ станет невозможно, тормозить уже будет некем и нечем. А значит наступление всего этого — только вопрос времени.
Ну а пока человеки ещё не покинули шарик, я довольный импортирую через удобный инструмент в блог старые посты из иг, и прикидываю что бы ещё написать вместе с моим новым другом-программистом. Он классный!