XIII веке Данс Скотус (Duns Scotus) называл логику «Наукой из наук» и «Искусством из искусств». По мере развития цивилизации и образования эти слова все более приобретали независимые значения, причем слово «наука» относилось к знаниям, а «искусство» – к применению знаний. Так, наука астрономия была основой искусства навигации. Ситуация была почти в точности такой, как сейчас, когда мы различаем «науку» и «технику».
В XIX веке многие авторы писали о соотношении между искусством и наукой, и я считаю, что самое лучшее рассуждение принадлежит Джону Стьюарту Милю (John Stuart Mill). В 1843 году он писал [56]:
«Для того чтобы сформировать фундамент некоторого искусства, часто необходимо несколько наук. Такова сложность человеческих дел: для того чтобы сделать что-то одно, часто необходимо знать природу и свойства многих других вещей…
Вообще говоря, Искусство состоит из истин Науки, организованных таким способом, который наиболее удобен для практики, а не для мышления. Наука группирует и организует свои истины таким образом, чтобы мы могли одним взглядом, насколько это возможно, охватить общее устройство Вселенной. Искусство формируется из отдельных фрагментов науки, далеких друг от друга, из истин, которые относятся к созданию различных и разнородных условий, вызванных насущными потребностями практической жизни».
Когда я просматривал эти высказывания о значении слова «искусство», я обнаружил, что различные авторы на протяжении, по меньшей мере, двух веков пытались установить переход от искусства к науке. Например, в предисловии к учебнику по минералогии, написанному в 1784 году, говорится следующее [57]: «Минералогия, которую до 1780 многие понимали как искусство, могла бы, в сущности, быть отнесена к Науке».
В соответствии с большинством словарей «наука» означает знания, которые были логически упорядочены и систематизированы в виде общих «законов».
Преимущество науки заключается в том, что она избавляет нас от необходимости обдумывать вещи всесторонне в каждом конкретном случае; мы можем обратить наши мысли к понятиям более высокого уровня. Как писал в 1853 году Джон Раскин (John Ruskin) [58]: «Работа науки состоит в том, что она заменяет явления фактами, а впечатления – доказательствами».
Мне кажется, что если бы авторы, которых я изучал, писали сегодня, они согласились бы со следующим определением: «Наука – это знания, которые мы настолько хорошо понимаем, что можем обучить им компьютер; если же мы не понимаем чего-нибудь до конца, то заниматься этим – искусство». Поскольку алгоритм или компьютерная программа обеспечивают нас чрезвычайно полезным тестом для проверки глубины наших знаний о любом заданном предмете, переход от искусства к науке означает, что мы научились кое-что автоматизировать.
Искусственный интеллект сделал значительные успехи, однако остается глубокая пропасть между тем, что компьютеры смогут делать в предвидимом будущем и что могут делать обычные люди. Таинственные «инсайты», которые используют люди, когда они говорят, слушают, пишут и даже когда они программируют, по-прежнему недостижимы для науки; почти всё, что мы делаем, – это пока искусство.
С этой точки зрения, конечно, желательно превратить компьютерное программирование в науку, и мы действительно прошли немалый путь за эти 15 лет, прошедших с момента публикации замечаний, которые я привел в начале данного доклада. Пятнадцать лет назад понимание программирования было настолько примитивным, что вряд ли кто-нибудь мог даже думать о доказательстве корректности программы; мы просто возились с программой до тех пор, пока, наконец, «знали», что она работает. В то время мы даже не умели сформулировать, каким-либо строгим путем, само понятие корректности программы.
Лишь в последние годы мы узнали о процессах абстракции, которые позволяют писать и понимать программы. Эти новые знания дают сейчас важные результаты. Хотя лишь немногие программы оказываются полностью корректными, мы начинаем понимать принципы структуры программ. Дело в том, что если мы пишем программы сегодня, то мы знаем, что могли бы, в принципе, построить формальное доказательство их корректности, поскольку сейчас мы понимаем, как формулируются такие доказательства.
Существование такого научного базиса позволяет составлять программы, которые значительно более надежны, чем те, которые мы писали в прежние дни, когда интуиция была единственной гарантией корректности.
Область «автоматического программирования» является сейчас одной из основных областей исследования проблем искусственного интеллекта. Её сторонники с удовольствием прочитали бы доклад под названием «Программирование как артефакт» (имея в виду, что программирование стало просто пережитком прошлого), так как их задача состоит в том, чтобы создать машины, способные составлять программы лучше, чем это делаем мы. Лично я не думаю, что такая цель будет когда-нибудь полностью достигнута, но я думаю, что их исследования чрезвычайно важны, так как всё, что мы узнаём о программировании, помогает нам повышать наше собственное мастерство. В этом смысле мы должны постоянно стремиться превращать каждое искусство в науку: таким образом мы совершенствуем искусство.
Наука и искусство
Наша дискуссия показывает, что программирование является сейчас и наукой, и искусством и что обе эти стороны прекрасно дополняют друг друга. По-видимому, большинство авторов, занимающихся исследованием таких вопросов, приходят к выводу, что их предмет является и наукой, и искусством, каким бы ни был сам предмет. Я отыскал книгу по элементарной фотографии, написанную в 1893 году, в которой утверждается, что «проявление фотографического изображения есть и искусство, и наука» [59]. Когда я впервые взял словарь, чтобы исследовать слова «art» и «science», я случайно бросил взгляд на предисловие редактора, которое начиналось словами «Составление словаря является и наукой, и искусством». Редактор словаря Funk & Wagnall [60]заметил, что тщательное накопление и классификация информации о словах имеет научный характер, в то время как хорошо подобранные изложения определений требуют умения писать экономно и аккуратно: «наука без искусства, вероятно, была бы неэффективной; искусство без науки определённо не точно».
В процессе подготовки этой лекции я просмотрел картотеку Стэнфордской библиотеки с целью узнать, как разные люди употребляли слова «искусство» и «наука» в названиях своих книг. Это оказалось очень интересным.
Например, я нашел две книги, озаглавленные «Искусство игры на фортепьяно» и другие под названиями «Наука пиано-форте техники», «Наука игры пиано-форте». Была также книга «Искусство игры на фортепьяно: научный подход». Затем я нашел прелестную книжечку «Благородное искусство математики», которая заставила меня взгрустнуть о том, что я не могу честно изложить программирование как «благородное искусство».
Я знал ещё несколько лет назад о книге «Искусство вычислений», опубликованной в Сан-Франциско в 1879 году неким Ховардом (C. Frusher Howard) [61]. Это было практическое пособие по деловой арифметике, которое к 1890 году было распродано тиражом свыше 400 тысяч экземпляров в нескольких изданиях. Меня позабавило предисловие, которое указывало на то, что философия Ховарда и смысл его заглавия совершенно отличались от