Мы также сделали большой шаг назад в плане безопасности. Системы с разделением времени уже начали понимать, как защищать систему и пользователей друг от друга. С переходом на ПК все изменилось: у вас был собственный компьютер, и все, что работало на нем, имело одинаковые права доступа и могло делать что угодно, но потом оказалось, что не все программы, работающие на вашем компьютере, работают в ваших интересах. Мы до сих пор боремся с этим. Да, мы видим множество улучшений в операционных системах персональных компьютеров, но все еще не достигли уровня передовых систем с разделением времени. А сколько лет уже прошло!
Сейбел: О каких конкретно системах вы говорите?
Крокфорд: В MULTICS были интересные возможности по взаимодействию процессов, там было несколько адресных пространств, способных взаимодействовать, но не имевших доступа к содержимому друг друга. Это отправная точка, необходимая для кооперативных вычислений. Сейчас мы думаем, как реализовать это в браузерах. А ведь прошло уже огромное количество времени. Сейчас мы возвращаемся к решениям, внедренным уже тогда.
Сейбел: Я заметил, что нечто похожее происходит и с языками программирования: программы для ПК писались на языке ассемблера, поскольку даже Си был для него слишком высокоуровневым. И только сегодня мы переходим к языкам, по мощности приближающимся к Smalltalk и Лиспу, существовавшим в момент появления ПК. Интересно, программисты задумаются над историческими уроками или так и будем продолжать изобретать велосипед?
Крокфорд: По-моему, мы, к сожалению, уделяем истории слишком мало внимания. И я разочарован, видя, как нынешние программисты совершенно не хотят знать, откуда что взялось. Они просто считают, что все это придумал какой-то комитет по стандартизации, снабдив их набором инструментов и языков, которыми надо лишь правильно пользоваться.
Есть удивительные истории о том, как все это возникло, вследствие чего, кто это сделал, что считается ошибкой сейчас и что обязательно будет считаться ошибкой со временем. Порой я считаю себя археологом программного обеспечения: понемногу у меня скопилась коллекция недооцененных технологий, вещей, которые я считаю просто великолепными и которые намного превосходят то, что мы делаем сегодня. Я по-прежнему надеюсь, что мы заново откроем для себя все это, по достоинству оценим и извлечем из этого пользу, — но если такое и произойдет, то не скоро. Люди зациклены на том, что есть здесь и сейчас, и сдвинуть их с места нелегко.
Сейбел: Назовите некоторые из этих технологий.
Крокфорд: Ну, скажем, уже упоминавшиеся Лисп и Smalltalk. Отличные вещи; некоторые из тех идей переходят в современные языки, и мы, работая с JavaScript, стараемся воскресить те старые идеи. Правда, в этом языке уже есть многое из того. Лексические границы и функции высшего порядка — это блестяще! А теперь мы пытаемся понять, как внедрить в него больше полезных свойств Smalltalk и Scheme, не нарушая структуру языка. Можно возразить, что лучше бросить все, над чем мы работаем, и просто вернуться к Smalltalk и Scheme; возможно, так действительно было бы лучше, но такой вариант не рассматривается.
Чем больше мы работаем с мэшапами, тем чаще нам требуется импортировать откуда угодно код — который мы никогда не сможем проверить, — и запускать его у себя. Это новый вид программирования. Раньше такого не было. Я считаю, что это — будущее программирования. Мы впервые делаем это в JavaScript, у которого много недостатков, но именно к таким вещам он приспособлен.
Давайте посмотрим на основные этапы истории программирования. Мы начали с машинных кодов, потом совершили скачок к символьному языку ассемблера, потом к высокоуровневым языкам, затем к структурному программированию и наконец к объектно-ориентированному. И каждый такой скачок происходил один раз за поколение.
А вот очередной скачок запаздывает. Мы уже давно застыли на объектно-ориентированном программировании. Можно возразить, что это был Smalltalk-80. Можно пойти и еще дальше вглубь времен, но все равно мы сидим на этих идеях слишком долго.
Думаю, очередной скачок — как бы он ни назывался — будет связан с мэшапами, когда мы сможем брать куски разных программ, соединять их и тут же получать новую программу. Уже десятилетия ведутся разговоры о программной модели, в которой программы собирались бы наподобие конструктора LEGO. Этого пока не произошло, но уже начинает происходить в JavaScript — в наименее ожидаемом месте.
Сейбел: Как вы на собеседовании распознаете хорошего программиста?
Крокфорд: Сейчас я определяю это по чтению кода. Я предлагаю соискателю принести фрагмент его лучшего кода и пройтись по нему.
Сейбел: Что конкретно вы в нем ищете?