Squeak - это среда для ученого, компьютерного специалиста. eToys - среда для детей, но, к сожалению, не столь понятная, как могла бы быть. Я до сих пор считаю, что мы ее не доработали, не добавив элемент, который мог позволить чисто интуитивно погрузиться внутрь и вынырнуть с физическим пониманием этих впечатляющих идей.
Я до сих пор ношусь с этим так же, как и со всем остальным. Почему я продолжаю заниматься подобными вещами - JavaScript и броузером? Мы уже очень близки к тому, чтобы поместить материал вроде Squeak на веб-страницу, которую можно просматривать любым броузером и с которой можно взаимодействовать каким-нибудь удобным и понятным образом. Это часть общей картины. Уверен, вскоре она изменится. Броузеры должны измениться. Мы возьмем другие языки, не только JavaScript. Я по- прежнему поддерживаю контакт с Аланом и его группой, которые предпринимают новую попытку зайти дальше и решить некоторые из текущих проблем более серьезно. Но подход при этом остается совершенно тем же самым.
Сейбел: Вы упоминаете четыре дисциплины: музыка, графика, математика и текст. Они стары почти как само человечество. Безусловно, у них есть свои впечатляющие идеи вне зависимости от всяких компьютеров: компьютер просто обеспечивает способ их исследовать, что без него могло бы быть сложнее. Есть ли также интересные идеи, внутренне присущие компьютерам? Является ли программирование или компьютерные науки еще одним, пятым фактором, в котором мы можем разобраться только сейчас, уже владея компьютерами?
Ингаллс: Да, собственно, к этому я и подбираюсь. Вот план, который всегда казался мне наилучшим: начиная в одной области с настроем далеко в ней продвинуться, вы переходите затем в другую, менее вам знакомую, и то же самое делаете там. Урок здесь в том, что когда вы переходите к более простым и глубоким структурам, порождающим любую отрасль, то обнаруживаете, что в принципе все они сходны.
Вот алгебра графики: примитивные объекты, суперпозиция переносов, вращений. Или музыка: ноты, временные интервалы, аккорды - то же самое. И это, полагаю, то же самое, что знать, как дует ветер и как вращаются планеты. Это приглашение к исследованию и пониманию того, как все происходит, того, что составляет алгебру - процессов и примитивных объектов. Да, пятый фактор, как вы его называете, существует и взаимосвязан со всеми предыдущими.
Сейбел: Как вы считаете, появятся ли те, кто, преуспев в трех или четырех первых отраслях, затем выучатся благодаря этому программировать? Или это может случиться, только если их интерес пойдет по определенному пути?
Ингаллс: Думаю, все бывает, и это тоже. Тем более что вы оттачиваете их мыслительные способности, знакомя их с предметом и заражая энтузиазмом. Но одни хотят программировать, а другие нет. Например, мой 12-летний сын, по-моему, хочет только делать повороты на 540 градусов на лыжах - что ж, всему свое время и место.
Сейбел: Вернемся в специальные области: как вы тестируете свои программы?
Ингаллс: Это зависит от того, что я делаю. Я всегда стараюсь получить почти немедленную отдачу. И приступая к чему-то новому, всегда думаю, каким образом здесь можно достичь первых успехов. Каждый раз это бывает по-разному. Если бы моя жизнь была более упорядоченной и я работал бы в нормальных командах программистов, я бы полностью был в курсе современных тенденций командного программирования. Но у меня программирование более самопроизвольно, что ли: например, я не могу долго сохранять концентрацию внимания. Если я считаю, что за выходные смогу заставить программу заработать, то для мира я потерян и занимаюсь только этим, игнорируя все прочее. Мне сложно обобщать идеи, разве что скажу так: есть цель, к которой вы хотите прийти, она тем или иным образом вознаградит вас, продемонстрирует, что вы на верном пути, и вы сможете уложиться в нужное время, пока вас не оторвут домашние или рабочие дела.
Сейбел: Допустим, вы начали работать с чем-то, что, по-вашему, принесет хороший результат. Первый тест - приемочный тест: вы рисуете окно на экране или делаете что-то другое? И как насчет более тонких тестов?
Ингаллс: Если вы только что сделали возможным что-то взять, переместить, положить, вам понадобится фреймворк, чтобы с этим работать. Такой ли это фреймворк, чтобы любой другой мог прийти и увидеть, что проводились такие-то тесты? У меня обычно не так. Это своего рода привилегия моего поколения, сейчас уже такое не пройдет. Я старпер, так что никто уже меня не заставит этим заниматься. Но, думаю, то, что я делаю, во многом приближается к такому варианту. Код Squeak, например, был полон комментариев о том, как что выполнить и как что проверить. А во многих тестах BitBlt имеются такие небольшие механизмы, которые берут что-то в одном месте экрана, проводят с этим некие операции и возвращают обратно, и если на экране что-то изменилось, значит, этот механизм не работает, и это написано в комментарии. Мне кажется, это и есть тест.
Сейбел: Поговорим о совместной работе. Группа по исследованию обучения в PARC была известна своей сплоченностью. Как вы сотрудничали в работе непосредственно над кодом?
Ингаллс: Просто постоянно были на связи и периодически вносили беспорядок в чужую работу. Мы никогда не были большой группой, у каждого была своя сфера деятельности. Сегодня очень развито командное программирование, но я, честно говоря, ничего в нем не понимаю. Вот сейчас, например, в Lively Kernel часть, относящуюся к ядру, сделали мы вдвоем с еще одним сотрудником, Кшиштофом Палачем. И мы сразу договорились о разделении сфер нашей деятельности. Да, мы действительно сейчас используем репозиторий кода, и в нашей команде есть другие ребята, которые занимаются более прикладными вещами, ядром совсем немного. И я вижу, что действительно очень удобно иметь общий репозиторий, просто замечательно. Следующий для Lively Kernel шаг - это интеграция с репозиторием: в Lively Kernel можно вносить изменения, но только в работающую версию; они не попадают в репозиторий и не сохраняются на будущее. Это следующий шаг, который мы должны сделать.
Сейбел: Занимались ли вы когда-нибудь парным программированием?
Ингаллс: Сейчас подумаю. Обычно я работал один или в составе команды, но над своей изолированной частью. Но было и много проектов, где я работал вместе с другими, мы много и напряженно отлаживали код в парах.
Сейбел: Существуют ли какие-то общие технологии управления таким сотрудничеством? Когда один постоянно указывает другому, как делать его работу, или наоборот, всегда есть шанс, что в итоге у них ничего не сойдется.
Ингаллс: Либо мы сходились на каком-нибудь интерфейсе, либо я создавал какую- нибудь структуру - незаконченную, но работающую для нашего примера, так что другим было очевидно, куда что вставлять. Или же другие что-то делали так, что уже я понимал, куда должен встать мой кусок. Обычно это бывало таким вот конкретным образом, без разных инструкций, потому что мы часто работали над такими вещами, которые не запишешь. Все определялось нуждами момента.
Сейбел: Вы работали на многих уровнях: от побитового переноса в BitBlt и написания микрокода до довольно высокоуровневого программирования на Smalltalk. Насколько программистам необходимо знать о различных уровнях программного и аппаратного обеспечения, с которым они имеют дело?
Ингаллс: Хороший вопрос. Чтобы думать не по шаблону, нужно выйти за рамки шаблона. Если в вашем обычном подходе к языку нет того, из чего можно извлечь преимущество, надо проявить интуицию, расширить обычные рамки, показать понимание и способность к контролю.
Если говорить о создании языка, то, возможно, вы захотите работать с процессорами, которые вам не очень знакомы; в этом случае вам не надо знать о них ничего, кроме того, как работает кэширование и все такое, - это необходимо для обеспечения нормальной производительности. Думаю, надо остановиться и спросить: “Какие границы я здесь пересекаю?”
Сейбел: Оставим вопрос о том, как много нужно знать, если речь идет о программе. Одни утверждают, что начинать нужно с высокоуровневого языка, чтобы ухватить некие общие идеи. Другие - что начинать надо с ассемблера и двигаться вверх, чтобы полностью понять, что же происходит. Что из этого вам ближе?
Ингаллс: Откровенно говоря, ничего. Я учился так, и мне нравились такие-то вещи.