Introduction to the Theory of Computation by Michael Sipser You will find that this textbook uses a modular structure for flexible learning.