Найти в Дзене
Мир в Йоттабайтах

Ошибка на миллиард долларов: Почему «пустота» (NULL) в коде является главной угрозой мировой экономике

В 2009 году на одной из конференций Тони Хоар, легендарный ученый в области компьютерных наук, извинился перед всем миром. Он назвал свое изобретение — NULL-ссылку — своей «ошибкой на миллиард долларов». Спустя 15 лет после его слов аналитики признают: Тони сильно поскромничал. Ущерб от этой ошибки для мировой экономики уже давно измеряется сотнями миллиардов. Но как обычная «пустота» может обрушить банковские системы, остановить заводы и заставить ваш смартфон перезагружаться в самый важный момент? В 1965 году Хоар разрабатывал язык программирования ALGOL W. Ему нужно было решение для ситуации, когда переменная существует, но у неё нет значения. Хоар решил, что проще всего будет создать специальный указатель, который ведет «в никуда». Он назвал его NULL. Это было просто в реализации, и он внедрил это решение за пару дней. Проблема в том, что компьютер — это исполнительный и очень «буквальный» механизм. Когда программа пытается совершить действие с переменной (например, сложить числа и
Оглавление

В 2009 году на одной из конференций Тони Хоар, легендарный ученый в области компьютерных наук, извинился перед всем миром. Он назвал свое изобретение — NULL-ссылку — своей «ошибкой на миллиард долларов».

Спустя 15 лет после его слов аналитики признают: Тони сильно поскромничал. Ущерб от этой ошибки для мировой экономики уже давно измеряется сотнями миллиардов. Но как обычная «пустота» может обрушить банковские системы, остановить заводы и заставить ваш смартфон перезагружаться в самый важный момент?

1. ЧТО ТАКОЕ NULL И ОТКУДА ОН ВЗЯЛСЯ?

В 1965 году Хоар разрабатывал язык программирования ALGOL W. Ему нужно было решение для ситуации, когда переменная существует, но у неё нет значения.

  • Представьте анкету: есть поле «Номер машины». Если у человека нет машины, это поле должно быть пустым.

Хоар решил, что проще всего будет создать специальный указатель, который ведет «в никуда». Он назвал его NULL. Это было просто в реализации, и он внедрил это решение за пару дней.

2. ПОЧЕМУ ЭТО СТАЛО КАТАСТРОФОЙ?

Проблема в том, что компьютер — это исполнительный и очень «буквальный» механизм.

Когда программа пытается совершить действие с переменной (например, сложить числа или отправить письмо), она обращается к адресу в памяти. Но если там стоит NULL, программа пытается обратиться по адресу «никогда».

Происходит NullPointerException (NPE) — критический сбой.

Если программист забыл добавить проверку «а не пусто ли тут?» (if x != null), программа моментально «падает».

  • В банке: Транзакция обрывается посередине.
  • В авиации: Автопилот отключается из-за некорректных данных с датчика.
  • В медицине: Аппарат ИВЛ выдает ошибку, потому что не получил значение пульса.

3. ПОСЛЕДСТВИЯ: РЕАЛЬНЫЕ ЦЕННИКИ

Почему мы говорим о миллиардах долларов?

  1. Время разработчиков: Подсчитано, что до 30% времени современные программисты тратят не на создание новых функций, а на написание проверок на NULL и исправление багов, связанных с «пустотой». Это миллиарды оплаченных человеко-часов в год.
  2. Уязвимости: Огромное количество хакерских атак (через переполнение буфера или сбои логики) эксплуатируют именно ошибки обработки пустых значений.
  3. Глобальные сбои: Большинство внезапных «падений» крупных сервисов (Facebook, Amazon, банковские приложения) связаны с тем, что какая-то часть кода не ожидала получить «ничего» вместо данных.

4. МОЖНО ЛИ БЫЛО ЭТОГО ИЗБЕЖАТЬ?

Да. Современные языки программирования (например, Rust, Kotlin, Swift) строятся на концепции Null Safety.

В них система просто не даст вам запустить код, если вы не обработали ситуацию с «пустотой» заранее. Программа заставляет вас сразу решить: что делать, если данных не будет?

Но проблема в том, что мир держится на «старом» коде на C++, Java и Python, где NULL — это фундамент. Переписать всё программное обеспечение планеты невозможно, поэтому мы продолжаем платить этот «налог на пустоту».

ИТОГ: УРОК ДЛЯ БУДУЩЕГО

История NULL учит нас тому, что в IT «временные костыли», созданные за выходные, могут существовать десятилетиями. Маленькое упрощение в архитектуре 60-х годов сегодня превратилось в глобальную проблему безопасности и стабильности.

В следующий раз, когда ваше приложение закроется с «неизвестной ошибкой», знайте — скорее всего, вы только что столкнулись с призраком 1965 года, который до сих пор бродит по серверам всего мира.