КаталогИндекс раздела


©Перевод: А.Деревянко, 2006
    

Компьютерные науки - о чем они?

Эдсгер В. Дейкстра

Edsger W. Dijkstra, What Computin Science is about, EWD1008, 1988

Когда оборудование для автоматизации вычислений начало становиться доступным, быстро стало ясно, что наивны подходы того времени абсолютно неадекватны для эффективного использования новых технологий и в ответ на эту потребность были созданы факультеты компьютерных наук. Они были, однако, созданы прежде, чем был достигнут консенсус в понимании того, в чем должна заключаться компьютерная наука как интеллектуальная дисциплина. (В свое первое десятилетие компьютерная наука фактически испытала "кризис идентификации".)

Дисциплина была частично сформирована ограничениями академической жизнеспособности, в особенности в части ее стабильности и логической последовательности.

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

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

Это взаимодействие имеет глубокие логические аспекты - такие как разрешимость - но более подробно было сформировано его количественными аспектами, которых существует великое множество.

Прежде всего, существует вопрос о том, что мы оставляем для автоматизации, а что делаем сами: может быть достаточно просто получить нужный результат, как решение механически решаемого уравнения, но такое механическое решение, однако, потребует больше бит информации, чем атомов во вселенной. (Даже вычисление, которое при современной технологии займет только 1000 лет, не будет представлять интереса.) В таких случаях ясно, что потребуется несколько большее участие человека.

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

Нет сомнений, что программирование, рассматриваемое как математическая деятельность, должно быть в значительной степени (если не полностью) формальной деятельностью. Математические теоремы чаще всего предназначены для использования людьми, более того, математиками, которые достаточно умны для того, чтобы не применять теорему в ситуации, для которой она абсолютно не предназначена. Программная теорема, в которой данный фрагмент поддерживает данный вариант, применяется с высокой частотой, благодаря механизации, - до 1000 герц, более того, это применение происходит без участия умного математика. В этом смысле Программирование = Математика + Закон Мерфи. (Последний гласит, что "все, что может испортиться, - испортится".)

Отсюда следует, что программы должны порождаться формально. (Я думаю, можно согласиться с тем, что ученые-компьютерщики должны прежде всего интенсивно и широкомасштабно применять формальную логику как обязательный инструмент в своих повседневных рассуждениях.) Рассматриваемые как формальные объекты, программы, однако, быстро достигают поразительных размеров, представляя большие и в то же время компактные результаты нашей интеллектуальной работы. Отсюда следует огромное значение эффективности того, как программист выполняет свою часть работы по манипулированию символами.

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

Историческое примечание. Ранние компьютерные приложения имели очевидно повторяющуюся природу: каждый месяц должна была делаться платежная ведомость и каждый месяц объем работы был линейной функцией от количества работников. Что механизировать - было в те дни понятной задачей. Если же мы имеем механизацию проверки доказательств или механизацию рассуждений как компонент программной системы общего назначения, решение о том, что нужно автоматизировать, уже не является очевидным. Смещение целей приводит к смещению понимания. (Конец исторического примечания.)

Последнее замечание - о роли на данный момент (формального) порождения программ, поскольку эта роль приуменьшается при рассмотрении случаев, когда должно быть разработано - или "открыто", если вы являетесь платонистом - относительно небольшое число новых алгоритмов. То новое, что было разработано, было путем над концептуальными ограничениями, свойственными традиционному интуитивному подходу, но, что более важно, был полностью изменен интеллектуальный статус многих опубликованных алгоритмов из неполно сформулированного или несвободного от ошибок в четко сформулированную и доказанную теорему.

Пассадена, 25 мая 1987


КаталогИндекс раздела