I've got some background with state machines. I've made it through about half Miro Samek's "Practical Statecharts in C/C++" and it's very good. I highly reccomended it. The term "state machine" comes from the realm of digital logic design. Design techniques for logic fall into two sub-categories, combinational logic (where the outputs at any instant in time depend only on the current inputs), and sequential logic (where some memory is involved, i.e. outputs depend on the history of inputs.) State Machines are a design abstraction applied to sequential circuits. When I was in school (before some of you were born) we used State Transition Diagrams (STDs), and there were two somewhat different design patterns, Mealy and Moore machines, that we'd design with and crank down to implementation in hardware... In software, that design abstraction of state machines turns out to be a very useful design tool, and one that few programmers without an EE, communications protocol, or language parsing background know much about. Even those who apply in state machines in one context forget to apply them when writing other aspects of our software, but the advantages are it provides a structured way to think about the changes in behavior of an object over time. Software designed with state machines tends to avoid the growing collection of flags that collect stateful object built from the bottom up. The Unified Modeling Language (UML) has included newer form of state machine design notation, David Harrel's Statecharts, that superset the Mealy and Moore approaches, and add a hierarchical state abstraction that is similar, but orthogonal to, the object-oriented notion of inheritance. Douglas Powell has written some pieces on statechart design, but Miro Samek's "Practical Statecharts in C/C++" (CMP books) is a tour-de-force of state-machine design. He covers design and tours a various of state machine implementation techniques before laying out a powerful new (at least to me) state machine implementation technique that's very compelling. While the examples in this book are typically Win32 GUI programs, the implementation techniques shown in this book are extremely efficient, suitable for use in real-time systems. Coupled with this advantage, the drawback is the implementation closely tied to C/C++ features not available in other languages. I for one have become nearly addicted to C#, and while it's a wonderful language for C/C++ folk, it doesn't include either pointer-to-member functions, or macros, used