Когда-то я обнаружил, что электронщики матерятся сильнее, чем программисты. И понял, почему. Ошибки и неполадки в электронных схемах сложнее диагностировать и устранить.
С отладкой механических устройств я по работе почти не сталкивался. Но в те пару раз, когда это всё-таки происходило, я обнаружил ещё более интересную вещь: неполадки в механической части ещё сложнее диагностировать и устранить, чем в электронной. Штанги не доходят туда, куда нужно (а если доходят, то не фиксируются в нужном положении). Колёсики заедают. А "посмотреть", что происходит на самом деле -- возможности практически нет.
Однако, существует широко распространённое мнение, что если устройство функционирует чисто механически -- то это "на века". Электронные приборы гораздо нежнее и легко выходят из строя. А уж программа -- это вообще что-то эфемерное. Каждый первый разработчик ПО в лицензионном соглашении пишет, что отказывается от ответственности за то, что сотворила его программа (и за то, что не сотворила, тоже). А программы, за которые разработчик отвечает своей шкурой, стоят совсем других денег.
Откуда же берётся, что механическое устройство такое надёжное? Дело в сложности. Те механические устройства, которые надёжные, содержат в себе, к примеру, сотни элементов. Они перемещаются, к примеру, 10 раз в секунду, не больше. Или просто вертятся без остановки. А процессор? Сколько в нём транзисторов? Зависит от процессора, но, к примеру, 731 млн (2008 год, Core i7 "Bloomfield"). А частота -- 2 ГГц (он же). Это частота, с которой могут перекидываться транзисторы внутри. Если бы механическое устройство состояло из такого же количества частей, оно бы проработало весьма недолго. Ибо поломка любой детали -- кирдык.
Вот и получается, что если пересчитать на время работы, то электронное устройство может отказывать быстрее, чем механическое.
С программами дела обстоят несколько иначе. Если программа не зависит от внешних факторов, кроме предусмотренных "входных данных", её надёжность будет примерно такая же, как у электроники, на которой она работает. То есть -- прошивка микроконтроллера даст сбой либо из-за ошибок в самой прошивке (которые относительно просто обнаружить), либо из-за сбоя электроники. Но на практике прошивки редко воспринимаются пользователями как "программа". Когда говорят о надёжности программы, имеют ввиду чаще всего прикладное ПО, работающее под какой-либо ОС. И на этой ОС кроме самой программы тусуется ещё десяток посторонних программ. И всё это взаимодействует друг с другом и с ОС непредсказуемым образом. То есть, выход программы из строя может быть вызван неизвестным количеством внешних факторов (помимо сбоев электроники и ошибок самой программы). Кто же согласится нести ответственность за такое?
При таком подходе программы будут отказывать заведомо чаще, чем электроника, на которой они работают. Хотя сложность программ (с логической точки зрения -- число сущностей, которыми они манипулируют, число операций и т.п.) гораздо меньше сложности процессора.
Ну и ещё одна причина ненадёжности программ -- лёгкость их создания. Каждый человек, обладающий зачатками интеллекта и небольшим желанием, может взяться за создание программы. И не только может -- а обязательно возьмётся. Надёжность таких программ будет весьма невысока -- хотя бы потому, что автор не будет об этой надёжности задумываться. Электронные и механические устройства в этом смысле защищены барьером лени.