На что лучше ответить на других сайтах (таких как Википедия), потому что там уже есть довольно обширные ответы.
Почему вы должны их знать: потому что вы, вероятно, уже реализовали их.
Каждый раз, когда ваш код имеет ограниченное количество возможных состояний (это часть «конечного состояния») и переключается на другое, как только происходит какой-то ввод / событие (это часть «машины»), когда вы пишете конечный автомат .
Это очень распространенный инструмент, и знание теоретических основ для этого, умение рассуждать об этом и знание того, как объединить два автомата-автомата в один, выполняющий одну и ту же работу, могут быть очень полезными.