Большинство первых компьютеров, таких как те, которые работали в подвальной лаборатории Джона фон Неймана при Институте перспективных исследований в Принстоне, обладали примитивным дисплеем: подсветка каждого бита, так что можно было наблюдать, как они переключаются в тот или иной момент[147]
. Можно было наблюдать, как работает программа[148]. Я люблю думать о программировании именно так – как о конкретном процессе, подразумевающем изменение состояния материалов; как о переключающихся битах.Понятно, что если бы инженеры решили попытаться получить больше пользы от этой подсветки, то могли бы появиться и другие способы компьютерного программирования. Только представьте: невнятная примитивная визуальная последовательность переключающихся битов может становиться с каждым разом все лучше до того момента, когда вы сможете рисовать и перерисовывать биты на экране, так что программу можно переделать, даже когда она запущена.
Как это сработает? Как узнать смысл или подтекст нарисованного? Как узнать, какой бит что делает?
Как не дать компьютеру выйти из строя? Как добиться достаточно совершенного нарисованного изображения? Напомню, даже из-за самой незначительной ошибки компьютер может выйти из строя.
Биты не могут появляться в виде ничего не значащей путаницы. Их нужно организовать в виде осмысленных изображений. Этот метод рисования получится выдающимся (простите за каламбур) и крайне ограниченным.
Прошу вас, оставьте на минуту сомнения насчет того, будет ли это практично, целесообразно или хотя бы возможно.
Думаю, что если бы программирование развивалось по этому сценарию, то современное общество было бы совершенно другим. Основную причину сперва будет сложновато понять, но я к ней еще вернусь: когда вы можете видеть биты и управлять ими, вы воспринимаете компьютеры на более физическом и приземленном уровне.
Однако исходный код не приземленный. Он целиком и полностью связан с абстракциями, которые ассоциируются с конкретным языком программирования. Из-за этого нам приходится постоянно оперировать этими абстракциями, так что корифеи цифровой культуры начинают в них верить и, возможно, становятся более уязвимыми, поскольку начинают слишком сильно верить в другие абстрактные сущности, например в искусственный интеллект с самосознанием или идеологии, кажущиеся идеальными.
Если оставить в стороне эти гипотезы, то более конкретное, визуальное и мгновенно редактируемое программирование обходилось бы без режимов и лучше подходило бы для виртуальной реальности. Вы получили бы возможность изменять мир, находясь внутри него. А это куда более забавно!
Но то, о чем я только что рассказал, лишь фантазия о том, что могло произойти. Концепция программирования на основе исходного кода взяла верх.
У исходного кода много привлекательных качеств. Можно зафиксировать состояние программы при каждом тестировании, так что, по крайней мере, в теории тестирование может оказаться более тщательным. (На практике устранять неисправности программного обеспечения остается все так же сложно, но это уже другой вопрос. Для тех, кто не знает: термин «баг программы» произошел, когда виновницей сбоя одной из программ, запущенных на одном из первых компьютеров Хоппер, стала моль, которая пробралась внутрь корпуса.)
Я встречался с Хоппер несколько раз и крайне высоко ценю ее работу – честно говоря, она внушала мне ужас, – но перед нами яркий пример того, как информатика забывает о том, что еще остались неисследованные пути. И никогда не было причин считать, что все программы будут следовать только шаблону, установленному Хоппер.
Уловка
Искусственное разделение на программирование и выполнение кода было побочным эффектом самой идеи текстового кода. Оно нехарактерно для программирования.
Может ли альтернативная история, о которой я рассказал, воплотиться в будущем? Может ли появиться алгоритм взаимодействия с пользователем, который позволит переключать внутри компьютера биты, составляющие программу, пока программа запущена, без необходимости оперировать неизменными абстракциями?
Если бы этот метод был более продвинутым, то программирование могло бы стать более экспериментальным и интуитивным. В свою очередь это позволило бы рассматривать программирование как способ выражения целых миров, систем, переживаний; выражения новых уровней определения, которое мы еще не в состоянии сформулировать. Именно этого я и хотел от компьютеров.
Я называю это амбициозное начинание
Фенотропное программное обеспечение все еще остается экспериментальной идеей. Во время первого рассвета коммерческой виртуальной реальности наблюдался кратковременный всплеск экспериментальной активности. Например, в программном обеспечении виртуальных миров VPL содержимое и правила мира можно было изменять на фундаментальном уровне любым образом, не покидая виртуального мира.