Великой границей пятьсот лет назад была грамотность. Сегодня она пролегает в программировании. Нынешнее программирование как таковое устареет довольно скоро. Например, больше никто не изучает ассемблеры, поскольку компьютеры лучше людей справляются с ассемблерами; лишь небольшая группа должна знать подробности компилирования ассемблера. Многое из того, что делают сегодня армии программистов, становится такой же обыденностью. У нас нет веских причин писать код Java или код JavaScript. Мы хотим автоматизировать процесс программирования таким образом, чтобы устранить главное в нем из человеческих забот и передоверить машине, автоматизировать как можно сильнее. В итоге уравнивание продолжится, и это кажется мне показательным. В прошлом, если требовалось написать фрагмент кода или программу для решения важной задачи, это подразумевало много хлопот. Вам следовало хотя бы в принципе понимать суть разработки программного обеспечения, на самостоятельное обучение уходили месяцы, либо нанимать программистов, которые разбирались в коде. Словом, издержки были велики.
Сегодня все иначе. Однострочный фрагмент кода уже творит что-то любопытное и полезное. Это позволяет широкому кругу людей, которые не в состоянии заставить компьютеры делать что-то для них, таки заставить компьютеры делать что-то для них. Мне хотелось бы увидеть, как дети по всему миру изучают новые возможности программирования, основанного на знаниях, а затем создают код, настолько же сложный, насколько это возможно для профессионалов. Это осуществимо. Мы достигли той точки развития, когда каждый может научиться программированию, основанному на знаниях, и, что более важно, научиться мыслить вычислительно. Фактическая механика программирования предельно упростилась. Трудно воображать и мыслить вычислительно.
Как обучать вычислительному мышлению? Что касается программирования, это интересный вопрос. Возьмем нанотехнологии. Как мы пришли к нанотехнологиям? Ответ: мы изучили крупномасштабные технологии и резко их уменьшили. Как сделать чип процессора максимально миниатюрным? По сути, мы используем ту же архитектуру, что и в стандартных чипах. Это не единственный подход, который можно использовать. Анализируя способности простых программ, можно предположить, что допустимо брать элементарные их части и с помощью правильного компилятора побудить их к решению интересных задач. Мы еще не занимаемся молекулярными вычислениями, потому что текущие технологии таковы, что понадобится десятилетие на разработку методики. Но у нас уже есть элементы для изготовления универсального компьютера. Пусть мы сами не понимаем, как программировать эти элементы, поиск в пространстве возможных программ позволяет накопить нужные «кирпичики», а затем вступает в дело компилятор. Удивительно, что элементы способны на многое, а этап компиляции не так страшен, как многим кажется.
Простой поиск в вычислительной вселенной и попытка отыскать полезные программные «кирпичики» – это перспективный подход. Более традиционный инженерный подход – умозрительное выяснение способов создания универсального компьютера – намного сложнее. Не хочу сказать, что он вовсе не годится; но я не перестаю восхищаться тем, что мы можем добиваться удивительных результатов через поиск компонентов-«кирпичиков» и последующую их компиляцию. А дальше придется вернуться к вопросу о совместимости человеческих целей с данными в системе.
Меня чрезвычайно интересует, как будет выглядеть мир, когда большинство людей научатся писать код. Вспомним ситуацию лет пятьсот назад, когда только писцы и незначительная часть населения умели читать и писать. Сегодня лишь небольшая часть населения способна писать код. Немалая доля кода, ими написанного, предназначена исключительно для компьютеров. Вы ничего не понимаете, когда смотрите на этот код. Но наступит время, когда в результате усилий ученых (в том числе моих), код достигнет таких вершин развития, что окажется минимальным описанием предполагаемых действий. Этот фрагмент кода смогут понять и машины, и люди.
Кодирование есть форма выражения, как и письмо на естественном языке. Лично для меня отдельные простые фрагменты кода поэтичны – они выражают идеи очень четко и ясно. В них есть эстетическая составляющая, как и в письме на естественном языке. Особенность кода состоит в том, что он подлежит исполнению; с письмом обстоит иначе. Когда вы что-то пишете, кто-то должен это прочитать, и сознание читателя должно усвоить мысли, изложенные автором письма.
Как вообще передавались знания в мировой истории? На нулевом уровне развития единственной формой передачи знаний выступает генетика: потомство организма перенимает у него характеристики. Далее знания могут передаваться через такие способы, как физиологическое узнавание. Новорожденные обладают некой нейронной сетью со случайными связями, и, появляясь на свет, младенец, например, начинает распознавать типы объектов и усваивать знания.
Затем мы переходим на уровень, который является особенностью нашего вида: это естественный язык. Способность представлять знания достаточно абстрактно для того, чтобы мы могли, так сказать, коммуницировать мозг к мозгу, есть, возможно, важнейшее изобретение нашего вида. Именно оно во многом обусловило возникновение нашей цивилизации.
Дальше идет следующий уровень, который, вероятно, однажды получит более завлекательное название. Благодаря программированию, основанному на знаниях, у нас появляется точный и символический способ создать актуальные репрезентации реальных объектов мироздания. Эти репрезентации понятны нам и другим людям, а также компьютерам, в которых код незамедлительно исполняется.
Естественный язык подарил нам цивилизацию, а основанное на знаниях программирование подарит – что? Нежелательный ответ сводится к тому, что оно подарит нам цивилизацию ИИ. Этого хотелось бы избежать, ведь ИИ примутся «болтать» друг с другом, а мы останемся не у дел, в отсутствие некоего промежуточного языка, некоего интерфейса между машиной и нашим сознанием. К чему приведет этот четвертый уровень обмена знаниями? Будь вы пещерным человеком Оггом[235] и зародись на ваших глазах естественный язык, сумели бы вы предугадать грядущее торжество цивилизации? А потому – что мы в силах вообразить прямо сейчас?
В каком-то смысле это развитие вопроса о том, на что станет похож мир, когда большинство людей научатся писать код. Очевидно, что многие тривиальные обстоятельства изменятся: контракты будут составляться в коде, меню в ресторанах будут кодироваться, и т. д. Да, простые условия изменятся. Но изменения затронут гораздо более сложные явления. Рост грамотности, например, привел к становлению бюрократии, которая существовала и раньше, но ряды которой резко пополнились благодаря грамотности – и это обеспечило бо́льшую глубину правительственных систем, к лучшему или к худшему. Как мир кодирования соотносится с миром культуры?
Возьмем школьное образование. При вычислительном мышлении как будет происходить изучение истории? Как оно повлияет на усвоение иностранных языков, общественных наук и прочего? Ответ таков: очень сильно. Представьте, что вы пишете сочинение. Сегодня материал для сочинения типичного старшеклассника уже имеется в наличии, он существует, и его просто надо использовать, ведь ученики обычно не торопятся генерировать новые знания. Но в вычислительном мире все будет иначе. Если ученик имеет представление о кодировании, у него будет доступ ко всем оцифрованным историческим данным – и он обязательно отыщет что-то новое. После чего напишет сочинение о том, что узнал. Важность программирования, основанного на знаниях, заключается в том, что оно больше не стерильно, оно обладает знанием о мире, связанное воедино языком, на котором составлен код.
Вычисления распространены по всей Вселенной: в турбулентной жидкости, производящей некую сложную модель потока, в небесной механике планетарных взаимодействий, в человеческом мозге. Но имеют ли вычисления цель? Этот вопрос можно задать применительно к любой системе. Есть ли цель у погоды? А у климата?
При взгляде на Землю из космоса можно ли сказать, что на планете имеется нечто, обладающее целью? Некая цивилизация? Через Большое Соленое озеро в штате Юта пролегает прямая линия. Это своего рода барьер, разделяющая озеро на две половины дамба, по обе стороны от которой водоросли разного цвета, и сверху линия производит внушительное впечатление своей прямизной. В Австралии есть дорога, длинная и совершенно прямая. По Сибири тянется железная дорога, на которой зажигаются огни, когда очередной поезд останавливается на очередной станции. Словом, из космоса видны и прямые линии, и какие-то узоры.
Но сочтут ли это признаком наличия некой цели на Земле при взгляде из космоса? Кстати, если уж на то пошло, как мы узнаем о присутствии инопланетян где-то там? Как мы узнаем, что получаемый нами сигнал обозначает какую-то цель? Пульсары обнаружили в 1967 году, когда наши приборы каждую секунду улавливали импульс радиоизлучения. Сразу предположили, что этот сигнал посылает какой-то маячок. Ведь кто или что еще могло посылать периодический сигнал? Но выяснилось, что источником сигналов является вращающаяся нейтронная звезда.
Один из критериев, потенциально пригодных для оценки целеполагания, заключается в том, что мы пытаемся определить, является ли какой-то объект необходимым условием достижения цели. Но следует ли отсюда, что данный объект создавался именно для этой цели? Мяч катится вниз по склону из-за воздействия гравитации. Или потому, что того требует принцип наименьшего сопротивления. Обычно выдвигаются такого рода объяснения для действия, которое выглядит целенаправленным, – объяснение механистическое и объяснение телеологическое. По сути, все наши нынешние технологии не пройдут проверку на необходимость для достижения цели. Большая часть наших изобретений представляют собой плоды технологической эволюции, их никак не назовешь необходимыми для реализации наших (как вида) «исконных» целей. Взгляните на процессорный чип: в природе не существует потребности добиваться того, на что способен этот чип.