This document provides an introduction to finite automata (FA) and deterministic finite automata (DFA). It discusses how FA can be used to recognize languages and solve decidable problems. Two methods for implementing FA in code are presented: 1) using position in the code to implicitly maintain state, and 2) using a variable to explicitly track the current state. Several examples of DFAs that recognize specific languages are described. The key components of a DFA (states, alphabet, transition function, start state, accepting states) are also defined.