Норвиг: Я хранил в каждой из ячеек ноль или единицу, а мне нужно было хранить где-то больше информации. И тогда я сказал: «Можно же хранить другие числа». Даже не помню, сделал ли я битовое хранилище. Кажется, я обошелся числами — скорее десятеричными, чем двоичными, потому что двоичные нам преподавали плохо. Потом я еще добавил другие признаки — повторяется ли число, и если да, то с какой периодичностью. С одним предыдущим поколением этого не сделать.
Сейбел: В начале своей программистской карьеры вы что-нибудь делали, чтобы улучшить свои навыки? Или просто программировали?
Норвиг: Просто программировал. Конечно, я делал что-то просто для удовольствия, особенно на младших курсах, когда мог не сильно заботиться о расписании. Я думал: «Вот интересная задача, попробую-ка ее решить». Не потому что задали, а просто для удовольствия.
Сейбел: Вы изучали компьютеры в колледже, но по компьютерным наукам не специализировались?
Норвиг: Когда я поступал, компьютерные курсы были в ведении факультета прикладной математики. Когда я заканчивал колледж, уже был отдельный компьютерный факультет, но я специализировался по математике. Пойти на компьютерный факультет значило специализироваться по программам IBM. Надо было изучать их язык ассемблера, их операционную систему OS/360 и так далее. Не очень-то увлекательно. Я ходил на лекции, которые мне нравились, но погружаться во все это не хотел.
После колледжа я два года проработал в Кембридже, в одной компании, выпускавшей ПО. Потом я подумал: «Колледж надоел мне за четыре года, работа — за два, значит, колледж я люблю вдвое больше».
Сейбел: Чем вы там занимались?
Норвиг: Они разрабатывали инструменты для проектирования программ, а также занимались консалтингом. Основатели компании работали в Дрейперовской лаборатории в Кембридже над проектом «Аполлон» и еще над чем-то. Поэтому у них были связи в ВВС и правительственные заказы. У них был интересный взгляд на то, как проектировать программы. Я не очень верил в саму идею, но это было занятно.
Одним из проектов была программа построения блок-схем — она должна была анализировать готовую программу и генерировать для нее блок-схему. Отличная мысль, потому что блок-схемы нужны. Но на самом деле их всегда рисуют не до, а после написания программ. Эта программа была умная, потому что умела работать с частичной грамматикой, так что при работе с синтаксически некорректной программой пропускала те ее части, которые не могла разобрать. Она должна была уметь разбирать, к примеру, операторы IF, поскольку те образовывали разные блоки, но по поводу других частей говорила: «Сбросим это все в один блок». И вот мы получили контракт на разработку, в котором было указано, что программа должна работать под UNIX. Мы одолжили машину в Массачусетском технологическом институте и применяли для компилятора все инструменты UNIX — yacc и так далее. В последний момент нам сказали: «Нет, использоваться будет VMS». Так что никакой уасс мы уже не могли применять, но решили, что он нам и не нужен — ведь мы брали его только для составления таблиц, а это мы уже сделали.
Сейбел: Пока грамматика не меняется, все в порядке.
Норвиг: Да, так что мы поставили программу, заказчики были счастливы, а потом, разумеется, грамматика изменилась. У нас больше не было доступа к машинам с UNIX. Мне пришлось править грамматику, роясь в таблицах, и я решил: если вот здесь у нас переход в новое состояние, я создам свое состояние, и переход будет к нему.
Сейбел: Это было правильное решение? Вы не думали о том, чтобы просто написать новый парсер?
Норвиг: Наверное, так и надо было поступить. Но ведь я сделал лишь одну небольшую правку.
Сейбел: А не получилось так, что им каждые три недели приходилось сталкиваться с очередным изменением в грамматике?
Норвиг: Я тогда уже ушел в магистратуру, и это уже была не моя проблема.
Сейбел: Уже не ваша... Итак, вы защитили диссертацию. Вы бы хотели, чтобы ваше обучение программированию шло по-другому?
Норвиг: В конце концов я занялся промышленной разработкой ПО. Возможно, стоило заняться этим раньше. Постепенно я всему научился, но много времени провел в колледже и магистратуре. Правда, мне нравилось, так что ни о чем не жалею.
Сейбел: А чему вам пришлось учиться, если говорить о промышленной разработке ПО?
Норвиг: Планировать работу и делать так, чтобы довольны были все — разработчики, клиенты, менеджеры. В магистратуре ведь все это не нужно — просто приходи к своему руководителю время от времени.
Важнейший шаг — переход от индивидуальной работы к командной: начинаешь понимать, как люди взаимодействуют друг с другом. Этому тоже не учат в колледже. Сейчас в некоторых колледжах обратили на это внимание, но в мои времена к командной работе относились плохо — считали ее жульничеством.
Сейбел: Какие навыки, кроме умения писать код, нужны тем, кто приходит в индустрию ПО?