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