CMU 15-112, Summer 2023

Fundamentals of Programming and Computer Science
Carnegie Mellon University


Click here for the Term Project Gallery!



None. Course notes on CMU CS Academy and the website.

We often hear that technology is changing the world around us. But it’s not the technology transforming our world–it's the people–who design, develop, and analyze computer systems and software to solve big problems. This course will teach the fundamentals of computational problem solving, using Python, a powerful and versatile programming language. This course is a technical introduction to programming with an emphasis on producing clear, robust, and reasonably efficient code using top-down design, informal analysis, and effective testing and debugging. Starting from first principles, we will cover a large subset of the Python programming language, including its standard libraries and programming paradigms. This course is taught using a hands-on approach, with students completing programming assignments both in homeworks and in quizzes. Lastly, the course will culminate in a term project where students will design and implement a substantial Python program from the ground up.

This course assumes no prior programming experience. Even so, it is a fast-paced and rigorous preparation for 15-122. Students seeking a more gentle introduction to computer science should consider first taking 15-110.

NOTE: Undergraduate students must achieve a C or better in order to use this course to satisfy the pre-requisite for any subsequent Computer Science course.

Ranysha Ware (Ray) (

At the end of the course, students should be able to:

  • Computationally solve problems in Python using:
    • sequential, conditional, and loop statements
    • strings, lists, tuples, sets, and dictionaries
    • objects and classes
    • recursive approaches
    • graphics and interaction
  • Analyze code through code tracing to deduce the output of small programs
  • Recognize patterns to identify possible solutions to a given problem
  • Construct code using top-down design by breaking problems into smaller steps
  • Applying debugging techniques to find and fix error
  • Reflect on their learning, identify areas where they need to improve, and grow from mistakes
  • Design and implement a substantial program in Python with minimal guidance