An exploration of the design space and development of programming languages from the perspective of control structures: the language mechanisms that enable programs to control their execution flows. Starting with the 'goto' jumps of early programming languages and the emergence of structured programming in the 1960s, this book explores advanced control structures for imperative languages such as generators and coroutines, then develops alternate views of control in functional languages, first as continuations and their control operators, then as algebraic effects and effect handlers, as found in the OCaml language. Blending history, code examples, and theory, it offers advanced students, researchers, and programming language enthusiasts an original, comparative perspective on programming languages, as well as an extensive introduction to algebraic effects and other contemporary research topics.