Т.к. я обучаюсь по специальности связанной со схемотехникой, но в тоже время работаю программистом, я стал задаваться вопросом - почему аппаратные решения, с которыми мне приходилось сталкиваться столь надежны и быстры, а большинство программ имеют довольно несовершенную структуру кода и как правило содержат приличное количество ошибок. Почему я сравниваю столь, казалось бы, разные категории - железо и софт? Дело в том, что я не могу сказать чем принципиально отличается проектирование цифровых схем от написания кода программы, тем более, что схемы можно описывать и кодом, на языках Verilog и VHDL. Может вся проблема в используемых инструментах? Типичная электронная схема представляет собой наборы из узлов 2-х типов - комбинационные схемы (КС) и конечные автоматы (КА). Последнее время я стал увлекаться функциональным программированием и меня как молнией ошарашило. КС есть узел у которого сигнал на выходе однозначно задан сигналом на входе, т.е. чистая функция с типом [bit] -> [bit]. КА есть схема с памятью, похоже на монаду ST в Haskell. Я часто слышу что ФП не более чем очередная "серебряная пуля", однако цифровые схемы ни есть живое подтверждение правильности подхода? Хотелось бы услышать мнения.