Вы что-нибудь слышали об AI-кодерах? Это такие программисты, которые не умеют писать код. Нас ими все пугают, что вот они придут и отнимут нашу работу. Насколько эти опасения оправданы? А вы знаете, что они уже среди нас?
Им пока не просто, им все еще приходится проходить собеседования, притворяясь обычными программистами и заучивая принципы SOLID. Никто из кандидатов в здравом уме не скажет работодателю: "Я не умею писать код, за меня его пишет ChatGPT", и работодатели пока тоже не понимают, что с ними делать, смогут ли они создавать хорошие продукты, они не понимают, как оценивать их работу, сколько они стоят, как их собеседовать.
Я пока тоже отношусь к скептикам, но поскольку я считаю себя человеком с ярко выраженным критическим мышлением, я задался вопросом: а что если?
Я решил провести эксперимент и сделать задачу, не написав ни строчки кода, обладая минимальными техническими знаниями, и вот что у меня получилось. Дабы этот пост влез в рамки 10-15 минутной статьи, я сделал допущение, что проект уже существует, кто-то помог мне развернуть его у себя на машине. У меня стоит PhpStorm, настройки которого были подготовлены старшими товарищами, и я знаю, где находится командная строка, в которую я буду копипастить команды. Задача, которую я буду решать, будет уровня джуниор+.
Итак, вводные данные — небольшой готовый проект на Symfony на чуть больше чем 200 файлов с кодом и около 35'000 токенов (слов). В проекте есть рекламные объявления, где пользователи могут загружать фотографии и видео. Загрузка фотографий и их постобработка уже реализована (ресайзинг, удаление метаинформации). Постобработка происходит асинхронно через Messenger. Пока фотографии не обработаны, они и само объявление находятся в статусе ENQUEUED. После обработки получают статус ACTIVE. Задача, которая стояла - сделать постобработку видео. Перекодировать видео не нужно, но удалить метаинформацию было очень важно, поскольку в видео с телефона содержатся координаты, где видео было сделано, а это очень персональная информация.
Поскольку код писать мы не умеем, первая мысль, которая приходит в голову — загрузить весь проект AI и написать ему задачу. Я написал небольшой скрипт (все-таки одну строчку кода пришлось написать!), который собрал весь проект в один файл:
find . -type f \
-not -path './vendor/*' \
-not -path './var/*' \
-not -path './assets/fonts/*' \
-not -path './assets/vendor/*' \
-not -path './.*' \
-not -path './public/assets/*' \
-not -path './public/uploads/*' \
-not -path './*.lock' | \
while read file; do
echo "# $file";
cat $file;
echo "";
done > project.txt
Размер файла у меня получился 424K, это проблема, поскольку максимальный размер контекста ChatGPT — 32K. Но зато есть Claude, и у него размер уже 200 тыс. токенов (слов). В моем проекте 35 тыс. токенов, так что должно хватить. Тем более что буквально на днях вышла новая версия 3.5 Sonnet. Что ж, попробуем.
Загружаю ему проект и прежде чем он начнет писать код, хочу обсудить с ним задачу и послушать, как он будет ее реализовывать:
Analyze project code, use its content and stylistic as a reference. I need to implement the following task:
On posting new ads, it’s possible to upload videos. Currently, video is uploaded and then publicly available as it is, which causes some security issues. We need at least to remove meta tags.
First let’s talk about how you will implement this task. Suggest ideas.
Claude дает вполне разумное решение: создать по аналогии с обработкой картинок новое событие для видео и обработчик для него. Вызывать событие в контроллере при загрузке видео. Он предлагает использовать библиотеку FFmpeg для редактирования видео, предлагает менять статус видео на время обработки и изменить вывод видео, чтобы необработанные видео не показывались. Как бонус предлагает создать превью для видео. Такой задачи у меня не было, но я не сразу обратил на это внимание и не сказал ему об этом ничего.
Здесь нужно сделать небольшое отступление. Это классно, когда у меня есть опыт, и я могу понять, что советы разумные. Но как человеку без опыта в программировании вообще понять, что он не советует полную дичь? Ответ на этот вопрос на самом деле простой. Точно так же, как понять, что профессор в университете, не рассказывает какую-то ересь — во-первых, он ее все-таки иногда да рассказывает, и ничего страшного в этом нет, ошибки делать можно и нужно. Во-вторых — ну нам же не нужно быть великим поваром, чтобы сказать, что стейк вкусный. Здравый смысл рано или поздно подскажет, как делать можно, а как не стоит. Плюс, пообщавшись с AI какое-то время, вы начинаете хорошо чувствовать, где AI уверен в своих суждениях, а где не очень. В конце концов, если вы не уверены, его можно переспросить! Но даже если ваша "чуйка" еще недостаточно развита, всегда можно просто принять на веру факт, что то, что он делает, — скорее правильно, чем нет. Мы делаем это каждый день в повседневной жизни, не вижу никакой проблемы сделать это и тут.
Итак, я принимаю его решение как подходящее. И мы идем дальше. Мне нужно как-то получить изменения, которые нужно сделать. Если я просто попрошу все, что надо поменять, то с высокой долей вероятности он после пары десятков строк скажет что-то вроде: “Ну а вот тут сам допишешь”. Нужно попросить его дать результат по частям, и я прошу его дать список файлов, в которых будут какие-то изменения.
Print complete list of files that need to be changed
Claude выдает мне список файлов, которые нужно добавить, изменить или потенциально изменить, дополняя небольшим описанием того, что в каждом файле находится. В том же порядке, в котором он дал список, я прошу их содержимое.
print the content of src/Message/ProcessVideo.php
Он выдает какой-то код, создаю файл и копирую его туда. Прошу следующий файл:
print the content of src/MessageHandler/ProcessVideoHandler.php
Он выдает содержимое файла и говорит, что необходимо выполнить команду для подключения FFmpeg. Не имея ни малейшего понятия ни что такое FFmpeg, ни что такое Composer, слепо выполняю команду, и она отрабатывает.
В этом файле кода уже было побольше. Во мне, вдруг, проснулся внутренний программист и я увидел, что FFmpeg используется в обработчике явно, а на проекте у нас принято передавать все зависимости извне. Я не считаю это большой проблемой. Действительно, на каждом проекте есть свои практики, у нас принято так, Claude сделал по-другому. По-хорошему, вместе с проектом я должен был в изначальный prompt дать наш coding standard, в котором вероятно было бы что-то сказано про SOLID и Dependency Inversion, и я почти уверен, что он бы сразу написал правильно. Поскольку такого документа я ему не дал, я просто попросил передавать все зависимости извне.
Дальше начались проблемы, поскольку я человек внимательный. Я увидел, что PhpStorm мне выделяет отдельные куски кода. При наведении на них мышью он выводил какой-то текст, что он не может что-то найти. Я понятия не имею что это, но если PhpStorm мне об этом сообщает, значит, считает это важным, и я копирую это в Claude, он генерирует новый код, ошибка уходит.
Seems like method stripMetadata does not exist in $video->filters()
Мой пытливый ум заметил, что среди кучи непонятного кода иногда встречается вполне себе человеческий текст. Например, мой глаз зацепился за такие слова:
// Generate a thumbnail (optional)
// Create a new video format
// Remove metadata and save the processed video
// This removes all metadata
// Use H.264 codec for video
// Use AAC codec for audio
// Remove the original unprocessed video
Я слегка удивился, ведь я не просил генерировать превью (thumbnail), и еще меня смутило, что он использует какие-то кодеки. Зачем, если мне надо просто удалить метаданные? В задаче четко стояло, что перекодировать не нужно.
Не уверен, поэтому решаю задать вопросы.
1. Remove code related to video thumbnail generation, I don't need thumbnails for video.
2. I’m wondering about the performance of your approach. Will it re-encode the entire video file or just remove meta tags?
Claude соглашается, что действительно наделал лишнего. Из кода пропадают упоминания о thumbnails и появляются комментарии вида:
// Create a format that copies streams without re-encoding
Кажется, это уже то, что нужно, но теперь PhpStorm снова начинает подсвечивать слова. По старой схеме я кидаю ему все ошибки, и рано или поздно он пишет код, который на первый взгляд можно запускать.
Аналогичным образом я применил все изменения, которые он мне предложил. Я писал ему обо всех своих мыслях и переживаниях, которые возникали в процессе, и он их исправлял. Он делал ошибки, иногда получалось просто субъективно некрасиво, иногда он предлагал добавить код, который уже есть, но в целом ничего такого, для чего мне понадобилось бы умение писать код, он не делал.
Итак, все изменения применены, пробую загрузить видео, на экране ошибка и много другого текста:
App\Message\ProcessVideo::__construct(): Argument #1 ($videoId) must be of type int, null given, called in /home/eug/PhpstormProjects/my-project/src/Controller/UserController.php on line 148
Хотя мне кажется, что если бы я просто выделил все содержимое окна и скопировал его в окно чата, то Claude бы все равно понял, где ошибка, но я немного помог ему и полез в дебаг консоль за машиночитаемым бектрейсом. Мне кажется, что скоро мы должны увидеть, как отладочную информацию фреймворки будут выводить, не только красиво для глаза, а и удобно для ИИ.
Claude не составило труда понять, что он вызывает getId() перед тем как сделать flush(), и, соответственно, далее вместо id он в обработчик передает null.
В очередной версии ошибка ушла, видео успешно сохранилось, метатеги были успешно удалены.
В принципе, на этом можно было бы и остановиться, задача в целом успешно выполнена. Но я заметил, что видео обрабатывается синхронно при загрузке. Я, конечно, понял почему — нужно было настроить роутинг для нового сообщения на использование транспорта async, но так не интересно. Я хочу, чтобы он сам догадался. Он ведь сам в начале задачи писал, что видео будет в статусе ENQUEUED, пока не будут обработаны. Я задаю ему вопрос:
I uploaded video, but in database it's in active state, shouldn't it be enqueued?
И с этим вопросом он тоже отлично справился, предложил несколько вариантов, почему может быть так, один из которых был перенастроить роутинг.
Выводы
Итак, что мы имеем в итоге? Задача сделана, code review пройдено, да, были ошибки, но они были найдены и исправлены, ни одной строки кода я лично не написал (ну ладно, всего одну).
Главный вопрос: может ли человек, не умеющий программировать, писать код? Мой ответ - да, это уже вполне возможно. Кажется, что интерфейс в виде чата пока не очень удобный, потому что приходится копировать куски кода. Было бы куда удобнее, чтобы ИИ-помощник сам создавал и редактировал нужные файлы в проекте прямо в IDE, но мне кажется, это вопрос нескольких месяцев.
Я вас серьезно призываю перестать спрашивать на собеседованиях про разные виды сортировок и различие между B-Tree и AVL-Tree, а начать проверять умение пользоваться AI-помощниками. Хотите вы или нет, AI-кодеры уже появляются среди нас, и они уже сидят сутками перед мониторами и решают реальные задачи не хуже, а местами лучше "традиционных" программистов, при этом вообще не умея писать код.
Комментарии (50)
dezahrise
28.06.2024 20:50На все мои вопросы они отвечали плохо. Иногда отвечали нормально, если пошагово описывал архитектуру и алгоритмы. Иногда даже описав пошагово алгоритмы, все равно получал не то что нужно.
Быстрее было написать самому
Хотя тесты копилот делает не плохо, если в проекте есть аналогичные. А если аналогичных нет пихает то, что вообще не нужно
apodavalov
28.06.2024 20:50+1Хотелось бы понять как "ai-кодер, который не может написать ни одной строки кода" будет оценивать, например, следующие пункты: адекватность написанных тестов (они имеются?) пусть даже со 100% покрытием, соблюдение единого стиля, следование лучшим практикам (не только выбранного языка/фрейморка, но и например использования криптографических библиотек вместо "велосипедизма")? Как "ai-кодер" поймет, что задача решена правильным способом (например, квадратичный алгоритм вместо линейного)? Какими критериями этот "разработчик" будет руководствоваться? Работает или нет?
EugeniyPetrov Автор
28.06.2024 20:50А как это делает "традиционный" программист, который копирует код со stackoverflow или использует рандомные библиотеки с гитхаба? Методом проб и ошибок, методом тыка, общением с коллегами.
По поводу сложностей алгоритмов, обычно такой задачи сделать линейно а не квадратично не стоит. Стоит задача сделать быстро - именно с таким запросом он и пойдет в ИИ помощник и тот ему, я уверен, все быстро расскажет.
apodavalov
28.06.2024 20:50То, про что Вы говорите в первом абзаце по сути есть накопление знаний и опыта. Хорошо, если "ai-кодер" это быстро поймет.
По поводу второго абзаца: задача может включать в себя "должно работать вплоть до 1 000 000 элементов". А тут "квадрат" на ровном месте ...
EugeniyPetrov Автор
28.06.2024 20:50Если есть такое требование то и подход будет другой. Нельзя просто написать алгоритм O(n) и надеяться что он будет работать быстро на 1 млн элементов. Если требование есть, то уже надо думать как проверять. И если не будет удовлетворять производительности то просить его переписать, чтобы удовлетворял.
В прочем в моей статье речь была о задачах совсем другого уровня. Ну разумеется чатгпт не заменит профессоров, которые новые алгоритмы придумывают, речь о 90% CRUD задач, в которых нет никаких требований на 1 млн элементов, нет никаких высоких нагрузок. Нужно просто, чтобы работало
IgorAlentyev
28.06.2024 20:50+1Не понимаю за что вас минусуют везде в этой ветке. Все правильно говорите!
dezahrise
28.06.2024 20:50+3Никак. Точно так же как будет падать качество, когда в базе будет попадаться большинство кода написанного такими
Так что беспокоится не о чем
Банальный пример. Я не видел ии которая бы решала задачи с леткода через стек или хеш таблицы. Все предлагают через рекурсию. А это самое банальное и плохое решение. Почему выбирают ? Потому что большинство пишут и публикуют такое решение. Оно лучшее? нет конечно
Пока в ии не появятся функция написания сравнения бенчмарков, нагрузочного тестирования. Сравнения результатов здесь и сейчас. Их решения - максимум на троечку
EugeniyPetrov Автор
28.06.2024 20:50Правда в том, что большая часть программистов напишет тоже самым банальным и простым способом, чтобы оно просто работало. И в 90% реальных задач они даже вероятно будут правы.
lair
28.06.2024 20:50+3Хотите вы или нет, AI-кодеры уже появляются среди нас, и они уже сидят сутками перед мониторами и решают реальные задачи не хуже, а местами лучше "традиционных" программистов, при этом вообще не умея писать код.
Утверждение про "не хуже, а местами лучше" нуждается в формализации и доказательстве.
DarthVictor
28.06.2024 20:50+1Автор интересную тему поднял. От следующих таких статей хотелось бы видеть ответы на
Сколько времени ушло на задачу. Сколько бы ушло у вас в ручном режиме?
Что нейронке удаётся лучше, хотя бы субьективно?
Насколько код похож на другой код проекта?
Для чистоты эксперимента, хорошо бы чтобы задание попробовал выполнить чей-нибудь проджект менеджер. То есть человек знающий продукт с точки зрения функционала, но не умеющий непосредственно программировать. Или вообще человек незнакомый с проектом, например, из другого отдела.
EugeniyPetrov Автор
28.06.2024 20:50+1Про время был уверен, что написал, но в какой-то редакции эта информация из поста видимо исчезла. В ИИ режиме на задачу ушло 1.5 часа. В ручном режиме было бы быстрее, но только потому что код я пишу уже давно, рука набита, хоткеями, сниплетами и прочими генераторами быстро все делаю, а чату нужно писать целые предложения, ждать пока он сгенерирует, выделять текст, вставлять. Это долго. Ну т.е. сейчас я вижу больше проблему с интерфейсом для работы с ИИ. Среднестатистический джун эту задачу делал бы дольше - 100%
Нейронки хорошо придумывают названия переменным. Не копипастят код. Субъективно.
Именно в этом проекте получился очень похож, но это относительно новый, относительно "чистый" и небольшой проект. Наверное если как такового стиля в проекте не было бы, то и соблюдать его было бы сложнее.
Это было бы интересно, может быть когда-то проведу.
SergeyVoronkov
28.06.2024 20:50+1А мне кажется, что ИИ это новый инструмент, который реально очень полезен в определенных ситуациях. Но он именно дополняет, а не заменяет.
Так что теперь, скорее всего, работодателей будет интересовать как знание классических подходов, так и умение использовать ИИ.
fo_otman
28.06.2024 20:50ChatGPT решила 2 задачки с Yandex Code Run с первого раза. Вообще я уже полгода плотно сижу на ChatGPT и, кажется, я хуже начинаю думать сам. Но производительность да, выросла значительно.
lair
28.06.2024 20:50Но производительность да, выросла значительно.
Есть у меня подозрение, что это очень сильно зависит от решаемых задач.
Потому что я вот смотрю на свой последний квартал, и там задач, где была бы важна моя производительность как кодера... ну одна, может быть. Большую часть времени я трачу на то, чтобы раскопать существующий код, и понять в нем, что случится, если я вот эти две строчки поменяю на другие. И потом еще немало времени - на обсуждение с коллегами, как должны выглядеть эти две новые строчки, чтобы всем было понятно, что они делают.
Как тут померять производительность - хрен поймет.
kozlov_de
28.06.2024 20:50+1По моему опыту LLM может написать максимум 100 строк или 150 строк хуже качеством.
LLM не создаёт жизнеспособный продукт, только демо. При попытке изменения требований или рефакторинга всё рассыпается. То есть архитектура хрупкая, да и глючить его начинает.
Итого. Для рыбы сойдёт, но потом всё равно придется всё переписать руками.
А для вашего случая алгоритм элементарный
По клику заливки файла асинхронно:
Файл видео прочитать. Теги удалить. Файл сохранить. Добавить к списку обработанных файлов. При ошибке записать лог.
Реализация не должна быть значительно сложнее этого алгоритма.
А в результате ты провозился час-два и пропустил в прод код который до конца не понимаешь, скинув всё на ревьюера.
Seenkao
28.06.2024 20:50Лучше всего с этим делом справится программист который умеет правильно формулировать вопросы ChatGPT. Чтобы потом можно было исправить ошибки в коде который предоставил ChatGPT. А вернее всего "подсмотреть" решение, чтоб можно было реализовать своё решение.
Wesha
28.06.2024 20:50Я так понимаю, Вы ещё молодой и ещё не знаете, что написать свой код на порядок легче, чем понять, а что вообще делает чужой.
kozlov_de
28.06.2024 20:50А должно быть строго наоборот.
Потому что читают код больше чем и делают это люди более высокой квалификации, с высокой зарплатой
Wesha
28.06.2024 20:50А должно быть строго наоборот.
Для этого код нормально комментировать надо, и не просто как "
а = а + 2 # увеличить а на 2
", а объясняя, зачем это делается именно так. Желаю удачи.читают код больше чем
Чем что?
и делают это люди более высокой квалификации, с высокой зарплатой
С чего Вы это взяли?
rodion-m
28.06.2024 20:50Попробуйте Aider - он сам за вас найдет нужные файлы, отправит их LLM и пропатчит старые / добавит новые.
tzlom
28.06.2024 20:50+3Вы внесли в LLM кучу правок и уточнений из за того, что у вас есть навыки программирования, если бы вы этого не сделали то эта хрень бы не заработала.
Но если бы вы были условным пастухом который сразу бы начал промптить то как вы узнали бы что нужно уточнять и спрашивать? Чтение сгенерированого LLM кода вас не научит программированию, LLM не понимает что пишет, она просто даёт статистически средний результат, она не может объяснить почему надо так а не иначе.
То же самое с безопасностью - LLM может элементарно воспроизводить типичные проблемы безопасности т.к. средний программист делает те же самые ошибки. И LLM так же ленив как и средний программист, потому что не понимает что часто люди пишут не идеальный пуленепробиваемый код, а "и так сойдёт".
wataru
28.06.2024 20:50+1она не может объяснить почему надо так а не иначе.
Гораздо хуже - она может сгенерировать вам объяснение. Очень правдоподобное и при этом совершенно не правильное. Это еще хуже отсутствия объяснений.
EugeniyPetrov Автор
28.06.2024 20:50+1Абсолютно согласен, для этого есть код ревью, старшие коллеги, QA, пользовательский фидбек и личный опыт (я писал, что если пользоваться моделями долго, то становится чуть более понятно где модель уверена а где нет).
Я считаю (мое личное субъективное, ничем не обоснованное мнение), что если взять 2 разработчиков любого уровня. Одному дать LLM модель, а другому не дать. То первый будет перформить лучше на 10% и более. А в случае с джунами, они вприцнипе могут брать LLM и начинать с ними работать нарабатывая опыт и (барабанная дробь) учиться писать код, если сочтут это необходимым.
Примерно так же раньше кричали, что все начинают учиться на фреймворках и не знают базы. Сейчас большáя часть этих фреймворк-программистов уже синьоры и кричат что от LLM мы все отупеем.
wataru
28.06.2024 20:50если пользоваться моделями долго, то становится чуть более понятно где модель уверена а где нет
Как? Она же натренирована выдавать правдоподобный текст.
что если взять 2 разработчиков любого уровня. Одному дать LLM модель, а другому не дать.
Я считаю, что оно действительно повышает продуктивность, но только на достаточно высоком уровне, чтобы понять, где сетка врет. На джуниоре и низе миддла - это наоборот понижает продуктивность.
EugeniyPetrov Автор
28.06.2024 20:50Как? Она же натренирована выдавать правдоподобный текст.
Так же как мы начинаем кому-то доверять или не доверять. Чуйка. Например кто-то начинает противоречить сама себе или говорит вещи, которые вы точно знаете что являются правдой или не правдой. Например, если модель начинает выдавать код, в котором становится больше ошибок, которые можно отловить статически и она не может их сама исправить - то видимо она зашла в тупик и доверять ей дальше не нужно, или нужно сменить подход, или разбить задачу на более мелкие и решать их отдельно и т.д.
Можно спросить модель одно и тоже 2мя разными противоречащими способами. Например - "это же правда, что алгоритм А быстрее алгоритма B", а вторым вопросом наоборот что B лучше A. Если модель скажет, в обоих случаях - да, это правда. Значит пи*дит, если скажет в одном случае да, а во втором нет - значит можно доверять.
Опять же тестирование, подставить реальные данные и посмотреть как отработает.
Я считаю, что оно действительно повышает продуктивность, но только на достаточно высоком уровне, чтобы понять, где сетка врет. На джуниоре и низе миддла - это наоборот понижает продуктивность.
Лично на моем опыте сейчас в работе я использую в основном copilot, который просто помогает дописывать мне код или пишет код, который мне было бы лень писать (типа тексты ошибок, логгирование), я бы сказал что он помогает мне процентов на 10-15 (я программирую 15 лет).
Но в начале года я погрузился в машинное обучение - это была совсем новая для меня отрасль и я точно говорю что для обучения LLM'ки работают очень хорошо. Да, они ошибаются но вообще далеко не все примеры из интернета работают. Зато часто бывает так, что читаешь какую-то теорию и что-то не понятно и нагуглить ну вообще не получается. Моделям можно позадавать вопросы. Ответы может быть будут неправильные или не идеальные, но в них будет какой-то смысл. Я в конце концов смотрю на результат - есть он или нет.
Так что в этом плане я бы сказал, как раз, что первое применение для LLM - это обучение.
wataru
28.06.2024 20:50Например кто-то начинает противоречить сама себе или говорит вещи, которые вы точно знаете что являются правдой или не правдой
код, в котором становится больше ошибок
Ну вот мы и вернулись к тому, что ее можно справшивать только о том, в чем достаточно хорошо разбираетесь, или можете сразу и дешево проверить.
Если модель скажет, в обоих случаях - да, это правда. Значит пи*дит, если скажет в одном случае да, а во втором нет - значит можно доверять.
Не факт. Во-первых, она почти всегда с пользователями соглашается. Поэтому слишком часто этот метод "сработает". Во-вторых, все еще не ясно, в каком из двух случаев она врет.
EugeniyPetrov Автор
28.06.2024 20:50Разумеется, если посадить писать код продавщицу из ларька, то не стоит ожидать чуда. Если человек каким-то образом уже добрался до компьютера и назвался разработчиком, то какой-то бекграунд у него уже есть и я полагаю он хоть как-то умеет оценивать результаты и экспертность источников информации (кто-то лучше, кто-то хуже). Мы же в какой-то момент начали все верить википедии, при том, что мы не знаем чем мотивировались те, кто писали конкретный текст. Мы верим чьим-то советам из серии "вот этот врач/риелтор/{свой вариант} хороший", а хороший он возможно просто потому, что улыбался. Мы переходим дорогу на зеленый свет светофора на смотря по сторонам веря что нас пропустят (кто-то конечно умирает, но в большинстве случаев это работает).
У средне-статистического человека на достаточно неплохом уровне с рождения работает система "свой-чужой" и он способен в большинстве случаев распознать полную чушь LLM моделей в рамках своего уровня компетенции. А даже если не сможет - это не такая большая проблема на практике, никто такому человеку не даст написать систему управления ядерным реактором (хотя и такое случается).
Я буквально прямо сейчас переписываю проект, написанный кем-то лет 10 назад, все что вы можете себе представить там есть - все OWASP TOP 10 уязвимостей в больших количествах, копипаста, устаревшие библиотеки, глобальные переменные и т.д. Проект живет уже 10 лет и стабильно приносит прибыль. Поэтому когда вы мне про возможные ошибки что-то говорите я недоумеваю.
SergeyVSorokin
28.06.2024 20:50Не факт
На самом деле факт. Тут переизобретается хорошо известный метод определения уверенности моделей машинного обучения.
Если, например, решают задачу классификации с помощью нейронных сетей, то можно взять несколько сетей и сравнить среднюю энтропию выхода сетей с энтропией среднего выхода (ансамбля). Под это есть математическая основа. И если сказать это простыми словами, то да, это должно звучать как "берём несколько разных примеров выходов и если оно сильно разное - значит модель не уверена".
Сейчас исследуется вопрос как это лучше делать с LLM, учитывая, например, вычислительные затраты на получение одного ответа несколько раз.
EugeniyPetrov Автор
28.06.2024 20:50Не совсем, я целенаправленно старался задавать максимально глупые вопросы, для которых не нужно умения навыков программирование, НО нужен здравый смысл и внимательность. Все что я просил его - это содержимое файлов, использовать стиль готового кода, указывал ему на ошибки, которые PHPStorm нашел статически. Самая техническая вещь, о которой я спросил была про декодирование видео, но узнал я об этом не по коду, который он написал, а по комментариям которые он оставил. И это было в условии изначальной задачи, которую мне поставили коллеги старше.
Я не призываю набирать на работу бомжей с улицы. Я призываю по сути не требовать знание таблицы умножения, когда у каждого в кармане есть телефон с калькулятором, а вместо этого начать проверять навыки работы с этим калькулятором.
Вы пишете, что LLM учится на ошибках, и тут же пишете, что ошибки делают сами разработчики. В этом и суть, что люди делают много ошибок, и как раз у LLM в данном случае значительно больше возможностей проанализировать как хорошо а как плохо - чисто аналитически, потому что помимо большого количества кода, который она анализирует, она там же анализирует большое количество справочной литературы, документации, и т.д.
eeglab
28.06.2024 20:50+2Я не программист так что вполне могу быть объективен. Chatgpt 4 и claude 3.5 sonnet вполне отлично справляются с мелкими задачами, с которыми в 90% случаев сталкиваются юзеры, не имеющего достаточного опыта в программировании. Для начала - это отличное решение в качестве справочника, ускоряющее написание каких то кусков кода (что очень экономит время, нет необходимости гуглить или искать в справочнике подходящую функцию). Крайний раз я с помощью chatgpt 4 написал вполне рабочее приложение за 3 часа на матлаб (практически не написав и не исправив ни строчки кода, приложение для работы с вызванными потенциалами с графическим интерфейсом). Так как я давно уже не практиковал работу в матлабе, то наверное у меня ушло бы наверное около недели работы , если бы я делал это сам (вспоминая функции и прочее). Недавно нужно было автоматизировать заполнение форм (список публикаций) в вузовском портфолио (криворукие исполнители не смогли сделать нормальную автоматическую загрузку метаданных из doi научной публикации), с помощью claude 3.5 примерно за полчаса написал рабочее расширение для chrome. С точки зрения профессионального программиста может задача простейшая, но учитывая, что я html код последний раз видел 30 лет назад, а на JavaScript вообще боюсь даже смотреть - без claude я задачу бы не решил. Claude не только написал рабочее расширение, исправил ошибки, но и подробно написал инструкцию по подключению не распакованного расширентя. Решение ускорило заполнение стандартных форм в 10 раз (вместо 20-30 минут , до 2-3 минут в среднем). ИИ (если это можно назвать ИИ) развиваются очень активно, ещё год назад они делали все очень очень плохо. Chatgpt и подобные системы не заменят человека, это очевидно, но значительно увеличат эффективность работы и продуктивность людей, которые что то понимают в работе, которую они делают. Умного они сделают умнее, глупому не помогут. Такой вот аналог NZT48. Если сравнивать модели - сейчас самая лучшая, на мой взгляд, claude 3.5 sonnet, чуть похуже - 3 opus. Chatgpt 4 стал хуже решать поставленные задачи. По текстам - claude вне конкуренции, по написанию кода : chatgpt (4 мне кажется лучше, чем 4о, но может это субъективно) и claude (3 opus кодит плохо, программы не рабочие, а 3.5 sonnet примерно на уровне chatgpt 4) сравнимы.
iPhp
28.06.2024 20:50Нормальный программист может понять что правильно, а что нет не потому, что он методом тыка понял как надо, и не потому что на стаке посоветовали, а потому что он читал документацию и разобрался в возможностях инструмента с которым собирается работать. А есть прикладные программисты, которые работают именно как чатжпт. Они запоминают что делали другие, чтобы работало и могут повторить. А попроси их сделать по другому срочно, потому что заказчик молнии мечет - у них паника, потому что как слепые котята. Короче уровень машинистки. Ну такие наверно тоже кому-то нужны. Но это не программисты и при найме это важно понимать.
wataru
Как и всяких лентаев, которые копипастят ответы чатжпт, когда им сказать нечего, спрошу у вас, если с вашими задачами справляется "ai-кодер, который не может написать ни одной строки кода", то зачем работадателю нанимать вас? Он сам не справится спросить у нейросетки что ли? Если ему рук не хватает, то всегда можно нанять хоть студента журфака на пол ставки за 10% от вашей зарплаты.
EugeniyPetrov Автор
Работодателю нужно решение проблем, а не код. Работодатель как человек мудрый, вероятно, многие вещи мог бы сделать сам, но поскольку рук у него всего 2, то физически не успевает. Если студент журфака сможет (а главное захочет) решать технически задачи за 10% от зарплаты, то я только за. Но он скорее всего не захочет.
apodavalov
Не совсем правда. Работодателю еще нужно, чтобы его (всего скорее) сайт не хакнули.
EugeniyPetrov Автор
Для того, чтобы сайт не хакнули вообще не достаточно просто нанять человека, который умеет писать код. Я очень давно пишу код и даже я иногда могу что-то случайно упустить. Чтобы сайт не хакнули - этому нужно уделять время. Нужно делать регулярные секьюрити аудиты, сканы, вовремя ставить обновления, следить за парольной политикой, сегментировать сеть, настраивать разные фаерволы и много-много-много другого. Программист умеющий писать код в данной цепочке для меня скорее минус чем плюс. Я бы скорее доверился коду тупо написанному в ChatGPT (которому скормили гигабайты рабочего кода), чем коду, написанным человеком, который программирует год
apodavalov
Отвечу на последний пункт: мы же не знаем какой код ему скормили: плохой/хороший, правильный/неправильный, делающий то, что нужно или нет. Как тут вообще можно на что-то рассчитывать, если "ai-кодер" не может оценить "ошибку"?
EugeniyPetrov Автор
Это большое заблуждение, что "традиционный" программист может оценить. Он пишет код основываясь на тех знаниях, которые он когда-то поглотил. При этом по умолчанию он не знает плохой это код или хороший. Он узнает об этом в процессе набивая шишек.
LLM модели делают ровно тоже самое, ну только вместо набивания шишек они возьмут скажем наиболее популярное решение, которое в большинстве случаев окажется приемлемым.
Представьте, что вы вообще ничего не понимаете в программировании и вам нужно нанять программиста. Откуда вы будете знать, что программист не сделает ошибку? Да ниоткуда не знаете, и он ее скорее всего сделает. Ну для этого вы наймете еще кого-то, кто проверит.
В конце концов я нигде не писал, что AI-кодер - это низшая ступень развития человечества, они тоже в процессе учатся, они тоже рано или поздно узнают об OWASP Cheetsheets, они могут спросить ИИ а как сделать безопасно. Это просто люди, которые получают тот же код другим способом.
lair
А зря.
Wesha
... и именно поэтому надо задавить в себе жабу и нанимать человека, кототрый программирует минимум лет пять, а лучше — десять.
...Потому что иначе его наймёт тот, кто хочет Вас сломать.
EugeniyPetrov Автор
Ну что же теперь, совсем не брать джунов на работу? Каждый опытный когда-то был джуном и очень вероятно, что его ошибки до сих пор кто-то разгребает. Будь у него 5 лет назад такой инструмент как ИИ-помощник, вы думаете было бы хуже?
lair
Скорее всего - да.
EugeniyPetrov Автор
Процитирую фразой одного хорошего человека - "утверждение нуждается в формализации и доказательстве."
lair
Это не утверждение, а мнение. "Я думаю, что скорее всего".
Невозможно доказать (и особенно опровергнуть) "я думаю".
Wesha
Вас — точно не брать, потому что Вы не умеете оценивать границы применимости. На некртичиные работы, типа, условно, написания кода для печати формочек джунов нанимать можно и нужно (а как, во-Вашему, я начинал?) — а вот по мере набора опыта соответственно поднимать человека выше и выше. Изучил детали протокола TCP/IP? Можешь приступать к разработке интернет-девайсов и т.п.