мощь алгоритма. Алгоритм – это определенного рода формальный процесс, который (логически) неизбежно приводит к достижению определенного рода результата, когда бы тот ни «запускался» или ни реализовывался. Во времена Дарвина в алгоритмах не было ничего нового. Многие хорошо известные арифметические процедуры – например, деление в столбик или подведение баланса в чековой книжке – являются алгоритмами, и таковы же процедуры принятия решений при разыгрывании образцовой партии в крестики-нолики или расположении нескольких слов в алфавитном порядке. Сравнительно новым (и позволяющим нам бросить ценный ретроспективный взгляд на открытие Дарвина) было теоретическое размышление математиков и логиков о природе и мощи алгоритмов в целом; в XX веке это привело к появлению компьютера, что в свою очередь, разумеется, стало причиной гораздо более глубокого и наглядного понимания возможностей алгоритмов в целом.
Термин алгоритм восходит – через латинское слово algorismus – к раннеанглийскому algorisme (с ошибочным написанием algorithm), образованному от имени персидского математика, Мусы аль-Хорезми, чья написанная примерно в 835 году н. э. книга о математических действиях в XII веке была переведена на латынь Аделардом Батским или Робертом Честерским. Идея, что алгоритм является надежной и в некотором роде «механической» процедурой, существовала на протяжении столетий, но лишь в 1930‐х годах в новаторской работе Алана Тьюринга, Курта Гёделя и Алонзо Черча было в первом приближении зафиксировано современное понимание этого термина. Нам будут важны три основные особенности алгоритмов, и каждую не так-то просто определить. Более того, каждая усугубила замешательство (и тревогу), все еще мешающие нам размышлять о революционном открытии Дарвина, так что на страницах этой книги нам неоднократно придется возвращаться к этим вводным замечаниям и переосмыслять их.
1. Безразличие к материалу: деление в столбик можно с равным успехом осуществлять, используя карандаш или ручку, бумагу или пергамент, неоновые огни или дымовой след самолета – и прибегая к какой угодно системе символов. Осуществимость процедуры основана на ее логической структуре, а не на конкретных особенностях использованных в данном случае материалов и лишь пока эти конкретные особенности позволяют в точности выполнять предписанные действия.
2. Базовая неразумность: хотя сам проект процедуры может быть блестящим или приводить к великолепным результатам, каждый конкретный ее шаг, а также переходы между ними чрезвычайно просты. Насколько они просты? Достаточно просты, чтобы их мог осуществить прилежный дурак – или попросту механическое устройство. Согласно известной «школьной» аналогии, алгоритмы – это своего рода рецепты, составленные так, чтобы им могли следовать поварята. В кулинарной книге, предназначенной для шеф-поваров, мы можем прочитать: «Варите рыбу в подходящем вине на медленном огне до полуготовности», – но