This course gives an introduction to all major programming concepts, techniques, and paradigms in a unified framework. We cover the three main programming paradigms: functional, object-oriented, and declarative dataflow. We explain the four ways to do data abstraction and discuss the trade-offs between objects and abstract data types. We present declarative dataflow, the most useful paradigm for concurrent programming, and show how it avoids race conditions. We give a simple formal semantics for all concepts and illustrate them with practical code that runs on the accompanying open-source platform, the Mozart Programming System. This course is targeted toward people with a basic knowledge of programming. It will be most useful to beginning programming students, but the unconventional approach should be insightful even to seasoned professionals.