Что зависший экран на вашем компьютере и взрыв ракеты могут рассказать нам об ошибках программного обеспечения

Пока я набирал этот текст на своем компьютере, экран внезапно завис, и программа дала сбой. Это было не в первый раз, и, следовательно, в моем компьютере должен быть какой-то баг (как мы называем программные ошибки). К счастью, это была всего лишь безобидная ошибка, приведшая к сбою моего домашнего программного обеспечения, но могут возникнуть и более серьезные повреждения. Возьмем, к примеру, гигантскую европейскую ракету Ариан-5, которая взорвалась менее чем через минуту после первого запуска в 1996 году. Причиной стала глупая маленькая ошибка в программном обеспечении ракеты.

Но почему программные ошибки вообще называются багами? На заре компьютеров было всего несколько машин. В 1947 году один из этих компьютеров неожиданно начал выдавать неверные результаты. Когда инженеры того времени осмотрели машину, чтобы выяснить, что могло быть причиной этого внезапного отказа, выяснилось, что это было связано с присутствием мотылька, который застрял внутри одного из электромагнитных переключателей (в те времена компьютеры еще использовали электромагнитные переключатели в качестве основных элементов). Другими словами, внутри машины был буквально жучок! С этого момента компьютерные ошибки обрели новое имя.

Термин ошибка теперь широко используется и за пределами контекста, связанного с компьютером, но что такое ошибка в контексте компьютера? Чтобы проиллюстрировать это, возьмем пример из другого века, а именно знаменитую ошибку 2000 года (также известную как ошибка тысячелетия). Большинство из вас слышали об этом, поскольку большую часть 1999 года это была большая тема в прессе.

Проблема возникла из-за того, что программисты использовали двузначный код для хранения года в дате (таким образом, 1957 будет просто храниться как 57). Однако это сделало 2000 год неотличимым от 1900, и смена года с 1999 на 2000 могла в этом смысле привести к прыжку назад на 99 лет назад для компьютера! Это была предсказуемая ошибка, которая могла привести ко всем видам странного поведения. Например, программа, рассчитывающая проценты по банковскому счету, может внезапно добавить проценты за 99 лет.

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

Через пару десятилетий у нас будет еще одна возможность увидеть, какой прогресс был достигнут с точки зрения обработки компьютерных ошибок, связанных с датами. В 2038 году у нас будет еще одна ситуация, подобная Y2K, из-за более современного способа хранения дат в компьютерах, а именно количества секунд, прошедших с 01.01.1970. На самом деле, к 2038 году это количество пройденных секунд будет слишком большим для 32-битного контейнера и, таким образом, будет равно нулю.