Рейтинговые книги
Читем онлайн Кодеры за работой. Размышления о ремесле программиста - Сейбел Питер

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 ... 79 80 81 82 83 84 85 86 87 ... 153

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

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

Стил: Пожалуй, вот что: сейчас невозможно знать абсолютно все, что происходит внутри компьютера. Есть вещи, вам неподвластные, — сегодня невозможно знать все о всем программном обеспечении. В 1970-е память компьютера вмещала только 4000 слов. Можно было сделать дамп ядра и проверить каждое слово. По распечаткам исходного кода операционной системы можно было понять, как она работает. Я изучал утилиты для работы с диском и с устройством для чтения перфокарт, создавал свои варианты. И мне казалось, что я понимаю, как работает вся IBM 1130. Ну, или понимал в этом достаточно для себя. Сейчас все не так.

Сейбел: Вам помогали книги?

Стил: В 1970-е — конечно, да. Например, «Искусство программирования» Кнута.

Сейбел: Вы прочли ее от корки до корки?

Стил: Почти. Я делал столько упражнений, сколько мог. Некоторые требовали знаний, которых у меня было, — скажем, высшей математики. Такие я пропускал или делал кое-как. Но первые два тома и солидный кусок третьего я прочел очень внимательно. Сортировке я учился по книге алгоритмов Ахо, Хопкрофта и Ульмана. Что до остальных, то надо поглядеть в моей библиотеке. Я ведь настоящий старьевщик и храню все свои книги. Но те, которые я назвал, сразу всплывают в памяти. И еще книги по Лиспу. Например, та, что издали Беркли и Бо-броу: это скорее собрание отдельных статей, но я многое вынес из него. Потом я начал читать журнал «SIGPLAN» и ежемесячный журнал «Communications of the ACM» («CACM»). Тогда в «САСМ» было полно технических подробностей, их интересно было читать.

Вспоминаются два эпизода. В Латинской школе я участвовал в научных конкурсах, делал кое-какие компьютерные проекты. И вот член жюри одного из конкурсов спросил меня: «А почему бы тебе не вступить в АСМ?» Не помню, как звали этого человека, но я последовал его совету, за что ему очень благодарен.

А в Гарварде, если у меня было утром окно, я шел в библиотеку и делал одно из двух: читал «Scientific American», узнавая что-нибудь из истории науки, или «САСМ», заглядывая в будущее. Я не пропускал ни одной колонки Мартина Гарднера про математические игры. А в «САСМ» я читал то, что меня интересовало. В1972 году журналу исполнилось только 15 лет, и я прочитал все выпуски довольно быстро.

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

Стил: Именно так: целую отрасль. Было полно одностраничных статей. Например: «Вот новый эффективный метод хеширования». Я много читал такого.

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

Стил: Да. Необходимость — мать изобретения: идея появляется, когда в ней есть потребность. И только позже становится понятно, что идея эта очень важна. Чтобы убрать случайные обстоятельства, взглянуть на суть идеи, нужно несколько лет. Допустим, есть эффективный способ изменить порядок битов в слове на обратный, но реализован он на языке ассемблера 7090. В основе — интересная математическая идея, но она еще недостаточно абстрагирована.

Сейбел: Это ведь то, что делает Кнут?

Стил: Верно. Кнут и такие, как он.

Сейбел: Возможно, те, кто изучает компьютерные науки в колледже, проходят все это. Но многие программисты без официального образования учатся прямо в процессе работы. Что вы можете посоветовать в таком случае? От чего вы отталкиваетесь, как вам удается читать и понимать эти статьи? Может быть, надо прочесть все до единого выпуски «САСМ», начиная с первых?

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

Во-вторых, как найти хороший материал, тем более что само это понятие меняется со временем? То, что хорошо сегодня, через десять лет устареет. Надо спросить у того, кто в этом разбирается. Что было полезным мне? Кнут, Ахо, Хопкрофт и Ульман. Затем «The Psychology of Computer Programming» Джеральда Вайнберга — она все еще не утратила ценности. Кое-что мне дал «The Mythical Man-Month»1 Фреда Брукса.

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

Ф. Брукс «Мифический человеко-месяц или Как создаются программные системы». — СПб.: Символ-Плюс, 2000.

В основном учебники по Си и Java. Но если хорошо порыться, найдется немного книг по теории программирования, алгоритмам и так далее.

Сейбел: Есть другое чтение, и я знаю, что вы считаете его важным, — это чтение кода. Как вы ориентируетесь в чужом коде большого объема?

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

Сейбел: Путь исполнения?

Стил: Да. Возьмем Emacs. Я говорю: посмотрим на код, который служит для перемещения курсора на один символ вперед. Я не понимаю его полностью, но с его помощью пойму какие-то структуры данных и способ представления буфера. Если повезет, то я найду место, где добавляется единица. Изучив это, я возьму код, перемещающий курсор на один символ назад. «Стереть строку». Так я отслеживаю все более сложные участки кода, пока не пойму, что нащупал важную его часть.

Сейбел: А что значит «отслеживаете»? Смотрите на код и пытаетесь выполнить его в уме? Или берете отладчик и проходите код шаг за шагом?

Стил: И то и другое. Отладчик применяю в основном для небольших объемов кода 1970-1980-х. Сейчас между запуском программы и моментом, когда она начинает делать что-то интересное, может быть долгая инициализация. Поэтому разумнее найти главный цикл программы или главную управляющую функцию и отслеживать уже оттуда.

Сейбел: И после этого вы зададите точку останова и начнете пошаговое исполнение от нее или просто исполните программу в уме?

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

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

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

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

1 ... 79 80 81 82 83 84 85 86 87 ... 153
На этой странице вы можете бесплатно читать книгу Кодеры за работой. Размышления о ремесле программиста - Сейбел Питер бесплатно.
Похожие на Кодеры за работой. Размышления о ремесле программиста - Сейбел Питер книги

Оставить комментарий