Як я перейшов на вайб-кодинг

💡 Усі статті, обговорення, новини про AI — в одному місці. Приєднуйтесь до AI спільноти!

Стрибок у глибоку воду

9 місяців тому ми почали працювати над новим проєктом. Було зрозуміло, що на ринку є прогалина, але через декілька місяців її закриє купа рішень. Тож швидко згенерували MVP, потім перегенерували його декілька разів після отримання фідбеків. Відтоді я перестав писати код самостійно.

Виклики на старті

Згенерований код був жахливої якості — неструктуровані скрипти на тисячу рядків. Але він працював; зовні рішення виглядало добре та досягло вау-ефекту у стейкхолдерів. Тож почали його розвивати та поступово покращувати якість.

Команда активно взялася за рефакторинг неструктурованого коду. У процесі чітко проявилася проблема мержингу. Найбільші витрати часу припадали на узгодження змін.

Кількість паралельних змін суттєво зросла. У короткий термін код змінювався настільки, що втрачалася його впізнаваність. Під час обговорень доводилося додатково перевіряти деталі реалізації. Це призвело до втрати відчуття «володіння кодом» (ownership).

Що реально працює

Я використовую GitHub Copilot, тому всі подальші рекомендації базуються на досвіді роботи саме з цим інструментом. Розумію, що з іншими тулами оптимальні підходи можуть відрізнятися. До того ж усе дуже швидко змінюється.

  1. Важливо розуміти можливості та нюанси роботи обраного інструменту. Паралельно з початком проєкту я пройшов сертифікацію по GitHub Copilot. Це якісно змінило підхід та ефективність роботи.
  2. Набагато зручніше працювати з монорепозиторієм, коли всі частини рішення, включаючи документацію, знаходяться разом. Це полегшує пошук потрібної інформації для агентів та дає змогу генерувати функціонал end-to-end.
  3. У проєкті має бути файл AGENTS.md. Це для агентів як README.md для розробників. Він має бути невеликий за розміром, із чіткою структурою та посиланнями на окремі документи щодо кожного аспекту архітектури чи прийнятих конвенцій. Це покращує якість згенерованого коду та мінімізує використання токенів.
  4. Важливо вчасно перемикатися між агентами: Ask, Plan, Agent.
    • Ask. Коли працюєш у команді, змін настільки багато, що перестаєш знати код. Потрібно прояснювати поточні деталі реалізації перед початком роботи над новою фічею. Інша справа, коли працюєш самостійно. Наприклад, при роботі з власним хобі-проєктом (якщо цікаво, YOWAY: піші прогулянки містами з аудіо) я майже не потребую Ask-агента.
    • Plan. (❗️❗️❗️) Для мене це найважливіший етап реалізації будь-яких змін — від маленьких виправлень до великих сторіс. Надаю вимоги, отримую детальний план реалізації, коригую все, що не влаштовує, включаючи назви та структури об’єктів, різні архітектурні моменти тощо. І тільки після цього стартую реалізацію. З таким підходом правки згенерованого коду мінімальні.
    • Agent. Якщо попередні кроки зроблені якісно, на цьому етапі немає жодних проблем. Коли бачу пости, що розробникам не подобається згенерований код, гадаю, вони пропускають планування і одразу заряджають промпт на реалізацію. Я і сам так робив на початку. 😁
  5. Важливо тримати поточний контекст під контролем: чітко розділяти розмови за темами, відкривати релевантні файли та закривати інші в межах розмов, тегати в промптах потрібні файли та об’єкти. Усе це покращує якість згенерованого коду та мінімізує використання токенів.
  6. Не можна піддаватися спокусі пропускати зміни без рев’ю і розуміння деталей.
  7. Не менш важливе — оптимальне планування: розподілені в команді задачі мають бути end-to-end і не перетинатися між собою для полегшення мержингу.

Відчуття після переходу

Чую в розмовах та бачу в постах супротив і незадоволення розробників.

«Генерує неякісний код»

Це вирішується плануванням перед реалізацією. Рівень якості коду відповідає рівню заданих інструкцій при плануванні змін.

«Стало нецікаво, втрачаю відчуття авторства»

Мені, навпаки, подобається. Працюєш над архітектурою, а рутинний кодинг делегуєш. Маєш команду агентів, які знають більше за тебе, але все одно ти бос і останнє слово завжди за тобою. 😁

Майбутнє

Читаємо в інтернеті повний спектр думок: від

«Це ніякий не інтелект, він лише підбирає найбільш імовірне продовження»

чи

«З ШІ виходить довше та дорожче»

до

«Ера розробників закінчилася, і нас всіх звільнять»

Для мене це потужний і корисний інструмент. Він уже де-факто є, змінив підхід до роботи та вимагає постійної адаптації. Мені завжди подобалося навчатися — інакше відчуваю застій. А зараз це стало постійним процесом: направляєш і контролюєш агентів, а поки вони пишуть код — вивчаєш наступні технології.

Ключ успіху в епоху ШІ — у його контролі. А щоб контролювати, потрібно розуміти деталі, які еволюціонують і змінюються. ШІ також потребує нової інформації та знань для розвитку — і ці знання має надавати людина.

Тож входимо в епоху співавторства (co-creation) та співнавчання (co-learning) із ШІ.

👍ПодобаєтьсяСподобалось5
До обраногоВ обраному1
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

те що ви робите не вайбкодинг.
Вайбкодинг це:
x.com/...​tatus/1886192184808149383
There’s a new kind of coding I call “vibe coding”, where you fully give in to the vibes, embrace exponentials, and forget that the code even exists. It’s possible because the LLMs (e.g. Cursor Composer w Sonnet) are getting too good. Also I just talk to Composer with SuperWhisper so I barely even touch the keyboard. I ask for the dumbest things like “decrease the padding on the sidebar by half” because I’m too lazy to find it. I “Accept All” always, I don’t read the diffs anymore. When I get error messages I just copy paste them in with no comment, usually that fixes it. The code grows beyond my usual comprehension, I’d have to really read through it for a while. Sometimes the LLMs can’t fix a bug so I just work around it or ask for random changes until it goes away. It’s not too bad for throwaway weekend projects, but still quite amusing. I’m building a project or webapp, but it’s not really coding — I just see stuff, say stuff, run stuff, and copy paste stuff, and it mostly works.

Ключовий момент:

It’s not too bad for throwaway weekend projects, but still quite amusing.

Спираючись на власний досвід, наразі якщо не контролювати результат, під капотом дуже швидко розростається «хімера». З кожною зміною потрібно дедалі більше промптів, токенів і часу, на модифікації.

До того ж жоден постачальник LLM не несе відповідальності за згенерований контент. Уся відповідальність лягає на розробника і продукт.

Тому контроль сьогодні — це бов’язковий елемент будь-якого впровадження ШІ.

Якщо є досвід успішного розвитку серйозного проєкту без перевірки коду — поділіться.

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

Я пояснив свою позицію і навів аргументи. :)

что это за позиция такая использовать термин не по назначению?

Для мене вайб-кодинг, це створення рішення без написання коду, але з контролем результата. Я поділився своїм практичним досвідом. Якщо у вас успішний досвід без контроля результата, та без програміста, будь ласка поділіться, буду вдячний.

Для мене вайб-кодинг, це створення рішення без написання коду, але з контролем результата

окей, а для меня вайб кодинг — это мера веса ~900 грамм, но в магазине мою позицию и аргументы не приняли

Добре, я зрозумів. Якщо ти підглянув сгенерований код, ти не на вайбі, і то вже не вайб-кодинг. )

Да всім насрати, цей термін вже давно викорінився в народі як агентський АІ кодинг, навіть сам Карпати його використовує при будь-якій АІ розробці, і тільки парочка божевільних на ДОУ продовжує придиратися і придумувати своє визначення.

Такого в принципі немає і бути не може. Якщо людина зуміла поставити vscode, claude code, знайти і встановити якісь скіли, щось промтами накодити і навіть запустити, то щось вона таки знає і розуміє. І в код не лізуть не тому що не розуміють, а тому, що не для того вайкбодингом зайнялися і якийсь проект розкопали, до якого руки не доходили, щоб в коді колопатися.

Мені не «насрати», люблю розбиратися в деталях. )

Да всім насрати, цей термін вже давно викорінився в народі як агентський АІ кодинг

а любая ллм тебе скажет что это не тождественные понятия, хотя бы потому что вайб кодинг возможен без агентов

это НЕ вайб-кодинг
вайб-кодинг это когда не читаешь код и во всем доверяешь агенту

Я б так не робив. :) Для мене вайб-кодинг це коли не пишеш код, але контролюэш результат.

Дякую. Маю подібний досвід із codex та чатGPT, загалом все сходиться. Зазвичай я таки пропускаю етап планування але контролюю процес написання коду і коли бачу у його проміжних логах що він пішов не туди то даю йому або супровідник коментар або зупиняю процес і додаю деталей. Зазвичай це трапляється тоді коли я не додав якихось деталей у контекст або посилань на файли і тому він губиться у контексті і або вигадує велосипед наприклад створює нові файли бо він не знайшов старих або нові папки або вигадує архітектуру тоді як рішення вже існувало. Також писав про це статтю.

Дякую. Я пропускаю етап планування тільки коли дуже прості зміни. А після перевірки плану, часто вже не слідкую за процесом, а займаюсь чимось іншим, як наприклад вивченням нового, як вже писав в статті.

Чому просто не розділили проект на шматки — кожному свій компонент схований за інтерфейсом. І не було б ані мерж конфліктів, ані потреб в узгодженні мержів.

Якщо є читке розуміння вимог та архітектури реалізації, одна людина може зробити за день зміни у всіх компонентах, те що зазвичай команда робить за тиждень.

Ну суть в тому, що зазвичай весь проект занадто складний, щоб детально вміститися в одній голові — тому його ділять на шматки, і кожна голова переймається своїм шматком. А хтось один узгоджує ці компоненти між собою, але жодного з них не знає детально.

Згоден. Залежить від рівня складності. На поточному проекті front-end, api, worker в одному репозиторії. Тож із вайб-кодингом зручно робити функціонал, який торкається всіх цих єлементів. На попередньому проекті ці компоненти, і ще купа мікросервісів були розділені на різні репозиторії, хоча над ними працювала одна команда. Для вайб-кодингу це не зручно.

Підписатись на коментарі