Это перевод статьи Ben Tossell https://x.com/bentossell/status/2006352820140749073
За четыре месяца я потратил 3 миллиарда токенов. Каждый из них — через терминал, наблюдая, как агент пишет код, который я сам написать не смог бы.
Вы можете назвать меня «вайб-кодером». Но, по-моему, этот термин не учитывает навыков, которые требуются для такой работы. Примерно как с no-code в 2019 году (когда я основал образовательную компанию по no-code, которую потом купил Zapier).
Я не читаю код. Но я читаю вывод агента как Библию. И благодаря этому получаю массу знаний о том, как работает код, как устроены проекты, где они падают, где выстреливают.
Это моя версия обучения программированию. Новый технический класс.
Что я реально запустил
Вот несколько штук, которые я запустил за последние месяцы:
Личный сайт. Переделал свой личный сайт — сделал его похожим на терминал CLI. Получилось гораздо лучше, чем моя попытка в начале года.
Ленту. Собрал простой социальный трекер для упоминаний Factory в Twitter, постов из нашего сабреддита и issues на GitHub. Выложил в open-source, получил 100+ звёзд, несколько человек склонировали себе.
Factory Wrapped. Собрал первую версию нашего продукта в стиле «wrapped». Показал команде, им зашло, захотели запечь прямо в продукт — теперь оно там живёт. Добавляю новые гайды, переставляю вещи местами. Формально это может не выглядеть как программирование, но для меня это оно и есть. Процесс тот же.
Кастомные CLI. Сделал несколько CLI — например, Pylon CLI, которое потом подхватила команда для работы с запросами от клиентов. Собрал CLI для помощи пользователям с добавлением токенов в аккаунты. Плюс Linear и Gmail CLI.
Крипто-трекер. Я инвестировал в компанию, которая точно предсказывает позитивные, негативные или нейтральные сигналы в динамических данных (финансы, погода, фитнес, сворачивание белков). Так что собрал трекер, который автоматически открывает и закрывает короткие/длинные позиции на основе предсказаний — типа мини-хедж-фонда.
Droidmas. Двенадцать дней, двенадцать экспериментов или игр, затрагивающих разные темы, о которых говорят в Twitter — память, управление контекстом, вайб-кодинг и всё такое.
AI-систему для записи демо-видео. По сути, я даю промпт для создания видео. Она открывает ghostty, выполняет команды, может открывать другие окна вроде браузера, записывает экран. Агент выступает одновременно режиссёром, продюсером и монтажёром. Сам агент наблюдает за происходящим во время записи и реагирует, когда что-то случается. Если возникает проблема, баг или нужно подождать ответа — он это делает. С помощью этого я создал видео, которое опубликовал OpenAI.
Telegram-бота на базе Droid Exec, чтобы синхронизировать свои локальные репозитории на VPS и просто общаться с ними как с чат-ботом. Стараюсь максимально близко воспроизвести опыт работы с CLI, но из мессенджера (не люблю Telegram, но не хотел возиться с мучительной настройкой Whatsapp for Business).
И ещё штук 50, о которых не упоминаю или которые просто забросил.
Как я реально работаю
Я использую исключительно CLI. Терминал вместо веб-интерфейсов — всегда. Он просто более мощный как агент общего назначения, и я вижу, как он работает.
Обычно у меня появляется идея для чего-то, или боль, или проблема с чем-то, что, как мне кажется, можно решить кодом (в наши дни — практически всё). Так что я просто создаю новый проект в Droid (CLI от Factory).
Обычно я пару раз общаюсь с моделью, чтобы загрузить контекст о том, что пытаюсь сделать, а затем переключаюсь в spec mode, чтобы начать составлять план того, что хочу построить.
В spec mode я, по сути, задаю кучу вопросов. Типа: я не понимаю, что это такое, или почему нам нужно это, а не то, не можем ли мы сделать вот так?
Я кидаю ссылки на документацию и GitHub-репозитории, чтобы агент их изучил.
Затем я запускаю Opus 4.5 с высоким уровнем автономности и просто даю ему свободу. Смотрю на стрим, вижу, что происходит, когда возникают ошибки. Могу вмешаться, задать вопрос или направить по другому пути.
Запускаю сервер, тестирую, даю фидбэк, повторяю.
Так что я как бы опережаю сам себя. Я просто пытаюсь создать что-то. А все пробелы и проблемы, с которыми я сталкиваюсь, — это возможности для меня чему-то научиться. Является ли это частью системы, которую я видел в других репозиториях и для которой мне нужно создать своего рода шаблонную систему? Должен ли я добавить это в файл agents.md, который будет следовать за мной и делать то же самое во всех других репозиториях, над которыми я буду работать?
Мой agents.md
Я трачу больше времени на то, чтобы придумать как настроить agents.md, потому что это самое важное.
У меня локально есть папка repos — туда идут все мои проекты с кодом. В этой папке лежит agents.md, где явно указано, как настраивать каждый новый репозиторий: что делать и чего не делать, как работать с GitHub, как коммитить, всё такое. И использовать ли мой рабочий аккаунт на GitHub или личный.
Запуск тестов. End-to-end тесты — это то, на что я раньше никогда не обращал внимания. Но теперь мне реально хочется, чтобы E2E-тесты были на всём. Учитывая мои текущие знания и возможности, когда я что-то собираю и тестирую, часто бывают тупые баги, которые я просто должен был поймать или протестировать, будь у меня тесты изначально.
И я часто смотрю на agents.md других людей, чтобы увидеть, что могу позаимствовать для своего. Постоянно пытаюсь улучшить свою документацию, чтобы каждая новая рабочая сессия проходила более гладко.
Кодинг на ходу
Я также слежу за тем, чтобы устанавливать GitHub-приложение Droid на каждый создаваемый репозиторий. Так что когда я деплою на GitHub, я делаю это через pull request’ы, чтобы Droid мог их ревьюить — и я могу тегнуть Droid, чтобы он сам внёс правки по кастомному промпту. Могу запускать его из issues или из pull request’ов.
Он позволяет мне писать код с телефона и добавлять новые функции, когда я не за компьютером. В сочетании с моим Telegram-ботом это значительно упрощает работу, когда я не за рабочим столом.
Ещё я использую Slack с агентом. Создаю новый канал для каждого репозитория и просто накидываю туда задачи по ходу дела. Часто создаю новые каналы для новых идей. Slack — отличный продукт для одного человека (+ агент(ы)).
Чему я научился
Bash-команды. Мне реально зашло, когда я какое-то время запускал процесс для changelog — это один и тот же процесс снова и снова. Я наконец понял «воркфлоу». Так что попросил droid создать флоу для слэш-команды, и это первая слэш-команда, которую я реально использую. Она запускает несколько bash-команд и также даёт модели задачи типа прочитать GitHub диффы, проверить, что за feature flag’ом, а что нет, разложить по правильным секциям новые фичи, баг-фиксы и всё такое.
Оттуда я начал больше погружаться в bash + CLI. Я перестал использовать MCP — использую CLI-версии большинства вещей вместо MCP. Да, потому что MCP’шки едят контекст, но в основном потому, что мне кажется это проще — обычно мне нужно всего несколько инструментов из тех, что предоставляет MCP. Так что с Supabase, Vercel и Github я всегда использую CLI вместо MCP.
Часто собираю свои собственные CLI для разных вещей. Например, собрал свой Linear CLI, чтобы запрашивать свои issues и запускать всё из терминала вместо того, чтобы идти в десктопное приложение или веб-интерфейс.
VPS. Я абстрактно знал, что это такое — это как другой компьютер, который всегда включён где-то в другом месте. Но пока мне по-настоящему не понадобился, я не знал, что мне там нужно делать, и есть ещё много чего, что мне нужно изучить. Но по сути, теперь, когда я запускаю крипто-трекер, у меня тонна данных, которые подтягиваются каждую минуту, и мне нужно, чтобы это всегда работало.
Также использую VPS при работе с Droid Telegram-ботом и использую штуку под названием SyncThing для синхронизации моих локальных репозиториев с VPS, чтобы мои репозитории всегда были актуальны и в том же состоянии, в котором я их оставил. Так что могу просто подхватить работу на ходу.
Skills. Пытался использовать их больше. Использую их не только как знания, но и с bash-командами + CLI. У меня есть Gmail CLI, который могу подключить к любым проектам, он портативный, живёт в корневой директории. Так что когда мне нужен Gmail в системе — у меня есть система сортировки Gmail — она просто использует CLI.
Новый программируемый слой абстракции
Не хочу быть как все остальные в Twitter, когда они видят твит Андрея Карпаты, но это действительно близко мне: появился новый программируемый слой абстракции, который нужно освоить.
Когда были времена no-code, слой абстракции, который я осваивал, — это drag-and-drop инструменты вроде Webflow, Zapier и Airtable — сшивать их вместе и делать так, чтобы это выглядело как настоящее ПО (пока не упрёшься в ограничение).
Но теперь вместо того, чтобы думать, что мне нужно научиться писать код с нуля, чтобы делать всё это, мне на самом деле нужно научиться как работать с AI-агентом. Как правильно его промптить? Как убедиться, что у него правильный контекст? И как он может помочь мне понять, что мы делаем, как части работают вместе, как я могу улучшить свою систему со временем?
Включая все эти штуки типа агентов, субагентов, промптов, контекста, памяти, skills, хуков и так далее.
Учусь у других
Я читаю таких людей, как Питер Штайнбергер, который является настоящим программистом и работает как сумасшедший. И, видя в его постах почти что простоту его системы, где он просто общается с моделью, позволяет ей делать своё дело и не особо беспокоится о дополнительных командах, субагентах, хуках, навыках (хотя он постепенно переходит на навыки), я понимаю, что мне не нужна какая-то сверхсложная система.
Глядя на Twitter, видишь много людей, которые реально оптимизируют или потенциально чрезмерно оптимизируют свою систему. Это может пугать таких людей, как я, но также в этом есть часть красоты: это полностью кастомизируемая система, так что можешь настроить её под себя как хочешь. Можешь иметь plan mode, который создаёшь кастомной слэш-командой, которая работает двадцать минут, как у Кирана, или можешь просто разговаривать с моделью, как Петер.
Ещё одна вещь, когда следишь за другими инженерами, — это видеть их open-source софт, клонировать его, использовать самому, пытаться улучшить или просто брать части и делать своим. Например, недавнее «summarize YouTube» от Петера — я просто взял его, убрал часть с Chrome-расширением, оставил как CLI, и теперь могу просто разговаривать с этим где угодно.
И как Марио, читая такие вещи, как его пост про MCP, где он говорит о CLI вместо MCP, дал мне толчок глубже погрузиться в bash и CLI.
Процесс обучения
Я не создаю что-то для использования десятками тысяч людей в производстве. Так что ошибки будут, проблемы будут, и я часто с ними сталкиваюсь. И это просто напоминание о том, что это пробел в ваших знаниях, а не в способностях, которыми вы обладаете сейчас.
Моя роль заключается в выявлении пробелов или поиске этих пробелов и размышлении: как мне сделать так, чтобы это никогда не повторилось? Или как мне убедиться, что я достаточно хорошо понимаю эту часть системы, чтобы, если это повторится, я смог это предотвратить.
Даже самые простые вещи, с которыми я столкнулся, когда только начал использовать агенты для написания кода, — например, почему я не могу использовать GitHub Pages, если у меня есть динамические данные и я хочу, чтобы несколько пользователей могли чем-то пользоваться? Это очень, очень простая вещь, которую знают программисты. Но я узнал об этом только сейчас, потому что я что-то создавал, я пытался создать что-то не такое, как позволяли мне инструменты.
Тогда я сказал: «Хорошо, что нам нужно сделать?» Всё, что вам нужно сделать, — это просто спросить модель. Модель знает всё, чего не знаете вы. Вы можете просто продолжать задавать ей вопросы. Это ваш терпеливый, всегда готовый прийти на помощь эксперт-программист. Вы можете добавить в файл agents.md: «Я не программист, вам нужно объяснять мне всё очень просто». Вы можете настроить его так, как вам нужно.
Участие в реальных продуктах
Я даже внёс улучшения в наш собственный продукт — какие-то простые вещи, но всё же улучшения. В Factory есть команда инженеров, которые чрезвычайно опытны и хороши в том, что делают, и я много учусь, просто наблюдая за ними, глядя на их PR’ы. У нас есть внутренние lunch and learn, где люди говорят «вот как я планирую новые функции продукта», «вот как я фикшу баги», вещи типа того, которые были реально полезны.
Так что всё это просто большой процесс обучения для меня, и мне реально нравится учиться «программировать», или учиться работать с кодом.
Почему это отличается от того, что было раньше
Я много раз пытался научиться программировать, и каждый раз нужно было ввести эти символы, нажать Enter и увидеть «Hello World». Нужно было сделать то, потом это, и тогда происходило вот это. Возможно, мне было бы полезно изучить всё это, но я до сих пор считаю, что это сильно отличается от того, что есть сейчас.
Чтобы я мог создавать то, что создаю сейчас, если бы я пошёл по другому пути, мне пришлось бы кодить много месяцев, много лет, чтобы достичь того уровня, когда я мог бы чувствовать, что могу писать код самостоятельно.
Поэтому я подхожу к этому с точки зрения системного мышления для проектов, созданных с помощью кода. Я случайно узнал об этом, когда руководил своей последней компанией, не имея технического образования. Вы всё ещё изучаете, что ж, Webflow — это фронтенд, Zapier — это маршруты API, связующая ткань, потоки данных, а Airtable — это ваша база данных.
Так что я уже изучил эти системы и думаю, что это помогает мне сегодня разбираться в некоторых из них. Вы можете многому научиться. И часто я вижу, что кто-то публикует что-то в Твиттере, и думаю: «Я понятия не имею, что это такое и что я могу с этим сделать, но могу поспорить, что смогу с этим поиграть».
** Ни одно программное обеспечение не кажется мне недостижимым.** Я могу просто клонировать его и спросить, что, черт возьми, эта штука делает? Ладно, я тут подумал об этом — будет ли эта штука делать что-нибудь похожее на то, что я думал? И это всего лишь исследование. Это так весело.
Задавать «глупые» вопросы
Бесчисленное количество раз я думал о глупых вопросах — для меня или глупых вопросах, которые другие программисты никогда бы не задали — у меня есть разрешение их задавать, потому что никто не наблюдает за мной и никто не отшивает меня за тупость или за то, что сказал не то.
Типа, почему мы используем все эти фреймворки, эти разные типы фреймворков? Потому что они абстракции для людей, пишущих код. Так почему — если LLM супер умна — почему не может быть просто проще написанный код, меньше зависимостей, меньше потенциальных поверхностей для багов? Это глупая мысль или хорошая мысль?
И я могу узнать, что это может быть не глупая мысль. Но окей, да, есть множество проектов, на которых модель была обучена, поэтому часто вещи будут построены в определённых фреймворках.
Так что это просто наращивание этого понимания мира кода, инженерного мира, в котором я не заслуживал быть, но я абсолютно часть его сейчас.
За пределами «вайб-кодинга»
Да, можете называть это вайб-кодингом, но я думаю, вайб-кодинг упускает суть. Я пытаюсь действительно изучить системы. Я пытаюсь по-настоящему понять, что происходит, как я могу улучшиться, как я могу стать программистом нового поколения, что такое этот новый технический класс?
Вот что мне кажется самым интересным. Я не могу категорично назвать себя нетехническим специалистом, но и программистом себя назвать не могу. Да и не хотел бы. Я часть этого нового технического класса, и я не знаю, как он называется. Но мне кажется, что вайб-кодинг придаёт этому негативный оттенок, так же как no-code придавал негативный оттенок той группе.
Это как игра
Некоторые сравнивают этот новый способ программирования с игрой. Factorio — вот о чём все говорят. Я в неё никогда не играл. Я не особо геймер.
Но вся эта парадигма для меня как настоящая игра, и результат — я строю то, что хочу построить. Куча вещей просто не попадают на GitHub. Они не становятся живыми. Это просто исследования частей системы или темы. Другие попадают в публикацию, и другие люди их используют — один CTO форкнул мой личный сайт и использовал для себя! Крутая штука (для меня!)
Если кто-то постит «о, я собрал этот React grab tool, например». Окей, круто, а могу ли я собрать свой? Зачем? Этот выглядит реально хорошо. Ну просто потому что хочу. Могу просто исследовать вещи ради исследования вещей.
Каждую идею, которая у тебя когда-либо была, можно проверить, можно исследовать, и она не обязана быть хорошей. И ты будешь учиться по ходу дела.
Разрешение выбрасывать вещи
Раньше, если бы я научился программировать, чтобы построить реально кривую версию чего-то, о чём я думал, типа большой идеи, которая у меня была, и потом никому это не нужно, я был бы слишком эмоционально вложен в эту идею, чтобы просто её выбросить.
С no-code я мог эффективно построить версию той большой идеи за час, пару часов, выходные. И если никому не понравилось, никто не хотел за это платить, это было отстойно, тогда я мог просто это выбросить. Это не было так много моего времени или энергии в что-то, что в конечном итоге не станет чем-то хорошим для кого-то другого.
И мне кажется, то же самое верно сегодня. Мы увидим взрыв софта. Много из него не будет хорошим, но много уже отличное. Есть эксперты-программисты, которые шипят как абсолютно сумасшедшие, и это всё хорошие проекты. Так что у нас будет абсолютное изобилие проектов с кодом, которые можно использовать, клонировать, твикать, ремиксовать.
Это займёт гораздо меньше времени, чем если бы тебе пришлось учиться программировать или если ты читаешь файлы, или пишешь файлы, или что-то типа того. Это просто намного быстрее. Петля обратной связи быстрее. Процесс быстрее. Можешь просто делать что угодно в любое время и просто постоянно штамповать вещи.
Несмотря на неудачи
Чтобы научиться программировать, нужно строить планы на будущее, выходящие за рамки ваших возможностей, и двигаться вперёд, несмотря на неудачи.
Я считаю, что каждый, кто сегодня не связан с технологиями, но хочет быть частью этого мира, кто хочет заниматься подобными вещами, вполне может это делать. Им просто нужно разрешение на это. Чтобы экспериментировать. Вы должны относиться к этому как к игре.
Зарегистрируйтесь в CLI-агенте, например в Droid. Допустим, вы хотите создать личный веб-сайт. Допустим, вы хотите создать небольшой трекер RSS-каналов, небольшой список дел или приложение для тренировок. Что бы вы ни задумали, просто приступайте к работе. Каждый небольшой сбой, ошибка или проблема, с которыми вы сталкиваетесь, — повод задуматься. Хорошо, почему это произошло? Почему вы столкнулись с этими ошибками? Вы знаете, что не умеете программировать, поэтому не стоит зацикливаться на ошибках — опытные программисты постоянно сталкиваются с ошибками.
И вы можете использовать его в других местах. Вы можете обратиться к ChatGPT или Claude и предоставить данные разным моделям для получения различных точек зрения. У вас всегда будет выбор и множество различных вариантов.
Просто выбери один
Есть просто так много разных инструментов, так много разных опций. В конечном счёте, просто выбери один и придерживайся его. Просто изучи эту систему. Они все выглядят довольно похоже. Они все работают похоже.
Очевидно, я использую Droid, потому что работаю в Factory. Но в целом отлично работают любые модели. (ура агностицизму моделей)
В конечном счёте, вот чего я хочу и что мне нужно от инструмента: **поможет ли он мне продвинуться как можно дальше за минимальное время и с наименьшими усилиями?** Чем больше мне приходится использовать сами инструменты, тем сложнее становится.
Вещи типа IDE — я попробовал их множество. Я долгое время пользовался одной из них. Просто в ней так много лишнего, что мне это не нужно. Я просто хочу поговорить с моделью, написать код. Если мне нужно просмотреть какие-то файлы markdown, теперь я могу использовать то, что я только недавно обнаружил, — файловый менеджер в терминале. Так что я могу просто просмотреть его или открыть в Zed, который я сейчас использую, чтобы просматривать файлы в формате Markdown и редактировать их. Если это, например, журнал изменений, я хочу что-то быстро подправить, вернуться в интерфейс командной строки и продолжить работу оттуда.
И любой инструмент или фичу, которой, как мне кажется, мне не хватает, я попытаюсь собрать сам — типа просмотрщика файлов в терминале.
*Для меня всё это — огромный опыт, и я получаю от него огромное удовольствие. Стройте, терпите неудачи и продолжайте выпускать продукт.*

