# The Programming for Lovers Manifesto

Every radical must have a manifesto, and I cannot consider myself above this law. So here goes.

I teach a programming course to introductory graduate students at Carnegie Mellon University. Over the past several years, I have watched the audience flip from predominantly complete beginners to predominantly students who have coded before. Has the course been forced to change drastically? No! My students are wonderful, yet despite their previous experience, they typically have retained very little knowledge of the basics of coding.

Many online resources teach the basics of coding, and I admire these platforms for making the subject accessible to so many. Yet despite their success in growth and inclusion, few of these platforms approach the rigor of an immersive university course in programming. As a result, they fail to train students who are prepared to take next steps in the study of computer science.

Perhaps you have explored coding resources online and felt like you struggled to take the next steps; if so, then you have come to the right place.

My dream for P4❤️ is to build a bridge connecting beginners to a more thorough understanding of the foundations of programming and its application to scientific problems. To this end, the P4❤️ manifesto comprises six defining points.

## The Six Point Plan

. Students of all ages learn the most when they enjoy the experience, and so above all else, I want P4❤️ to be fun. I have worked hard to find engaging narratives that serve as the bedrock for each chapter.*Fun**Real applications***.**Many programming courses are designed by and for computer geeks and mathmos like me. At every moment of P4❤️, learners will be able to put their finger on a real scientific application motivating what they are doing, whether it is identifying hidden messages in bacterial genomes, forecasting a presidential election from polling data, or simulating the moons of Jupiter. In this way, I want to help learners appreciate that computing is everywhere.When a programming course is taught rigorously, with a thorough treatment of topics that respect its learners’ intelligence, it trains students who become*Rigor*.*empowered*. In P4❤️, we will explain how random numbers get generated. We will explain how the computer manages memory. And we will not shy away from mathematical details, since programming is inextricable from quantitative problem solving.A computer is an electrical machine whose transfer of information is predicated on sequences of electrical signals that can be represented by strings of ones and zeroes. P4❤️ learners will appreciate the connection between the programming language and the machine by understanding how the code that we write can be converted to a binary representation. The course will also introduce the theoretical topics of Turing machines, undecidability, and P vs. NP. With this theoretical grounding, students will understand what a computer is and what a computer will never be.*Appreciation of the foundations of computing*.P4❤️’s current programming language is Go, which has features that make it easy to teach to beginners. However, P4❤️ is not a course about how to code in Go; it is a course about how to program. Go just happens to be the currently featured language. Programming is clearly and correctly telling a computer how to execute a task, a skill that is independent of any particular language. Accordingly, the “main text” of this course is written without any specific reference to a language. Instead, we teach the basics of how to translate ideas into instructions that a computer can understand by using pseudocode, which is a language-neutral way of describing algorithms. Pseudocode gives learners a stress-free way to learning the basics of programming without stressing out about a specific language’s syntax. Each chapter includes a separate set of code alongs showing how to implement the ideas that we learn about in the main text. Rather than being redundant, this structure provides learners with the repetition that is needed for topics to sink in.*Language independence.*P4❤️ facilitates active learning by integrating “just in time” exercises throughout the course. Each code along includes autograded exercises allowing students to check their work from code alongs. And each chapter concludes with a collection of exercises providing students with extra practice on the chapter’s topics.*Learn by doing.*

If you read this far, then I am impressed! Now you’re ready to get started with P4❤️ by following the link below, which will transport you back 2,300 years to ancient Greece.

Happy coding!

Phillip Compeau