Чтение онлайн

ЖАНРЫ

Кодеры за работой. Размышления о ремесле программиста

Сейбел Питер

Шрифт:

Вот тогда я и научился программировать всерьез. Мой научный руководитель говорил: “Тебе надо бросить диссертацию по физике и заняться компьютерами, раз ты так их любишь”. Я возражал, что хочу закончить ее, если уж начал. Но он был прав, как видим.

Сейбел: Так вы написали диссертацию или нет?

Армстронг: Нет. У меня закончились деньги, и я поехал в Эдинбург. Когда я изучал физику, то, как и другие, занимался в физической библиотеке. В уголке там прятался стеллаж с компьютерными книгами. Среди них были четыре коричневых тома под названием “Machine Intelligence” (Машинный интеллект), изданные отделением машинного интеллекта Эдинбургского университета. Я в принципе изучал физику, но с жадностью поглощал эти книги и думал: “До чего же

занятно!” Поэтому я написал Дональду Мичи, который возглавлял это отделение, о том, что все это мне очень интересно, и спросил, нет ли у него какой-нибудь работы. Мне пришел ответ. Мичи писал, что работы пока нет, но он был бы рад познакомиться, посмотреть, кто я такой.

Через несколько месяцев Мичи не то позвонил, не то написал мне, что в ближайший вторник будет в Лондоне и хотел бы встретиться со мной. Так как он пересаживался на эдинбургский поезд, то предлагал увидеться на вокзале. Мы встретились, и Мичи сказал: “Хм, здесь не очень-то поговоришь - пойдемте в паб”. Мы поболтали в пабе, и чуть позже он написал мне: “У меня в Эдинбурге есть место в лаборатории, не хотите ли поработать?” Я переехал в Эдинбург и стал помощником Мичи по исследовательской части. Вот так я бросил физику ради компьютерной науки.

Во время Второй мировой Мичи работал с Тьюрингом в Блетчли-парке, и ему достались все бумаги Тьюринга. У меня был стол в библиотеке Тьюринга, так что я сидел среди тьюринговских бумаг. Год я проработал в Эдинбурге. Потом все там рухнуло. Дело в том, что правительство поручило математику Джеймсу Лайтхиллу выяснить, как в Эдинбурге обстоят дела с искусственным интеллектом. Лайтхилл выяснил и заявил, что ничего коммерчески ценного из этого не вырастет.

Вообще, все это напоминало гигантский детский манеж. Я был членом-основателем Британской робототехнической ассоциации, и нам казалось, что все это - дело чрезвычайной важности. Но те, кто финансировал нашу работу, не хотели и слышать о роботах! Где-то около 1972 года финансирование прекратилось. Народ стал говорить: “Что ж, занятная была работа, теперь надо искать что-то другое”.

Итак, надо было возвращаться к физике. Я приехал в Швецию и стал заниматься физическими компьютерными программами в научной ассоциации EISCAT. Мой начальник, старше меня, пришел из IBM; я должен был разрабатывать спецификацию, аон- реализовывать ее. Мы спорили по этому поводу. Он говорил: “Плохо то, что у нас нет описания задания и подробной спецификации”. А я отвечал: “Так это же прекрасно, что нет описания, - можно самому определять задание для себя”. Через год он ушел, а я занял его место - место ведущего разработчика.

Я спроектировал то, что сейчас бы назвали прикладной операционной системой, то, что работает как надстройка над обычной ОС. К тому времени компьютеры уже заметно подешевели. У нас были норвежские NORD-10 - кажется, они задумывались для конкуренции с PDP-11.

Там я провел почти четыре года, а потом получил работу в Шведской космической корпорации, разработал еще одну прикладную операционную систему для управления “Викингом”, первым шведским спутником. Проект был интересный. Я работал на машине, названия которой не помню, но это был клон компьютера Amdahl. Только строковые редакторы, никаких полноэкранных. Все программы хранились в одном каталоге. Не больше десяти букв в имени файла, не больше трех в расширении. Плюс компилятор Фортрана или ассемблер - вот и вся система.

При этом я думаю, что все эти современные штуки с наворотами вряд ли делают вас продуктивней. Как работа может улучшиться при иерархической файловой системе? Как бы то ни было, программы создаются главным образом в голове. Мне кажется, что работа с такой довольно простой системой дисциплинирует мышление. Если все файлы надо складывать в один каталог, нужна строжайшая дисциплина. Если нет системы управления версиями, нужна строжайшая дисциплина. И если работать дисциплинированно, то, по-моему, нет особой нужды ни в иерархической файловой системе, ни в системе управления версиями. Они не решают главную проблему. Пожалуй, с ними удобнее работать вместе нескольким людям. Если же работать одному, то разницы я не вижу.

Кроме

того, сейчас у нас что-то вроде избытка выбора. У меня имелся только Фортран - помнится, не было даже консольных скриптов. Командные файлы для запуска программ, компилятор Фортрана - и все! Ну и ассемблер, наверное, если кому-то он был нужен. Никакого мучительного выбора, как сейчас. Думаю, быть сегодня молодым программистом просто жутко: двадцать языков, десятки фреймворков и операционных систем - можно погибнуть, выбирая. А в то время - ничего подобного. Просто начинаешь работать, потому что язык и программы выбирать не приходится. Просто берешь и работаешь.

Сейбел: Разница еще и в том, что сегодня не понять, как устроена система сверху донизу. Проблема не только в выборе, но и в том, что не во всех используемых “черных ящиках” хочется разбираться.

Армстронг: Ну да. Если “черные ящик” работает неважно и надо что-то в нем подкручивать, то легче взять и написать все самому. А вот что точно не работает, так это повторное использование кода. С этим совсем плохо.

Сейбел: Вы создали не только Erlang, но и Open Telecom Platform - платформу для разработки приложений. Что вы скажете о ее многократном использовании?

Армстронг: В какой-то мере это возможно. Но возникает все та же проблема. Если эта платформа полностью решает вашу задачу, если какой-нибудь программист, ничего не знающий о структуре ОТР, посмотрит на нее через несколько лет и скажет: “Вот именно то, что мне нужно”, - отлично, вы уложились в эту меру повторного использования. Если же этого не случится, проблема останется.

Не так давно мне говорили: “Все это как-то искусственно, мы все время стараемся впихнуть код в этот ОТР”. Я отвечал: “Ну что ж, переделайте ОТР”. Но ведь этого не сделаешь. При этом фреймворк - всего лишь программа, довольно простая по устройству. Действительно простая. Я залезаю в нее, и она делает то, что нужно этим людям, после чего они соглашаются: “И правда, просто”. Но при этом заявляют: “Наши менеджеры не хотят, чтобы мы возились с фреймворком”. Ну так назовите это по-другому, и все.

Сейбел: А как по-вашему, реально ли на самом деле вскрыть все эти “черные ящики”, заглянуть внутрь, понять, как они работают, и приспособить их для своих нужд?

Армстронг: С годами я, кажется, все чаще допускаю вот эту типичную ошибку: боюсь вскрыть “черный ящик”. Он кажется мне таким непроницаемым, таким сложным, что я не хочу открывать его. Один-два я все же открыл; я хотел сделать оконную графическую программу для Erlang и подумал: “А не запустить ли ее на X Windows”. Что такое X Windows? Это сокет с протоколом поверх. Открываешь сокет и транслируешь через него сообщения. Зачем библиотеки? Erlang основан на сообщениях. Идея в чем? Вы посылаете сообщения по какому-то адресу, и там что-то делается. То же и в X Windows - у вас есть окно, вы посылаете сообщение, и начинается выполнение. Если же вы делаете что-то в окне, сообщение вам возвращается. Очень похоже на Erlang. Однако программирование в X Windows происходит при помощи библиотек с обратными вызовами. Это не философия Erlang. Послать сообщение, чтобы начала выполняться команда, - вот философия Erlang. Итак, оставайтесь подключенными и обращайтесь непосредственно к сокету, без библиотек.

И знаете, это очень легко. Х-протокол принимает 80-100 сообщений, а вам нужно, скажем, только 20. Вы отображаете их в Erlang, стоит чуть поколдовать - и вы можете отправлять сообщения прямо в окна, а те уже займутся всем. К тому же это быстро работает. Правда, выглядит не очень - я мало заботился о графике, о внешнем виде, над этим надо еще поработать. Но главное - это легко.

Кроме того, я создал программу верстки, где границей абстракции, которую я перешел, был PostScript. Подходя к этой границе, боишься ее пересекать, поскольку думаешь, что за ней что-то невероятно сложное. Но и тут все оказывается легко. Это язык программирования. Хороший язык программирования. Границу абстракции пересечь легко, и это очень полезно.

Поделиться с друзьями: