Искусственный интеллект «убьёт» IT?
В наше время развитие искусственного интеллекта (далее – ИИ, данный термин понимается в статье в самом широком смысле, как любая система, автоматизирующая умственную деятельность) вызывает смешанные чувства у людей. С одной стороны, новые технологии улучшают нашу жизнь. С другой стороны, существуют опасения перед потенциальными последствиями автоматизации и возможным сокращением рабочих мест. Люди боятся, что исчезнут некоторые профессии и первым станет не нужен труд программистов.
Давайте представим, что будет, если мы отменим всех программистов и поручим написание кода машине. Здесь сразу надо ответить на вопрос «В чьих интересах ИИ программировать будет?». ИИ не знает, чего мы хотим, а значит, кто-то должен выразить машине свои пожелания. Очень сомнительно, что директорат какого-нибудь Alphabet Inc (компания-владелец «Гугла») будет ставить задачи ИИ по программированию. Нести ответственность за некорректно поставленную задачу директор не захочет. А значит, наймут человека (назовём его ИИ-программист), который будет получать от директора задание, составлять по нему промт (вводный текст на русском языке, понятный ИИ) и генерировать код посредством ИИ.
Поскольку в данном случае программу пишет не человек, а машина, встаёт вопрос, как контролировать качество кода. Могу предложить два варианта: контролировать код или проверять результат.
Если говорить о первом варианте, то не следует забывать о том, что ИИ не знает ничего о нашем мире и может некорректно понять смысл задачи. ИИ – это не щука из русских сказок, выполняющая наилучшим для нас образом то, что хотим. Скорее, это злой джинн из арабской сказки, который исполняет желания добросовестно в самой страшной и нелепой их интерпретации. И искусство ИИ-программиста будет заключаться в том, чтобы отрезать этому джинну все возможные ложные интерпретации задания. Поэтому после создания кода ИИ-программист изучает его, просит ИИ описать, что делает непонятный кусок кода, переделать этот фрагмент. Кроме того, он может просить уточнить что-то в коде или учесть дополнительные вводные. Далее следует проверка того, как код действует в реальном мире и насколько удалось воплотить в жизнь желания заказчика. И вот у нас есть готовая программа, как результат совместного творчества человека и машины. Код понятен ИИ-программисту, который гарантирует, что код делает то, что хотел заказчик. Диалог между машиной и человеком ведётся в свободной форме, как диалог двух друзей.
Что касается второго варианта, контроля результата, то здесь подключается новый инженер – тестировщик. Уже сейчас тестирование программного кода – это отдельная индустрия. В ней есть как интуитивно понятное ручное тестирование, так и более сложные автотесты. Ручное тестирование состоит в том, что тестировщик сам нажимает все кнопки и проверяет глазами результат работы программы. Автотестирование же имитирует работу живого тестировщика. На этом этапе появляются две программы: одна претворяется пользователем и подаёт нашей разработке на вход сигналы, аналогичные нажатию на кнопку, вторая читает ответ нашего кода и сопоставляет полученный ответ с заранее известным шаблоном. Создание автотестов требует значительных затрат времени, но они окупаются сокращением времени тестирования. С развитием ИИ частично автоматизируется и работа отделов тестирования, добавятся ИИ-тесты, которые пойдут дальше и автоматизируют уже само написание автотестов. ИИ, используя техническое задание и документацию проекта, будет генерировать программу, необходимую для проверки нашего кода.
Таким образом, убивая профессию программиста, ИИ создал две новые профессии: ИИ-программиста и ИИ-тестировщика. Если говорить о профессии классического программиста, то ее убить не получится. Почему?
Для ответа на этот вопрос проследим историю классического программирования. Когда-то давно все программы писались непосредственно в машинных кодах [1], командах процессора. Программист должен был знать, как работает каждый новый процессор, помнить все его особенности и подгонять свою программу практически под каждый компьютер. Затем коды обернули в команды ассемблера [2] и стало чуть легче. Потом появились процедурные языки программирования, например С [3]. Программировать стало ещё проще. На смену процедурным пришли объектно-ориентированные, например С++ [4] , Java [5]. Python [6] открыл эру библиотек [7], позволив использовать часть кода, написанную другими разработчиками (теперь не надо писать код, который был уже создан кем-то: достаточно найти в интернете общедоступную библиотеку другого программиста и подключить её к своей программе). Каждый шаг автоматизировал и ускорял разработку. Каждый раз нам обещали, что нововведение убьёт старые языки и программисты поголовно перейдут на новое. Но до сих пор на ассемблере пишут код для тех же микроконтроллеров, там, где важно выполнить задачу при жёстких ограничениях по скорости процессора и объёму памяти, пишут и на C. Программа, отображающая текст, который вы сейчас читаете, называется браузером, она написана на C++. Приведённые примеры показывают, что ни один из старых подходов к программированию не умер, а просто нашёл свою узкую нишу. Так же с внедрением ИИ классические программисты займут определенное место в ИТ и продолжат писать код привычными способами.
Помимо ИИ-программистов, ИИ-тестировщиков и классических программистов понадобятся инженеры, разрабатывающие инструменты, усовершенствующие сам ИИ. А это целая индустрия с огромным числом профессий. Борис Юльевич Кагарлицкий (признан «иноагентом») в одном из стримов на «Рабкоре» обратил внимание слушателей на увеличение занятости за счёт роста спроса при внедрении инноваций, назвав это явление эффектом хот-дога. Когда-то давно сосиски для хот-догов производились вручную, хот-дог стоил дорого и фастфудом для бедняков были бананы. Один из предпринимателей построил фабрику по производству сосисок, захватил рынок, разорив десятки мелких уличных торговцев. Ужас? Вроде бы да, вот только для захвата рынка ему потребовалось снизить цену на сосиски в разы. Покупка хот-дога, бывшая роскошью, стала доступна большему числу горожан, и пришлось расширять производство, строить ещё один цех, куда и были приняты разорившиеся лавочники. Рост продаж хот-догов увеличил объёмы выпечки булок, производство кетчупа, горчицы, потребовалось больше водителей для доставки сырья и полуфабрикатов, да и продавцов стало больше. Появились и совершенно новые профессии, переход хот-догов из элитарной пищи в фастфуд открыл дорогу кафешкам быстрого питания. В итоге резко сократилось число мелких лавочников, но количество рабочих мест в городе выросло.
Эффект хот-дога показывает, как работает система саморегуляции рынка, но ничего не говорит о сроках восстановления рабочих мест. А времени на развёртывание фабрик и заводов может уйти больше, чем смогут прожить разорившиеся люди. Примером такого долгого восстановления служит процесс огораживания в XV–XVI вв. В те далёкие времена только начали появляться первые заводы и для обеспечения новых фабрик сырьём крестьян сгоняли с земли и отдавали эту землю под пастбища для скота. А вместо строительства новых рабочих мест был принят закон о бродяжничестве. По новому закону, всех, кто не имеет крова на ночлег, вешали вдоль дорог. Ещё одной катастрофой может обернуться и обратный процесс – чрезмерно быстрый рост производственных мощностей, кризис перепроизводства. Самым ярким примером такого кризиса является Великая депрессия в США. В начале XX в. резкий рост производительности труда вкупе со снижением оплаты труда привели к тому, что у населения не хватало денег на покупку товаров. Сначала пришлось отказаться от дорогих безделушек. Производство дорогих вещей остановили, людей выкинули на улицу. Толпа людей, готовых работать за еду, снизила зарплаты на соседних заводах. Рабочие получили ещё меньше денег, а значит, купили только товары первой необходимости, в результате чего остановили следующие заводы. И так по кругу, пока у людей не стало хватать денег на еду. Еды полно, но купить её никто не может, и производители, чтобы не терять деньги, уничтожали тонны провизии на глазах у голодных людей. Проблема была решена не рыночными методами, а вмешательством государства, которое устроило всех голодающих на стройку дорог за миску супа. Строительство инфраструктуры позволило снизить издержки производителей и перезапустить экономику, и сохранённые на стройках миллионы рабочих вернулись на заводы.
Опасения по поводу того, что из-за ИИ программисты останутся без работы, напоминают страхи луддитов – людей, которые были против внедрения машин на производстве в XIX веке. Луддиты боялись, что ручной труд рабочих заменит бездушная машина. Однако, как показывает история, технологии не только не уничтожили рабочие места, но и создали сотни новых профессий. Люди взамен монотонного физического труда получили больше рабочих мест в профессиях, связанных со сложными механизмами или творчеством. Эти преобразования позволили значительно увеличить число людей, живущих на нашей планете. Так и автоматизация творческой деятельности в стратегической перспективе откроет дорогу к новым более сложным и интересным профессиям.
Автор: Секретёв Александр
[1] Машинный код – один из первых способов создания программ. Программа представляет собой последовательность 0 и 1, которой записываются команды процессора. Команды для разных типов и версий процессоров различаются, что делает такой способ создания программ крайне неудобным.
[2] Ассемблер – язык программирования, в котором команды машинного кода записываются английскими аббревиатурами, что упрощает их запоминание. Разработан в 1947 году.
[3] C – процедурный язык программирования высокой производительности. Разработан в 1969 году. Типовые последовательности машинного кода в нём собраны в команды. Если какая-то часть программы выполняется несколько раз, её записывают один раз, дают ей имя, по которому в дальнейшем обращаются к ней. Программа может работать на любом процессоре, но не в любой операционной системе.
[4] C++ – объектно-ориентированный язык программирования. Создан в 1979 году. Процедуры, работающие с одним и тем же набором данных, соединяясь вместе, образуют объект, и инструкции даются уже не процессору, а объектам.
[5] Java – кроссплатформенный (способный запускаться в разных операционных системах) объектно-ориентированный язык программирования. Создан в 1990 году. Похож на C++, но переводит свои команды не в машинный код, как другие языки программирования, а в промежуточный формат, похожий на машинные коды. Требует установки на компьютер специального программного обеспечения для выполнения промежуточного кода.
[6] Python – язык программирования, развивающий парадигмы кроссплатформенности и объектно-ориентированного программирования. Создан в 1991 году. В нём даже стандартные команды языка уже являются объектами. В отличие от Java он не компилирует программу в промежуточный код, похожий на машинный, а выполняет команды, читая программу построчно.
[7] Библиотека – сборник объектов и процедур, выполняющих какую-то сложную функцию, например перевод аудиофайла в текст, распознавание объектов в видеофайле, сложные математические расчёты, работу с таблицами и т. п.