Learn to Code by Solving Problems: A Python Programming Primer Homepage for the book Learn to Code by Solving Problems: A Python Programming Primer

For Teachers

To all the CS and programming teachers, instructors, professors, and mentors out there: thank you for all that you do to spread the learning and love of programming. I hope that my Learn to Code book helps you in your teaching quest. Please see below for information on free evaluation/desk copies, pedagogical features of the book, resources for teachers, and more.

Q: How can I receive evaluation or desk copies of the book?

A: my publisher, No Starch Press, offers free academic review copies for qualified educators. Please do get in touch with them.

Q: What are some of the pedagogical features of the book?

A: my area of research is how students learn CS and programming topics. That research fails if it does not escape academic papers to help actual students learn. For this reason, I’ve incorporated best-practice teaching approaches into the book, including:

  1. Peer Instruction (PI) questions throughout the text. We need to give students opportunities to apply what they have just learned, in order to identify any misconceptions or misunderstandings. This is the purpose of the multiple-choice PI questions that you’ll see in the boxes. Please encourage your students to pause to respond to these questions. These questions have been developed over the past ten years based on actual student stumbling points or misconceptions. If you’re interested in using PI more generally in your teaching, please see our Peer Instruction for Computer Science page.

  2. Immediate, automated feedback. How do students know whether their code is correct? Good question :) especially in the usual case when an expert (e.g. you) is not immediately available. Accurate, immediate feedback during the learning process is crucial for learning to program. To make this happen, the book uses online programming judge websites that evaluate code to determine how many test cases pass. Ideally, students will use the book in concert with the judge websites.

  3. Practice, practice, practice. Each chapter ends with a small (i.e. not an overwhelmingly huge) number of hand-picked exercises that I recommend as practice. I encourage students to work through as many of these as they have time for. I also provide sample solutions for these exercises in the downloadable code archive. Students can use these sample solutions if they are stuck, or to learn more about solutions to the problem.

  4. Learning in context. Why should students learn how to use loops? Lists? Functions? Dictionaries? No, really :) why?

    To solve increasingly complex problems using a computer!

    For this reason, everything the student learns about programming is in the context of solving a problem. Why do we need loops? Because without them we can’t solve problems like this. Why do we need functions? Because without them our programs would be monolithic and unwieldy. The core question that we ask and answer repeatedly in the book is: what new concepts do we need to solve new problems that look like this one?

Q: Are there additional teaching resources available to help me adopt the book?

A: yes!

Q: Can we chat?

A: Yes! Any other questions or comments about the book? Have something to share? Developed other materials for the book? Using the book in an innovative way? Please keep in touch. Thank you!