Привет, Хабр! Меня зовут Александр Демидов, я директор по разработке департамента управления технологиями МТС. Сегодня поговорим про использование в программировании нейросетей, включая ChatGPT и конкуренцию нейросетей и программистов. Всё чаще слышны разговоры, что вот-вот компьютер может заменить специалистов-людей, и кодерам придется искать новую работу. Так ли это на самом деле? На олимпиаде True Tech Champ я выступал с докладом по этой теме, и теперь хотелось бы обсудить этот вопрос здесь, на Хабре. Моё мнение и анализ текущей ситуации — под катом. Буду рад любым комментариям.  У людей появился сильный конкурент — нейросети. Пока ChatGPT, как и некоторые другие нейронки, помогает разработчику. Вместе с этим ИИ начинает понемногу конкурировать с человеком.  Процесс замены, как считают некоторые, уже пошёл. С этим мнением, например, согласен Эмад Мостак, основатель и генеральный директор Stability AI, создатель Stable Diffusion. Он довольно категоричен: «Будущее для кодеров-людей не слишком радужное». Ну а статистика от GitHub показывает, что сейчас около 41% кода генерируется ИИ. С данными о 41% можно, наверное, спорить, но объём создаваемого ИИ кода и правда очень большой. Это лишь начало: в перспективе нейросеть сможет успешно конкурировать с человеком. Не согласны? Давайте посмотрим, кто такой программист, чем он занимается и какого рода работу выполняет. Когда компания нанимает кодера, к нему предъявляются некоторые требования. Например, нужно владеть Python, C#, знать какие-то инструменты и фреймворки. Кроме того, разработчик должен уметь понимать входящие условия от системного аналитика и отвечать за работоспособность кода.  Но уже сейчас ИИ может выполнять подобные задачи не хуже разработчиков. Нейросети получили огромную базу знаний, они «понимают», как писать и оптимизировать код на нужном языке. Есть мнение, что заменить кодеров машиной проще, чем менеджеров. Все разработчики оставляют цифровой след через написанный код, некоторые даже документируют все свои шаги. Соответственно, нейросети ничего не стоит изучить техническую документацию и начать работу на основе полученной информации. Часто говорят, что программирование — креативная работа. В то же время элемент творчества здесь не слишком значительный, да и далеко не каждый разработчик настоящий творец. Большинство тасков — рутина, с которой прекрасно справится и нейросеть. И мы говорим сейчас не только о написании кода, но и о поиске багов, развёртывании, оптимизации алгоритмом работы со структурами данных и других подобных задачах. В большинстве из них никакой креативности нет, их выполнение можно автоматизировать. Вот как выглядит процесс работы над средним корпоративным проектом:  есть бизнес-оунер, он формирует бизнес-требования; аналитик всё это изучает и ставит точные задачи; они разбиваются на атомарные девтаски, которые мы размещаем, например, в Jira; таски выполняются, проект готовится; ищутся и правятся баги. Программисты — люди, а значит, им свойственно ошибаться. Они косячат, не видят уязвимостей в коде, пропускают баги. Уже сейчас ИИ допускает гораздо меньше ошибок, чем большинство разработчиков, а есть и специализированные сети для поиска уязвимостей и тестирования.  Есть, конечно, хорошие кодеры. Они пишут отличный код, с которым мало проблем и умеют общаться в команде. Они понимают бизнес-процессы, умеют взаимодействовать со специалистами других сфер. Им ясны потребности пользователя, они могут проводить эксперименты и несут ответственность за свой код. Таких профессионалов, или Product Engineer’ов нейронки действительно вряд ли заменят, по крайней мере, в обозримом будущем.  Но таких разработчиков меньше 20% или даже 20% от 20%. Их количество не растёт,  их «убивают» корпорации. Например, их ставят во главе проектов по созданию новых продуктов, сервисов. И они прекращают писать код, начиная управлять процессами в команде. В итоге 30–40-летние программисты исчезают. Обычно именно потому, что идут в управленцы. В лучшем случае они становятся тимлидами. Все остальные специалисты делают примерно то же, что и большинство других офисных сотрудников — решают мелкие рутинные задачи. А с ними, как и говорилось выше, отлично справляются и нейронки.  Теперь — к самому интересному.  Принято считать, что нейросети не годятся для широкого круга задач. Но при внимательном рассмотрении оказывается, что это не так (или не совсем так). В некоторых случаях эти задачи не так уж и важны, так что ChatGPT нельзя вменить подобные вещи в вину. Об этом и поговорим ниже.  ChatGPT — не командный игрок.  Объясню: это инструмент, с которым, скорее всего, работает один кодер, и поэтому он не взаимодействует с коллективом. Хорошо это или плохо? С одной стороны, слаженная работа в команде — преимущество. Вспомните фильмы «Миссия невыполнима» или «11 друзей Оушена», где люди работают как единый организм. Каждый участник — очень крепкий специалист в своей области, и все они поддерживают друг друга. Но такие идеальные команды бывают только в кино. В большинстве реальных коллективов есть множество проблем. Все потому, что в реальном мире крайне мало «сыгранных» команд, которые работают максимально эффективно на всех уровнях — от, собственно, кодинга до коммуникаций с заказчиком без конфликтов, недопонимания, интриг и прочего.  Так что здесь сложно сказать, отсутствие команды для ChatGPT — плюс или минус. Но если брать в среднем, то ChatGPT в одиночку может выполнять задачи быстрее и эффективнее, чем команда людей. ChatGPT не может думать как пользователь и не обладает эмпатией. Здесь снова вернёмся к хорошим разработчикам. Они действительно могут поставить себя на место пользователя и сделать отличный продукт. Нейросеть на такое не способна. Но, как мы и говорили выше, специалистов такого класса, настоящих Product Engineers, гораздо меньше, чем обычных. Кроме того, даже если разработчик не имеет «пользовательской эмпатии», есть фидбеки пользователей. Последние способны вполне внятно и точно объяснить, что им нужно в конкретном сервисе или приложении, а что лучше убрать. Имея эти данные, обычный разработчик может всё исправить. Те же фидбеки от пользователей могут применять во благо и для работы с ChatGPT — всё это можно «скармливать» нейронке, и она сделает то, о чём её просят. ИИ не способен на эксперименты.  Он даёт один результат. Как правило, верный и корректно работающий. А вот человек попробует решить задачу несколькими способами и выберет максимально эффективный. В науке изобретения часто появляются в ходе неудачно проведённого эксперимента. Пенициллин, сахарин, ударопрочное стекло — результат научной ошибки. Создание виагры — такая же случайность, ведь фармацевты хотели создать лекарство от сердечной недостаточности, а получили то, что получили. Можно сказать, что великие открытия в большинстве своём — отклонение от нормы. С нейронной сетью такую ситуацию представить себе невозможно, её результат будет верным в рамках имеющихся данных и поставленной задачи. Не факт, что максимально эффективным, но правильным.  Можно было бы подумать, что это проблема, но людей подобная удача настигает редко. И сейчас это происходит ещё реже, чем раньше. Хотя и небольшой, но шанс переиграть нейронки у человека тут есть.  Нейросеть не может выходить за рамки поставленной задачи. Разработчикам-людям такое своеволие позволяет решить задачу неожиданно эффективным методом. Но — снова — не так много людей готовы выйти за пределы своих обязанностей, сделав дополнительную работу.  Большинство кодеров не станут отходить от текста задания, используя имеющиеся для этого данные и требования. Поэтому считать это недостатком нейронки я бы не стал. Ответственность.   ChatGPT не может осознанно принимать последствия своего выбора. Не умеет нейронка и отвечать за поступки, что является основанием для принятия решений и совершения действий, прямо или косвенно влияющих на результат. Сеть выбирает решение с максимальным весом, то есть правильное. Всё верно, но и здесь мы вынуждены вспомнить о хороших разработчиках, которые осознают свою ответственность и лично отвечают за результат. Многие же просто пишут код, стараются минимизировать риски, избегают сложных решений, например, хоть рефакторинг ключевых компонент, по факту накапливая технический долг.  Креативность.  Нейросеть выполняет поставленную задачу чисто технически. Что такое творчество? Мы снова можем вспомнить об изобретениях. Если не погружаться в вопрос, может показаться, что Илон Маск изобрёл многоразовый космический корабль или электромобиль. На самом деле это не совсем так.  Люди частенько изобретают что-то на основе уже имеющейся идеи, оптимизируя, улучшая и применяя свежие технологии к чему-то, что было придумано до них. Команды Маска поступили аналогичным образом: до него из космоса умели возвращаться американские шаттлы и советский «Буран», а первые электромобили появились ещё в начале прошлого века. Эти решения сильно отличались от того, что делает SpaceX и Tesla, но функционально делали то же самое. По сути, это и есть работа ChatGPT. При условии достаточного объёма информации нейросеть может делать такие вещи без особых проблем. Product Engineering. Это понятие включает в себя: одержимость созданием ценности, полную собственность за продукт и связанные с ним процессы, понимание полной картины, способность мыслить не в рамках конкретной задачи, а видеть, где и что можно улучшить с точки зрения конечного результата.  Но это уже не совсем про технические навыки разработчика, а про обладание общими навыками решения проблем, широкую технологическую экспертизу, умение задавать вопросы и анализировать ситуацию за пределами технологического пространства. А здесь пока тяжело придумать, как и на основании чего могут работать сети. И здесь пока человек основной владелец роли.  Специалист-человек прекрасно владеет технологиями, это отличный командный игрок. Но таких разработчиков не очень много. А значит, для решения большей части корпоративных задач в плане разработки возможностей нейросети вполне достаточно.  Думаю, в процессе эволюции AI всё же сможет на равных конкурировать со специалистом-человеком. Последнему нужно постоянно развиваться, чтобы стать действительно хорошим, сильным профессионалом. Эволюционировать, как специалист, получать новые знания и скиллы, писать действительно хороший код, понимать, для чего вообще будет служить эта программа и какие проблемы и задачи она должна решать. Тогда нейросетью живого сотрудника будет заменить сложно.  Если нейросети будут помогать с решением рутинных вопросов, оставляя программистам интересные задачи, над которыми можно с удовольствием работать, едва ли это можно будет назвать ухудшением ситуации для нас, разработчиков. P.S.: надеюсь, моя статья станет поводом обсудить эту тему в комментариях. Будет интересно получить фидбек и обсудить некоторые важные моменты в комментариях.