
Есть у меня один знакомый. Преподаватель. Примерно, раз в месяц принимает экзамены у студентов, с курсов повышения квалификации. Студенты решают задания на компьютерах, а он ходит между ними, вопросы задает и двойки ставит.
Вот только ходить приходится с бумажными ведомостями. Ведомости эти, постоянно падают на пол, студенты в них подглянуть норовят. Если в ведомости надо что-то исправить, то приходится зачеркивать и грязь разводить. А затем, результаты экзамена надо внести в компьютер.
И настолько эта возня с бумагой его достала, что знакомый решил:
"Хватит это терпеть! Говорят, в соседнем дворе бабушка сама написала себе приложение для продажи недвижимости (находясь под воздействием). А я что? Лысый что ли?!
Вон, даже курсы по вайбкодингу продаются! Напишу сам себе электронную ведомость!
Может ведь обычный человек написать любую программу.
Ну не будут же врать в Интернете."
А вот и нет.
Никакого знакомого нет
Это я сам.
Большими языковыми моделями, в работе, пользуюсь постоянно. Правда специфика работы такая, что 90% программ, написанных за последние годы, умещаются в пол экрана. В основном - скрипты анализа логов, снятие дампов в нужный момент, запуск трассировки когда все стало плохо, простейшие мониторинги (на коленке) и т.д.
Иногда, даже специально придумываю, чтобы эдакое побольше написать руками. Расширение для PostgreSQL - было настоящей отдушиной.
И вот тут мир LLM я открыл для себя с лучшей стороны. Моментально перестаешь "красноглазить", запоминать 100500 параметров каждой команды, или вспоминать: "А как это на ...таком языке... сделать?".
Спросил - получил готовый ответ. И он работает. Вот прям реально работает.
Но как было написано выше, есть еще преподавательская деятельность.
А там они - бумажные ведомости.
Нужно войди в зону комфорта
К идее вайбкодинга я относился осторожно. С одной стороны, примерно понимаю как работают LLM и каких сюрпризов от них ожидать.
С другой стороны, "вайбанутые" бегают кругами по всему Интернету и орут, что если ты не станешь как мы сегодня, то завтра уже опоздаешь.
Поэтому, разработку приложения для выставления оценок - воспринял как вызов. Хотел сам для себя понять, насколько сейчас реально разработать нужное приложение под лозунгом: "Ни капли в рот, ни буквы в код!".
Допустим, проснувшись с утра, я осознал себя преподавателем ВУЗа. Вместо показа голых коленок (за "пятерку"), студентка установила мне Cursor и подключила к нему Claude.
Иностранный студент (за "тройку автоматом") оплатил со своей карты 20$ за месяц подписки.
Нужное делайте, не нужное - не делайте
Позволю себе дать один совет: делайте реально нужное (вам) приложение. Иначе вы попадете в ловушку "вау-эффекта" от первых шагов разработки.
Читал тут, как один человек разработал за день приложение по переводу из одних единиц измерения в другие. И на этом опыте делал выводы, что всё, программисты не нужны!
Мил человек, оно тебе зачем? Ежедневно из сантиметры в килограммы переводишь? Нет? А вот когда будешь ежедневно, то вдруг окажется, что немного неудобно. Надо поправить интерфейс. Начнешь править, а там как поедет одно за другим...
Расслабьтесь и откиньтесь на спинку кресла
Для понимания уровня сложности приложения (очень кратко):
создаем экзамен (указываем суммарный балл прохождения)
добавляем в него студентов
указываем список вопросов на экзамен
на закладке "Оценки" тыкаем в студента и за каждый вопрос ставим оценку от 2 до 5 и можно написать комментарий
у студента на экзамене еще можно задать IP машины за которой он сидит
можно назначить дату пересдачи экзамена
Основные заморочки с отборами студентов в окне оценок. Нам надо видеть кто прошел, кому задать доп. вопрос, кому и на какую дату назначена пересдача и сколько человек на эту дату уже есть.
Весь процесс разработки я не буду описывать. Многие пробовали и знают, что это такое. Кто не пробовал - советую самому попробовать, а не полагаться на чужое мнение.
Началось все так, что я аж крякнул от удивления. Минут за 40, этот дурень сделал мне первую версию приложения, и запустил его на эмуляторе. Причем, Android SDK уже был, я просто сказал ему, чтобы не вздумал качать, а использовал текущий.
Ну че ты начинаешь? Все хорошо же было.
Первое, что я понял: на текущем этапе, юрист не сможет сделать себе приложение типа "СоветникМинус".
Пока вы делаете приложение уровня "покажи мне котика из интернета", еще можно общаться на естественном языке. Но как только приложение должно делать что-то реальное - вы не сможете избежать терминов из программирования и особенностей языка (платформы) разработки.
Чтобы все было расставлено как надо, правильно нажималось\отжималось\показывалось, мне пришлось применять слова: Activity, ToggleButton, Text, ToolBar... и т.д.
По другому, "Он" просто не понимал.
Исправления одних ошибок генерируют другие.
"Вот новость!", воскликнет адепт, "надо было сказать, что не меняй эту часть.".
Сказал.
Все получилось гораздо хитрее: я запретил ему менять окно оценок, потом сказал исправить ошибку. Для исправления ошибки, "AIноагент" изменил структуру базы данных, и данные в одной из колонок, списка оценок, просто перестали показываться.
Нет, колонка там была (только пустая). Он действительно не тронул указанное окно.
Заметил я это уже на экзамене.
Ну я-то куда полез, я же читать не умею
А потом я полез в код.
Вся логика приложения в одном файле MainActivity.
Там все в кучу. И composable-функции и большая часть логики.
Нет, он конечно применил эдакий MVC (разделил данные от активностей и то благодаря использованию Room), но никаким структурным мышлением там и близко не отдает.
Отлично используются различные паттерны и фремворки типа Room (как уже было сказано), хотя я бы предпочел sqldelight.
Но когда у тебя в приложении 4 вкладки в нижнем меню, то наверное логично не пихать это все в один модуль, а разбить каждую вкладку минимум на 2 логических блока: view и функциональность (а уж сколько под этим будет реальных классов...).
Еще немало удивило, что все формы ввода экзаменов, студентов, вопросов, оценок - это кастомные AlertDiaolg'и. И да, весь их код тоже в MainActivity.
Как бы ладно, но это не по человечески что ли.. Ах, да...
Получается, чтобы разработанное приложение было нормально структурированным - эту структуру надо описать самому (удачи той самой бабушке и хорошей погоды в "её" доме).
Настал тот день
И вот день экзамена. Специально не стал брать, доставшие до печенок, бумажные ведомости, взял только телефон и заветное приложение на нём.
Выставил первую оценку, написал комментарии, по ответам студента. Все отлично. Пару раз ткнул в разные фильтры. И оценка пропала. Совсем. Полностью. Вместе с комментариями.
Хорошо, что я выставил только одну оценку и помнил за что завалил несчастного. Внёс данные снова.
После чего, на протяжении всего экзамена, дрожащими пальцами делал скриншоты каждой выставленной оценки.
А кто же это сделал...
Пришлось потратить немало усилий чтобы понять, что произошло.
Сначала думал самое очевидное, что этот умник, в момент фильтрации списка, делает какую-то DML операцию. Но нет, тут он придерживается паттернов и фреймворков, что спасает.
Оказалось вот что:
Так как я не знаю IP машины студента, пока он физически за нее не сядет, то эти самые IP вношу "по ходу", открывая форму "Экзамена" и указывая там IP-адрес студенту.
А, так как таблица оценок связана с экзаменом внешним ключом, то у нее установлено onUpdate = ForeignKey.CASCADE. После перезаписи экзамена - все оценки затираются.
Но это не видно сразу, т.к. список оценок не получает уведомление об изменении данных.
И кажется, что оценки пропали после применения фильтра.
Достаточно было заменить, в описании внешнего ключа, onUpdate = ForeignKey.NO_ACTION и оценки перестали пропадать (да, тут не обрабатывается ситуация когда студента можно убрать из экзамена, но его запрещено убирать, если есть оценки).
Если бы я сам писал приложение, то вообще отказался бы от внешних ключей и всю целостность данных обеспечивал в коде, а не полагался на СУБД.
Что по времени
Чистого времени "вайбанутой" разработки у меня ушло, примерно, 6 часов. Делал по вечерам, в течении недели.
Если делать самому, то (в силу привычки) сделал бы:
на Java с xml-лейаутами - часов за 8
на Kotlin + Compose - часов за 10
Какие мысли по итогу
За много лет, имею опыт программирования от микроконтроллеров AVR (до того, как они стали Arduino - эдаким 1С, в мире электроники), до разработки тиражных приложений на том же 1С. Ну и много чего там в промежутке, между низким уровнем и lowcode.
Для себя понял следующее: пока ты находишься на "низком уровне": прошивки устройств, интеграции с оборудованием, собственная ORM (бывало и такое)... - оно или работает или нет (в 99,99% случаев). Практически всегда видно, где произошла ошибка и в чем ее причина.
А вот как только логика разработки поднимается на прикладной уровень (или не дай бог уровень "денег"), то количество ошибок и сложность их поиска\исправления стремится в бесконечность. Эти ошибки не так очевидны, они выявляются не сразу, а их исправление требует немалого времени на исследование (как бы не сломать, что нибудь другое своим исправлением).
Именно поэтому мы слышим дикие вопли с "Вайбанутовских болот", как там все прекрасно. Но при этом, не видим "Кембрийского взрыва" приложений в "сторах". Ко мне постоянно обращаются знакомые с вопросами можно ли разработать приложение, которое "..." и дальше описывают функциональность, нужную ну... 1-2 людям из миллиона.
Есть огромный, скрытый пласт, крайне-узкоспециализированных приложений. Программисты не хотят за них браться, т.к. денег там нет. А пользователи, пока, не могут это сделать сами. Как в октябре 1917-го - "верхи не могут, а низы не хотят".
Для себя я решил, что "Вайбонизм" победит, когда наступит эра индивидуальных приложений. Когда вместо того, чтобы изучать чужое приложение, человек сделает его себе сам. Лично под себя. С перламутровыми кнопками и дизайном стиля "Циклоп" (смотреть на это можно только прищурившись одним глазом). А пока этого нет - увольте.
Скоро не будет людей, будет один ИИ
Можно ли "вайбкодингом" разработать большое и сложное приложение. Да можно.
Только для этого придется разбить структуру приложения на отдельные блоки и описать связь между ними.
И кто же на такое способен...? Ответ: "архитектор ПО", т.е. человек из высшей иерархии IT-специалистов. А тем временем, нам предлагают отказаться от джунов-мидлов, заменить их на ИИ. "Мы научим вас как! Деньги нести вот сюда..."
Этим самым, выбивается нижний пласт пирамиды профессионального роста. Откуда возьмется "архитектор" если он не был джуном?
Безусловно, ИИ повлиял и еще повлияет на процесс разработки. Но речь в статье была про "сейчас". И может показаться, что следом за этой фразой, я предлагаю...
Срочно всем вайбануться!
По моему мнению, курсы вайбкодинга, сейчас, сродни курсам "Научим вас правильно искать в Интернете, начала 2000-х" (олды помнят).
Сам помню как объяснял тогда, своему другу (фрезеровщику по образованию), как правильно писать запросы в поисковике, чтобы найти нужное. Он все никак не мог найти, что хотел, а я находил очень быстро.
У вас, или ваших знакомых, сейчас есть проблема с составлением поисковых запросов? Уверен, что нет.
Вайбкодинг - это инструмент, пользоваться которым, можно научиться очень быстро (а скоро и не надо будет учиться совсем).
Если вы понимаете как разрабатывать приложения, то с ним или без него - вы приложение сделаете.
Если не понимаете, то пока - это все мошеннические сказки бабушки, из соседнего подъезда.
А вот когда бубушка сама сможет сделать себе приложение, то вайбкодер ты или нет - роли играть не будет.
P.S. Так как своего телеграмм-канала нет, то здесь может быть ваш (нет).
UPD:
в комментариях предложили запустить e2e тесты (для выявления ошибки). Я попросил Cursor "Создай тесты e2e и запусти".

Ладно, подумал я, и создал новый тест, где полностью описал сценарий воспроизведения проблемы. Ждать пришлось минут 40. Он постоянно пытался запустить тест, падал с ошибкой, перекомпилировал тест, заново запускал... В итоге выдал:

Да как так-то?! Ровно то, что надо проверить и убрал!
Это напомнило мне студенческие годы. Со мной учился паренёк, который в лабах на Turbo Pascal просто удалял строки, которые светились как ошибочные.
В итоге, его программа состояла из слов Programm, Begin, End.
И вы не поверите - она компилировалась без ошибок!
А тест, по ошибочному сценарию, так и не смог запуститься. Через час мне просто надоело смотреть на беготню по кругу: изменение-компиляция-запуск-ошибка.
UPD 2:

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

Robastik
16.12.2025 06:49За много лет, имею опыт программирования
и сравниваю с руководством разработкой, в чем опыта нет.

fedignat Автор
16.12.2025 06:49Ну как вам сказать, он есть.
Только я бы поделил этот опыт на 2 части:
1. "Руководство людьми" - у меня получился наихудший результат за всю историю руководства. Много раз предлагали должности начальника ... - отказывался.
2. Постановка задач, написание тех.проектов - поверьте, опыт есть. И, вполне себе, положительный.
vmkazakoff
16.12.2025 06:49Так а почему сейчас то начали не с этого? Не с описания архитектуры, подхода... Вы примкнули не к тем вайбанутым )
Файл agents.md есть? (Гуглится, но очень советую делать свой собственный), файл readme.md с описанием работы приложения? Файл для архитектуры?
Вы ведь сами написали, что имеете опыт написания тех.проектов, но сами его взяли и не применили. Результат более чем закономерен.

kukovik
16.12.2025 06:49Так речь о бабушке из соседнего подъезда. При чем тут архитектура и опыт руководства проектами? Какие еще файлы md? Не пугайте бабушек.

vmkazakoff
16.12.2025 06:49Да откуда идея то, что теперь писать приложения может бабушка? Перестаньте слушать идиотов )
Вот станки ЧПУ появились, и что теперь, никому не надо понимать как они работают? Да щаз.

fedignat Автор
16.12.2025 06:49А вот открываем ленту хабра и там такая новость
https://habr.com/ru/news/977174/Готов поспорить, что у автора, за плечами, лет 10 опыта разработки игр. Но общий фон создается такой, что "Началось! Теперь и игры можно!".
Пока писал комент, возникла идея. На первом курсе написал простейшую игру с лабиринтом на Паскале. Ну что "вайбигратор" - попробуем.

vmkazakoff
16.12.2025 06:49Автор с ником Crunchfest3 заявил, что работал над проектом около трёх месяцев с помощью Claude Code ... Сначала он создал прототип, применив архитектуру ECS (Entity Component System)...
Ну прямо вот второй абзац намекает, что вайб-кодинг:
Не "по быстрому", а 3 месяца
Не все сразу, а по этапам
Надо понимать про архитектуру и как-то осознанно (ну или по подсказке ИИ) ее выбрать

fedignat Автор
16.12.2025 06:49И, кстати, про игры. Рискую сейчас быть измазанным коричневым от профессиональных геймдевелоперов. Но все же знают трюк, что главный цикл игры загоняется в try catch и если кадр упал, то фиг с ним - следующий отрисуется как надо?
Если в игре, вместо куста рябины появился боярышник, а вон та мохнатая бытовка, возле дома - это, оказывается, собачья будка... То всегда можно объявить, что так и задумывалось.
Но если вы ошибётесь на 10 копеек в зарплатой ведомости, то работяги, с завода, вас морально (а может и физически) затащат в мохнатую бытовку и бросят в куст боярышника, после.
Именно поэтому, я настороженно отношусь к идее бездумного вайбкодинга в реальных "промышленных" приложениях (в настоящее время).

vmkazakoff
16.12.2025 06:49Ну под этим подпишусь. Надеюсь что разрабы ПО самолётов или там ПО для управления АЭС не будут делать таким способом.

VGoudkov
16.12.2025 06:49Не не будут, а уже делают. Потому что там тоже CEO и под ним мильён менеджеров, у которых KPI. Единственная надежда, что фаззинг большинство багов выявит до того, как оно начнёт управлять реальным железом.

lil_master
16.12.2025 06:49В целом, плюсую каждый ваш комментарий, вайбкодинг ошибочно связывают с каким-то лодырем, который сказал ллм "захуячъ мне щас приложуху" и срубил бабла. Если подойти к вопросу с тщательным планированием и заданием архитектуры проекта - ошибки ллм стремятся к нулю, а скорость разработки растет на порядки. Посыл автора статьи мне в этом смысле тоже не понятен. Раньше, до ллм, по ролику на ютубе мог установить вордпресс любой, кто умеет хотя бы смотреть ютуб или гуглить.
Вайб кодинг - это не про то "как никто сделал всё на гпт", а скорее про то, как умный человек ускорил свою самореализацию и совсем необязательно, чтобы он был программистом, достаточно иметь четкий и правильный план, а не дрочить пол жизни на ньюансы типа "почему 1 плюс 1 не равно 2".
Wesha
16.12.2025 06:49скорость разработки растет на порядки.
...про скорость поддержки тактично умолчим.

fedignat Автор
16.12.2025 06:49Не с описания архитектуры, подхода...
Как только я начну это делать, то теряется весь смысл. Чем больше будет приложение, тем все на более низкий уровень детализации придется спускаться.
Так и до описания параметров функций "довайбимся".Я же просто хотел себе сделать приложение по лозунгам из Интернета, что теперь можно все сделать ничего не зная. Пока нельзя, к сожалению.

vmkazakoff
16.12.2025 06:49Теперь вы (ещё раз?) доказали себе, что не надо
читать газеты по утрамверить рекламеслушать лозунги маркетологов и инфлюенсеров

vmkazakoff
16.12.2025 06:49И кстати, по опыту, опускаться до совсем низких уровней пропала бывает нужно.
Я часто прошу ИИ не писать код, прям принудительно, а сначала описать логику в файле в виде комментариев, пустых функций (условно что на вход, что на выход) или сначала описать и показать мне какие планируются изменения, и только когда проверил на полноту - отправляю делать.
Тоже не 100% гарантии отсутствия багов. Но точно лучше.
Вы же стажёра сначала попросите рассказать как он хочет решать проблем му, и если ок - то уже пусть решает. Или вы не глядя его код принимаете?
На счёт не глядя - смотрите что ИИ хочет делать, а то тут недавно гемини удалило юзеру весь диск D:

fedignat Автор
16.12.2025 06:49Вы же стажёра сначала попросите рассказать как он хочет решать проблем му, и если ок - то уже пусть решает. Или вы не глядя его код принимаете?
Конечно. Тут отличие в том, что когда стажеру говоришь "вот эту красную кнопку сделай зеленой", то он не полезет в обмен данными с платёжным терминалом (хотя разные уникумы попадаются).

Wesha
16.12.2025 06:49Чем больше будет приложение, тем все на более низкий уровень детализации придется спускаться.
Скрытый текст


nyxandro
16.12.2025 06:49Классическая ситуация, люди делают выводы о вайбкодинге, даже не попробовав его, либо не понимая его сути. Примерно как оценивать технические возможности формулы 1, не выезжая на трек. Смешно конечно это все читать, заливая на продакшен очередной проект, которыми пользуются бизнесы (уже 4 месяц как, вроде, даже багов не было, а все новые на голову выше предыдущих). Так что пока болтуны негодуют, мы реализуем.

mina987
16.12.2025 06:49Интересное замечание, только почему то вайб кодинг не способен нормально сделать алгоритмы уровня джун+
Был у меня опыт, для проекта нужно было написать алгоритм передачи пароля с нулевым разглашением данных. И в этом момен нейронки воротили костыли, путая версии данного алгоритма, путая клиентские и серверные стороны. И пытаясь доказать мне что у них всë четко а код почему то не работает.
Как итог, около двух суток я пытал модели, по итогу забил и за 3 часа по документациям, написал сам

rsashka
16.12.2025 06:49Вайбкодинг - это про эмоции от процесса программирования, а не про программирования без соответствующих знаний (все равно, что кухарке начать управлять страной). LLM это просто инструмент и не более того и если за программирование берется человек без нужных знаний и опыта, результат вполне очевиден.

fedignat Автор
16.12.2025 06:49В точку. Как и с фразой про "кухарку и государство", которая в оригинале звучит так:
"Мы знаем, что любой чернорабочий и любая кухарка не способны сейчас же вступить в управление государством... Мы требуем, чтобы обучение делу государственного управления велось сознательными рабочими и солдатами и чтобы начато было оно немедленно "
Т.е. чтобы управлять государством надо сначала долго учиться государственному управлению, а потом приобретать опыт.
Просто сейчас такой информационный фон вокруг вайбкодинга, что складывается ощущение: "Да там делать ничего не надо, только сиди себе и командуй, а он сам за тебя все сделает.".
На счет эмоций - они сначала прям "вау". Но в какой-то момент начинаешь понимать, что это что-то сродни "автокомплиту" (очень утрировано). Просто обычный инструмент. И проблем он подкидывает изрядно.

Sobakaa
16.12.2025 06:49Ничего нового. Различные ноу-код инструменты предлагаются годами. Я уж молчу про обфускаторы sql, где, не смотря на обещания, приходится знать и sql и псевдоязык очередной его убийцы.

ulovka22
16.12.2025 06:49Даже в таком виде вы понимаете эту фразу неправильно. Какому государственному управлению могут научить рабочие и солдаты? Тут ключевое слово "проверенные", и речь идёт всего лишь о назначении управленцев, исходя из политической лояльности.

MAXH0
16.12.2025 06:49Вейкбординг сейчас - это быть бесплатным бета-тестером для копроратов. Ну и еще обучающей моделью. Пока дают бесплатный сыр - его можно пользовать. Только Вас заставят платить по гамбургскому счету - вам потребуется оптимизировать процесс. И тут придется оптимизировать запросы и цепочки обработки запросов/генерации, подбирать модели по цене/качеству.
Кстати, многие кто сокращают на волне AI демпинга, потом, когда придется платить реальную цену, уже будут выбирать - кремниевая нейросеть или белковая обойдется дешевле и в каких задачах.
НО сейчас учиться вейкбордингу, возможно, и не стоит. Потому что всё слишком динамично меняется. Но держать руку на пульсе точно стоит. С другой стороны всегда можно перейти от творцов в пользователи и пользоваться готовым сервисом и настроенными генераторами.

nyxandro
16.12.2025 06:49Поэтому меньше болтать надо сейчас, а пилить проекты, пока это дешево или даже бесплатно.

hlogeon
16.12.2025 06:49Заработал больше 10к$ за декабрь вайбкодингом. Буду рад продолжать бета-тестером для корпоратов, только платить продолжайте. А вы продолжайте называть все это игрушками и не заниматься этом! Не учитесь!!! Пожалуйста!!!

akhmelev
16.12.2025 06:49Как же удивительны все эти рассуждения. И не надоедает же. Подлодка джавовая уже больше года вещает взахлёб аи аи аи...
Чтобы понять инструмент посмотрим под капот. Ембеддинги после многоголовой фокусировки тупо генерируют следующее слово. Это же просто экстраполяция в гиперпространстве. Что мы про нее знаем? Чем точнее опорные точки, тем точнее результат.
Поэтому надо тупо: очень точно и очень подробно в терминах выбранного стека технологий дать ТЗ со всеми ожиданиями и ограничениями. И будет шанс за одну-две итерации получить нужное решение. Причем вторая это не продолжение чата а рестарт с уточнениями. Помним про экстраполяцию, экстраполяция экстраполяции до добра не доведет. В другом чате на этот код строим тесты, в третьем просим ревью. Это уже совсем не вайб, а реально работа примерно как у тимлида.
Наступает момент когда запросы таковы, что тесты будут сходиться с генерацией а в ревью нет того с чем можно однозначно согласиться. Можно считать, что наконец-то пошла польза, все что до этого момента - бирюльки, игрушки, вайб, короче трата времени. Итак, получилась разновидность программирования. Всего лишь. На простых задачах буст по времени будет. На сложных, без декомпозиции будет ад. Ну или если угодно вайб.

nyxandro
16.12.2025 06:49Слабовато, видимо, Вы изучили текущие возможности разработки с нейронкой. Сразу стало понятно когда об этом заговорили, что собрались тестировать в другом чате.

akhmelev
16.12.2025 06:49Я имел ввиду другой движок - независимость контекста при генерации повышает релевантность - это борьба с галюцинациями. Ну и это... у меня вообще-то докторская по нейросетям еще в 2012 году была защищена. Так что все же я немножечко разбираюсь в вопросе ;)

Bardakan
16.12.2025 06:49А вот как только логика разработки поднимается на прикладной уровень (или не дай бог уровень "денег"), то количество ошибок и сложность их поиска\исправления стремиться в бесконечность.
у вас есть чат и логи работы с ним. Вы могли их просмотреть и поискать в какой момент возникла ошибка. Вы их игнорировали? Cursor вообще хранит историю чата между запусками.
А еще есть git, в котором можно просмотреть историю изменений и найти комит в котором произошла ошибка. Вы его не добавляли в проект?Нет, колонка там была (только пустая). Он действительно не тронул указанное окно.Заметил я это уже на экзамене.
А было ли тестирование проекта?
Выглядит так, как будто это целиком и полностью ваш фейл, который вы решили спихнуть на LLM. Ок, но зачем писать статью об этом, обзываясь обидными словами?
panzerfaust
16.12.2025 06:49Выглядит так, как будто это целиком и полностью ваш фейл, который вы решили спихнуть на LLM
Вайбкодеры: просто следуй вайбу, просто напиши что хочешь получить, больше не нужно учить эти ваши ЯВУ и алгосики, лучший язык программирования - английский
Также вайбкодеры: ну это, у тебя вайб не тот, промпт не тот, модель не та, надо было QWERTY-сервер подключить и ASDFFGH-протокол заимплементить, MONET.md у тебя кривой какой-то, 5 секунд назад вышла новая нейронка SickFuck 4.20 и она рвет все бенчмарки

Bardakan
16.12.2025 06:49Хейтеры вайбкодинга: я установил курсор, написал в нем дословно "сделай за меня всю работу" - не получилось, написал "протестируй приложение" - не получилось, написал "исправь ошибки в проекте" - тоже не получилось. Вывод: все нейронки - фигня, вайбкодинг - фигня, крупные ИИ компании - мошенники, продающие воздух и взвинчивающие цены на комплектующие. И еще напишу статью об этом на хабре, причем не буду указывать ни конкретную модель, ни конкретные промпты - и так сойдет.

panzerfaust
16.12.2025 06:49написал в нем дословно "сделай за меня всю работу"
Но ведь это именно то, что проповедуют свидетели Святого Преподобного Карпатия. Иначе придется признать, что нужно шарить сразу в бизнесе-аналитике, программировании и архитектуре, чтобы получать нормальное ПО, а не фуфло. О чем автор и пишет.

Bardakan
16.12.2025 06:49Это всего лишь две крайности людей: одни считают, что нейросеть сделает за них всю работу, другие - что нейросеть не умеет вообще ничего

vmkazakoff
16.12.2025 06:49Хз, шлите в лес, тех кто так говорит. Ну или посмотрите что они делают - наверное ничего сложнее туда листа или крестиков ноликов там нет.
Да, надо прописать правила, паттерны, версии библиотек, логику приложения и много всего ещё. Прикол в том, что сейчас это модно делать просто на русском/английском/... не зная синтаксис. Но не знать подходов и алгоритмов нельзя.
Те кто пытаются делать иначе - получают вполне ожидаемый результат. Ну или делали какие-то совсем детские поделки. Чем сложнее проект, тем сложнее описать все, вплоть до того, что иногда реально быстрее самому, это нормально.

kostylierro
16.12.2025 06:49да какую там всю работу, побойтесь аллаха. написал найди использование того и сего в файлах проекта, шесть попыток, час траблшутинга, второй час тыкания носом и выслушивания "вы совершенно правы, просто на половом органе я вращал ваши сентенции, файлы и сигнатуры методов, просто написал как получилось", потом за третий час мы осилили функционал двух кликов мышкой и ввода того что мы ищем в файлах...
смеркалось, шел четвертый час вайбкодинга работы делаемой за 15 минут. наверное нужен рой агентов, иначе поиск в файлах это слишком сложно

RichardMerlock
16.12.2025 06:49Оооо, "вы совершенно правы" - вот она боль вайбкодинга! После третьего такого поворота, спрашиваю "что же ты, дура тупая, сразу правильно не отвечаешь? Зачем я тебе на электричество скидываюсь?" Ох как оно красиво отмазывается. Сразу верю.

hlogeon
16.12.2025 06:49О, вот это да! Оказывается любым инструментом нужно учиться пользоваться!? Вот это да, вот это неожиданность!

fedignat Автор
16.12.2025 06:49у вас есть чат и логи работы с ним. Вы могли их просмотреть и поискать в какой момент возникла ошибка.
Какая ошибка? Ошибок нет. Я ровно про это и пишу, что когда ломается не тип данных, а логика приложения, то никакой компилятор вам ошибку не скажет. Все было прекрасно.
А еще есть git, в котором можно просмотреть историю изменений и найти комит в котором произошла ошибка. Вы его не добавляли в проект?
Есть. Какой комит там искать? По метке "Я специально здесь сделал ошибку?"
А было ли тестирование проекта?
Было. Как ручное, так и автоматическое (попросил создать тесты).
Вручную я прошел весь путь использоваения приложения и выявил то, что мне неудобно. Выявил ошибки, потом попросил их исправить. И так несколько итераций.
Причем, специально указывал, что не трогай функционал, который меня полностью устраивает.Выглядит так, как будто это целиком и полностью ваш фейл, который вы решили спихнуть на LLM.
Не целиком и не полностью. Я всеми силами пытался сделать рабочее приложение. Ровно такое какое мне нужно, с нужным интерфейсом и функционалом. А не "уфф... ну хоть так получилось сгенерировать...".
Ок, но зачем писать статью об этом, обзываясь обидными словами?
Обидные слова относятся не к людям, которые используют ИИ в своей работе. Я сам использую. Они относятся к тем, кто на волне ажиатажа, пытается впарить людям (за деньги или с умыслом) свои курсы и\или способ мышления, что "оно сделает все за вас, расслабьтесь".
Отвечая на ваш комментарий, я внезапно понял главную "филосовскую" проблему LLM - они не боятся (подозреваю, что это передается и фанатичным адептам вайбкодинга).
Если откинуть совсем бестолкового "джуна", то человек, уже с небольшим опытом, крайне осторожно будет относиться к изменениям в структуре базы данных. А LLM - не боится.
Он менял ее структуру как хотел, не думая о переносе или обновлении старых данных. Да, можно было сказать, что давай сделай совместимость с прошлой структурой. Но ведь оно обязательно вылезет в чем-то другом.Подозреваю, что у вас нет желания полезть внутрь ядра вашей системы и исправлять там что-то "размахивая лопатой". Вы будете делать это очень аккуратно, продумывая каждое действие. А "Он" - нет. Для ИИ - это просто код. Не более.

Bardakan
16.12.2025 06:49Какая ошибка? Ошибок нет. Я ровно про это и пишу, что когда ломается не тип данных, а логика приложения, то никакой компилятор вам ошибку не скажет. Все было прекрасно.
когда я хотя бы минимально проверяю за ИИ, то у меня таких проблем нет. Почему вы не стали так делать - не понятно
Есть. Какой комит там искать? По метке "Я специально здесь сделал ошибку?"
вы выше писали, что ии изменил вам данные. Вы не можете найти в git файлы, относящиеся к бд, и отследить историю их изменений? А также у вас перед комитом в git отображается список измененных файлов - список вы тоже не смотрели?
Причем, специально указывал, что не трогай функционал, который меня полностью устраивает.
есть сразу несколько особенностей нейросетей, которые могут влиять на это. Я тоже не нашел способа как "железно" заставить нейросеть соблюдать определенные правила. Даже рекомендуемые cursorrules периодически отваливаются.
Подозреваю, что у вас нет желания полезть внутрь ядра вашей системы и исправлять там что-то "размахивая лопатой". Вы будете делать это очень аккуратно, продумывая каждое действие.
предпочитаю баланс. Например, в моей работе ИИ неплохо экономит время при создании новых экранов для iOS проекта, но при этом упорно не понимает, как работать с "safe area" ("зарезервированные" системой области экрана). Также он неплохо генерит шаблонный код по команде "сделай то-то по аналогии"

fedignat Автор
16.12.2025 06:49Я прекрасно понимаю о чем вы пишите.
У вас мышление (как у меня и многих здесь, присутствующих) "сломано" годами опыта.
При вайб-разработке, вы наверняка говорите (условно): "В этом классе добавь метод который делает... Добавь экран на котором...".Вы идёте от подсистем\блоков\модулей приложения. Оперируете особенностями языка и архитектуры. В таком подходе вопросов нет.
А вот когда у вас почти готовое приложение и ты ему просто говоришь, что колонку из списка в первом окне убери и сделай такую же во втором (там придется LEFT JOIN в запрос добавить, т.к. второй список строится по другой таблице). Вот тут может быть что угодно. Вплоть до добавления дублирующей колонки во вторую таблицу БД. А то и удаления ее из первой (вместе с данными).
Если идти в своих командах от интерфейса\функциоала, то, что там будет меняться внутри кода\структуры - одному ИИ известно. А количество изменений (при таком подходе) может быть очень большое. Успустишь что-то - 100%.
Неокрепшим умам, пропагандируют "легкость" и "вайб", но за этой легкостью вида: "поменяй ширину поля ввода", может внутри потянуться такое, что разгребать потом можно неделями.

shaggyone
16.12.2025 06:49У вас, или ваших знакомых, сейчас есть проблема с составлением поисковых запросов? Уверен, что нет.
Справедливости ради, проблем с составлением запросов нет. Зато есть проблемы, что по однозначно составленному запросу находится всё кроме того, что искал. Проблема не новая, последние лет дцать ухудшается.

ponikrf
16.12.2025 06:49Недавно в топ кода моего вайбкодинка попала строчка
timer: NodeJS.Timeout | false = trueОбожаю потом нейросети спрашивать за такой генерированный код)

geornit25
16.12.2025 06:49Можно ли "вайбкодингом" разработать большое и сложное приложение. Да можно.
Только для этого придется разбить структуру приложения на отдельные блоки и описать связь между ними.
И кто же на такое способен...? Ответ: "архитектор ПО", т.е. человек из высшей иерархии IT-специалистов.
Да, тут автор верно подметил. На данный момент, ИИ не способен принимать осознанные архитектурные решения. Если четко не указать нужную структуру программы, требуемые технологические решения, используемые фрейворки, то в итоге можно получить настоящий "винегрет" из кода, который даже может будет работать, но это не точно.
Для себя выработал такой подход:
Держать контекст выполнения запроса настолько маленьким, насколько это возможно. Если нужно что-то исправить, то делать это в отдельном запросе, потому что пару раз попросите исправить ошибку и всё - контект размоется и ИИ потеряет нить рассуждения.
В кодовой базе иметь некий Markdown файл, где бы хранилось описание программы, текущее состояние разработки, какая часть функционала реализована, а какая нет, используемые технологии, ссылки на документацию (например в отдельных Markdown файлах), описание важных частей кода и т.д. В начале можно попросить ИИ создать такой файл и потом обновлять его. Это позволит ИИ оставаться сфокусированным на задаче и не терять нить рассуждений между запросами.
Ну и всегда иметь перед глазами написанный код, чтобы понять когда ИИ пошел не туда куда надо и оперативно исправить ситуацию.

nyxandro
16.12.2025 06:49с подходом все ок, а с выводом по архитектуре странно звучит. Если вы опишите нужный функционал приложения, ваш подход к коду, сообщите, что код придется писать самой нейронке, она прекрасно распланирует и архитектуру подберет. Я вот при разработке веб приложений на DDD остановился и сразу все как по маслу пошло. Не надо стесняться спрашивать саму нейронку, на чём ей легче работать. Надо плясать от этого.

Pusk1
16.12.2025 06:49У меня родной Русский. Могу писать на немецком и Английском. Пробовал писать по испански. Меня не особо понимают. Слишколм много ошибок и не так быстро, как я ожидал.
Условый вайбкодинг тоже требует определённых навыков. Управление контекстом, установка и использование MCP, разные роли для разных агентов, в код всё же нужно поглядывать, навыки применения TDD.
Сам люблю почитать код, но всё чаще замечаю, что вычитавыаю внимательно лишь изменения в ключевых частях, а с остальным просто соглашаюсь и запускаю тест. Для продуктовых экспериментов этого достаточно, а до красивого продового состояния есть кому довести.

alex_lol
16.12.2025 06:49О чем статья? Что ИИ пока ещё не может вам написать Ютуб? С этим даже "вайбанутые" (к которым я себя причисляю) соглашаются. О том, что писать программы с помощью ИИ не получится на данный момент человеку без минимальной компетенции в IT? - с этим тоже никто не спорит.
Но вот про это хочу:
Если вы понимаете как разрабатывать приложения, то с ним или без него - вы приложение сделаете.
Не верно. Вот пример - Про ИИ, который «ничего не умеет»
Если кому лень открывать статью, то кратко: задача для анонимного веб-чата написать блокировщик собеседников. Код сюда же привожу:
Скрытый текст
// ==UserScript== // @name Chatroulett WebRTC Blocker // @namespace http://tampermonkey.net/ // @version 1.2 // @description Мгновенная блокировка нежелательных WebRTC соединений для chatroulett.ru // @author Your Name // @match https://chatroulett.ru/* // @grant none // @run-at document-start // ==/UserScript== (function() { 'use strict'; // Инициализация черного списка const STORAGE_KEY = 'webrtc_blacklist'; const RECENT_IPS_KEY = 'webrtc_recent_ips'; // Функция для получения актуального черного списка const getBlacklist = () => JSON.parse(localStorage.getItem(STORAGE_KEY) || '[]'); // Разделенные списки исключений const EXCLUDED_DOMAINS = [ 'chatroulett.ru', 'api.chatroulett.ru', 'webrtc.chatroulett.ru' ]; const EXCLUDED_IP_RANGES = [ '0.0.0.0/8', // Текущая сеть '10.0.0.0/8', // Частная сеть '100.64.0.0/10', // CGNAT '127.0.0.0/8', // Loopback '169.254.0.0/16', // Link-local '172.16.0.0/12', // Частная сеть '192.0.0.0/24', // Зарезервировано IANA '192.0.2.0/24', // TEST-NET-1 '192.168.0.0/16', // Частная сеть '198.18.0.0/15', // Тестовые сети '198.51.100.0/24', // TEST-NET-2 '203.0.113.0/24', // TEST-NET-3 '224.0.0.0/4', // Multicast '240.0.0.0/4', // Зарезервировано '255.255.255.255/32', // Broadcast '7.0.0.0/8', // Министерство обороны США '26.0.0.0/8', // Министерство обороны США '28.0.0.0/8', // Министерство обороны США '14.0.0.0/8', // Китай (публичная сеть, но часто используется для NAT) // подсеть хостинга видеочата '93.189.228.0/22' ]; // Функция для преобразования IP в число const ipToNumber = (ip) => { const parts = ip.split('.'); if (parts.length !== 4) return 0; let result = 0; for (let i = 0; i < 4; i++) { const part = parseInt(parts[i], 10); if (isNaN(part) || part < 0 || part > 255) return 0; result += part * Math.pow(256, 3 - i); } return result; }; // Функция проверки диапазона в CIDR нотации const isIPInRangeCIDR = (ip, cidr) => { const [network, prefix] = cidr.split('/'); const prefixLength = parseInt(prefix, 10); const ipNum = ipToNumber(ip); const networkNum = ipToNumber(network); const mask = ~((1 << (32 - prefixLength)) - 1) >>> 0; return (ipNum & mask) === (networkNum & mask); }; // Улучшенная функция проверки валидности IP const isValidIP = (ip) => { if (typeof ip !== 'string' || ip.trim() === '') { return false; } if (/[^0-9a-fA-F.:]/.test(ip)) { return false; } // IPv4 const ipv4Regex = /^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/; if (ipv4Regex.test(ip)) { return true; } // IPv6 (упрощенная проверка) const ipv6Regex = /^(?:[0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}$/; const ipv6ShortRegex = /^((?:[0-9a-fA-F]{1,4}(?::[0-9a-fA-F]{1,4})*)?)::((?:[0-9a-fA-F]{1,4}(?::[0-9a-fA-F]{1,4})*)?)$/; if (ipv6Regex.test(ip) || ipv6ShortRegex.test(ip)) { return true; } return false; }; // Улучшенная функция проверки исключений const isExcluded = (value) => { // Проверка специальных адресов if (value === '0.0.0.0' || value === '::' || value === '0000:0000:0000:0000:0000:0000:0000:0000' || value === '255.255.255.255' || value.startsWith('192.0.2.') || value.startsWith('198.51.100.') || value.startsWith('203.0.113.') || value.startsWith('169.254.') ) { return true; } // Проверка доменов if (!isValidIP(value)) { return EXCLUDED_DOMAINS.some(domain => value.includes(domain)); } // Проверка CIDR диапазонов for (const cidr of EXCLUDED_IP_RANGES) { if (isIPInRangeCIDR(value, cidr)) { return true; } } return false; }; // Функция для сохранения черного списка const saveBlacklist = (blacklist) => { localStorage.setItem(STORAGE_KEY, JSON.stringify(blacklist)); }; // Функция для добавления IP в список последних const addToRecentIPs = (ip) => { if (!isValidIP(ip) || isExcluded(ip)) { return; } let recentIPs = JSON.parse(localStorage.getItem(RECENT_IPS_KEY) || '[]'); recentIPs = recentIPs.filter(existingIp => existingIp !== ip); recentIPs.push(ip); if (recentIPs.length > 10) { recentIPs = recentIPs.slice(-10); } localStorage.setItem(RECENT_IPS_KEY, JSON.stringify(recentIPs)); }; // Функция для принудительной очистки черного списка от исключенных IP const forceCleanBlacklist = () => { let blacklist = getBlacklist(); const originalLength = blacklist.length; const cleanedBlacklist = blacklist.filter(ip => { if (isExcluded(ip)) { return false; } return isValidIP(ip); }); if (cleanedBlacklist.length !== originalLength) { saveBlacklist(cleanedBlacklist); } return cleanedBlacklist; }; // Функция для отображения сообщения const showMessage = (text, backgroundColor = 'red', textColor = 'white') => { document.querySelectorAll('.blocker-message').forEach(msg => msg.remove()); const message = document.createElement('div'); message.className = 'blocker-message'; Object.assign(message.style, { position: 'fixed', bottom: '20px', left: '20px', padding: '15px 25px', backgroundColor: backgroundColor, color: textColor, borderRadius: '5px', fontSize: '18px', fontWeight: 'bold', zIndex: 10000, boxShadow: '0 4px 8px rgba(0,0,0,0.3)', transition: 'opacity 0.5s ease-out' }); message.textContent = text; document.body.appendChild(message); setTimeout(() => { message.style.opacity = '0'; setTimeout(() => { if (message.parentNode) { message.parentNode.removeChild(message); } }, 500); }, backgroundColor === 'orange' ? 6000 : 6000); }; // Функция для извлечения IP из ICE кандидата const extractIPFromCandidate = (candidate) => { const regex = /([0-9]{1,3}(\.[0-9]{1,3}){3})/; const match = candidate.match(regex); return match ? match[0] : null; }; // Функция для извлечения IPv4 из IPv6 адресов const extractIPv4FromIPv6 = (ipv6) => { const ipv4MappedRegex = /^::ffff:(\d+\.\d+\.\d+\.\d+)$/; const mappedMatch = ipv6.match(ipv4MappedRegex); if (mappedMatch) return mappedMatch[1]; const ipv4CompatRegex = /^::(\d+\.\d+\.\d+\.\d+)$/; const compatMatch = ipv6.match(ipv4CompatRegex); if (compatMatch) return compatMatch[1]; const nat64Regex = /^64:ff9b::(\d+\.\d+\.\d+\.\d+)$/; const nat64Match = ipv6.match(nat64Regex); if (nat64Match) return nat64Match[1]; return null; }; // Функция проверки блокировки IP const shouldBlockIP = (ip) => { if (!ip || typeof ip !== 'string') { return false; } // Сначала проверяем исключения if (isExcluded(ip)) { return false; } const blacklist = getBlacklist(); if (!ip.includes(':')) { return blacklist.includes(ip); } const extractedIPv4 = extractIPv4FromIPv6(ip); if (extractedIPv4) { return blacklist.includes(extractedIPv4); } return false; }; // Функция для поиска и клика по кнопке ДАЛЬШЕ const clickNextButton = () => { // Основной селектор для кнопки ДАЛЬШЕ на chatroulett.ru const nextButton = document.querySelector('button.btn.btn-primary.btn-lg.d-block.w-100.fs-2.px-0.py-3.py-lg-5'); if (nextButton) { // Сначала снимаем disabled если есть if (nextButton.disabled) { nextButton.disabled = false; } nextButton.click(); return true; } // Альтернативные селекторы для кнопки ДАЛЬШЕ const alternativeSelectors = [ 'button[class*="next"]', 'button[class*="primary"]', '.next-btn', '[class*="next"]' ]; for (const selector of alternativeSelectors) { const button = document.querySelector(selector); if (button) { if (button.disabled) { button.disabled = false; } button.click(); return true; } } return false; }; // Наблюдатель за кнопкой ДАЛЬШЕ - снимает disabled если он появляется const observeNextButton = () => { const observer = new MutationObserver((mutations) => { const nextButton = document.querySelector('button.btn.btn-primary.btn-lg.d-block.w-100.fs-2.px-0.py-3.py-lg-5'); if (nextButton && nextButton.disabled) { nextButton.disabled = false; } // Также проверяем альтернативные кнопки const alternativeButtons = document.querySelectorAll('button[class*="next"], button[class*="primary"]'); alternativeButtons.forEach(button => { if (button.disabled) { button.disabled = false; } }); }); // Начинаем наблюдение за изменениями атрибутов и поддерева observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['disabled', 'class'] }); return observer; }; // Функция анализа SDP const analyzeSDP = (sdp) => { const foundIPs = new Set(); if (!sdp) return foundIPs; const ipv4Regex = /\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b/g; const matches = sdp.match(ipv4Regex); if (matches) { matches.forEach(ip => { if (isValidIP(ip) && !isExcluded(ip)) { foundIPs.add(ip); } }); } return foundIPs; }; // Создание кнопки блокировки const createButton = () => { const banButton = document.createElement('button'); Object.assign(banButton.style, { position: 'fixed', top: '50px', left: '45px', width: '120px', height: '120px', borderRadius: '50%', backgroundColor: 'red', color: 'white', border: 'none', cursor: 'pointer', zIndex: 9999, fontSize: '12px', fontWeight: 'bold', boxShadow: '0 4px 8px rgba(0,0,0,0.3)' }); banButton.textContent = 'BAN'; banButton.title = 'Заблокировать текущего собеседника'; document.body.appendChild(banButton); return banButton; }; // Основная функция инициализации const init = () => { console.log('Chatroulett WebRTC Blocker initialized'); // Принудительно очищаем черный список от исключенных IP forceCleanBlacklist(); const banButton = createButton(); let activeConnections = []; let nextButtonObserver = null; // Запускаем наблюдатель за кнопкой ДАЛЬШЕ nextButtonObserver = observeNextButton(); // Перехват RTCPeerConnection const OriginalRTCPeerConnection = window.RTCPeerConnection || window.webkitRTCPeerConnection || window.mozRTCPeerConnection; if (OriginalRTCPeerConnection) { const createBlockedError = (ip) => { const error = new Error(`Connection blocked: IP ${ip} in blacklist`); error.name = 'BlockedConnectionError'; return error; }; window.RTCPeerConnection = function(...args) { const pc = new OriginalRTCPeerConnection(...args); // Перехват setRemoteDescription const originalSetRemoteDescription = pc.setRemoteDescription.bind(pc); pc.setRemoteDescription = function(description) { if (description && description.sdp) { const foundIPs = analyzeSDP(description.sdp); for (const ip of foundIPs) { if (shouldBlockIP(ip)) { showMessage('Блокировка: ' + ip, 'orange', 'white'); pc.close(); setTimeout(clickNextButton, 100); return Promise.reject(createBlockedError(ip)); } } } return originalSetRemoteDescription(description); }; // Перехват addIceCandidate const originalAddIceCandidate = pc.addIceCandidate.bind(pc); pc.addIceCandidate = function(candidate) { if (candidate && candidate.candidate) { const ip = extractIPFromCandidate(candidate.candidate); if (ip && shouldBlockIP(ip)) { showMessage('Блокировка: ' + ip, 'orange', 'white'); pc.close(); setTimeout(clickNextButton, 100); return Promise.reject(createBlockedError(ip)); } } return originalAddIceCandidate(candidate); }; // Отслеживание активных соединений pc.addEventListener('connectionstatechange', () => { if (['closed', 'disconnected', 'failed'].includes(pc.connectionState)) { const index = activeConnections.indexOf(pc); if (index !== -1) activeConnections.splice(index, 1); } }); activeConnections.push(pc); return pc; }; // Копируем прототип Object.setPrototypeOf(window.RTCPeerConnection, OriginalRTCPeerConnection); window.RTCPeerConnection.prototype = OriginalRTCPeerConnection.prototype; } // Обработчик клика по кнопке блокировки banButton.addEventListener('click', () => { let currentBlacklist = getBlacklist(); let foundIPs = new Set(); let alreadyBlockedIPs = new Set(); let newBlockedIPs = []; // Массив для новых заблокированных IP // Анализ активных соединений for (const pc of activeConnections) { try { if (pc.remoteDescription && pc.remoteDescription.sdp) { const sdpIPs = analyzeSDP(pc.remoteDescription.sdp); sdpIPs.forEach(ip => { if (shouldBlockIP(ip)) { alreadyBlockedIPs.add(ip); } else if (!isExcluded(ip)) { foundIPs.add(ip); } }); } } catch (e) { // Игнорируем ошибки анализа } } // Добавление новых IP в черный список let addedCount = 0; if (foundIPs.size > 0) { foundIPs.forEach(ip => { if (!currentBlacklist.includes(ip)) { currentBlacklist.push(ip); newBlockedIPs.push(ip); // Добавляем IP в массив addedCount++; addToRecentIPs(ip); } }); if (addedCount > 0) { saveBlacklist(currentBlacklist); // Показываем IP через запятую if (newBlockedIPs.length <= 3) { // Если IP мало, показываем все showMessage(`Добавлено ${addedCount} IP: ${newBlockedIPs.join(', ')}`, 'green', 'white'); } else { // Если IP много, показываем количество и первые несколько showMessage(`Добавлено ${addedCount} IP: ${newBlockedIPs.slice(0, 3).join(', ')}...`, 'green', 'white'); } // Закрываем все соединения activeConnections.forEach(pc => pc.close()); activeConnections = []; } } // Обработка уже заблокированных IP if (alreadyBlockedIPs.size > 0 && addedCount === 0) { const blockedList = Array.from(alreadyBlockedIPs); if (blockedList.length <= 3) { showMessage(`Уже в списке блокировки: ${blockedList.join(', ')}`, 'orange', 'white'); } else { showMessage(`Уже в списке блокировки: ${blockedList.slice(0, 3).join(', ')}...`, 'orange', 'white'); } activeConnections.forEach(pc => pc.close()); activeConnections = []; } // Переход к следующему собеседнику clickNextButton(); }); }; // Запуск инициализации if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', init); } else { setTimeout(init, 1000); } })();Я backend-программист, я ничего не знаю про современный JS, а уж тем более про технологию webRTC, я ничего не смыслю в этих ваших IP, сетях, масках, не умею извлекать IP из ICE кандидата - я не имел опыта в разработке с этим (джсоны гоняю). ИИ написал мне этот код и он работает. Более того, пример из статьи - это умышленно подогнанный скрипт именно под озвученный в статье веб-чат, ИИ писал мне это решение немного для другого, но похожего сайта. Более того, с помощью ИИ можно указанный скрипт за полчаса адаптировать для любого подобного веб-видео-чата.
Потратил около 8 часов на это. Теперь вопрос: сколько бы я потратил времени на создание подобного, с учётом того, что я не умею писать на современном JS, ничего не зная про технологию webRTC?
Этим самым, выбивается нижний пласт пирамиды профессионального роста. Откуда возьмется "архитектор" если он не был джуном?
Люди 200 лет назад копали землю палками-копалками, а потом появился ТРАКТОР. Они тоже задавали такой вопрос:
Этим самым, выбивается нижний пласт пирамиды профессионального роста землекопов. Откуда возьмется главный эксперт по работе с мотыгой, если он не копал землю палкой-копалкой?
А они скоро будут больше не нужны. Нравится вам это или нет.
P.S. 1: Предвкушая истерику в стиле "аррря вон там ИИ лишний пробел поставил / не так код написал" сразу скажу - это демонстрация работающего решения от ИИ.
Это пример кода от ИИ для человека, который не знает указанную выше технологию и сам бы подобное не написал без длительного углубленного чтения мануалов, которое бы вылилось в чёрт знает сколько времени.
Если не устраивает чистота кода или алгоритмы - скормите код ИИ и он сделает рефакторинг.P.S. 2: Сливайте карму дальше, ставьте минусы (как обычно), других же аргументов у вас просто нет и вы это прекрасно понимаете, что эта машина в ближайшие 5-10 лет оставит вас на профессиональной обочине истории.

fedignat Автор
16.12.2025 06:49Не верно. Вот пример
Ваш пример только подтверждает тезисы из статьи. Это не приложение. Это единичный скрипт\функция. С самого начала статьи, я написал, что с такими вещами современные модели справляются превосходно.
Попробуйте сделать приложение с несколькими окнами, вкладками или бекенд с логикой, требующей работы с БД + web.
Без понимания, как оно работает внутри, это приложение (состоящее из нескольких блоков\технологий\фреймворков) очень быстро начнет превращаться в какой-то хаос.Люди 200 лет назад копали землю палками-копалками, а потом появился ТРАКТОР.
Трактор это инструмент. Без понимания когда надо сажать, какую культуру, в каком месте - его можно очень весело пропить. Толку будет больше.
вы это прекрасно понимаете, что эта машина в ближайшие 5-10 лет оставит вас на профессиональной обочине истории.
Если вы правы, то и вас тоже. Я не зря привел пример с "поиском в Интернете".
Сейчас, пока еще, для успешного вайбкодинга надо обладать некими тайными ("гностическими") знаниями: что (например) в ChatGPT лучше накидать структуру приложения, а потом попросить написать промпты для Claude, а в Grok сделать интерфейс... и .т.д.Думаю, что через год-два, модели будут делать всё, примерно, одинаково + некоторые отомрут. А уж если они научатся делать реальные приложения по запросам на естественных языках, то чем успешный вайбкодер будет отличаться от слесаря?

nyxandro
16.12.2025 06:49"Попробуйте сделать приложение с несколькими окнами, вкладками или бекенд с логикой, требующей работы с БД + web. "
Отлично собираются, работают, аптайм 99.99%, задачи выполняются, деньги зарабатываются. Создал маркетинговую платформу за 4 дня без единой строчки кода и каких-либо пониманий бекенда, в итоге работает бекенд, тг боты, сайт, аналитика, трекинг, миниапы в тг, и это уже наверное пятый проект успешно запущенный, работающий в продакшене. Желаю всем тоже так научиться =) Оставлю комментарий как алтарь для неверующих, чтоб через годок могли прийти и написать, как же я был прав.
Wesha
16.12.2025 06:49Создал маркетинговую платформу за 4 дня без единой строчки кода и каких-либо пониманий
..а на пятый день её взломали, потому что «сделай защиту от CSRF» в промпте не было.

evtomax
16.12.2025 06:49Если весь этот стандартный функционал нельзя было за полчаса мышкой настроить в уже готовом решении без каких-либо нейросетей, то индустрия разработки явно забрела куда-то не туда...

hlogeon
16.12.2025 06:49https://corecut.ai - ни строчки кода сам не написал. несколько окон имеется, веб имеется, бизнес-логика имеется.

kukovik
16.12.2025 06:49Откуда вы знаете, что этот код правильно работает?
200 лет и палки копалки -- это вы отожгли, конечно. :-)

nyxandro
16.12.2025 06:49я уже четко понял, минусят те, кто в конце статей оставляют ссылку на телеграм. И потом ведут на воронку покупки их курсов. Они не потерпят конкурентов, что их крусы теперь никому не нужны =)

xaoc80
16.12.2025 06:49Там в комментариях, по вашей ссылке вам знатно надавали аргументов. Программистов в чистом виде уже давно не так много. А где такие вакансии есть, там 1000 откликов на вакансию и зп ниже рынка. Сейчас большинство разработчиков уровня мидл - синьор это эксперты в какой-то предметной области. Например, разработчики 1С бухучет знают как минимум не хуже бухгалтера. И так во многих областях. Там, где создают коммерческие продукты или в критических для бизнеса местах. То есть деньги платят за определенную ответсвенность и новизну. Конечно, LLM может ускорять процесс, особенно на этапе прототипа. И чем меньше квалификация, тем больше языковые модели помогают. Неудивительно, что больше всего восторгов исходит из этой группы разработчиков. Только какова ценность их прогнозов касаемо всей отрасли?

killyself
16.12.2025 06:49Разработчики 1С с глубоким знанием бухучета это наоборот архаика. Ну, есть конечно свежая кровь на предприятиях где один человек и жрец и жнец, там выбора нет. А везде где покрупнее будет обычная связка БА+СА+лид+архитектор+разрабы. Элементарно потому что изучение всего сразу требует много лет. Людей, которые совмещают все 5 компетенций на хотя бы мидл - один на многие тысячи. А там ведь ещё девопс, администрирование, да тот же uiux

xaoc80
16.12.2025 06:49Может быть на крупных предприятиях и так. Но я вот вижу, небольшие заводы, предприятия, магазины, там пару разработчиков, еще админ может быть. Да и вообще сложно писать ту же отчетность без знания предметной области, даже если аналитики есть

event1
16.12.2025 06:49В целом посыл статьи совпадает с моими ощущениями, но сомневают два момента:
А почему вы не попросили помощника написать е2е тестов?
Следующий тезис не выдерживает критики: "Этим самым, выбивается нижний пласт пирамиды профессионального роста. Откуда возьмется "архитектор" если он не был джуном?" Всего лишь 40 лет назад начинающий программист переводил блок-схемы в перфокарты на фортране или pl/1. Потом поднимался до написания самостоятельных блок-схем. С тех пор "нижний пласт пирамиды профессионального роста" выбили. Возможно, даже дважды. О чём говорить, если современные программисты в массе не умеют паять и не знают, как устроен процессор! /s И тем не менее магия подготовки профессионалов как-то работает. И архитекторы продолжают откуда-то браться.

fedignat Автор
16.12.2025 06:49А почему вы не попросили помощника написать е2е тестов?
Сам пожалел, что не попросил. Кстати, спасибо за подсказку. Верну свое единственное ручное изменение и попробую проверить, найдет ли он ошибку самописными тестами.
На второй тезис попробую ответить так: "скорость и эффективные менеджеры". Теперь подробнее:
Скорость. От паяльников и перфокарт до условного бейсика шли, практически, одни и те же люди. Шли очень плавно. Когда появлялись "чистые программисты", то на старых местах еще работали "перфокаторщики", которые эволюционировали в программистов.
И тут на сцену выходят "эффективные менеджеры": "Выгоним 30% самых неопытных сотрудников и оставим только сеньёров+ИИ", премия и бонус, за скоращение издержек.
А куда податься выпертому джуну? Где опыта набираться?и не знают, как устроен процессор
А это просто не пересекающиеся множества. Те кто не знают - вполне успешно пишут одни приложения (или их модули). Те, кто знают - другие. Я в работе сталкиваюсь и с теми и с другими.
Первые не лучше вторых, а вторые первых. Это разные задачи. Только вот тех, кто понимает, найти сложнее (и они дороже, как правило).
Возможно, появятся третьи - чистые вайберы. Но тогда они оттянут значительную часть из первой и второй группы.Посмотрим. Будущее не угадать. Я про "сейчас".

event1
16.12.2025 06:49И тут на сцену выходят "эффективные менеджеры": "Выгоним 30% самых неопытных сотрудников и оставим только сеньёров+ИИ"
Ну тут, как обычно: "эффективные менеджеры" оставят своих сотрудников и нанимателей без денег, все остальные только скажут "спасибо". Волноваться, вообще не о чем.

northrop
16.12.2025 06:49и оставим только сеньёров+ИИ
Ой ли... Наоборот, соблазн выгнать сеньоров ой как велик - это ж какая экономия ФОТ

vit100
16.12.2025 06:49Молодец - понравилось: "с дизайном стиля "Циклоп".. Вот почему у меня глаза слезятся на работе -)))
А серьезно, я думаю скоро чуть поутихнет вайбанутость, когда придет время разгребать это и осознание того, что это не мой код и я его впервые вижу.

aero2210
16.12.2025 06:49Когда вместо того, чтобы изучать чужое приложение, человек сделает его себе сам. Лично под себя. С перламутровыми кнопками и дизайном стиля "Циклоп"
Ну про приложение пока не слышал, но на днях поставил Arch и ... До сих пор настраиваю виджеты под себя (уже 3-яя неделя).

engine9
16.12.2025 06:49Магия "ИИ" (правильно БЯМ) пропадает когда понимаешь её фундаментальную суть — статистического попугая на ультрамаксималках, который изображает ответ не имея возможности его понимать (термин широкий, но ничего лучше него нет).

gun_dose
16.12.2025 06:49Вы просто неправильно делаете. Тут недавно была статья, как ребята из OpenAI вайбкодят. Там вообще легкотня. Просто надо запускать генерацию в несколько потоков. В итоге у ребят получилась прилага с окошком ввода текста и отображением картинок всего за 28 дней. И на токены у них ушло всего ничего: 45.000$. Думаю, если у них вышло, то и у вас получится, надо только захотеть!

Wesha
16.12.2025 06:49Сегодня прочитал, что новый жпт выкатили и попробовать можно. Раскатал, блин, губу. Чуда не произошло, опять повторилась старая история: вначале оно переводило более‑менее, а потом Остапа понесло, вместо трёх глав он накропал аж восемь, и герой, который в оригинале совершал самопожертвование, в «переводе» вылечился и жил долго и счастливо.

rPman
16.12.2025 06:49Вы наверное весь текст как есть сунули модели, забив 'контекстное окно до упора' (хватит и 16к токенов у типовых моделек, у топовых до 64к доходит, а то что пишут про миллионы, это симуляция), что даже у топовых моделей вызывает коллапс и повышение галлюцинаций.
Есть попытки переводить по кусочкам, организуя агентами память о фактах, важных для перевода (например пол участников при переводе на русский - важен) плюс предложение модели давать комментарии об языковых особенностях и устоявшихся выражениях, но в готовом виде я этого не видел, хотя ручные тесты получаются неплохими.

Wesha
16.12.2025 06:49Не спорю, но нам ведь сейчас грузят, что оно многомегабатные кодбазы влёххкую переваривает...

hlogeon
16.12.2025 06:49Вот это новости! Оказывается, ИИ не волшебная таблетка, а всего лишь офигенный инструмент! Кто бы мог подумать!

NeXackerr
16.12.2025 06:49Сам пробовал полностью вайбкодить - на чём-то очень маленьком и не сложном делает то что и говорят под тезисом "Вайбкодинг", а начиная с момента когда нужно работать над чем-то побольше начинается "Вайбгазлайтинг", то удалит часть важного кода, то начинает тонну одного и того же генерировать. Легче просто самому изменить. Поэтому я использую ИИ чисто как Ассистента для очень ограниченной и маленькой задачи.
Ну и не забудем про автокомплит (на базе ИИ) - иногда прямо то что нужно я а иногда просто мешается под ногами
Kgstranget
Все очень верно.