Космический зонд Скиапарелли разбился о поверхность Марса в октябре 2016 года после 15 месяцев полёта до планеты. О причинах крушения стало известно только сейчас.
Согласно отчёту комиссии, расследовавшей происшествие, катастрофа случилась из-за "неверно интерпретированных данных". Забегая вперед скажу, если когда-нибудь подумаете, что вы бездарный программист, то вспомните эту историю.
Вольный перевод хронологии событий из отчёта:
14:42:22 Акселерометры обнаруживают, что аппарат вошел в атмосферу...
14:45:24 «Скиапарелли» сильно раскачиваться (2,5 покачивания в секунду).
14:45:24 Инерциальные датчики измеряют скорость вращения (тангажа) «Скиапарелли» относительно горизонта. Скорость оказывается больше, чем ожидалось и датчики зашкаливают — выдают максимально возможное значение, константу.
По этим значениям система ориентации пытается определить угол наклона аппарата. Но результат вычислений указывает на то, что угол более 90 градусов: аппарат падает вверх ногами. Хотя это не так.
14:46:19 Высота, на которой находится аппарат, определяется как проекция показаний радара высоты на вертикальную ось. Если аппарат находится под углом к горизонту, то его показания умножаются на косинус угла тангажа.
Но угол тангажа, вычисленный по данным зашкаливших датчиков, больше 90 градусов. Следующая фраза в отчёте подчеркнута: «Косинус углов больше 90 градусов отрицателен». В результате «Скиапарелли» считает, что его высота относительно поверхности Марса меньше нуля.
14:46:51 Ошибка определения высоты тянет за собой остальные ошибки: тормозные двигатели не работали достаточно долго, не было уклонения от крышки и ещё несколько проблем.
В итоге, аппарат врезался в Марс со скоростью 540 километров в час.
Прошёл бы мимо этой истории, если бы проблема была в аппаратной начинке. К примеру, космическая радиация повлияла на чипы. Или отвалился контакт при большой вибрации. Или из-за экстремальных температур и давлений "сплавились" движущиеся механические части. Это всё в порядке вещей, потому что космос и его влияние на материалы слабо изучены. Но плохо написать программу - это показатель.
Обрабатываемые данные
Даже плохой PHP программист проверяет все передаваемые данные. Если данные выходят за максимально возможные значения, то они не используются или пользователю выдаётся предупреждение.
В случае с электроникой, всегда принимается в расчёт диапазон её действия. Если датчик ушёл в зашкал, то нельзя использовать его данные...
Мотивация
Если почувствуете себя тупым программистом, то вспомните о сотрудниках NASA. И самооценка сразу поднимется.