Рефакторинг сложных алгоритмов
Вот есть такая проблема что логика программы очень сложная. Она сложная не потому, что написана плохо. Сложность кода естественным образом отражает сложность предметной области. Какие пути существуют в упрощении такого кода? Присматриваюсь к следующим вариантам: агентам (agent-oriented programming); явной state-machine; попытке разбить всё на компоненты, взамодействующие через передачу сообщений (SOA). На уровне кода всё становится чище (и проще в unit-тестировании), но на уровне семантики всё так же запутывающе сложно. Да и сами подходы имеют свои плюсы и минусы, оверхед. Одна задача решается, но создаются две новые.
Просто интересны истории успеха/неуспеха. Может кто-то писал ПО для авиации какой-нибудь, которое является системой зависящей от сотен параметров _одновременно_? Такие системы еще эволюционируют со временем (когда бизнес требования меняются). Кстати, в Linux kernel логика непростая, особенно в планировщике задач и i/o, но там вроде как революционные изменения происходят не часто.