«Не знаю языка, не написал ни строчки кода, я архитектор» — всё чаще попадаются такие статьи. Даже на Хабре в комментариях встречаются люди, которые недоумевают, за что такие статьи огребают минусы. Хочу рассказать на примере своего опыта, в чем неправ вайбкодер, делающий такие выводы. Получилось многовато текста. Для llm сокращятелей и тех кому лень читать — поднимал сервис через llm в области знаний где я профан, он ломался экзотическими (наверное) способами после каждой итерации, теперь он вроде работает но может и нет — ответить на это я не могу потому что недостаточно экспертизы.

Обо мне: я Android‑разработчик со стажем более 10 лет. У меня есть несколько домашних pet‑проектов под Android, которые были созданы как полностью вручную, так и с полной генерацией, в режиме yolo, иногда даже не глядя. Но вот познания в системном администрировании у меня весьма ограниченные. Я, конечно, смогу настроить Docker‑контейнер по инструкции и даже не перепутаю маскировку трафика с обфускацией, но большая часть знаний, которые у меня есть, получена из развлекательных видео о сетях на канале небезызвестного Дмитрия Бачило. Поэтому с точки зрения настройки сетей я как раз выступаю тем человеком, который до этого «не писал ни строчки кода».

О решаемой задаче: исторически сложилось, что у меня есть три разные VPN‑сети, все внутри страны, на разных технологиях, для подключения к разным локациям и собственным сервисам. Мне хотелось как‑нибудь получить единую точку отказа/взлома входа с висящим на ней демоном мониторинга, который будет стучаться в разные сети и собирать информацию о работе сервисов. Правильным решением, наверное, было бы объединить всё это в единую адекватную сеть на одной технологии, но есть масса причин, почему я не хочу этим заниматься. Наверное про конкретику этого сетевого безобразия можно написать еще одну статью, но тут нам дальнейшие подробности не важны.

В общем, одним прекрасным днём я пришёл к идее: сисадмина для настройки сети я, конечно, нанимать не планирую, сам я вопрос буду изучать ещё года два, чтобы въехать на должном уровне, а при таких затратах оно мне уже и не нужно. Но есть же LLM‑агент, который вполне подойдёт для решения задачи в роли сисадмина.

Да‑да, я прекрасно осознавал, что может получиться дыра в безопасности, портал призыва демонов или сервер крутящий 24/7 рикролл на интернет радио — ведро со святой водой чтобы залить им сервер в случае неприятности было подготовлено.

Сам процесс описывать не вижу особого смысла: собираем техническое задание, небольшими этапами двигаемся вперёд. Единственное, что важно для истории: я добавил в корневой .md‑файл указания вести скрипт, который позволит повторно развернуть всё, что уже было настроено, и файл с короткой документацией о том, какие действия были сделаны и для чего.

Первые ощущения тут такие же, как у всех: чудеса, магия, успех. Первые две сети с самыми простыми настройками были подключены, входная точка в общую объединённую сеть настроена, правила трафика работали. Я не стал сразу идти дальше и решил погонять это неделю, чтобы посмотреть, будут ли проблемы.

Первые проблемы тоже пришли быстро. Через три дня выяснилось, что, хотя трафик между сетями идёт, стоит начать передавать большой файл — и ровно на одном и том же проценте соединение падает полностью.

Тут я извиняюсь: всем, наверное, интересно, почему такое происходило. Я даже читал ответ llm на этот счёт, но закономерно не могу гаратнировать что правильно его понял. Речь там шла о том, что присутствует петля, из‑за которой пакеты с одного сетевого интерфейса проходят через него несколько раз и вылезают за счётчик допустимого количества пакетов, которые должны были покинуть VPN‑интерфейс. (Вроде все логично, но все равно чувствуется этот запах работы с тем, чего не понимаешь — запах магии). Соответственно, что в таком случае делают вайбкодеры? Правильно: «LLM, не работает, почини». И всё починилось: трафик идёт, проблем нет.

Далее, через пару недель стабильности, я добавил ещё один VPN, описал нужные мне правила — и оно опять заработало сразу и как нужно. Опять вау, круто, магия. Проверил тесты с отключением сети, перезагрузкой, выключением сервисов — всё прекрасно, сеть восстанавливается.

А потом тест мне решила провести местная сетевая компания, вырубив свет на срок больший, чем прожил ИБП. И сеть не поднялась. Оказалось, что предыдущая настройка не учитывала ситуацию, при которой операторский маршрутизатор физически доступен, но ещё не готов отвечать. В результате сетевые интерфейсы VPN выбрали точкой выхода в глобальный интернет друг друга и успешно никуда не подключились.

После исправления этого косяка спустя четыре дня умер блок питания на ПК, на котором была развёрнута система (справедливости ради, мои правила домашних проектов предполагают, что они собираются из того, что есть под рукой, практически без вложений средств и зависимостей от внешних сервисов, так что это нормально). Это означало, что теперь я протестирую возможность развернуть настройки на другой машине. Наверное, профессиональный системный администратор сразу собирал бы всё в Docker‑контейнере, который с лёгкостью перенёс бы куда угодно. Но я не системный администратор и уже огребал с настройками сетевых интерфейсов в Docker, поэтому «бэкап» у меня был sh‑скриптом.

И в общем‑то повезло, что я не стал его запускать. Я скормил его агенту и попросил развернуть всё на другой машине — с такой же системой, окружением, но уже имеющейся сервером для других задач. Скрипт, вероятнее всего, сломал бы сеть. Агент при развёртывании внёс кучу правок, о которых я и не думал, что они потребуются: сетевые интерфейсы на новой машине назывались по‑другому, какие‑то зависимости были не тех версий и так далее Получается у меня был «бэкап» шредингера (каждый системный администратор знает — всегда проверяй бэкапы, но я то тут в роли андроид разработчика). Ещё пара часов — и снова «всё работает».

Правда, через неделю выяснилось, что не всё. На самом деле часть, отвечающая за восстановление правил, не пережила переноса, и после того, как один из VPN‑серверов ушёл в ребут, сеть снова не поднялась. На вопрос «почему?» агент с леденящим душу спокойствием ответил

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

В процессе регистрации, кстати, он повесил его не на то событие. В результате скрипт выполнялся почти постоянно, переприменяя правила в iptables и dnsmasq — для некоторых сервисов используется своя несуществующая доменная зона. Dnsmasq такого насилия не выдерживал и начал периодически падать, что опять же выяснилось через пару дней (вроде трафик до нужной доменной зоны есть, а вроде иногда 30 секунд на загрузку ресурса который должен грузиться за 1).

Далее суровым указанием «никаких reapply правил по расписанию, только триггеры вида „отвал + подключение сетевого интерфейса“» проблема была решена.

Следующей доработкой был скрипт‑переключатель, который позволял переключать адрес до одного из серверов либо через один VPN, либо через другой. Это два сервера‑клона, но в разных локациях. И опять же: полчаса написания ТЗ и кручения прогресс‑бара — и всё работает прекрасно. Только на самом деле — нет: скрипт‑переключатель работал прекрасно сразу после создания, но через три недели, когда я действительно захотел переключить маршрут трафика, после его вызова сеть упала. Вся, кроме локальной. Переключение туда‑обратно не помогает, перезагрузка не помогает, даже подключиться к агенту с этого ПК уже нельзя напрямую.

Не смертельно: подключаемся к агенту со своего ПК, даём ему доступ через SSH, описываем проблему. Спустя ещё полчаса кручения прогресс‑бара ситуация исправлена. Причина: переключатель написан неатомарно. В процессе перенаправления трафика он не смог получить данные из целевого туннеля и оставил систему в сломанном состоянии.

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

К чему в итоге всё пришло. С одной стороны, у меня сейчас как будто есть работающий сервис, решающий поставленную задачу, сделанный непрофильным специалистом в слепую, без «единого ручного вызова скрипта» (это не совсем правда: настройки, которые отвечают за доступность локальной сети, я всё же всегда внимательно проверял, сверяясь с документацией, потому что настраивать headless‑сервер, таща к нему монитор, не весело).

С другой стороны, это сервис‑зомби. Я не знаю, как он работает. Никто другой тоже не знает, как он работает. И, что ещё страшнее, я даже не знаю, работает ли он на самом деле. Есть панель мониторинга, написанная по приколу, и она периодически показывает, что какой‑то из ресурсов недоступен. Но я не знаю, правда ли он недоступен, или это конкретно на этой машине сломался доступ, или сейчас происходит скрытый reapply правил, из‑за чего он недоступен. Первый раз на фразу «при потере соединения, при повторном подключении тоннеля, нужно восстанавливать правила» — llm сделала cron который каждую минуту переприменял правила, в результате чего потецниально (помимо других проблем) 59 секунд трафик мог идти вообще не туда куда нужно.

И я даже могу сказать: «Эй, агент, почему сейчас был статус „недоступен“ у сервиса?» — и агент ответит мне: «Ой, была ошибка d%2&#@as5%, я всё починил, больше не повторится». Но я никогда не узнаю, правда ли это. Эта ли была проблема? Может, проблема вообще в другом? Может, ничего на самом деле не работает, а дашборд показывает погоду на Марсе? Может, мой трафик идёт через MITM‑сервер хакеров и взломанный сервер Пентагона, и когда они заделают брешь, у меня он оборвётся?

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

Но на эту систему маршрутизации трафика мне страшно даже дышать. Вдруг она развалится, если я посмотрю на неё не тем взглядом? Дорабатывать? Увольте. Я не хочу даже использовать фичу по переключению маршрута: чёрт его знает, переживёт ли оно. И это при том, что старый способ доступа у меня остался, а критичность этого сервера — ноль.

Я решительно не понимаю, как люди, которые пишут статьи о том, что они сделали продукт на 20 тысяч строк Python‑кода, не зная Python, дорабатывают этот продукт, и их при этом не трясёт от ужаса. Как можно брать деньги или, что ещё хуже, призывать брать деньги за что‑то, что может взорваться из‑за того, что голубь рядом чихнул неправильно?

Пытался вспомнить, когда испытывал подобные чувства, и вспомнил.

Во времена студенческой юности я проходил курсы по Ruby on Rails — просто так. И после серверов на других решениях там был подход, который назывался convention over configuration: соглашение выше конфигурации. Этот подход предполагал, что, следуя правильным договорённостям в именовании методов, классов, файлов и их расположении, фреймворк автоматически понимал, что класс User связан с таблицей users, а если в контроллере есть метод show, то будет искаться файл разметки с соответствующим именем.

И вот когда ты брал реализацию сервера, использующего этот подход на полную, не будучи при этом профессионалом в Ruby или Rails, ощущалось оно точно так же. Работает — но почему? Я добавил класс точно так же, но тот, что был, работает, а мой — нет, хотя они идентичны. В одном месте тянется один файл разметки, в другом — другой. Но как это исправить, если они нигде не указаны?

Работа с проектом, написанным LLM в незнакомой пользователю области, подобна попытке работать с фреймворком на неизвестном языке, для которого нет документации и который при этом содержит неявные соглашения.

Определенно, область знаний, необходимых рарзаботчику меняется, llm делает очень много вещей которые были сложными — простыми. Возможно, даже не весь сгенерированный код нужно читать (но это не точно, и вопрос очень спорный), и не всегда важно, чтобы он там был идеальный, четко структурированный или еще что‑то. Но я совершенно точно уверен в том, что для разработчика и дальше будет невероятно важна способность в случае нобходимости погрузиться глубоко в весь этот сгенерированный код, и найти, понять и исправить там тот самый винтик, который все сломал.

Комментарии (14)


  1. SlavikF
    05.05.2026 02:43

    Так что сказать то хотели?


    1. Spyman Автор
      05.05.2026 02:43

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

      Специально для вас написал первый параграф) и вот этот

      Я решительно не понимаю, как люди, которые пишут статьи о том, что они сделали продукт на 20 тысяч строк Python‑кода, не зная Python, дорабатывают этот продукт, и их при этом не трясёт от ужаса. Как можно брать деньги или, что ещё хуже, призывать брать деньги за что‑то, что может взорваться из‑за того, что голубь рядом чихнул неправильно?


      1. K0Jlya9
        05.05.2026 02:43

        Это звучит как яхз что было, яхз что стало, нахера я это написал.


        1. Spyman Автор
          05.05.2026 02:43

          Я написал это чтобы показать какой на самом деле будет результат при полном написании чего-либо через llm без знаний в области.

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

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


          1. K0Jlya9
            05.05.2026 02:43

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


            1. Spyman Автор
              05.05.2026 02:43

              Меня больше раздражают комментаторы, которые не умеют читать.

              Нужно сделать машину, которая подключается к трем vpn сетям на разных технологиям (wg, vless, openvpn) и представляет единую точку входа с доступом в любую из сетей (как gateway), а так-же веб сервер с дашбордом, который через каждую проверяет доступность определённых серверов.

              Тоже самое в статье уже написано только другими словами.

              Из дополнительных требований про которые в статье я не писал потому что это вообще не важно - две сети должны друг друга видеть, третья должна быть тупиковой, в двух сетях которые должны друг друга видеть изначально разные подсети так что адресация без конфликтов, есть несуществующая доменная зона .spx, нужно чтобы на машине которая подключена ко всем сетям стоял dns сервер, который запрашивает через один из тунелей резолв для этой зоны, но для других отдавал данных с обычного днс оператора. Есть ещё набор правил статической адресации. Трафик не относящийся ни к одной из сетей должен идти напрямую в wan. И ещё наверняка я что-то забыл описать.

              Что - как-то изменилось от этого суть статьи или выводы или что? Или вы думали тут hello world, вы сейчас его навайбкодите у себя, придёте и скажете что одним промптом все решили? - ну так тут реальный уникальный пользовательский сценарий, для него тестовое окружение только поднимать задолбаешься.


  1. K0Jlya9
    05.05.2026 02:43

    Какая задача была? Как решилась?


    1. Spyman Автор
      05.05.2026 02:43

      О решаемой задаче: исторически сложилось, что у меня есть три разные VPN‑сети, все внутри страны, на разных технологиях, для подключения к разным локациям и собственным сервисам. Мне хотелось как‑нибудь получить единую точку отказа/взлома входа с висящим на ней демоном мониторинга, который будет стучаться в разные сети и собирать информацию о работе сервисов.

      К чему в итоге всё пришло. С одной стороны, у меня сейчас как будто есть работающий сервис, решающий поставленную задачу, сделанный непрофильным специалистом в слепую, без «единого ручного вызова скрипта» (это не совсем правда: настройки, которые отвечают за доступность локальной сети, я всё же всегда внимательно проверял, сверяясь с документацией, потому что настраивать headless‑сервер, таща к нему монитор, не весело).

      С другой стороны, это сервис‑зомби. Я не знаю, как он работает. Никто другой тоже не знает, как он работает. И, что ещё страшнее, я даже не знаю, работает ли он на самом деле. Есть панель мониторинга, написанная по приколу, и она периодически показывает, что какой‑то из ресурсов недоступен. Но я не знаю, правда ли он недоступен, или это конкретно на этой машине сломался доступ, или сейчас происходит скрытый reapply правил, из‑за чего он недоступен.


  1. Cib0rg
    05.05.2026 02:43

    Вайб-читатели отметились.

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


  1. Ilyuha888
    05.05.2026 02:43

    Ощущение, что другие комментаторы - боты, которые не читали материал...

    А материал кайфовый и очень передаёт ощущение, которое и я иногда испытывают в работе (особенно, когда доходит до деплоя даже какого-то MVP)

    Я реально не понимаю, как фулл-вайбкодер может спокойно спать, не понимая как работает то, за что он должен нести ответственность...


  1. Antra
    05.05.2026 02:43

    Спасибо за статью! Все так :)

    Да, надо понимать. Cплошь и рядом "да, я сделал workaround, сейчас починю нормально, как вы просите". Глаз да глаз нужен. Но при этом все равно намного быстрее, чем руками.

    Единственное - если выкинуть "LLM" и заменить на обычного сисадмина, не сильно много чего изменится.

    Умер блок питания, перенос на другую машину с другими интерфейсами. Думаете, если бы человек изначально настраивал, все без проблем перенеслось бы на новую машину с другим интерфейсами? Даже если в энтерпрайзе этот же самый человек делал бы "нормально", потому что потом проверки и т.п., сомневаюсь, что при развертывании "для себя" он бы заморачивался с вариабельными именами интерфейсов для развертывания на совсем разных машинах.

    Электричество пропало, потом не поднялось - да сплошь и рядом, если такие сценарии явно не тестировались. Даже в энтерпрайзе :(

    Тут скорее если человек более-менее знает, как это настраивать, набил шишек, он сразу в промпте пропишет что предусмотреть, и результат получит близкий к собственноручному. Хороший промпт - хороший результат.

    Если представляет, но шишек не набил - в промте добавит "предусмотри какие проблемы могут возникуть" (но если бы сам делал, так же вляпался бы).

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


    1. Spyman Автор
      05.05.2026 02:43

      Я уверен, что с нормальным сисадмином минимум в половину меньше проблем было бы. В какой то момент становится заметно, что llm лютейше начинает костылить (reapply настроек скриптом раз в минуту, прописывание конкретных маршрутов вручную вместо широкого правила), и вот куча проблем из-за этого, сисадмин сразу поймет что это не то исправление, которое решит проблему.

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

      Но основное все-же то, что сисадмин в случае проблемы с куда более высокой долей с вероятности решит её не приведя к деградации системы.


      1. Antra
        05.05.2026 02:43

        Я имел в виду, что нейронка просто помогает, дает буст к имеющимся скиллам.

        Хорший сисадмин с ней получает резульаты "отличного" (но не лучшего в мире). Слабый сисадмин получит результаты "хорошего". Вообще не сисадмин получит результаты "начинающего сисадмина". Намного лучше, чем "сам", но никак не супер-гуру.

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

        "классика" - да. "работы с нейронками" - нет :)

        Приходишь к врачу - в подавляющем большинство случаев смотрят/лечат симпмтом. "Докторов Хаусов" на всех не напасешься. Даже по ДМС надо очень внято и настойчиво объяснять, какие стандартные варианты уже испробованы и отсеяны.

        А взять строительство какое-нибудь... IMHO в любой области если хоть немного разбираешься, результаты будут лучше. Если хорошо разбираешься - еще лучше.


        1. Spyman Автор
          05.05.2026 02:43

          Вам не повезло натыкаться на плохих специалистов коих реально немало(

          Но в противовес пример из жизни - пол года назад заказывал шкаф у хороших мебельщиков, дал сгенерированный картинки нейронкой и словами описал чегт хочу - и мне вполне себе нарисовали и сделали не то, что я описал, а именно то, что было нужно) заменив штанги для вещей на крючки там, где ширины будет мало, нужную фурнитуру там где выбранная не пойдет, материалы (на более дешёвые кстати) и прочие мелочи)

          И за всю жизнь были ещё примеры работы с профессионалами, с которыми тоже было именно так.

          Так что тут да - если работаешь с плохими специалистами, нужно разбираться в теме самому, а вот если хорошими, то вовсе не обязательно. Нейросеть тут скорее на уровне плохого спеца (но все равно не совсем, как-то специфично)