While solving common programming tasks it's usually not helpful to think of an automaton. But there are still many cases where they are applied:
- writing small parsers (e.g. parse an integer/float); in order to not forget edge cases drawing an automaton is really helpful; for more complicated parsers grammars are usually a better tool
- state machines are often encountered in game programming (e.g. to manage which animation is currently executing; e.g. press the UP key switches the animation state machine in walking up mode; or to manage game states like if are you currently in-game or in the main menu)
- important (string) algos such as the KMP string matching algorithm use an automaton in the background but it's usually represented as a table and quite hard to wrap your mind around
Automatons are models that are theoretically useful to prove properties of language classes. To make proves as simple as possible their definition is also kept simple.
In day to day code you usually stitch together powerful high level data structures to solve your problems and don't think on the low level of e.g. a Turing Machine that would manipulate input on the bit level but rather in terms of higher data types such as ints and lists.
P.S. Automatons are very useful for designing circuits, since circuits work on the bit level and you usually try to minimize the components used it's useful to note down which states your circuit needs and how it should transition between them given some small binary input.