CMU 15-112: Fundamentals of Programming and Computer Science
Carnegie Mellon University
Spring 2018

Units 12
Department Computer Science
Prerequisites None
Description 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. We will also target numerous deployment scenarios, including standalone programs, shell scripts, and web-based applications. 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: students must achieve a C or better in order to use this course to satisfy the pre-requisite for any subsequent Computer Science course.
Learning
Objectives
  • Develop computational problem-solving skills using Python as a tool to be applied to new problems, especially in the student's home academic discipline
  • Produce clear, robust, and efficient code in Python by
    • employing modular, top-down design
    • using sequential, conditional, and loop statements where appropriate
    • using strings, lists, tuples, and dictionaries where appropriate
    • using objects and classes where appropriate
    • integrating recursive functions where appropriate
    • proactively designing and writing test cases to effectively test and debug code
  • Develop an effective programming style based on established standards, practices, and guidelines
  • Describe the difference between programming and Computer Science, and gain exposure to some of the Big Ideas of Computer Science (e.g., Computability)
  • Explain and analyze the efficiency of algorithms by:
    • proving the running time (Big-O) of various well-known searching and sorting algorithms
    • determining (not proving) the running time (Big-O) of a small piece of code
    • describing the difference between small code optimizations and more substantive algorithmic optimizations
  • Design and implement event-based graphical animations
  • Develop and write a substantial (500-1500 line) program in Python to implement a solution to a term project of their choosing over three to four weeks