«Быстро, сколько автоматов в вашем коде?»
Ноль, верно?
(Да, мне не нужно было говорить «Быстро» - вы уже знали ответ)

Лучше задать вопрос: «Сколько мест в вашем коде может выиграть от использования FSM?».
Этот вопрос гораздо более обсуждаемый, с про-FSM и против -Лагеря FSM переходят в обычное дело (если вы жаждете развлечений, возьмите немного попкорна, а затем спросите группу разработчиков Erlang о gen_fsm).

Еще раз перефразируя вопрос на «Почему в вашем коде нет конечных автоматов?», вы обычно получаете ответы типа «Мне они не понадобились, когда я начинал», и «Они слишком сложные».
И теперь мы подошли к сути вопроса. Давайте разберем эти два ответа

Мне они не понадобились, когда я начинал: мы все обучены постепенно добавлять поведение в наш код, и, когда вы только начинаете, это просто не похоже на систему стоит времени, энергии и усилий, связанных с использованием конечного автомата.
Они слишком сложные: Помните конечные автоматы в вашем классе CS? Хуже того, в вашем классе систем управления для вас, типа EE? Они были забиты автоматами, Муром / Мили, Акцепторами, математикой и прочим. И да, это было чертовски сложно.
В основном нас учили воспринимать их как слишком сложные, что гарантирует, что когда мы начинаем с нового проекта, мы не используем конечный автомат. В конце концов, мы хотим начать с простого, верно? А конечные автоматы - это сложно, не так ли? И к тому времени, когда проект будет оправдан, он станет огромным, и кто захочет реорганизовать все это?

Дело в том, что они несложные. Все это в классе CS? Вы почти не используете его большую часть - вы в основном смотрите на состояния и переходы (и, учитывая, что большинство языков имеют некоторый уровень первоклассных инструментов, поддерживающих конечные автоматы, в наши дни это действительно просто (•) . Вдобавок ко всему вы получаете огромные преимущества в своем коде с точки зрения ясности, возможности аудита, ведения журнала, обновления, изоляции и многих других.
И да, вы они были нужны, когда вы начинали, вы этого не осознавали. Или, может быть, были, но у вас было немного «Кто хочет заранее продумать все состояния системы », Что гораздо более вероятно. В конце концов, все обдумывать, прежде чем писать код?

Так что да, научитесь любить свои автоматы ...

(•) Посмотрите отличную главу Фреда о FSM, чтобы узнать, как это делает erlang.