В одной из многочисленных частей фильма «Крепкий орешек» случается цифровой апокалипсис. Хакеры получают доступ ко всему, чем государство управляет с помощью компьютеров, – светофорам, системам видеонаблюдения и снабжения электроэнергией, счетам социального обеспечения и так далее; начинается хаос, который приводит к многочисленным жертвам. Этот сценарий не так далек от реальности: 28 сентября «технический сбой» вызвал задержки рейсов одновременно в аэропортах по всему миру – в Австралии, Японии, Европе, США. Причиной стали неполадки в работе электронной системы, которой пользуются авиакомпании и аэропорты для регистрации пассажиров и багажа. К счастью, сбой быстро устранили, но его последствия могли бы быть трагическими.
Ночью с 10 на 11 апреля 2014 года весь штат Вашингтон на северо-западе США остался без экстренной службы спасения 911 на шесть часов. Все, кто звонил, слышали короткие гудки в трубке. Одна женщина, пытавшаяся вызвать полицию, потому что в ее дом забрался грабитель, набрала номер службы 37 раз и, так и не получив ответа, схватилась за нож, чтобы защищаться; злоумышленник бежал. Как выяснилось позднее, cбой случился потому, что один из серверов, через который проходили звонки, был запрограммирован на прием не более нескольких миллионов вызовов. Когда лимит был превышен, звонки просто перестали приниматься. Только утром программисты поняли, в чем была проблема и что для ее устранения требовалось всего лишь поменять одну цифру.
До недавнего времени критически важные системы контролировались механически или с участием человека и постоянно проходили проверки для выявления неполадок. Теперь они зависят от компьютера, а тот – от написанной для конкретных целей программы. И если описание электромеханического устройства занимало несколько страниц, то с программами все иначе: код может занимать десятки и сотни миллионов строк. Внесение изменений в программу стоит недорого, и поэтому она меняется постоянно – добавляются новые строчки, новые функции, новые возможности. Эта гибкость не только чудо, но и проклятие, пишет журналист и программист Джеймс Сомерс в статье на Atlantic. По мнению некоторых специалистов, нам необходимо изменить программирование – и сделать это как можно скорее, пока не грянула катастрофа.
Сложность созданных человеком систем превысила его возможности управления ими, и самое неприятное в том, что программное обеспечение не ломается – оно работает именно так, как ему велели. Проблемы случаются, когда приказ неверен. Другими словами, ошибки программы, уверяет Сомерс, – это ошибки человеческого понимания или воображения.
Программный код чересчур сложен, чтобы его представить, слишком «чужероден» для человеческого восприятия. Раньше мы могли видеть, как меняется мир вокруг нас, – как дороги покрываются асфальтом, как растут этажи домов. Теперь, когда что-то меняется, мы этого не замечаем, – изменения происходят благодаря добавлению строчек в код. Мы давим на педаль газа в автомобиле, и тот ускоряется, но между этими двумя событиями нет прямой механической связи – все происходит посредством компьютера, который решает, сколько воздуха дать двигателю. И вот это может быть по-настоящему опасно.