For Computer Science students, designing Turing machines is a Herculean task. Formal Languages and Automata Theory textbooks aid students by introducing a graphical notation for Turing machine composition. The difficulty of the task remains unchanged, because design principles are not emphasized and students rarely have the opportunity to program their designs in a textual programming language which allows them to write unit tests. To aid students that are trained as programmers, FSM-a domain-specific language for the Automata Theory classroom-has been developed. Using FSM, students design, program, validate, and establish the correctness of their Turing machines. Once they are familiar with Turing machines, students are introduced to Turing machine composition much like they are introduced to function composition when they learn to design programs. To compose Turing machines in FSM, there is an embedded domain-specific language that students may use. In this manner, students' training in programming is made relevant in the course. This article discusses how students are taught to design, program, validate, and establish the correctness of composed Turing machines.