4 самые большие проблемы кода, генерируемого ИИ, которые Gartner не включил в свой последний отчет
Gartner утверждает, что ИИ потребует повышения квалификации 80% разработчиков, но это еще не все. От ошибочного кода ИИ до бесконечных изменений — вот что не было упомянуто в отчете.
Gartner — одна из самых уважаемых аналитических групп в сфере высоких технологий. Ее бизнес — индивидуальные консультационные услуги, конференции и публикация отчетов по отраслевому анализу для нескольких клиентов.
Стать клиентом Gartner стоит недешево: по оценкам, он начинается от 30 000 долларов за место в год. Способ, которым Gartner (и, честно говоря, большинство других аналитических групп) вызывает интерес, заключается в выпуске пресс-релизов, в которых суммируются выводы из ее исследовательских отчетов, в надежде, что их подхватят для освещения такие издания, как ZDNET.
Поскольку эти пресс-релизы часто содержат крупицы, объясняющие тенденции отрасли, мы часто обращаем на них внимание, чтобы попытаться понять состояние отрасли.
Gartner вернулся с новым пресс-релизом. Заголовок этого сообщения: «Gartner заявляет, что генеративный искусственный интеллект потребует повышения квалификации 80% инженерной рабочей силы до 2027 года».
Далее в пресс-релизе обсуждаются прогнозы Gartner о краткосрочном, среднесрочном и долгосрочном влиянии ИИ на разработку программного обеспечения.
В этой статье я рассмотрю выводы Gartner, а также проанализирую многочисленные вопиющие упущения в выводах, которые Gartner представляет в своем выпуске. Я обратился к Gartner с просьбой предоставить мне возможность ознакомиться с полным отчетом, который компания любезно мне предоставила.
В полном отчете очень кратко упоминаются некоторые из того, что я считаю упущениями. Но поскольку гораздо больше людей будут делать свои выводы на основе пресс-релиза, чем полного отчета за пятизначным брандмауэром, стоит обсудить некоторые действительные наблюдения Gartner, а также очень важные вещи, оставленные без внимания.
Давайте поговорим об этом заголовке
Главный заголовок Gartner заключается в том, что в течение следующих двух лет ИИ потребует повышения квалификации 80% инженерной рабочей силы. Позже в своем пресс-релизе Gartner поясняет, что речь идет о разработке программного обеспечения, а не о каждой инженерной дисциплине.
Подразумевается, что ИИ настолько радикально изменит разработку программного обеспечения, что, если вы не повысите квалификацию, вы по сути облажаетесь. Это верно. Но это не новость.
Повышение квалификации, изучение новых вещей и развитие технологий — ключевой аспект работы любого инженера-программиста. В этой статье я буду использовать такие термины, как программист, программист, инженер-программист и разработчик, как синонимы. Есть тонкие различия, но для целей того, что мы обсуждаем, они все применимы.
Я хочу сказать, что если вы программист, вам нужно постоянно учиться.
Нет ничего удивительного в необходимости повышать квалификацию инженера-программиста. Программистам всегда нужно повышать квалификацию. Каждая новая версия операционной системы, каждый новый язык, каждый новый API, каждая новая часть аппаратного обеспечения требует повышения квалификации.
ИИ также потребует от инженеров развития своих навыков, но это не является большим изменением в том, что нужно для поддержания карьеры инженера-программиста или разработчика.
Так что да, конечно, хотя заголовок и правдоподобен, он не так важен для карьеры программиста, как кажется.
Краткосрочное, среднесрочное и долгосрочное воздействие ИИ
Вот как Gartner описывает этапы воздействия ИИ.
- В краткосрочной перспективе: «Инструменты ИИ обеспечат умеренное повышение производительности за счет расширения существующих моделей и задач разработчиков. Преимущества ИИ в производительности будут наиболее значительными для старших разработчиков в организациях с развитой инженерной практикой».
- В среднесрочной перспективе: «Агенты искусственного интеллекта изменят шаблоны работы разработчиков, предоставив разработчикам возможность полностью автоматизировать и разгрузить больше задач. Это ознаменует появление разработки программного обеспечения с использованием искусственного интеллекта, когда большая часть кода будет генерироваться искусственным интеллектом». а не созданный человеком».
- В долгосрочной перспективе: «Хотя ИИ сделает проектирование более эффективным, организациям потребуются еще более квалифицированные инженеры-программисты, чтобы удовлетворить быстро растущий спрос на программное обеспечение на базе ИИ».
Я не согласен с этой оценкой, хотя эти три результата невозможно распределить по временным периодам. Инструменты ИИ, теперь, когда они у нас есть, смогут улучшить кодирование как в краткосрочной, так и в долгосрочной перспективе.
Например, символические отладчики существуют уже около 40 лет, и мы до сих пор используем их ежедневно. Они стали лучше, выполняют больше задач и отражают нюансы рабочей среды, но все еще используются. То же самое произойдет и с программированием с помощью ИИ.
«Для создания программного обеспечения на базе искусственного интеллекта потребуется новое поколение профессионалов в области программного обеспечения — инженеров по искусственному интеллекту», — считает аналитик Gartner Филип Уолш. «Инженер по искусственному интеллекту обладает уникальным сочетанием навыков в области разработки программного обеспечения, науки о данных и искусственного интеллекта/машинного обучения (ML), навыков, которые востребованы».
Имейте в виду, что существует различие во влиянии ИИ на кодирование. Иногда программисты используют искусственный интеллект для программирования (чтобы заставить больше кода работать). Иногда разработчики используют искусственный интеллект в программировании (чтобы сделать код и решение, над которыми они работают, более интеллектуальными).
В конце прошлого года компания Gartner провела опрос, опросив 300 менеджеров по разработке программного обеспечения о должностях. 56% заявили, что инженеры по искусственному интеллекту и машинному обучению являются наиболее востребованной профессией, а применение искусственного интеллекта и машинного обучения в приложениях является областью, в которой их командам необходимо повысить свои навыки.
Это имеет смысл. Функции искусственного интеллекта и машинного обучения могут повысить ценность приложений практически в любой области.
4 вопиющих упущения
По словам Уолша из Gartner, «в эпоху искусственного интеллекта инженеры-программисты будут придерживаться подхода «ИИ прежде всего», при котором они в первую очередь сосредотачиваются на том, чтобы направить агентов ИИ к наиболее подходящему контексту и ограничениям для конкретной задачи».
Основная предпосылка программирования «сначала ИИ» заключается в том, что разработчики передают задания ИИ, а тот возвращает код для проекта. Это прямой аналог того, как менеджер по программированию передает задания разработчикам в команде, а те возвращают код для проекта.
В полном отчете упоминается, что старшим разработчикам может быть поручена проверка качества кода в организациях, где нет автоматизированных инструментов проверки кода. Но проблема гораздо больше, чем обсуждалось даже в полном отчете. Вот четыре упущения в пресс-релизе Gartner.
- Всегда необходимо вносить изменения, чтобы код соответствовал спецификациям.
- Существенное тестирование и контроль качества, необходимые для всего программного обеспечения.
- Необходимость обновлений, обслуживания, исправления ошибок и настройки производительности на протяжении всего жизненного цикла.
- Гораздо сложнее поддерживать код, который вы не писали
Вы просто не можете обсуждать будущее разработки программного обеспечения, не уделив этим четырем аспектам этого ремесла существенного внимания.
1. Пересмотр кода в соответствии со спецификациями
Сценарий прост. Вы передаете подсказку ИИ или набор рекомендаций команде программистов. Проходит время (меньше для ИИ, больше для команды), и вы получаете обратно кусок предположительно работающего кода.
Тогда вы попробуете это. Это не совсем правильно. С первого запуска никогда не получится все правильно. Даже если вы пишете код самостоятельно, при первом запуске после написания кода будут ошибки. Это один из естественных законов Вселенной.
Прямо сейчас вы можете сообщить ChatGPT, что то, что он вам дал, не работает, или сообщить ему сообщение об ошибке, и он сгенерирует совершенно новый блок кода. Но ИИ гораздо труднее постепенно пересматривать свою работу, чтобы приспособиться к тому, что необходимо.
Это применимо независимо от того, осуществляет ли ИИ преобразование текста в текст или даже текст в изображение. Попробуйте заставить Midjourney внести в изображение только те изменения, которые вы хотите. Вы можете указать небольшие области для работы, но тогда Midjourney будет делать то, что хочет Midjourney.
Чтобы иметь возможность иметь проект, в котором разработчики «передают задания ИИ, а ИИ возвращает код проекта», ИИ должен уметь воспринимать критику и вносить небольшие, целенаправленные изменения.
На данный момент каждая возвращенная ревизия — это полный бросок игральных костей.
2. Тестирование и контроль качества
Можно заставить один ИИ протестировать выходные данные другого ИИ. Я проделал это с довольно хорошими результатами, особенно проверив, как создаются и работают регулярные выражения.
Но учитывая, как часто ИИ галлюцинирует и как часто ИИ пишет код, который просто не работает, протоколы и пакеты тестирования необходимо будет разработать как часть процесса программирования ИИ.
Все это, вероятно, потребует от людей выполнения большей части работы. Мы не сможем полагаться на ИИ при написании кода, пока не будем уверены, что код хороший. Чем больше проект, чем сложнее код, тем больше нам понадобится программистов и менеджеров проектов, которые будут контролировать весь процесс.
3. Обновления, обслуживание, исправления ошибок, настройка производительности.
Программное обеспечение далеко не статично. После выпуска необходимо будет исправлять ошибки, внедрять обновления, настраивать производительность и так далее. Ничто из этого не может сделать ИИ во всем продукте.
Это не значит, что ИИ не может помочь. Ему, конечно, можно, например, передать функцию и предложить переписать (обратите внимание, я не сказал «обновить») функцию, чтобы обеспечить лучшую производительность.
Конечно, теперь у вас есть совершенно новая функция, которая должна пройти функциональное тестирование. Если при переписывании что-то сломалось, вы не сможете просмотреть только несколько измененных строк. Вам придется найти ошибку во всем блоке кода.
4. Поддержка кода, который вы не писали
Поддерживать написанный вами код — это работа. Поддержка кода, который вы не писали, — это целая тонна работы. Когда вы пишете код (индивидуально или в команде), у вас есть некоторое представление о том, почему код был структурирован именно так, как все его части работают вместе и почему были приняты определенные решения.
Когда вы поддерживаете код, написанный кем-то другим (человеком или искусственным интеллектом), этот код становится чем-то совершенно новым. Сначала вам придется деконструировать всю архитектуру кода. Если вы все делаете правильно, вы будете тщательно документировать все, что обнаружите. Этот процесс деконструкции занимает очень много времени — и это еще до того, как вы измените или добавите хотя бы одну строку нового кода.
У меня есть некоторый опыт в этом вопросе. Еще в 2015 году я использовал 10 плагинов WordPress с открытым исходным кодом. Это означало, что я отвечал за поддержку кода, исправление ошибок и недостатков безопасности, а в некоторых случаях за превращение их в более коммерчески функциональные продукты.
Мне не только пришлось деконструировать то, как первоначальные программисты писали свой код, но я также обнаружил, что — в некоторых случаях — ненавидел их стили программирования. Программисты могут быть очень разборчивы в отношении стилей программирования, способа написания и структурирования кода.
В большинстве случаев код будет работать, если он написан в разных стилях, но мозг каждого программиста работает по-разному и тяготеет к определенным способам написания кода. Я особенно придирчив к стилю кода. Если оно написано так, как мне нравится, я невероятно продуктивен. Но если стиль кодирования меня раздражает, моя продуктивность падает, и я начинаю нервничать.
Я пытался заставить ChatGPT преобразовать один из наиболее раздражающих стилей кодирования в тот, который мне нравится, особенно для сочетания PHP и HTML. ChatGPT не удалось. Со временем, возможно, появится возможность тщательно обучить ИИ предпочтительному стилю кодирования и заставить его обновить принятый код до стиля, предпочитаемого разработчиком или командой разработчиков, но мы еще не достигли этой цели.
Таким образом, поддержка кода, созданного ИИ, будет не только сложнее, чем его первоначальное написание, но также может противоречить правилам хорошего стиля, что делает работу над ним еще более утомительной.
Заменит ли ИИ разработчиков?
Отчет об исследовании, который Gartner продвигает в своем пресс-релизе, называется «ИИ не заменит инженеров-программистов (и может, на самом деле, потребует большего)». Это предпосылка, с которой я полностью согласен - по крайней мере, на следующее десятилетие или около того.
Как я показал, помимо использования ИИ для помощи в программировании или использования ИИ для повышения эффективности программ, предстоит проделать большую работу, связанную с фундаментальной логистикой проектов программирования.
Нет сомнений в том, что ИИ может помочь в программировании. По моим оценкам, ИИ сэкономил мне как минимум месяц времени программирования за последний год, позволив мне завершить проекты, за которые я, вероятно, не взялся бы, учитывая мое ограниченное свободное время.
Но код, который помог написать ИИ, ломается. Много. И я обнаруживаю, что трачу столько же времени на исправление крайних случаев, которые ИИ не предвидел, на реверс-инжиниринг архитектуры кодирования ИИ, а затем возвращаю этот код в производство. Это, конечно, далеко не автоматическое делегирование работы по кодированию.
Полный отчет Gartner поучителен и хорошо продуман. Но в отчете можно было бы дополнительно обсудить упомянутые мною области. Я призываю аналитиков дополнить свой отчет, уделив больше внимания пересмотру, тестированию и текущему обслуживанию. Помните о процессе не только генерации кода, но и всего жизненного цикла программного проекта после добавления первого набора точек с запятой* в конце всех этих строк кода.
Что вы думаете? Заменит ли ИИ программистов или создаст больший спрос на навыки программирования? Вы уже постоянно повышаете квалификацию? Как вы думаете, ИИ потребует от вас повышения квалификации другого набора талантов? Считаете ли вы, что ИИ когда-нибудь сможет исправлять ошибки и поддерживать их, что всегда необходимо в проектах программирования?
*Примечание. В Python не требуются точки с запятой, в отличие от Java, JavaScript, PHP и всех языков на основе C.
