Данная заметка написана по итогам нескольких месяцев попыток работы с ChatGPT и Github Copilot в связке c Visual Studio Code.
Работа с легаси
Удар молотком - 1 доллар. Знал, куда ударить - 9999 долларов. Итого за услуги - десять тысяч долларов. (с) Из старого анекдота
Github copilot не так давно стал резко полезнее благодаря команде workspace, позволяющей прикрутить к системе проект целиком и отвечать именно на основе знаний об этом конкретном проекте:
Это просто прекрасно. Как-то нам понадобилось добавить новую фичу в проект, с которым уже давно никто не работал. Я просто опробовал на нем workspace с вопросом, как мне это сделать. Система сразу указала мне, в какой файл надо заглянуть, и какую функцию добавить туда.
Плюсы. Резко снижает затраты на знакомство с новыми проектами и на онбоардинг.
Минусы. Их два:
С большими проектами (т.е. с большим размером кодовой базы) оно не работает. При попытке подгрузки зависает. Но это скорее вопрос не к Copilot, а к исходному проекту. Если его писали двадцать лет подряд как монолит, и не разделяли кодовую базу вообще никак, то Copilot тут (пока) не поможет.
Юридический момент. Он не предоставлял проблемы для меня, но, общаясь с менеджерами из разных контор, я обратил внимание, что они зачастую думают, что с приобретением лицензии enterprise на пользование copilot получают локальную версию, которая работает строго внутри конторы. Это не так, в чем можно убедиться, прочитав соглашение этой лицензии, а также просто попробовав поработать на основе этой лицензии, отключив сеть на машине. То есть плагин copilot производит отправку фрагментов кода на сервера Github. Microsoft лишь обязуется по этой лицензии НЕ использовать Ваши фрагменты для обучения своей сетки (т.е. что ваш код не будет выдан как пример другим на их запросы) и что Microsoft несет юридические риски в случае утечки Вашего кода на сторону. Это не то же самое, что локальный плагин внутри защищенного периметра компании. А команда workspace делает весьма легким процесс отправки всего кода проекта на сторонние сервера, пусть и по частям. Технически админы этих серверов могут восстановить Ваш проект у себя. Поэтому убедитесь, что Ваши разработчики используют enterprise лицензию для своих проектов, а не триальную. А заодно убедитесь, что Ваша контора не попадает под какое-либо правило регуляторов, строго-настрого запрещающих публиковать свой код вообще, пусть и таким интересным способом.
Галлюцинации
![Пожалуй, пропорции по времени изображены не совсем верно. Пожалуй, пропорции по времени изображены не совсем верно.](https://habrastorage.org/getpro/habr/upload_files/cf7/ff6/409/cf7ff640961e7fd59e8a30226fde281e.png)
Да, галлюцинации имеют место быть. И дело тут не только в курьезных случаях вроде этого:
![Леонардо ди Каприо негодует. Леонардо ди Каприо негодует.](https://habrastorage.org/getpro/habr/upload_files/46b/49f/ed7/46b49fed7613ecbce51c8f5ca186d270.png)
Скорее речь идет о потере контекста по ходу беседы. Например, один коллега в качестве пет-проекта делал скраппер одного сайта. Делал он его на основе BeautifulSoup. Он достаточно быстро написал обработку основных элементов страниц этого сайта. Однако, когда он попросил в беседе у chatgpt добавить обработку еще одного элемента, тот внезапно начал выдавать совершенно нерабочий код. Прикол был в том, что код был рабочий, однако под предыдущую мажорную версию библиотеки BS. Т.е. ChatGPT в какой-то момент в рамках беседы тупо забыл, что до этого весь код писал для одной версии, и начал генерировать новые фрагменты для другой версии библиотеки, и сколько бы ему не намекали в беседе начать писать в прежней версии, он этого не делал.
Справедливости ради, copilot в рамках VSCode меньше таким страдает, поскольку он имеет доступ к Вашему проекту напрямую, однако и у него такие проблемы случаются.
Угроза классическому поиску
Это то, в чем эти чаты реально хороши, причем пользу именно этого большинство потенциальных потребителей этой фичи еще не осознают до конца.
Приведу пример не из программирования. У меня в деревянной кровати отошла одна из планок. Оказалось, что производитель схалтурил, и никаких шайб там не использовал, а чисто шурупы. Я замерил их размеры и спросил у Copilot, какие шайбы лучше всего для этого использовать. Он ответил, что шайбы такие-то, и внезапно добавил, что в стране, где я сейчас нахожусь, шайбам такого-то российского ГОСТа соответствует такой-то немецкий стандарт DIN. Т.е. нейросеть смогла сопоставить данные с нескольких сайтов:
С какого-то российского форума, какие шайбы лучше всего юзать для креплений в деревянной мебели.
А также другой сайт со страницей эквивалентности российских и европейских стандартов.
Кровать я по итогам починил, а то, что я описываю, и есть главная причина, почему Гугл объявил красный код угрозе GPT. С GPT такие вещи выяснять гораздо проще, чем самому лазить по разным сайтам, сопоставлять там информацию и делать выводы.
Впрочем, конкретно в области разработки ИИ наступает на пятки классическому поиску еще и по-другому:
Теперь внутри VSCode можно не только сгенерировать рецепт, чего делать, но и сразу одним кликом запустить его в командной строке внутри, заставить Copilot проанализировать ошибки, которые выдала консоль, и предложить исправление.
Приведу пример, как это выглядит на практике. Нам понадобилось на одном проекте произвести обновление мажорной версии ключевой библиотеки. Когда я его произвел, при сборке и тестировании проекта выявилось последовательно пять ошибок. Из них с четырьмя я сумел справиться, просто тыкая в консоли на исправление ошибок с помощью copilot. Только для одной из них мне пришлось пойти на Reddit и StackOverflow и разбираться, как эту зависимость подключать в новой версии фреймворка.
Это весьма впечатляющий результат. По сути Copilot проворачивает с гуглом и другими поисковиками тот же трюк, что гугл проворачивает с сайтами. Т.е. сейчас, если пользователь ищет информацию в гугле, в большинстве случаев он не переходит на сторонние сайты, а только на сайты самой компании, типа Google maps. Теперь то же происходит с классическими поисковиками. Т.е. можно не покидая IDE решить все проблемы, которые возникают при разработке (ну или почти все).
Поэтому топ-менеджеры Гугла совершенно верно определили эти тулзы как угрозу самому существованию Гугла.
Программированию как професии конец?
TLDR - нет.
Если пространно, то есть ряд причин, почему программисты как профессия не исчезнут. Одна из них - вопрос ответственности:
В теории все выглядит заманчиво для руководителя бизнеса. Зачем мне отдел айти-разработки? Просто попрошу Copilot написать программу, дав ему детальное ТЗ. Но не тут-то было. Это примерно как "Если бухгалтер в расчетах в Excel допустил серьезную ошибку, то кто сядет - бухгалтер или разработчик Excel?"
Это та же причина, по которой IBM Watson (ставящий диагнозы лучше большинства докторов, к слову) не привел к исчезновению диагностов. Когда будете слышать такого рода идеи от какого-нибудь предпринимателя (типа сейчас программисты мне станут не нужны, потому что Copilot все напишет), спросите его "А ты готов бухгалтерию и расчеты поручить chatgpt?"
Но дело, конечно, не только в юридической ответственности. Вот написал вам copilot сайт для вашей фирмы. Как вы оцените, насколько он оптимизирован? Что вы будете делать, если в разгар рабочей недели сайт ляжет, и чинить надо срочно? Бросите все дела и будете дебажить на пару с Copilot (дебажит он, кстати, уже прилично)?
Хорошо, допустим, руководство убедили, что нам нужен разработчик в фирме. Но можно ли обойтись одним? Будет ли когда-нибудь так, что в фирме 50 различных проектов, написанных ИИ, и один разработчик, который за ними следит? Я в этом сомневаюсь - проблема в концентрации и прочих особенностях человеческой психики (если только помимо ИИ не начать с помощью биохакинга выполнять апгрейд самих разработчиков). Слово Ашманову:
Я глубоко убежден, что сделать проект с командой, работающей на полставки и думающей о проекте "на полставки" - нельзя. Здесь вопрос даже не в количестве рабочего времени в неделю, а в эмоциональной вовлеченности. Кто-то в проекте должен занять проектом свою голову и сердце на 100%. Лучше, чтобы это был руководитель проекта, но может быть и его заместитель, или главный разработчик.
Есть и еще одна проблема. Допустим, мы имеем несколько проектов и одного разработчика, который за ними следит, т.е. со временем ИИ будет по все более и более туманным описаниям делать все более и более хорошие программы. И вот мы решили развернуть еще пачку проектов, и добавить еще одного разработчика, присматривать за ними. А где его взять? Ведь если от всех джунов избавились, а заодно и от мидлов, оставив одного сеньора, то где брать новых сеньоров? Из кого они вырастут?
Мне думается, есть высокая вероятность того, что в разработке в ближайшие лет десять будет одно время такой период, когда менеджмент, обрадовавшись тулзам ИИ и то, что теперь один разработчик может работать за десятерых, произведут массовые сокращения. Потом, через некоторое время, столкнувшись с резким сокращением доступных разработчиков на рынке труда и тем, что оставшиеся тупо не справляются c поддержкой массива проектов в рабочем состоянии, эту практику резко прекратят. У нас есть прекрасный пример:
Когда в 80-х в Америке повсеместно внедряли банкоматы, была масса опасений, что банковские служащие (которые в основном и выполняли функции приема и выдачи наличных) будут массово сокращены. В реальности количество банковских служащих не только не сократилось, но и даже слегка возросло с тех пор - т.е. они просто стали заниматься другими задачами.
Итоги
Уже сейчас ChatGPT и Copilot позволяют значительно облегчить (даже с поправкой на галлюцинации) труд разработчика. Я лично смотрю на это с оптимизмом. На мой взгляд, численность разработчиков не сократится, просто они с помощью ИИ смогут делать гораздо более сложные программы, чем сейчас, с меньшим количеством дефектов на 1000 LOC. Т.е. численность людей в профессии не уменьшится, вместо этого тот же самый набор программистов будет производить гораздо больше интересных программ.
А что думаете Вы?
Комментарии (35)
KarRis
02.01.2024 15:36+9Строго обратный опыт работы с LLM. Без шуток, для кого эти ChatGPT полезны - тупо хз, ибо если у вас есть хоть чуть чуть профессионального опыта, то все "подсказки" этих ботов только мешают. По опыту мол потери контекста так вообще, постоянная штука, что в gpt4 что в 3.5, копилот пробывал уже давненько так что хз как он там, ну то есть любой диалог в 2 - 3 вопроса и все, он ломает код который и до этого на ладан дышал.
darthmaul
02.01.2024 15:36+2ИМХО, польза в них таки есть. Нейронка заменяет не програмиста, а гугл. Вы могли и не знать о таком методе решения задачи или либе, а железка знает. С контекстом - да, беда. Можно использовать playground (веб интерфейс к АПИ) или самому накодить простенькую форму чата и привязать её к АПИ - тогда длина контекста перестанет плавать (т.е., если весь диалог меньше 8к токенов - то точно ничего не забудет).
KarRis
02.01.2024 15:36+3Честно и тут с вами не согласен, у меня никогда не было проблем что-то загуглить, мб просто гуглят люди вопросами? Вы же в курсе, про то что гуглить вопрос, а не ключевые слова не правильно?) А если вы в Гугле не нашли, то ставлю на то что и гпт максимум вам уверенно нагаллюционирует, но не решит вашу проблему. Хотя нейронки пока мне в борщ не харкали, так что пользуйтесь, если помогает.
darthmaul
02.01.2024 15:36+1Это уже, кстати, не особо актуально - поисковики уже давно научились выделять "мусор" в запросе, так что хоть вопрос задавайте хоть ключевый слова - результат похож. Раньше было акутально, да. Но всё равно чтобы гуглить надо знать что ищете. Например, надо написать функцию, решающую диффур. Конечно, если я знаю о numpy то я загуглю "ODE solver numpy" и тут же найду что надо. Но если бы я не знал что есть такая штука как numpy я бы долго долбил поисковик. Нашёл бы конечно, но и времени потратил бы куда больше. Пример, конечно, крайне упрощённый и все питонисты знают o numpy, но бывают же и редкие либы. Все не выучишь.
neytrino
02.01.2024 15:36+1А что вам сеть ответит если вы не знаете вопроса? Галюцинации вы получите что от первого, что от второго
vassabi
02.01.2024 15:36это раньше поисковик был "что в интернете отвечает на этот запрос"
а теперь это будет "это был человек? что хотел узнать человек, когда писал этот запрос? сгенерировать или все-таки посмотреть в интернете? что и как показать ему со словами да, вот именно это вы и искали ?"
Karopka
02.01.2024 15:36+2Да ну нафик. Ставлю задачу - получаю "решение', в т.ч. с примером кода и фрагментами "цитат" якобы из MSDN, "всё весьма солидно", тянет почти на хорошую статью по тематике...
Далее, делаю проект - какая-то фигня. Разбираюсь - всё совершенно не так, ложь пополам с бредом.
Чат гопоты.
gun_dose
02.01.2024 15:36+1Нейронка заменяет не програмиста, а гугл. Вы могли и не знать о таком методе решения задачи или либе, а железка знает.
Прежде чем тащить ещё одну незнакомую либу в проект, нужно убедиться в том, что она действительно решает требуемую задачу, то есть ознакомиться с документацией. Затем нужно убедиться, что либа не заброшена, для чего надо посмотреть историю релизов. А иногда не лишним будет проверить issue трекер, если последний релиз был подозрительно давно. Я не знаю, что из всего этого сможет сделать ChatGPT или Copilot.
vassabi
02.01.2024 15:36они смогут все это сделать, надо добавить только плагины АПИ
gun_dose
02.01.2024 15:36Какой именно плагин куда надо добавить, чтобы ИИ не предлагал либу, разработка которой заброшена, или которая подходит почти, но из-за слабой кастомизируемости это "почти" оказывается критическим блокером для использования этой либы?
FruTb
02.01.2024 15:36Довольно давно и активно использую копилот. Очень помогает при написании всякого шаблонного кода типа разметки аттрибутов для сваггера, средней сложности sql запросов и подобного.
И где-то в 30-50% случаев угадывает реализации маленьких ф-ций по сигнатуре и комментарию.
Субъективно скорость разработки выросла на 25-30%.
LeetCode_Monkey
02.01.2024 15:36+3Как-то надуманно про последний пункт. Нет, как раз вместо 50 разработчиков оставят 10. То что найдутся какие-то более сложные проекты чтобы пристроить эти 40 - это всё вилами по воде. Запросто могут и не найтись. А с чего они вдруг должны обязательно найтись?
vassabi
02.01.2024 15:36+3потому что упрощение кодирования приводит к тому что его будут сильнее использовать https://ru.wikipedia.org/wiki/Парадокс_Джевонса
LeetCode_Monkey
02.01.2024 15:36-1Упрощение сельхозработ и животноводства привело к массовому вымиранию деревень (и сильнейшему плачу Ярославны по этому поводу). Потому что жрать в три горла всё равно не получится. И предел информатизации тоже есть. И судя по тому как сейчас даже от стажёров требуют литкод на собесе, а не наваливают им новых проектов до которых типа руки не доходили, этого предела мы уже достигли.
Ivan22
02.01.2024 15:36+3а удешевление электричества таки привело к тому что используют его не в 3 а в 333 раза больше и предела не видится. И софт гораздо ближе к электричеству чем к еде
LeetCode_Monkey
02.01.2024 15:36-1Удешевление зарплат в айти тоже может быть приведёт к увеличению использования айтишников. Только вот боюсь вам это удешевление мало понравится.
Ivan22
02.01.2024 15:36понравится/не понравится, это все ерунда, факты это не меняет
LeetCode_Monkey
02.01.2024 15:36-2Не знаю как вы, а я в айти на жизнь зарабатываю. Поэтому от того что цифровизируют каждый чайник, но получать я за это буду 50 тыщ, всё это лично для меня уже теряет всякий смысл.
vassabi
02.01.2024 15:36каждый раз когда вижу вакансию на такую зп, хочется чтобы наконец-то такие работодатели перестали получать субсидии от государства...
LeetCode_Monkey
02.01.2024 15:36Тогда они вообще закроются. Платить зарплаты 300К за проекты с околонулевой рентабельностью нет желающих. А всё высокорентабельное уже подъели.
vassabi
02.01.2024 15:361) туда им и дорога. такие работодали нужны только для сжигания человеческих ресурсов
2) Если профессия важна, то и зп должна быть высокой.
LeetCode_Monkey
02.01.2024 15:36-2Тут мы и приходим к тому что "важное" айти это довольно ограниченная ниша. Уже сейчас переизбыток программистов приходится фильтровать литкодом и прочей придурью на собесах. Где эти куча новых высокооплачиваемых проектов чтобы пристроить всех желающих? А что будет когда всякие ГПТ серьёзно поднимут производительность? Чем именно займутся оказавшиеся лишними? Ответа я так и не услышал, только хопиум и чудиковатые параллели что программирование это якобы электричество.
vassabi
02.01.2024 15:36жрать в три горла не получится - так что тут мы Мальтуса все-таки смогли переиграть :)
Смотреть кино, играть в игры, слушать музыку и т.д. - тоже ограничено человеческими возможностями.
но вот запускать код "в три горла" - очень даже получится. ЦОДов много не бывает, например. Микросхемы еще используются в каждом венике и чайнике и т.д.
wert_lex
02.01.2024 15:36+5ChatGPT для не-программирования пользовался давно и обширно, а вот непосредственно с написанием кода очень долго рефлексировал, не понимая, куда же это в моей системе категорий относится. В итоге пришел к следующему:
это еще чуть более умный code completion tool: в Borland Turbo C код комплишн вообще отсутствовал, в NetBeans/Eclipse уже было неплохо, в IJ IDEA со товарищи стало хорошо. Теперь вот стало еще умнее.
это неплохой апргейд Rubber Duck debugging. Резиновая утка была неплоха - слушала внимательно. Теперь еще и отвечает, и даже довольно часто в тему.
и в том же духе - с этой штукой иногда неплохо бывает обсудить свои мысли касательно архитектуры/реализации. Вопрос, как известно, уже содержит половину ответ, а уж сформулированный и записанный вопрос - тем более. Да и ответы часто как минимум не сильно мимо.
всякое рутинное неплохо автоматизируется. Написать болванку документации - уже неплохо.
forthuse
02.01.2024 15:36Что то имеется большое сомнение, что модели LLM могут справится на хоть каком то
приемлемом уровне с решением задач с площадки как code.golf (c условием жёсткой конкуренции по представленному решению на размер кода)Может кто то практически проверить эту гипотезу? И может и опубликовать статью.
(даже зная что для размещения решений на этом ресурсе аккаунт должен быть привязан к Github) и не будет ли Copilot выдавать за свои решения кем то уже предствленный код?
(что проверить практически невозможно в этом случае, но вписать себя в таблицы с неплохим рейтингом может получится на какое то место даже в рамках отдельного языка программирования)vassabi
02.01.2024 15:36что-то я думаю, что как раз ЛЛМ и будут там рулить, просто не текущие, а которые будут чуть-чуть по умнее. (Вот как у современных шахмат сейчас)
anydasa
02.01.2024 15:36+4Юзаю gpt4. Очень нравится для мозгового штурма. Программирую давно на php, и а вот решил попробовать python. Очень помог в формировании набора инструментов для работы.
Столкнулся проблеммой риалтайм обработки данных в большом объёме, он мне поведал о flink и аналоги. Flink попробовал, отличный инструмент.
И много чего не знал, он меня как бы направил. В python например крутил fastapi между сервисами, но все мне не нравилось, много движняка, хотелось проще, гпт открыл мне мир protobuf и betterproto.
Когда то он мне открыл redis stream, все юзал кроля, но на мою задачу он не клеился, данных было очень много.
Было пару мес, пока не работал, я тупо с ним с утра до вечера сидел. Это было как интенсив английского с носителем. То что раньше долго жевал, наконец проглотил.
Да, подбешивает иногда, но в целом, я очень за его использование.
slavius
02.01.2024 15:36Как сказал один таксист - Когда в вашу сферу придёт Яндекс, вы будете получать в 2 раза меньше, за вдвое большую работу. Так и тут - водители (скорее операторы) уникальных машин и агрегатов не смогут быть заменены, но их сильно меньше водителей автобусов и фур, которые могут быть заменены.
Sarjin
02.01.2024 15:36Это та же причина, по которой IBM Watson (ставящий диагнозы лучше большинства докторов, к слову) не привел к исчезновению диагностов.
напомните сколько там Ватсон стоит.
а то во многих странах оптимизируют обычных врачей заменяя пустотой. Видимо Ваша компания действительно хорошая и Вы никогда не слышали фраз - "мы на это не заработали". в отличии от медиков и их пациентов
gun_dose
02.01.2024 15:36Было бы интересно провести исследование, насколько сильно коррелирует польза ИИ-инструментов для программиста с уровнем квалификации самого программиста. У меня есть подозрение, что это всё помогает только начинающим. Например, у меня больше 10 лет опыта работы с Drupal, но несмотря на то, что ChatGPT довольно хорошо "разбирается" в друпаловском API, я его вообще никак не смог применить в работе. Он оказался абсолютно бесполезен для реальных задач. Но вот недавно я заинтересовался темой машинного обучения, не знал, с какой стороны подступиться, спросил пару вопросов у Google Bard и получил несколько довольно полезных советов.
darthmaul
А они уже перевели копилот на GPT-4? Тройка ИМХО туповата для практических задач
spirit1984 Автор
Да вроде как прикрутили, но пока ситуация не совсем ясная - смотрите пост на реддите.