Первый компьютерный баг: мотылёк, который вошёл в историю
Слово «баг» знакомо каждому, кто хоть раз сталкивался с программами. Кнопка не нажимается, приложение закрывается, а персонаж в игре внезапно проваливается сквозь пол — где-то поселился баг.
Но однажды компьютерный баг действительно оказался насекомым.
Что произошло 9 сентября 1947 года
Инженеры Гарвардского университета работали с компьютером Harvard Mark II. Это была огромная электромеханическая вычислительная машина, занимавшая целую комнату.
Вместо современных микросхем внутри неё находились тысячи реле — механических переключателей, которые открывали и замыкали электрические цепи.
В какой-то момент машина начала работать неправильно. Команда проверила оборудование и обнаружила причину: между контактами одного из реле застрял мотылёк.
Насекомое аккуратно извлекли и приклеили скотчем в журнал работы компьютера. Рядом появилась подпись:
«Первый реальный случай обнаружения бага».
Так обычный мотылёк стал, вероятно, самым известным насекомым в истории информационных технологий.
Была ли Грейс Хоппер автором слова «баг»?
Эту историю часто связывают с программисткой и офицером ВМС США Грейс Хоппер. Она работала с компьютерами Harvard Mark I и Mark II, а позже участвовала в создании первых компиляторов и языка COBOL.
Однако Хоппер не придумала слово «баг».
Инженеры использовали его для обозначения технических неисправностей ещё в XIX веке. Например, Томас Эдисон упоминал «баги» в электрических устройствах задолго до появления программируемых компьютеров.
Шутка инженеров заключалась именно в том, что на этот раз причиной неисправности оказался настоящий bug — насекомое.
Сам журнал, скорее всего, тоже принадлежал не лично Хоппер. Но она была частью команды и позднее рассказывала эту историю на лекциях, благодаря чему мотылёк стал знаменитым.
Почему насекомое могло остановить компьютер
Современный процессор содержит миллиарды транзисторов, которые невозможно увидеть без специального оборудования. Harvard Mark II работал иначе.
Его вычисления зависели от физических движений электромеханических реле:
- Реле получало электрический сигнал.
- Контакт механически переключался.
- Цепь замыкалась или размыкалась.
- Машина переходила к следующей операции.
Если между контактами оказывался посторонний предмет, реле не могло нормально переключиться. Один маленький мотылёк был способен нарушить целую последовательность вычислений.
Получается, первая известная компьютерная «ошибка» такого рода была не ошибкой программы, а настоящей поломкой оборудования.
Как изменились баги
Со временем компьютеры стали электронными, а насекомым стало намного сложнее проникать внутрь вычислительных элементов. Но баги никуда не исчезли.
Сегодня их причинами могут быть:
- опечатка в коде;
- неверное условие;
- неожиданное действие пользователя;
- несовместимость разных компонентов;
- проблемы с сетью;
- неправильная обработка данных;
- ситуация, которую разработчик просто не предусмотрел.
Например, программа должна поделить одно число на другое. Всё работает, пока пользователь не вводит ноль. Если этот случай не обработан, программа может завершиться с ошибкой.
Мотылька внутри нет, но баг на месте.
Что такое дебаггинг
Вместе со словом bug появилось и слово debugging — поиск и устранение ошибок.
Современный дебаггинг может включать:
- чтение журналов работы программы;
- пошаговое выполнение кода;
- проверку значений переменных;
- автоматические тесты;
- воспроизведение действий пользователя;
- долгое и задумчивое рассматривание кода, который «точно должен работать».
Иногда ошибка находится за минуту. Иногда разработчик тратит на неё несколько часов, а затем обнаруживает одну неправильную букву.
Особенно приятно, когда после исправления одного бага появляются ещё три. Это называется не проблема, а расширение команды проекта.
Почему невозможно создать программу без ошибок
Чем сложнее система, тем больше в ней возможных состояний и связей.
Современное приложение может одновременно взаимодействовать с сервером, базой данных, операционной системой, браузером и десятками сторонних сервисов. Разработчик не способен заранее проверить каждую возможную комбинацию событий.
Поэтому задача команды — не только писать код, но и создавать процессы, которые помогают обнаруживать ошибки раньше:
- проводить проверку кода;
- использовать автоматические тесты;
- собирать отчёты о сбоях;
- постепенно выпускать обновления;
- изучать реальные действия пользователей.
Хорошее программное обеспечение — не то, в котором никогда не было багов. Это система, в которой ошибки быстро находят, исправляют и не позволяют им возвращаться.
Где находится первый баг сейчас
Журнал с приклеенным мотыльком сохранился. Сегодня он находится в коллекции Национального музея американской истории Смитсоновского института.
Небольшое насекомое пережило компьютер, который сломало, и стало музейным экспонатом.
Итог
Мотылёк из Harvard Mark II не был первым багом в истории техники и не подарил программистам само слово. Зато он стал первым задокументированным случаем, когда компьютерный «баг» оказался настоящим насекомым.
С тех пор компьютеры уменьшились от размеров комнаты до размеров кармана, а программы стали в миллионы раз сложнее.
Но одна традиция осталась неизменной: если что-то работает неправильно, сначала мы называем это багом, а потом пытаемся понять, где он спрятался.