Блог

Конец программирования

Я достиг совершеннолетия в 1980-х, программируя персональные компьютеры, такие как Commodore VIC-20 и Apple, у себя дома. Параллельно я продолжал изучать информатику (CS) в колледже, что в итоге привело меня к получению докторской степени. Программное обеспечение «Беркли» являлось основной частью моей профессиональной подготовки и было связано с тем, что я буду называть «классической» компьютерной наукой: программированием, алгоритмами, структурами данных, системами, языками программирования.
В классической компьютерной науке конечная цель — свести идею к программе, написанной человеком — исходному коду на таком языке, как Java, C++ или Python. Каждая идея в Classical CS — независимо от того, насколько она сложна или изощренна, от алгоритма соединения с базой данных до умопомрачительно бестолкового консенсусного протокола Paxos, — может быть выражена в виде удобочитаемой и понятной человеку программы.
Когда я учился в колледже в начале 1990-х, мы все еще находились в стадии «замерзания» с ИИ, там доминировали только классические алгоритмы. Моей первой исследовательской работой в Корнельском университете была совместная работа с Дэном Хаттенлохером – лидером в области компьютерного зрения (а ныне деканом Шварцмановского вычислительного колледжа Массачусетского технологического института).
На курсе компьютерного зрения господина Хаттенлохера, еще с позиции доктора философии в 1995 году или около того, мы ни разу не обсуждали что-либо похожее на глубокое обучение или нейронные сети.
Везде использовали только классические алгоритмы, такие как обнаружение границ Кэнни, оптический поток и хаусдорфовы расстояния. Глубокое обучение находилось совсем в зачаточном состоянии и даже не считалось заслуживающим внимания, не говоря уже о CS (исходный код для языков программирования C# и C# Net).

Конечно, это было 30 лет назад, и с тех пор многое изменилось, но одна вещь, которая на самом деле не изменилась, это то, что CS преподается как дисциплина, в основе которой лежат структуры данных, алгоритмы и программирование.
Я буду удивлен, если через 30 или даже 10 лет мы все еще будем приближаться к CS таким же образом. На самом деле, я думаю, что CS как отрасль ждут довольно серьезные потрясения, к которым немногие из нас действительно готовы.
Программирование устареет. Я считаю, что традиционная идея «написания программы» находится на грани исчезновения, и действительно, для всех, кроме очень специализированных приложений, большая часть программного обеспечения в том виде, в каком мы его знаем, будет заменена системами ИИ, которые обучаются, а не программируются. В ситуациях, когда нужна «простая» программа (в конце концов, не все должно требовать модели с сотнями миллиардов параметров, работающих на кластере графических процессоров), эти программы сами будут генерироваться ИИ, а не кодироваться вручную.

Я не считаю эту идею сумасшедшей. Несомненно, самые ранние пионеры информатики, вышедшие из (относительно) примитивной пещеры электротехники, твердо верили, что всем будущим ученым-компьютерщикам потребуется глубокое понимание полупроводников, двоичной арифметики и проектирования микропроцессоров, чтобы понимать программное обеспечение. Перенесемся в сегодняшний день, и я готов поспорить на хорошие деньги, что 99% людей, которые пишут программное обеспечение, почти не имеют ни малейшего представления о том, как на самом деле работает процессор, не говоря уже о физике, лежащей в основе конструкции транзистора. Более того, я считаю, что компьютерщики будущего будут настолько далеки от классических определений «программного обеспечения», что им будет трудно перевернуть связанный список или внедрить быструю сортировку. (Я не уверен, что помню, как реализовать Quicksort самостоятельно.)

Помощники по программированию на основе ИИ, такие как CoPilot, лишь поверхностно касаются того, что я описываю. Мне кажется совершенно очевидным, что все программы в будущем, в конечном счете, будут написаны ИИ, а людям будет отведена в лучшем случае контролирующая роль. Любому, кто сомневается в этом прогнозе, достаточно взглянуть на очень быстрый прогресс, достигнутый в других аспектах создания контента ИИ, таких как создание изображений. Разница в качестве и сложности между DALL-E v1 и DALL-E v2, о которых было объявлено всего 15 месяцев спустя, ошеломляет. Если я чему-то и научился за последние несколько лет работы в области ИИ, так это тому, что очень легко недооценить силу все более крупных моделей ИИ. Вещи, которые еще несколько месяцев назад казались фантастикой, быстро становятся реальностью.

Так что я говорю не только о том, что CoPilot на Github заменяет программистов. Я говорю о замене всей концепции написания программ обучающими моделями. В будущем студентам компьютерных наук не нужно будет изучать такие рутинные навыки, как добавление узла в двоичное дерево или программирование на C++. Такое образование устареет, как обучение студентов технических специальностей использованию логарифмической линейки.

Инженеры будущего в несколько нажатий клавиш запустят экземпляр модели с четырьмя квинтиллионами параметров, которая уже кодирует весь объем человеческих знаний; экземпляр этот будет готов к любой задаче, требуемой от машины. Основная часть интеллектуальной работы, направленной на то, чтобы заставить машину делать то, что нужно, будет заключаться в том, чтобы придумать правильные примеры, правильные данные для обучения и правильные способы оценки процесса обучения. Достаточно мощные модели, способные обобщать посредством обучения за несколько шагов, потребуют лишь нескольких хороших примеров выполнения задачи. Массивные наборы данных, созданные человеком, в большинстве случаев уже не понадобятся, и большинство людей, «обучающих» модель ИИ, не будут запускать циклы градиентного спуска в PyTorch или что-то подобное. Они будут учить на собственном примере, а все остальное сделает машина.

В этой новой компьютерной науке — если мы вообще назовем ее компьютерной наукой — машины будут настолько мощными и уже будут знать, как делать такое множество вещей, что эта область будет выглядеть не столько как инженерное дело, сколько как образовательное; то есть, как лучше всего обучать машину, мало чем отличаясь от науки о том, как лучше всего обучать детей в школе. Однако, в отличие от (человеческих) детей, эти системы ИИ будут управлять нашими самолетами, нашими энергосистемами и, возможно, даже целыми странами. Я бы сказал, что подавляющее большинство классических CS становится неактуальным, когда мы фокусируемся на обучении интеллектуальных машин, а не на их непосредственном программировании. Программирование в общепринятом смысле фактически умрет.