A finite state machine (FSM) is a way of modeling a system such that there are a limited number of finite “states” that a system can be in, and that it can only be in one of those states at a time. Events (e.g., pushing a button) cause the system to change from one state to the next. Unexpected events do not cause the system to change states, which is useful for ignoring spurious inputs. Rather than coding for every possible input, you can instead code only for inputs that matter at the given time. The following resources provide a solid conceptual framing and implementation examples:
UML is an industry-standard specification for representing software designs. It is equivalent to schematics for hardware designs. More information on UML can be found at uml.org. Official documentation on UML is available at:
Common UML diagrams that you may use include:
Activity Diagram. An Activity Diagram (similar to a flowchart) captures the overall behavior of a program from start to finish.
Statechart Diagram. A Statechart Diagram is a UML representation for a finite state machine. A finite state machine (also called a state machine) is a type of software design where your program is only in a single state at a time. The program changes state when a particular event happens, and remains in the same state if no event (or an unknown event) happens. This makes your program less likely to have unpredictable behavior, and is commonly used for copy machines, stoplight controllers, etc.
Sequence Diagram
Pseudocode is a near-English representation of a program that allows you to represent the functionality of a program without worrying about the syntax. It is useful when planning how software will work. Pseudocode can be created in any text editor or word processing program. An example of pseudocode for the game Monopoly is available here.
Many links above suggested by Cecilia La Place