Introduction to the Theory of Computation by Michael Sipser

You will find that this textbook uses a modular structure for flexible learning.