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

на главную - закладки

Жанры

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

Сейбел Питер

Шрифт:

Это же можно видеть и в музыке, и в графике, и в численном анализе, и в операциях с текстом. И мне очень нравится делать это доступным.

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

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

каким-нибудь удобным и понятным образом. Это часть общей картины. Уверен, вскоре она изменится. Броузеры должны измениться. Мы возьмем другие языки, не только JavaScript. Я по-прежнему поддерживаю контакт с Аланом и его группой, которые предпринимают новую попытку зайти дальше и решить некоторые из текущих проблем более серьезно. Но подход при этом остается совершенно тем же самым.

Сейбел: Вы упоминаете четыре дисциплины: музыка, графика, математика и текст. Они стары почти как само человечество. Безусловно, у них есть свои впечатляющие идеи вне зависимости от всяких компьютеров: компьютер просто обеспечивает способ их исследовать, что без него могло бы быть сложнее. Есть ли также интересные идеи, внутренне присущие компьютерам? Является ли программирование или компьютерные науки еще одним, пятым фактором, в котором мы можем разобраться только сейчас, уже владея компьютерами?

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

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

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

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

Сейбел: Вернемся в специальные области: как вы тестируете свои программы?

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

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

тестов?

Ингаллс: Если вы только что сделали возможным что-то взять, переместить, положить, вам понадобится фреймворк, чтобы с этим работать. Такой ли это фреймворк, чтобы любой другой мог прийти и увидеть, что проводились такие-то тесты? У меня обычно не так. Это своего рода привилегия моего поколения, сейчас уже такое не пройдет. Я старпер, так что никто уже меня не заставит этим заниматься. Но, думаю, то, что я делаю, во многом приближается к такому варианту. Код Squeak, например, был полон комментариев о том, как что выполнить и как что проверить. А во многих тестах BitBlt имеются такие небольшие механизмы, которые берут что-то в одном месте экрана, проводят с этим некие операции и возвращают обратно, и если на экране что-то изменилось, значит, этот механизм не работает, и это написано в комментарии. Мне кажется, это и есть тест.

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

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

Сейбел: Занимались ли вы когда-нибудь парным программированием?

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

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

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

Сейбел: Вы работали на многих уровнях: от побитового переноса в BitBlt и написания микрокода до довольно высокоуровневого программирования на Smalltalk. Насколько программистам необходимо знать о различных уровнях программного и аппаратного обеспечения, с которым они имеют дело?

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

Если говорить о создании языка, то, возможно, вы захотите работать с процессорами, которые вам не очень знакомы; в этом случае вам не надо знать о них ничего, кроме того, как работает кэширование и все такое, - это необходимо для обеспечения нормальной производительности. Думаю, надо остановиться и спросить: “Какие границы я здесь пересекаю?”

Поделиться:
Популярные книги

Идеальный мир для Лекаря 11

Сапфир Олег
11. Лекарь
Фантастика:
фэнтези
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 11

Инкарнатор

Прокофьев Роман Юрьевич
1. Стеллар
Фантастика:
боевая фантастика
рпг
7.30
рейтинг книги
Инкарнатор

Миф об идеальном мужчине

Устинова Татьяна Витальевна
Детективы:
прочие детективы
9.23
рейтинг книги
Миф об идеальном мужчине

Все ведьмы – стервы, или Ректору больше (не) наливать

Цвик Катерина Александровна
1. Все ведьмы - стервы
Фантастика:
юмористическая фантастика
5.00
рейтинг книги
Все ведьмы – стервы, или Ректору больше (не) наливать

Вечный. Книга V

Рокотов Алексей
5. Вечный
Фантастика:
боевая фантастика
попаданцы
рпг
5.00
рейтинг книги
Вечный. Книга V

Надуй щеки!

Вишневский Сергей Викторович
1. Чеболь за партой
Фантастика:
попаданцы
дорама
5.00
рейтинг книги
Надуй щеки!

Командир штрафбата

Корчевский Юрий Григорьевич
3. Я из СМЕРШа
Фантастика:
боевая фантастика
попаданцы
альтернативная история
7.06
рейтинг книги
Командир штрафбата

Возвышение Меркурия. Книга 16

Кронос Александр
16. Меркурий
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Возвышение Меркурия. Книга 16

Проводник

Кораблев Родион
2. Другая сторона
Фантастика:
боевая фантастика
рпг
7.41
рейтинг книги
Проводник

Зайти и выйти

Суконкин Алексей
Проза:
военная проза
5.00
рейтинг книги
Зайти и выйти

Плеяда

Суконкин Алексей
Проза:
военная проза
русская классическая проза
5.00
рейтинг книги
Плеяда

Дело Чести

Щукин Иван
5. Жизни Архимага
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Дело Чести

Темный Лекарь 9

Токсик Саша
9. Темный Лекарь
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Темный Лекарь 9

Идеальный мир для Социопата 3

Сапфир Олег
3. Социопат
Фантастика:
боевая фантастика
6.17
рейтинг книги
Идеальный мир для Социопата 3