Кодеры за работой. Размышления о ремесле программиста
Шрифт:
Есть и другие вещи, столь же захватывающие, а в наши дни, возможно, еще и более подходящие, которые еще только предстоит изучить. Господи, да мы задумывались о создании искусственного интеллекта четверть века назад! Машины стали неизмеримо быстрее, а мы почти ничего не делаем в этой области, мы по-прежнему остаемся почти на уровне Фортрана. Долгое время был популярен Пролог; с логическими программами можно сделать все, что угодно. Если требуется узнать об ассемблере и о том, как он работает, нужно немного погрузиться в то, что находится за рамками шаблона; возможно, это стоит отложить на будущее.
Так
В разбиении и сведении текста много такого, от чего можно получить настоящее удовольствие. То же относится и к числам, различным системам счисления, плавающим и фиксированным запятым. То же самое с музыкой: берете ноты и объединяете их в мелодии и аккорды. То же самое с графикой: суперпозиции и повороты. Любой вариант из этого — интересное поле для исследования. Точно так же, если собираетесь научить кого-то программировать на компьютере, то можно начать с вычисления выражений, а можно с логического программирования. Можно начать и с пользовательского интерфейса. Нужно натаскать человека в одной отрасли, откуда он будет уже продвигаться вглубь.
Сейбел: Насколько я понимаю, изначальное предназначение Smalltalk состояло в том, чтобы научить своего рода азам программирования. Как вы считаете, это то, чем должен владеть каждый, подобно тому, как каждый должен уметь читать и знать что-то из математики? Должны ли все уметь немного программировать на компьютере, просто потому что это полезный способ мышления?
Ингаллс: Честно говоря, мне сложно говорить, что кто-то должен что-то делать, потому что я встречал людей, которые, на мой взгляд, в том или ином смысле лучше меня, а о программировании не знают ничего. Но если говорить о грамотности, то ведь программирование основано на логике и математике, а людям действительно неплохо было бы уметь думать логично. Но я бы не сказал, что все обязаны уметь программировать. В повседневной жизни есть области, сходные с программированием. Нужно знать о пошаговых процедурах — вот это, пожалуй, правильная формулировка.
Компьютеры несут ряд впечатляющих идей, а также могут привнести в жизнь другие впечатляющие идеи. Самое чудесное в компьютерах — это то, что они воплощают в жизнь математику. В этом отношении они прекрасный инструмент. Если же говорить о впечатляющих идеях, необходимых в обычной жизни, то я не могу сказать, сколько таких идей заключено в данной области.
Сейбел: Сеймур Паперт писал в книге «Mindstorms» (Мозговые штурмы) об отладке как о важном элементе интеллектуального арсенала: идея программирования заключается не в том, чтобы найти обязательно верный ответ, но в том, чтобы найти какой-нибудь ответ и затем отладить его.
Ингаллс:
Компьютеры — безусловно, необходимый в этом случае посредник. Но это ведь только компьютеры. Они могут передать что угодно, но мне кажется, что все основное заключено в человеке, поэтому вряд ли мы сможем просветить весь мир, просто научив его пользоваться компьютерами.
Сейбел: Вы помните первую интересную программу, написанную вами?
Ингаллс: Дайте-ка подумать. В любом моем программистском опыте было нечто нешаблонное. Так, изучая VisiCalc, я написал табличную программу для перевода с помощью VisiCalc английских слов в «поросячью латынь». На мой взгляд, это интересно, поскольку табличная метафора была сродни параллельному программированию. Такой анализ текста был и интересен, и познавателен.
Сейбел: То есть в VisiCalc имелись примитивы для разбиения строк?
Ингаллс: Да, там можно было разбивать строки. Правда, может, на самом деле у меня был Lotus 1-2-3, а не VisiCalc, потому что я что-то не уверен, были ли в VisiCalc строковые примитивы. У меня был маленький Poqet PC — один из первых настоящих наладонников. Он работал от двух батареек, я поставил на него 1-2-3, и когда летел на самолете через всю страну, то думал, что бы такого сделать.
Сейбел: Вероятно, это было гораздо позже того, как вы научились программировать, потому что когда вы начинали, никаких Poqet PC явно не было.
Ингаллс: Да, позже. Самое интересное из того, что я сделал на Фортране: я взял статью Вэла Шорра о МЕТА II — это отличный, очень простой компилятор компиляторов — и написал его реализацию на Фортране. Вдруг оказалось, что можно пользоваться другими языками в чисто фортрановой среде. Это было самое интересное, что я сделал на Фортране — ведь здесь Фортран использовался для освобождения от мира Фортрана.
Сейбел: Интересно получается: таблица с «поросячьей латынью», потом это, потом хеш-таблица на Коболе для профилировщика — можно ли сказать, что какая-то часть вашей души любит идти против течения?
Ингаллс: Мне не кажется, что я иду против течения, но каждый раз, когда у меня есть возможность поиграть в вычислительной среде, я стараюсь пробовать что-то новое. Вот почему мне так нравилось делать все эти системы на Smalltalk. Начинаешь, можно сказать, с нуля, и первая задача — понять, что нужно ассемблировать и заставлять работать в первую очередь, что поможет сделать следующий шаг и определит направление, в котором двигаться.