Как ИИ не заменит программистов, а создаст дефицит кадров в IT больше, чем COVID-19
- четверг, 17 апреля 2025 г. в 00:00:11
Кому лень читать статью целиком, можете сразу переходить к последней главе.
В этой статье я хочу поделиться своим мнением, которое мне кажется очевидным, но почему-то все игнорируют возможность такого сценария.
Если вы нанимаете, и готовы рассмотреть хорошего Junior+/Middle Python Backend, напишите мне в Telegram. Я учу людей программировать, а не просто проходить собеседования. Даже если прямо сейчас у вас нет вакансии, в будущем у вас появится потребность в хорошем Junior+, который готов к самостоятельной работе и может быстро расти до уровня Middle. Посмотрите как я обучаю, если у вас есть сомнения.
Содержание
Сколько времени нужно, чтобы написать код
Бизнес-контекст
Реализация
Тестирование QA
Как я использую ИИ в разработке сегодня
Генерация конфигураций
Генерация тестовых данных
Написание автоматических тестов
Рефакторинг
Скоро будет не нужно так много программистов?
Массовые сокращения?
Упадут ли зарплаты?
Есть ли смысл учиться на программиста?
Бизнес-контекст
Чтобы говорить о том, может ли ИИ заменить программиста давайте сначала обсудим на что вообще программисты тратят свое время.
Перед тем как приступить к задаче как правило нужно выполнить следующие действия:
Обсуждение с заказчиком
Анализ требований
Обсуждение в команде
Уточнение требований
Предполагаемый план реализации
В зависимости от задачи эти этапы могут пройти быстро, а могут составлять более 50% трудозатрат. Например, если вышел какой-то новый закон и нужно привести проект в соотвествие новой редакции закона. Часто в такой ситуации не то, что ИИ, а даже юристы точно не знают, как правильно трактовать некоторые формулировки в законах. Даже если ИИ в итоге напишет весь код, всё равно кто-то должен изучить все требования, чтобы сформулровать задачу и проверить код, сгенерированный ИИ.
В среднем в крупных проектах я бы оценил трудозатраты на изучение контекста в 20%–30% времени. Этот контекст относится как к задаче, так и к кодовой базе проекта. Люди, далекие от IT, думают, что программист целый день пишет код — это не так. Очень много работы, которая требует навыков программирования, но не включает написания самого кода.
Реализация
После изучения бизнес-контекста программист наконец-то может приступить к работе с кодом.
В упрощённом виде этот процесс можно разделить на следующие этапы:
Изучение контекста
Написание кода
Проверка и отладка
Код ревью, доработки
Как правило, перед написанием кода нужно прочитать существующую кодовую базу, т. е. код, который уже написан, и только потом вносить в него изменения.
После написания кода необходимо проверить корректность его работы. Даже если код будет написан с помощью ИИ, его по прежнеу нужно проверять, в том числе читать глазами квалифицированного программиста. Мне сложно представить, что в той же банковской сфере когда нибудь смогут доверять ИИ на 100%, даже если через 10 лет ошибки станут редкостью (нет). Но ИИ всегда будет ошибаться, как минимум потому, что может ошибаться человек, который ставит задачу.
Тестирование QA
После того как программист выполнил свою работу, задача передаётся в тестирование. Да, в маленьких проектах роль тестировщика может выполнять сам программист, и в целом это зависит от принятых практик в конкретных проектах, но так или иначе этот этап будет.
Тестирование можно упрощённо разделить на следующие этапы:
Изучение бизнес-контекста
Сбор сведений об изменениях
Составление плана тестирвоания
Проверка нового функционала
Проверка затронутого функционала
Тестировщику также придётся сначала изучить бизнес-контекст, чтобы понять, о чём вообще задача и что надо было сделать. Важно, что на этом этапе тестировщик не может полностью доверять тому, что говорит программист, так как он мог неправильно понять задачу или схалтурить.
После этого QA должен проверить как новый функционал, так и тот, который мог быть прямо или косвенно затронут. Сейчас уже ИИ очень полезен в том, чтобы предложить план тестирования и помочь QA не упустить некоторые детали.
Потраченное время
Итак подведем небольшой итог, на что тратится время при разработке ПО для абстрактной задачи, которая была выполнена за 4 дня:
Изучение контекста - 1 день
Написание кода - 2 дня
Тестирование QA - 1 день
Да я понимаю что от задачи к задачи всё это индивидуально, но в данном примере получается, что непосредственно написание кода — не более чем половина от всего, что нужно сделать. Даже до этапа QA написание кода — не более 70% времени.
Я приведу несколько примеров, где ИИ лично мне полезен и экономит время. В основном это простые задачи.
Генерация конфигураций
Очень удобно использовать ИИ, когда нужно сгенерить шаблон, например, манифесты K8s, Dockerfile и т. д., который, скорее всего, будет содержать ошибки, но тем не менее требует меньше механической работы клацания по клавиатуре.
Генерация тестовых данных
Одно из моих любимых занятий — это попросить ИИ сгенерить скрипт для генерации большого объёма данных на основе SQL-схем таблиц. Задача простая и рутинная: когда нужно поэкспериментировать с индексами в БД локально, нагенерив себе данных. ИИ всегда это делает с ошибками, но опять же — меньше механической работы клацания по клавиатуре.
Написание автоматических тестов
Когда код уже написан, его нужно покрыть тестами. ИИ может помочь набросать шаблонные функции и даже подсказать сценарии тестирования. Иногда это полезно в качестве ещё одного мнения о том, как и что нужно тестировать.
Исследование технологий и проблем
Частично ИИ заменяет собой гугление и поиск чего в документации. Но тут надо быть внимательным: перед использованием того, что предлагает ИИ, нужно проверять, что эти подходы не устарели, и вычитывать в документации, что на самом деле делает тот или иной метод какой-то билиотеки. Но в целом для быстрого поиска — полезно.
Рефакторинг
Иногда можно закинуть в ИИ кусок плохого кода и попросить у него предложить рефакторинг. Даже при наличии ошибок иногда можно получить хорошую идею по рефакторингу кода.
Уже сейчас широко распространяются IDE, такие как Cursor, полностью интегрированные с ИИ. Она ориентирована на ускорение разработки за счёт "умного" автокомплита, автогенерации и редактирования кода, понимания контекста проекта и более продуктивной работы с большими кодовыми базами.
Думаю, каждый сам нагуглит, что это и как работает. Основное тут — это то, что ИИ учитывает файлы проекта и связи между ними, что позволяет делать более точные подсказки.
В будущем я представляю себе следующий сценарий работы программиста:
Изучение контекста
Передача контекста в ИИ
Генерация кода
Проверка кода именно глазами разработчика
Ручное исправление кода или с помощью ИИ
Тестирование
Кто бы что ни говорил, даже если ИИ будет очень умным, всё равно без человека, который понимает код, будет сложно гарантировать корректность его работы. Тестировщик может проверить то, что сказано в постановке задачи, но неизвестно, какой ещё код мог быть сгенерирован ИИ. А в случае, если ИИ совершает ошибку, которую не может сам исправить, вся работа остановится без программиста.
Можно сделать несложный вывод, что ИИ может ускорить работу программиста, но в самом лучшем случае — в 2 раза, так как примерно половина работы уходит на изучение контекста и проверку результата.
На самом деле, если я понимаю, что нужно сделать, то написать код — это самая простая и быстрая часть моей работы. У junior-разработчиков и людей, далеких от написания кода, есть много иллюзий на этот счёт, так как им кажется, что именно написание кода — самая сложная часть работы, где может помочь ИИ.
Давайте представим, что всё-таки ИИ сможет, если не полностью заменить программистов, то сделать хотя бы так, что работу пяти программистов сможет выполнять один вместе с ИИ.
Массовые сокращения?
Вряд ли. А если и да, то потом всех наймут обратно. Компании нанимают, например, 100 программистов не потому, что им хватает именно 100 программистов, а потому, что у них есть деньги только чтобы нанять 100 и при этом быть прибыльными.
Если какая-то компания сократит программистов в 5 раз, её сразу начнут пытаться обогнать конкуренты, даже если им это будет стоить пары лет работы без прибыли.
Сокращение программистов без потери прибыли — это не более чем влажные фантазии менеджеров и акционеров компаний. Недальновидно так думать, на мой взгляд. Кстати, именно они обычно и трубят со всех утюгов, что скоро ИИ заменит программистов. Легко поверить в то, о чём давно мечтаешь.
Сокращения возможно и будут, но конкуренция всегда будет подталкивать компании нанимать столько, сколько они могут себе позволить.
Упадут ли зарплаты?
Вместо команды из 5 программистов достаточно будет 1 — значит ли это, что спрос на программистов упадёт, а вместе с ним и зарплаты?
Давайте вспомним, что вообще является основным драйвером роста мировой зарплаты в IT. Думаю, вы уже догадались, что это стартапы и маленькие проекты, где и работает большая часть программистов.
А теперь давайте вместе подумаем. Сейчас, чтобы стартап мог стартовать, ему нужно собрать N количество денег инвестиций и нанять 5 программистов, и платить им зарплату, пока продукт не выйдет на рынок. Большинство идей так и не выходят в свет просто потому, что не удаётся найти N денег.
Благодаря ИИ теперь нужно не N, а в 5 раз меньше денег для старта, и можно нанять всего 1 программиста.
В итоге в такой ситуации мы получим новый бум стартапов, и хотя в каждом из них будет нанято по 1–2 программиста, вполне возможно, что суммарное количество рабочих мест вырастет. А значит, вместо того чтобы заменить программистов, ИИ увеличит спрос на них за счёт того, что итоговая стоимость MVP снизилась, даже при том, что зарплаты вырастут.
Появится огромное количество не только IT-компаний, которые нанимают по 1–2 программиста для разработки какого-то специфичного софта или поддержки уже существующего внутри компании. Сейчас в такой ситуации компании отдают это на аутсорс, так как им нет смысла нанимать команду программистов, а вот взять 1–2 в штат может оказаться более выгодным и не такой сложной задачей.
Есть ли смысл учиться на программиста?
Сейчас руководители различных IT компаний публично высказываются, что скоро ИИ заменит программистов.
Лично я понимаю, что даже генеральный директор IT компании часто мало что понимает в работе программиста. Даже если он когда-то давно в универе что-то кодил или немного поработал программистом 20 лет назад, он ненамного ближе к коду, чем любой человек.
Но, к сожалению, для акционеров и, к счастью, для программистов, мнение таких людей выглядит авторитетно, и ему верят.
Если бы я сейчас учился в школе и выбирал, куда пойти, то не факт, что я бы стал программистом. Я бы поверил тому, что говорят руководители IT компаний, и решил бы, что смысла нет.
В итоге, из-за того что руководители компаний не только мечтают, но и выплескивают эти свои мечты в массы, у нас может начаться нехватка не только Senior, но и Junior программистов. Ведь чтобы появился Senior, надо, чтобы сначала кто-то начал учиться и стал Junior. (Я не считают, что выпускники курсов Junior)
Не думайте, что это бред. Меня часто спрашивают об этом люди, которые сомневаются, есть ли смысл учиться.
Возможно, я тоже дурак, но когда я заканчивал школу, мне говорили, что программистов слишком много, и скоро всех заменят конструкторы сайтов. И я в это поверил и поступил не на IT специальность. В итоге любовь к программированию победила, и я работал программистом, даже при том, что в то время зарплата была ниже средней по городу. Но сейчас замена программиста на ИИ звучит еще более убедительно, и просто за счет того, что люди после школы не выберут пойти в IT, в будущем создаст дефицит на рынке труда.