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