... или может ли ИИ заменить программиста? Сейчас со всех сторон долбят про то, как ИИ помогает в жизни и вообще, если ты не используешь ИИ, то ты в отстающих и лузер. Я к этому отношусь спокойно, ибо мои занятия совершенно не допускают использование ИИ из-за очень большой цены ошибки, но долбежка все-таки делает свое дело. Плюс как-то внезапно обнаружил, что у (не реклама) cloud.ru доступны Foundation Models (они же БЯМ, они же LLM) без оплаты. Понятное дело, тестовый период и прочее, но использовать можно. Но просто мучать модельки вопросами уровня «сколько цифр в слове» смысла мало, поэтому решил попробовать сделать что-то хоть капельку полезного и получить собственный ответ на вопрос пригодности БЯМ. Результат для нетерпеливых тут https://github.com/kiltum/zxgo
Далее несколько абзацев истории, чтобы просто было понятно, каким путем я шел до результата. Скажу честно, выбор места приложения сил БЯМки был сделан довольно быстро: напиши мне много кода. Раз пока все бесплатно, выбрал самый большой Qwen и предложил ему написать эмулятор КР580ВМ80А (он же Intel 8080), причем на питоне. И внезапно, он с первой попытки сгенерил что-то очень похожее на правду. Хмыкнув, я нашел образ ПЗУ от Радио-86 и зарядил еще пару десятков запросов. Вскоре я с глубоким удовлетворением увидел в окошке заветное «РАДИО 86-РК» и следом «-->».
Немного порадовавшись результату, я преисполнился энтузиазма и решил поднять ставки. Z80 и ZX Spectrum! Культовая машина, все нюансы которой разложены по полочкам и по которой документации на порядки больше, чем для «радио»,«микроши» и «специалиста» вместе взятых. А чтобы было совсем хардкорно, основным языком я выбрал С++.
Первый подход оказался полным провалом. На выходе у БЯМки получилась какая-то каша, которая походила на эмулятор Z80 меньше, чем я на программиста. Скажу честно, это было крайне неожиданно для меня: ведь обучающих материалов (читай: готовых и работающих эмуляторов, написанных на С или С++) для Z80 гораздо больше. Бери и копипасти! В смысле, генерируй. Но нет, БЯМка не осилила.
Второй подход вместе с третьим тоже завершился пшиком. Нет, эмулятор научился выполнять простейшие опкоды типа “LD A,(HL)” но дальше был затык. Попытавшись разобраться в нагенерированном коде, я признал полный провал: даже на мой неопытный взгляд, там были собраны все самые худшие практики программирования. Как говорится, на чем научился, так и пишем.
Вскоре я плюнул и решил начать очередной этап «начинаем все с чистого листа». Задача та же, но язык меняю на Go. Там, как и на питоне, чтобы писать криво, надо специально постараться. Попутно, уже набравшись опыта общения с БЯМкой и вспомнив все пройденные курсы, начинаю делать все маленькими шажочками.
Буквально пара недель по вечерам и результат может оценить любой. Эмулятор ZX Spectrum 48k. Практически 100% эмуляция Z80, со всеми скрытыми флагами и недокументированными особенностями. Почему практически? Один тест все-таки падает, но он совершенно не критичный. Честная эмуляция ULA с правильным расчетом таймингов, поэтому «те самые полоски» можно увидеть. Умеет читать и запускать TAP, но с TZX пока засада. Ну и самое больное это звук, я там уперся в приоритеты потоков. Как оказалось, Go совершенно не имеет нормальной многозадачности, но это тема для какой-либо другой статьи.
Ну а теперь то самое, ради чего была написана эта статья. Может ли БЯМ заменить программиста
-
БЯМ это джун. Причем джунистый джун. Не стоит давать ему задачи, которые хоть чуть-чуть требуют масштабности или глубины. Он теряется и начинает гнать дичь. Если надо что-то большое сделать, то бьем на мелкие подзадачи и заставляем фокусироваться только на этом. Реально, пишем «Focus on … , ignore others».
-
БЯМ это очень усидчивый джун. Просите поменять 400 кусков кода, попадающих под единый шаблон (у меня это длинный switch...case с опкодами команд) и он с очень большой вероятностью сделает все без единой помарки.
-
БЯМ это очень любопытный джун. Он обожает лезть во все места под предлогом «мне необходимо посмотреть существующую реализацию». И, что самое неприятное, он игнорирует при этом прямые запреты. В результате контекстное окно переполняется или он просто не может прочитать файлы из-за их размеров. Или попросту не поймет в них ничего. Решение тут только одно: создавать минимально возможное окружение для задачи. Лишние файлы убирать, большие исходные данные для тестов обрезать и так далее.
-
БЯМ это очень «начитанный» джун. Базовые алгоритмы на любом языке он генерит не приходя в «сознание». Из-за этого он практически идеально подходит для написания короткоживущих скриптов-оберток. К примеру, взял кусок лога, описал формат и через 5 минут у тебя написан скрипт, выдирающий нужное. Да кривой, да неоптимальный, но зато очень быстро.
-
БЯМ ну очень «начитанный» джун. Из-за этого он иногда начинает генерить крайне переусложненное решение. Там, где грубо говоря, надо просто сложить 2+2, он генерит здоровенный класс с геттерами и сеттерами на все случаи жизни. Если упустить этот момент, то выкусить подобное становится очень сложно.
-
БЯМ взял все от реальных джунов. Он обожает лениться, срезать углы и заниматься не тем, чем надо. Просишь написать "рабочий код" и в результате видишь "тут потом должен быть работающий код, сейчас заглушка". Просишь написать одну функцию и в итоге обнаруживаешь его, переписывающем совершенно другой модуль. Даешь ему рабочий тест и просишь поправить ошибку, а он тупо берет и вставляет хардкор "так хочет тест".
-
БЯМ это реально джун. Что бы правильно поставить ему задачу, вы просто обязаны быть на уровень-другой выше его. Иначе вы получите фигню.
Если резюмировать все вышенаписанное, то сейчас ИИ даже близко не способен заменить программиста. Его топовый уровень - это «макака». Извините, если кому разрушил иллюзии.
P.S. На написание эмулятора со всеми подходами было потрачено около 120 миллионов токенов. При цене 400 рублей за 1 миллион это 48 тысяч рублей. Дорого это или нет - решать вам.
Автор: kiltum
