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

ЖАНРЫ

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

Сейбел: Наверное, почти у каждого программиста есть книга Кнута «The Art of Computer Programming» [68] . У одних она просто стоит на полке, другие используют ее постоянно. А кое-кто вообще прочитал ее от корки до корки и знает назубок. Собственно, вы-то общались с Кнутом в Стэнфорде. Вы читали книгу?

Ингаллс: Мне нравилось работать с Доном, один семестр я посещал его курс по MIX в Стэнфорде, и это было очень полезно. Думаю, мы с Доном серьезно отличаемся друг от друга, но что мне в нем нравится, так это то, что у него отличный математический ум, при этом он любит и глубоко погружаться в мелочи, то есть в прагматическую

сторону вещей. Я тоже люблю прагматизм, но мне недостает строгости подхода Дона.

68

Дональд Э. Кнут «Искусство программирования». — Вильямс, 2008 г.

Я по образованию физик, и для меня проблемы, над которыми я работаю, выглядят физическими задачами. Говоря о других перспективах программ, я представляю их себе как вещи, которые можно потрогать — и почувствовать ответную вибрацию.

Возьмем то, как он работал над ТеХ: все это было математически выверено, красиво и элегантно. Сравним с этим, например, первые движки Smalltalk: они были сделаны почти как попало. Я просто свел вместе все, что было нужно для конкретной цели. Возможно, этому предшествовало несколько неудачных опытов. Изначально я хотел сделать математическую модель, может, мы ее даже и сделали, но в итоге все получилось не так, как ожидалось.

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

Сейбел: Как вы считаете, в каком объеме программистам необходима математика? Дейкстра заявил, что компьютерные науки — просто отрасль математики. А понимание «Искусства программирования» требует недюжинного знания математики.

Ингаллс: Нужно иметь логический склад ума. Но я провел много времени в Виргинии, в сельской местности, когда учился работать с компьютерами. Я всегда думал, что если бы захотел основать компьютерную компанию в горах Виргинии, то знал бы, что делать. За исключением заумных элементов, математика совсем не так важна для программирования, как логика и интуиция.

Большая часть программирования, на мой взгляд, скорее относится к архитектуре: то, как графика взаимодействует с моделями, то, как нужно кэшировать или обновлять информацию. Это не заумная математика. То есть я действительно считаю, что программирование — во многом одна из отраслей математики. На мой взгляд, компьютеры очень важны в том числе и потому, что позволяют математике быть синтетическим, а не только аналитическим искусством. То, чем я так люблю заниматься день за днем, безусловно, имеет отношение к математике, но это наука творческая, порождающая, синтетическая.

Сейбел: Вы сказали, что не очень-то любите читать. Есть ли тем не менее какие-то книги, которые вы могли бы порекомендовать?

Ингаллс: Нет. Уверен, что тут я в меньшинстве. Я и в детстве читать не любил. Иногда я читаю очень тщательно и не прерываясь, пока не закончу. Конечно, я могу назвать несколько статей, и, вероятно, некоторые из них выросли потом в книги. Одна из них — это статья Вэла Шорра о META II. Потом есть книга о Lisp 1.5. Есть еще APL, но книга Айверсона, по-моему, не лучшее пособие для обучения. Пусть ее математики читают. Даже не помню, что я про это читал, но мне понравилось. Думаю, вместо чтения книги можно потратить время на какой-нибудь язык. Например, на Smalltalk.

Сейбел: Вы все так же любите программировать, как и тогда, когда начинали?

Ингаллс: Да, я люблю само

программирование. Последние пару лет были интересны, потому что я оторвался от той среды, к которой так привык, то есть Smalltalk и затем Squeak, где просто замечательный инструментарий. Пришлось сделать небольшой шаг назад, работая с JavaScript в браузерах и в обычных средах разработки. В итоге иногда отладка занимала у меня больше времени, чем я привык, но общий процесс появления идеи и воплощения ее в жизнь — это то, чем я продолжаю наслаждаться.

Сейбел: Как вы считаете, программирование — удел молодых?

Ингаллс: Нет, не думаю. Самое важное — это иметь способности к исследованию того, что происходит, и ту бесконечную энергию, которой, кажется, у меня больше нет. Но я все еще люблю взять проблему, посидеть над ней и сделать так, чтобы все заработало. Вот такая аналогия: я стал учиться играть на фортепьяно сравнительно поздно. Мне говорили: «О, вам надо было раньше начать, вы так быстро все схватываете». Хотя далеко я не продвинулся, но могу сделать вывод, что неверно, будто бы в молодости обучение всегда дается проще; у них просто больше времени. Когда я тратил достаточно времени, прогресс был.

Примерно то же самое я думаю и о программировании. Когда я оглядываюсь назад, на свою молодость, то понимаю, что тогда у меня времени было сколько угодно. Работай себе и работай. Сейчас же в моей жизни происходит и многое другое, у меня есть обязанности, которые не исчерпываются программированием. Это несколько отвлекает.

Сейбел: Программирование требует времени, но не нужны ли для него также и трудолюбие, и концентрация? Говорят, что это непрерывный процесс, что если отвлекать человека каждые пятнадцать минут, то он ничего не сделает, потому что требуется много времени даже для того, чтобы начать раскладывать идеи по полочкам в голове.

Ингаллс: Это мне напоминает то, что я когда-то сказал кому-то в PARC. У меня появились другие обязанности, кроме возни со Smalltalk, но мы уже сильно продвинулись на пути создания из него действительно очень продуктивной системы. Я пошутил, что спешу улучшить среду Smalltalk, чтобы в промежутках между этой деятельностью можно было наконец заняться нормальной работой. Так что я привык к тому, что у меня есть минут 15, и в это время я успевал посидеть и придумать что-нибудь полезное.

Другая сторона проблемы — то, что вы работаете с другими. Я работаю с молодежью, и это прекрасно. Возможно, я чуть больше размышляю о целях, политике и том, как заставить все работать, а они делают то, чего мне не хватает: у них достаточно времени для действительно глубокого проникновения в суть вещей.

Сейбел: О вас говорят как о хорошем руководителе проекта. Как вам удается возглавлять команду, чтобы люди работали успешно и эффективно?

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

Сейбел: Можете ли вы что-нибудь посоветовать по поводу того, как стать хорошим техническим лидером команды?

Ингаллс: Во-первых, нужно ясно дать понять, что вы пытаетесь сделать. Нужно обеспечить всем недвусмысленное представление о работе. Если вы в курсе дела, то можете сами увидеть, как собираетесь реализовать ту или иную идею, чтобы начать понимать, как она будет работать, если этим займутся несколько человек одновременно, и как все это увязать.

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