This course is an introduction to the control of discrete, asynchronous, nondeterministic systems like manufacturing systems, traffic systems, and certain communication systems. Architectural issues (modular, decentralized, and hierarchical control) are emphasized. The theory is developed in an elementary framework of automata and formal languages, and is supported by a software package for creating applications.