моих. Он писал: «Знание науки о числах не имеет большого значения; овладение же искусством счёта абсолютно необходимо».
Некоторые книги содержали оба слова – «наука» и «искусство» – в своих названиях, например: «Наука существовать и искусство жить» Mahesh Yogi. Есть также книга «Искусство научного открытия», в которой анализируется, каким образом были сделаны некоторые из великих открытий.
Как много информации в классическом значении слова «art»! На самом деле при выборе заглавия для своих книг я не думал об искусстве в этом смысле, а думал больше о его других сопутствующих значениях. Вероятно, самой интересной книгой, которую я нашел, была совсем недавняя работа Мюллера (Robert E. Mueller) под названием «Наука Искусства» [62]. Из всех книг, упомянутых мною, эта книга ближе всего выражает то, что я хочу сделать главной темой моей сегодняшней беседы. Мюллер замечает: «Когда-то думали, что поэтическая образная точка зрения художника является губительной для ученого. А логический научный подход означает смерть для всех возможных художественных взлётов фантазии». А затем он исследует достижения, которые поистине являются результатом синтеза науки и искусства.
Научный подход характеризуется главным образом такими словами, как логический, систематический, объективный, спокойный, рациональный, в то время как художественный – словами: эстетический, творческий, гуманитарный, беспокойный, иррациональный. Мне кажется, что оба этих явно противоречивых подхода имеют большое значение для программирования.
Эмма Лемер (Emma Lehmer) писала в 1956 году, что для неё программирование – «изнуряющая наука и в то же время увлекательное искусство» [63]. Коксетер (H.S.M. Coxeter) заметил в 1957 году, что он иногда чувствует себя больше художником, чем ученым [64]. Это было в то время, когда Сноу (C.P. Snow) начал выражать тревогу по поводу растущей поляризации между «двумя культурами» образованных людей [65]. Он указывал, что нам нужно объединить научные и художественные ценности, если мы хотим достигнуть настоящего прогресса.
Произведения искусства
Когда я сижу в аудитории и слушаю длинную лекцию, то моё внимание к рассматриваемому вопросу начинает ослабевать примерно через час. Я думаю, что вы тоже немного устали от моих разглагольствований о «науке» и «искусстве». Я, конечно, надеюсь, что вы сможете выслушать внимательно и остальную часть моей лекции, хотя бы потому, что сейчас речь пойдет о тех вещах, которые я чувствую наиболее глубоко.
Когда я говорю о программировании как об искусстве, я думаю в первую очередь о нём как о художественной форме в эстетическом смысле. Главная цель моей работы как педагога и автора состоит в том, чтобы научить людей составлять красивые программы. Вот почему я был особенно рад, узнав недавно, что мои книги имеются в Библиотеке изящных искусств при Корнельском университете. (Однако эти 3 тома, очевидно, спокойно лежат на полке без употребления, так что я боюсь, что библиотекари, может быть, совершили ошибку, поняв моё заглавие буквально.)
Я считаю, что составление программы похоже на сочинение стихов или музыки. Как сказал Андрей Ершов [66], программирование может давать нам и интеллектуальное, и эмоциональное удовлетворение, так как овладение сложным и установление системы согласованных правил является истинным достижением.
Далее, когда мы читаем программы, составленные другими, то мы можем расценивать некоторые из них как подлинные художественные произведения. Я всё ещё помню, с каким волнением я читал в 1958 году описание ассемблера Поли (Stan Poley) SOAP II. Вы, вероятно, подумаете, что я сумасшедший, и, кроме того, с тех пор очень сильно изменились стили, но в то время для меня было огромным счастьем видеть, какой элегантной может быть системная программа, особенно если сравнить её с другими тяжеловесными программами, которые я изучал в то же самое время. Возможность составления красивых программ, даже на языке ассемблера, – это то, что заставляет меня придавать программированию первостепенное значение.
Некоторые программы бывают элегантны, некоторые прелестны, а некоторые блестящи. Я утверждаю, что можно составлять великолепные программы, превосходные программы, поистине изумительные программы.
Вкус и стиль
Наконец-то, идея стиля в программировании выходит сейчас на первый план, и я надеюсь, что многие из вас видели замечательную маленькую книжку Кернигэна и Плоджер (Kernighan and Planger) «Элементы стиля в программировании» [67].
В этой связи самое важное для всех нас – помнить, что не существует какого-либо «наилучшего» стиля. Каждый имеет свои собственные предпочтения, и было бы ошибкой, если бы мы пытались заставить людей придерживаться неестественного для них шаблона. Мы часто слышим: «Я ничего не знаю об искусстве, но я знаю, что мне нравится». Здесь важно, что на самом деле вам нравится тот стиль, который вы используете. Должно быть, это наилучший способ, который вы выбираете, чтобы выразить себя.
Эджер Дейкстра подчеркнул это обстоятельство в предисловии к своей книге «Краткое введение в искусство программирования» [68]: «Моя цель – объяснить важность хорошего вкуса и стиля в программировании. Однако специфические элементы стиля, представленные здесь, служат только для иллюстрации в общем виде тех преимуществ, которые могут быть получены благодаря «стилю». В этом отношении я чувствую сходство с преподавателем композиции в консерватории. Он не должен обучать своих студентов, как сочинить конкретную симфонию. Он должен помочь им найти свой собственный стиль и объяснить, к каким результатам это приводит». (Именно эта аналогия навела меня на мысль говорить об «Искусстве программирования».)
Теперь мы должны спросить себя: «Что такое хороший стиль, и что такое плохой стиль?» Мы не должны быть слишком строгими в этом отношении, оценивая работу других людей. Джереми Бентам (Jeremy Bentham), философ начала XIX века, говорит об этом следующее:
«Те, кто судит об элегантности и вкусе, считают самих себя благодетелями человеческой расы, в то время как они в действительности только мешают людям получать удовольствие… Не существует вкуса, который заслуживает эпитета хороший, разве только вкус к таким занятиям, которые доставляют удовольствие благодаря тому, что в них содержится какая-то доля ожидаемой в будущем пользы. Не существует вкуса, который заслуживает оценки плохого, если только это не вкус к некоторым занятиям, имеющим вредные свойства».
Когда мы используем наши собственные предубеждения для того, чтобы «исправить» чей-либо вкус, мы, может быть, невольно лишаем его некоторого вполне законного удовольствия. Здесь важно то, что они создают нечто такое, что они сами находят красивым.
В отрывке, который я только что процитировал, Бентам дает нам некоторый совет относительно надежных принципов эстетики, которые лучше других, а именно – полезность результата. Мы имеем определенную свободу устанавливать наши личные стандарты красоты, но особенно приятно, если вещи, которые мы считаем красивыми, в то же время рассматриваются другими людьми как полезные.
Я должен признаться,