Всё это повторяется с каждым тиканьем часов, пока наконец машина не достигнет первой единицы на ленте. Теперь требуется правило, объясняющее, что делать, когда процессор читает 1 в состоянии 0. Простейшим правилом будет: оставаться в состоянии 0, записать 1, перейти на шаг вправо и остановиться. Теперь слева от машины будет записана единица, и это будет результат вычисления.
Этот алгоритм можно описать как «печатать 1, если входные данные корректны», где «корректны» означает «содержат по меньшей мере одну единицу». Если бы на момент начала работы справа от управляющего устройства не было ни одной единицы, она бы никогда не остановилась, а продолжала бы движение в вечном и бесплодном поиске единицы. Такое может произойти и с настоящим компьютером: программа может «зациклиться», и в конце концов компьютер сломается.
К сожалению, такая возможность – неотъемлемое свойство и машины Тьюринга, и реальных компьютеров. Однако этого легко избежать, если изначально указать, что среди «корректных» входных данных должна быть по меньшей мере одна единица, так, чтобы первое правило не могло применяться до бесконечности.
Тьюринг также математически показал, что даже машина Тьюринга не может решить все задачи! Иными словами, некоторые задачи в математике не решаются с помощью вычислительной техники – то есть математиков пока нельзя заменить машинами.
Любое возможное вычисление
Если есть достаточно времени и есть возможность записать на ленте ввода нужное число единиц, то выполнимо любое механическое действие с целыми числами, какое только можно придумать. Для этого требуется дать машине Тьюринга входное число справа от машины, запустить часы, дождаться остановки – и прочесть ответ слева от машины. К таким действиям относится любой арифметический расчёт, какой может произвести человек с помощью ручки и бумаги. Алан Тьюринг предложил такое определение вычислимого: вычислимо то, что может вычислить машина Тьюринга. Удивительно, но спустя примерно 80 лет это определение по-прежнему считается верным: все известные компьютеры могут выполнять вычисления только в пределах возможностей машины Тьюринга.
Эрик ахнул. Она явно не предупредила его о своих намерениях.
– Нет, вы не можете… – начал он.
– Очень даже могу, – твёрдо сказала Берил. – Я дарю её вашему математическому факультету. Вы, с вашими работами по квантовым компьютерам, – самый подходящий человек для такого подарка. Так что лучшее место для неё и придумать трудно.
– Что такое квантовый компьютер? – насторожился Джордж. Для него это была новость. Он давно обратил внимание на то, что Эрик в последнее время стал очень скрытен. На вопросы о том, над чем он сейчас работает, выдающийся учёный отвечал туманно и уклончиво.
Однако сегодня Эрик оказался существенно говорливее, чем обычно.
– Это очередной прорыв, – ответил он Джорджу. – Уже произошла цифровая революция в мире информации, а теперь мы стоим на пороге квантовой революции. Если мы сумеем создать квантовый компьютер – и не только создать, но и управлять им, что в данный момент кажется чрезвычайно сложным, – то сможем делать многое из того, что при нынешнем уровне компьютерных технологий выглядит совершенно непредставимым.
– Например? – спросил Джордж.
– С помощью квантового компьютера можно взломать любой код – на Земле не существует системы ограничения доступа, которая могла бы его остановить! – сказал Эрик, сияя. – И тогда мы сможем делать просто невероятные вещи в области обработки данных, в медицине, физике, машиностроении, математике. Это будет очередной гигантский прорыв в науке.
– Но при чём тут «Энигма»? – спросил Джордж.
– При том, – ответила Берил, – что «Энигма» – предшественница множества поразительных технологий. И важно, что «Энигма» на самом деле существует и доказала свою действенность. А квантовый компьютер на данный момент ещё не действует, поскольку не существует.
– Да! – Эрик рассмеялся. – Моя нынешняя работа по большей части состоит в исправлении ошибок в квантовых вычислениях…
– Кстати, – Берил указала на Эрика, – перед вами единственный, наверное, человек на Земле, способный управлять квантовым компьютером – если бы, конечно, такой компьютер существовал.
Эрик расплылся в довольной улыбке.
– Выявлять ошибки в квантовых вычислениях, – сказал он, – по сути означает убедиться в том, что, получив функционирующий квантовый компьютер, мы будем способны держать его под контролем. Пока что это выглядит маловероятным! С «Энигмой» такой проблемы не было.
Что такое компьютерный код?Код как тайнопись
Люди с давних времён научились кодировать – шифровать – сообщения так, чтобы тем, кто не знает шифра, эти сообщения казались абракадаброй. Это позволяло посылать союзникам тайные послания, которые не сможет прочесть враг.
В наши дни всякий, кто что-то покупает в интернете – например, музыку, книги или подарок, – тоже вынужден зашифровывать номер своей банковской карты, чтобы никто не украл его деньги. Современные компьютеры не только обеспечивают шифрование сообщений, но и дают возможность убедиться, что сообщение не подделано и что отправитель – не подставное лицо.
Шифрование в компьютере происходит очень быстро, ведь шифруются биты, а не буквы; а вот взломать такой шифр, если нет секретного ключа, чрезвычайно трудно. Однако взломщиков это не останавливает, они придумывают всё новые и новые методы, и вполне возможно, что рано или поздно все существующие шифры будут взломаны. Что ж, тогда придётся изобретать новые!
Языки программирования
С точки зрения математики кодирование – это превращение одного набора символов в другой по определённым правилам.
Если правильно «закодировать» (ещё говорят – «запрограммировать») команды и данные в виде ноликов и единичек, то компьютер их поймёт. Как именно это сделать? По специальным правилам, которые у каждого процессора свои. Получившиеся нолики и единички, которые «понимает» процессор, называются машинным кодом. Каждый набор правил – это особый алгоритм. Запасшись терпением, программу из ноликов и единичек можно составить самому и записать ручкой в тетради. Но у компьютера это получится гораздо быстрее.
Люди пишут программы на легко читаемых языках программирования, таких как С или FORTRAN; оба эти языка состоят из обычных английских слов, так что нет нужды возиться с ноликами и единичками. Существует много разных языков программирования, на которых мы можем «говорить» с ком пью те ром. Под «компьютерным кодом» мы обычно подразумеваем программу, написанную на одном из таких языков.
Компиляторы – это специальные программы, которые преобразуют программы на высокоуровневых языках программирования в понятный процессору машинный код. Машинный код обычно записывают в шестнадцатеричной системе счисления.
Взломать компьютерный код – значит добиться сбоя в программе или сделать нечто совершенно непредвиденное. Так, злоумышленники в интернете из хулиганских или преступных побуждений пытаются получить несанкционированный доступ к компьютеру жертвы (например, чтобы завладеть данными кредитной карты и украсть с неё деньги).
АлгоритмыАлгоритм – это пошаговый процесс с чёткими правилами, объясняющими, как на каждом шагу преобразовать один набор символов в другой. Например, мы учимся умножать или делить в столбик по шагам – эти шаги и есть алгоритм умножения или деления в столбик. Для любого примера на умножение или деление больших чисел алгоритм работает одинаково: на каждом шагу промежуточный результат записывается на новой строчке до тех пор, пока не будет получен ответ.
Алгоритмы существуют давно. Например, Евклид описал алгоритм нахождения наибольшего общего делителя двух целых чисел примерно за 300 лет до нашей эры (хотя сам алгоритм, возможно, ещё старше).
Слово «алгоритм» происходит от имени персидского математика IX века Аль-Хорезми, который, в частности, описал алгоритмы арифметики, а также внёс большой вклад в развитие алгебры.
В XX веке математики пытались дать точное определение алгоритма на языке математики, но все их попытки оказались эквивалентны уже знакомому нам определению: «То, что может машина Тьюринга». Ни один компьютер пока не способен на большее.
Любая компьютерная программа сводится к алгоритму, который меняет значения битов в памяти компьютера на каждом цикле процессора.
– А мы смогли бы пользоваться «Энигмой», мы с Анни? Смогли бы посылать друг другу шифровки? – спросил Джордж.
– «Энигма» не умеет посылать сообщения. – Берил допила свой херес. – Она их зашифрует и расшифрует, но вам понадобится ещё и средство передачи. Раньше было принято передавать шифрованные сообщения по радио с помощью азбуки Морзе. Но в наши дни имеются технологии, которые позволяют делать и то и другое: ежесекундно зашифровывать миллиарды сообщений и рассылать их по всей планете по проводам или с помощью радиоволн; это делают компьютеры. А потом уже другие компьютеры расшифровывают эти сообщения. Любое электронное письмо, любой поисковый запрос, любой текст в командной строке – это зашифрованное сообщение. Некоторые шифры, правда, предназначены для того, чтобы их понимали все, а то в интернете сам чёрт сломал бы ногу. Но всё же, покупая в интернет-магазине, например, носки, вы наверняка захотите, чтобы как минимум номер вашей кредитной карты был зашифрован, иначе кто-то может подглядеть его и украсть ваши денежки. Представьте себе, сколько в мире компьютеров, от которых