Сейбел: Вы когда-нибудь считали это упущением? Не было желания получить более систематическое образование?
Завински: Да, были времена, особенно в Lucid, когда я осознавал, что все, о чем говорят эти парни, покрыто для меня мраком, потому что это никогда мне не требовалось и прошло мимо. Потом я освоил терминологию, разобрался в общих чертах, о чем они говорят, и немного читал, когда что-то нужно было узнать. Конечно же, иногда, особенно в молодости, я говорил себе: «Господи, я же ничего не знаю». Просто минутная слабость, но был и испуг. Мальчишка среди всех этих парней с учеными степенями — «Ааааа, я ничего не знаю! Я идиот! Что я здесь делаю?»
Моя жизнь была бы иной, если бы я проучился подольше. Но в тот момент я мог поступить только так, как поступил.
Сейбел: А бывало наоборот — когда вы чувствовали, что в настоящем программировании понимаете гораздо лучше окружающих вас компьютерных ученых?
Завински: Да, причем довольно часто. Но без этих мыслей вроде «Вы ребята выбрали не тот путь» или «Нас просто интересуют разные вещи». Я не хочу быть математиком, но математиков критиковать не собираюсь.
Весьма странно, что люди часто путают эти профессии. Они думают, что разработчик с огромной теоретической базой размышляет точно так же, как разработчик настольных приложений. У них мало общего.
Сейбел: Вы по сути самоучка. Что вы можете посоветовать программистам-самоучкам?
Завински: Тут все не так просто, поскольку мир сильно изменился. Я всегда странно себя чувствую, когда заходит разговор на тему «Как это было у меня». Я не знаю, правильно ли я тогда поступил. А люди всегда воспринимают это в смысле «Делай, как я».
У меня это вышло случайно. Так получилось, вот и все. Я принял решения, которые привели к другим решениям, и вот результат.
Я то и дело получаю электронные письма примерно такого содержания: «Я хочу стать программистом, что мне делать?» Или: «Идти мне в колледж или нет?» Что я могу ответить? В 1986 году я бы дал однозначный ответ. Но сегодня никто не сможет пойти по моему пути, потому что его больше нет.
Десять лет назад я бы говорил, что перво-наперво следует изучить язык ассемблера. Нужно осознать, как работает компьютер. Так ли важно это сейчас? Не знаю. Может быть, да. А может, и нет. Может, через десять лет все программное обеспечение будет представлять собой веб-приложения или распределенный код, выполняемый на арендованных кластерах, части которого, находясь на десятке серверов Google, порождают собственные копии и воссоединяются после получения результатов. Нужно ли будет для этого знать ассемблер? Или все настолько абстрагируется, что это уже будет неважно? Я не знаю.
Я был поражен, когда узнал, что люди получают дипломы программистов, не написав ни строки на Си. Начав с Java, они там и остались. Это кажется неестественным и неправильным. Но откуда мне знать, правильно это или нет? Может, дико думать: «А мы в свое время программировали с помощью девятивольтовой батареи и твердой руки!»
Сейбел: А что скажете о книгах? Есть ли книги по компьютерным наукам или программированию, которые должен прочесть каждый?
Завински: Я читал их не так много. Я всегда рекомендую книгу «Structure and Interpretation of Computer Programs»[15], которая многих пугает, потому что там много о Лиспе. Но я думаю, что она действительно учит программированию, а не конкретному языку. Мне кажется, что многие курсы для начинающих делают упор на синтаксис. Я видел это в старших классах и на вводных курсах, когда недолго учился в Карнеги-Меллоне.
Они обучают не программированию, а тому, куда поставить точку с запятой. Это отталкивает людей от программирования, потому что это не самая интересная его часть. Даже для тех, кто знает, что делает.
Была еще книга — как же она называлась? — про отладку, ее написал кто-то из Microsoft. О том, как эффективно использовать утверждения. Помню, мне она показалась стоящей, но не потому, что я узнал из нее много нового, а потому, что именно эту книгу хочется дать прочесть идиоту-коллеге.
Была и еще одна книга, которую все считали величайшим трудом своего времени: «Design Patterns»[16]. По-моему, отстой. Там учили программировать методом «вырезания и вставки». Вместо того чтобы подумать над своей задачей, берешь сборник рецептов, ищешь там что-то более-менее похожее и просто пытаешься это воспроизвести. Это не учебник программирования, а книжка-раскраска. Но, похоже, многим она нравилась. И при встрече они перекидывались словечками из этой книги — такой паттерн, сякой паттерн. А вы о чем — о цикле? Ясно.
16
Гамма Э. и др. «Приемы объектно-ориентированного проектирования. Паттерны проектирования». — СПб.: Питер, 2007.