CMU 15-112, Spring 2023

Fundamentals of Programming and Computer Science
Carnegie Mellon University

Note: We are currently transitioning to the Summer 112 iteration of the website. For Spring 2023 content, please see
Prior to July 3, any content on this website that indicates Summer 2023 or "n23" is subject to change. Important announcements will be released to all students enrolled/waitlisted for n23 in SIO.


Click here for the Term Project Gallery!



None. Course notes included on course website.

A technical introduction to the fundamentals of 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 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.

Mike Taylor (

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

1) Write clear, robust, and efficient code in Python using:

  • sequential, conditional, and loop statements
  • strings, lists, tuples, sets, and dictionaries
  • objects and classes
  • recursive approaches
  • graphics and interaction

2) Develop programs to effectively solve medium-sized tasks by:

  • employing modular, top-down design in program construction
  • demonstrating an effective programming style based on established standards, practices, and guidelines
  • proactively creating and writing test cases to test and debug code
  • applying computational problem-solving skills to new problems, especially in the student's home academic discipline
  • explaining and analyzing the efficiency of algorithms, particularly by predicting the Big-O running time of small pieces of code

3) Design and write a substantial (500-1500 line) program in Python with minimal guidance