CMU 15-112 Syllabus
Fall 2018

  1. Fast Info - locations, office hours, grading
  2. Overview - what 15-112 is
  3. Requirements - what you need to do
  4. Resources - how to get help
  5. FAQs - everything else
Fast Info
and Times
  Days Lecturer / TAs Time Room
Lecture 1 Tu/Th Kelly Rivers 10:30am - 11:50am DH 2210
    Section A W Eileen (emao1) and Katja (kbrackel) 9:30am - 10:20am WEH 4709
    Section B W Ani (achowdh1) and Eric (eclinch) 10:30am - 11:20am DH 2122
    Section C W Sujay (ssdesai) and Vishal (vbaskar) 11:30am - 12:20pm DH 2105
    Section D W AJ (adruck) and Mina (mnowrooz) 12:30pm - 1:20pm WEH 5409
    Section E W Ike (aykilinc) and Riya (ruppal) and Ryan (rastentz) 1:30pm - 2:20pm SH 222
    Section F W Andrea (arestrad) and Christina (cdi) and Gabriela (gtellez) 2:30pm - 3:20pm WEH 5310
    Section G W Joanna (jwickers) and Katherine (katheriy) and Rahul (raahuja) 3:30pm - 4:20pm DH 2302
    Section H W Fletcher (fmarsh) and Kusha (kmaharsh) 4:30pm - 5:20pm WEH 5320
    Section I W Jacob (jstrieb) and Jenny (jifengy) 5:30pm - 6:20pm WEH 5312
Lecture 2 Tu/Th Michael Taylor 3:00pm - 4:20pm DH 2210
    Section J W Olly (oweiss) and Ria (rpradeep) 9:30am - 10:20am PH A22
    Section K W Raunak (raunaksg) and Shaelyn (scparker) 10:30am - 11:20am WEH 5310
    Section L W Jason (jxgong) and Jonathan (jdperez) and Sarah (swenger) 11:30am - 12:20pm WEH 5310
    Section M W Brent (brenth) and Kyra (kbalenza) and Sanjna (sbhartiy) 12:30pm - 1:20pm GHC 5222
    Section N W Ambika (ambikac) and Brandon (brt) 1:30pm - 2:20pm WEH 4623
    Section O W Gabriel (gkrotkov) and Henry (hlin1) 2:30pm - 3:20pm DH 2105
    Section P W Harrison (hgronlun) and Yeonju (yeonjuk) 3:30pm - 4:20pm WEH 5302
    Section Q W Tegjeev (tsingh1) and Zoe (zteoh) 4:30pm - 5:20pm WEH 5312
    Section R W Rahul (raahuja) and Zuhayer (zaq) 5:30pm - 6:20pm SH 214
Office Hours Instructor Office Hours:
     Kelly Rivers (krivers): GHC 4109, Tu/Th 12:30-2pm
     Michael Taylor (mdtaylor): GHC 4126, M/W/F 12:30-2pm

Head TAs:
     Arman Hezarkhani (armanh) and Chaya Wurman (cwurman): by appointment

Associate Head TAs:
     Austin Schick (aschick) and Kyle Chin (kdchin): by appointment

TA Office Hours
Mon Tue Wed Thu Fri Sat Sun
6-8pm 6-8pm 6-10pm 6-10pm 4-10pm 2-8pm 10am-6pm
GHC 5th Floor Teaching Commons (and/or nearby clusters)

Piazza Virtual Office Hours:
     Piazza is monitored by TAs daily at all (reasonable) hours of the day.
     When posting on Piazza, remember to make your post private! Public posts by students are not allowed.

Additional Help Sessions
Quiz Review Quiz Review Reprise Content Review Optional Advanced Lecture
Sun 8-9:30pm Mon 8-9:30pm Tue 7-8:30pm Wed 6:30-8pm
Posner 151 Posner 151 Gates 4303 Gates 5222

Academic Development Walk-in Tutoring
This is a great resource provided not by 15-112 but rather by Academic Development in support of 15-112.
  • Donner Reading Room: Sunday, Monday, and Tuesday 8:30-11pm
  • Mudge Reading Room: Sunday and Monday 8:30-11pm
Grading: Final grades will be calculated as follows:

 Course Component   Weight   Notes 
Quizzes 10%Lowest quiz grade is dropped.
Midterm Exams 20%Lowest midterm grade is half-weighted.
Final Exam 20%
Homeworks 25%Lowest homework grade is dropped.
Term Project 20%
Attendance & Participation 5%Lowest two attendance week grades are dropped.

Midsemester and Final grades will be assigned using a standard scale:
   A: 90 - 100
   B: 80 - 89
   C: 70 - 79
   D: 60 - 69
   R: 00 - 59

The course instructors may choose to change the scales at their discretion. You are guaranteed that your letter grade will never become worse as a result of changing scales.

Previous versions of the course:
15-112: S18, F17, S17, F16, S16, F15, S15, F14, S14, F13, S13, F12, S12, F11
15-100/15-110: S11, F10, S10, F09, S09, F08, S08, F07
Summer: APEA-18, M18, M12, APEA-09, APEA-08
Official 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.
Unofficial Description This course is designed to help you learn how read, write, design, and debug Python programs. Towards that end, you will spend most of the time in the course developing programming as a skill by learning about various programming constructs and techniques and by constantly practicing with code.

Students who take 15-112 generally fall into one of two categories:
One: you might be a CS major or a student in another technical major who needs to take a set of CS classes to fulfill requirements. 15-112 will prepare you for the technical challenge of those courses by helping you develop a robust understanding for how to work with code; this skill will be essential in future courses.
Two: you might want to learn how to program in depth, but have no intention of taking further CS courses. 15-112 will help you learn that essential skill, and will also introduce you to some of the big ideas in computer science so that you can bring new ideas back to your own field of study.

In this course, you will primarily do work through completing programming assignments individually and collaboratively; these assignments will help you develop and practice your coding skills. You will also be assessed with a set of quizzes and exams, to help you measure your understanding of the class's various topics. We will teach you primarily through interactive lectures and recitations, where we will demonstrate how to code using instructions, examples, and live coding. At the end of the semester, you'll demonstrate your mastery of the course's topics by working on a 3-week term project, where you can develop and code a project of your own design, based on your own interests.
Learning Objectives At the end of the course, students should be able to:

  • 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

  • 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

  • Design and write a substantial (500-1500 line) program in Python with minimal guidance
Topic List
and Schedule

All course content is included on the schedule here.

Homeworks are released on Tuesdays before lecture and are due on Sundays at 5pm. These assignments contain a mix of coding exercises (reading, debugging, and writing code) and written exercises. They generally assess the material taught the week they are released, and take several hours to complete. We strongly encourage you to start the homeworks early- Tuesday after lecture is best, and Thursday at the latest!

Homeworks should mostly be completed individually; read the Collaboration Policy for more detail. Some problems on homeworks will be marked as collaborative; on these problems (and these problems only), you may work on code with other students, as described in the Collaboration Policy.

Programming assignments will be graded based on style (modularity, effective use of data abstraction, readability, commenting, etc.) and functionality (correctness and efficiency of the program on all possible test inputs). Your code should be properly annotated with comments that are well-placed, concise, and informative. Your assignments will be graded by your TA, by automated graders, and at times by your instructor.

Term Project:
The Term Project will take place over three weeks at the end of the semester. You will design and build a program of your choosing with the guidance of a mentor TA. More information can be found in the Term Project Assignment writeup.

Attendance & Participation
We will take attendance during lecture and recitation, to ensure that all students are attending and learning. You must be physically in the classroom during your scheduled lecture/recitation to be marked as attending. Of course, you should also be engaging with the material and focusing on learning!

Attendance in lectures will be taken during interactive activities that are also used for learning. These activities will usually require using a laptop of phone. If you do not have a laptop, tablet, or internet-accessible phone, please contact the course instructors so that you can be excused from lecture attendance.

If you have to miss lecture or recitation for an approved reason (see FAQs), please contact the relevant lecture instructor or recitation TA before the class time to be excused from lecture/recitation that day.
Assessments: Quizzes:
Quizzes will be given about once weekly, generally at the beginning of lecture on Tuesday. Quizzes generally cover material from the previous week and the previous homework. Quizzes are designed to be time-intensive, to test for fluency and demonstrate where additional study is needed.

Midterm Tests:
There will be two midterm exams given in class, as noted in the course schedule. Each exam will cover material presented in the preceding weeks (with Midterm 2 focusing mostly on material not covered in Midterm 1). Midterms also test for fluency, though to a lesser extent than quizzes.

Final Exam:
There will be a standard 3-hour final exam during the final exam period at the end of the semester. This exam will cover material from the entire semester. The final exam is built to allow enough time to attempt all problems.
This Alternative Minimum Grading (AMG) policy is available to everybody, but is designed specifically for those students who struggle in the first part of the course, and then through sustained hard work and dedication manage to elevate their performance in the latter part of the course to a level that merits passing with a C, even if their Standard Grade might be lower than that.

In addition to the normal grading scale (see top of page), we will separately compute your grade using the following scale. Students do not sign up for AMG grading. Every student will be considered both for Standard Grading and AMG, and their semester grade will be the higher of the two (where the highest grade via AMG is a C).

To compute your AMG score, first use the following to compute your raw score. If the resulting score is higher than a C, set it back to a C.
 Course Component   Weight 
Best 5 Solo Homeworks 15%
Best 5 Quizzes 10%
Best Midterm Exam 20%
Term Project 15%
Final Exam 40%

Unlike the Standard Grade, effort is heavily factored into your AMG score. To qualify for AMG you must put forth sustained effort, which means meeting the following requirements:
  • You cannot miss multiple lectures/recitations
  • You cannot miss multiple assignments or quizzes
  • You cannot violate the Collaboration Policy
To estimate your final grade either with the normal grading policy or with the AMG grading policy, you can fill in this spreadsheet.
Programming is like writing- to learn how to program, you must practice writing code yourself. Therefore, we have a set of strict rules regarding what kind of collaboration is allowed, what counts as overcollaboration, and what counts as cheating.

This section is long, but you should read all of it thoroughly, as we take collaboration and cheating very seriously in this course. To begin, here's a summary:
  • Write your own code.
  • Don't look at other people's code.
  • Don't let other students look at your code.

Good Collaboration

For all homework assignents, students are encouraged to talk to each other about high-level concepts regarding the problems. This includes:
  • Going through existing test cases and discussing why an input results in a certain output
  • Figuring out new input/output pairs for the problems
  • Discussing which general concepts might be useful in solving a problem (loops, lists, etc.)
For homework assignments, students may also receive lower-level help from the 15-112 course staff. This includes everything mentioned above, and also:
  • Asking questions about how to build an algorithm for the problem
  • Asking for debugging help with code
Certain parts of homework assignments may be labeled Collaborative. For these parts (and these parts ONLY), students may also:
  • Sketch out algorithms on a whiteboard together
    • To avoid copying the code, you should write up the solution together, discuss it, then erase the solution, wait a few minutes, and write up solutions individually
  • Help each other debug specific parts of assignment code
    • NOTE: do not 'debug' by telling a friend to try your approach instead! Help them figure out what is actually going wrong.
Outside of the homework assignments and course assessments, students may also help each other learn to a greater degree. This can include:
  • General discussion of course concepts
  • Detailed explanations of example code on the course website
  • Collaboratively solving a practice problem, with any level of co-writing code and co-debugging


Certain actions on homework assignments are considered overcollaboration; this means that a student might have attempted to collaborate with good intentions, but ended up collaborating at a level that became unhelpful for learning. Overcollaboration on homework assignments can include:
  • Building 'psuedocode' algorithms together on a whiteboard that are essentially Python programs
  • Explaining to a friend how to solve a problem in high-level terms by going through your own program line-by-line
  • Helping a friend debug on a non-collaborative problem
    • Note: it's fine to give a friend suggestions if they describe what error is being thrown or which input/output pair is failing, but you may not look at their code/have them read their code out loud.
  • Helping a friend debug on a collaborative problem by suggesting they use your own approach to the problem
  • Collaborating with a student on a collaborative problem and then not including their name as a collaborater in the assignment writeup.
  • In the case that you have taken 15-112 before, copying your own code from the previous time you took the course.
    • You should try to solve the problem again, to maximize learning!
Overcollaboration results in a warning on the first offense, and a penalty on later offenses.


Certain actions within the course are considered cheating- that is, presenting work not written by yourself as if you wrote it, providing work to others, or receiving unauthorized help.

Cheating on homework assignments can include:
  • Copying or stealing any amount of code from someone currently in the class or someone who has taken the class before.
    • NOTE: copying is never okay, whether the code is provided electronically, visually, audibly, or on paper.
  • Providing code you have written for an assignment to anyone else in the class.
    • Again: never share your code with others in the class, including electronic sharing, showing someone code on your computer, verbally speaking the code, or writing down the code on paper.
  • Finding code online and using it in the assignment
    • Exception: you may use code from the course website or the Official Python Documentation. Please include a citation with a link when you do this.
  • Putting code solutions from the course assignments online
    • Exception: feel free to put your term project code online!
  • Receiving code-level assistance from any person not associated with the course
  • Getting someone else to write the assignment code for you
  • Asking questions about the assignments on any online services outside of the course office hours and course Piazza
  • Attempting to 'hack' or decompile the autograder to produce solutions
Cheating on quizzes, midterms, or the final can include:
  • Referring to any external resources while completing the assessment (phones, notes, etc.)
  • Copying part of an answer off of another student's paper, even if it is very small
  • Taking quiz/midterm/exam papers out of the lecture and providing them to students in later lectures
Cheating on the term project can include:
  • Having another person write the code for your term project
  • Using code from online in your term project and not documentating it
Cheating results in a penalty on the first offense, and failing the course on the second offense.


Penalties are decided by the course instructors, and can vary based on the severity of the offense. Possible penalties include:
  • Receiving a 0 on the assignment/quiz in question
  • Receiving a -100 on the assignment/quiz in question
  • Receiving a full letter grade deduction in the course
  • Automatically failing the course
Penalties may also be accompanied by a letter to the Dean of Student Affairs, again at the instructors' discretion. This can lead to university-level penalties, such as being suspended or expelled.

Plagiarism Detection:

Programs are naturally structured, which makes them much easier to compare than hand-written work, and easier to compare than typed essays. We run an automated plagiarism detection system on all assignments to detect copied code. Here is a video demonstrating how it works.

In short: if you copy code, we will be able to tell. Don't copy code!

Grace Period

Your first year of college is a time when you do a lot of learning. Sometimes, you might make bad decisions or mistakes. The most important thing for you to do is to learn from your mistakes, to constantly grow and become a better person.

Sometimes, students panic and copy code right before the deadline, then regret what they did afterwards. Therefore, you may rescind any homework submission for up to 24 hours after the deadline with no questions asked. Simply email the course instructors and ask us to delete the submission in question, and we will do so. Deleted submissions will not be considered during plagiarism detection, though of course they will also not be graded. However, it will always be better to get a 0 (or partial credit) on an assignment than to get a cheating violation!

Course Resources 15-112 can be an intense course, but it becomes much more manageable if you use the course resources. These resources include:
  • Course Notes: The course notes (on the schedule page) are full of useful information and examples that can help you approach the assignments! When you don't understand a concept, try reading the notes and watching the associated videos first.
  • Office Hours: Office hours let you ask questions to TAs and professors directly, and can help you understand concepts and debug programs that you're struggling with alone. Past students swear by office hours as the resource that most helped them pass the course! You can even hang out at office hours if you don't already have a question! Go to office hours!!!
  • Piazza: Piazza can be used to ask quick questions and receive quick responses without attending office hours in person. Questions on Piazza should be specific and include all needed information (so if your code has an error you don't understand, include the code and the error message). Note that we do not make student posts on Piazza public; please only post private questions to the instructors.
  • Large Group Sessions: TAs run large group sessions to provide more structured review for quizzes and lecture material. These are offered weekly at a regular time.
  • Small Group Sessions: Recitation TAs offer small group sessions to go over personalized material with groups of 2-6 students. These sessions are excellent for students who are struggling and need more individual attention.
  • Tutoring: Academic Development offers walk-in tutoring for 15-112. This is a good resource for students who want one-on-one tutoring outside of the course.
Every required software package we use is available for free on the web. This includes:
  • Python version 3.x (3.4 or later), which can be freely downloaded from
  • A code editor. We support Pyzo, a free IDE for Python. You may use a different IDE if you wish.
  • We may also use Brython, which is a version of Python that runs in web browsers.
Note that all textbooks/resources are optional. There are no required textbooks for this course.

Extensions: In general, due to the scale of the class, we cannot give individual extensions on assignments or assessments. However, there are a few exceptions.

  • Medical Emergencies: if you are sick to the point that you cannot attend class or do work, go to Student Health Services! We encourage students who have short illnesses (such as food poisoning or the flu) to use their dropped attendance/homework/quiz, but students who have prolonged medical emergencies may obtain extensions from the instructors with a note from Student Health Services.
  • Family/Personal Emergencies: if you are having a family or personal emergency (such as a death in the family or a mental health crisis), reach out to your academic advisor or housefellow immediately! These people will help support you in your time of need, and will also reach out to all of your instructors (including the 15-112 instructors) to request extensions for you.
  • University-Approved Absences: if you are attending a university-approved event off-campus (such as a multi-day athletic/academic trip organized by the university), you may request an extension for the duration of the trip. You must provide confirmation of your attendance, usually from a faculty or staff organizer of the event.

Please note that extensions must be requested before the assignment/assessment deadline.

Additionally: if a religious day you observe conflicts with an assignment date, let the course instructors know in advance; we may be able to provide extensions or move assignment dates in some cases (though in general we urge you to start the assignment early instead).
Late Policy: In an ideal world, we would be able to support varying submission schedules so that all students could work at their own pace. Unfortunately, given the scale of the course, this is impossible. We need you to submit assignments on time so that we can promptly give feedback to all students, to support the learning process.

However, we understand that life can sometimes get in the way. Therefore, we provide 2 grace days for homework assignments. These can be used to submit homeworks up to 24 hours late with no penalty. You may only use one grace day per homework. We strongly urge you not to use these grace days immediately; try to save them for unforeseen events.

Once you run out of grace days, a late penalty of 25% will be applied for every hour that you submit late. In practice, this means that any assignment submitted after 8pm on Sundays will automatically get a 0. Submit your work on time, even if it isn't complete!

Additionally, no late/make-up quizzes or tests will be administered, except in the cases covered under the Extensions policy. Approved missed quizzes will be excused; approved missed exams will be taken in the following week.
Regrade Requests: We occasionally make mistakes while grading (we're only human!). If you find a mistake which you would like us to correct, send a regrade request to Chaya Wurman ( and Austin Schick ( Please include all relevant details in your email (picture of the quiz, relevant file, etc).

Regrades must be requested within three weeks of the time when the contested grade was released. This deadline does not apply to exams, as they are returned on a more variable basis.

Note- regrade requests will result in the entire problem being regraded, not just the incorrectly graded part.
Formatting Errors: Misformatted homework in general cannot be graded by our autograder, and as such may receive penalties, which can range from -5% to not being accepted at all. Therefore, be sure to submit your homework early (you can submit repeatedly, we only grade the last submission) to be sure you do not have obvious formatting errors. Errors can be detected by checking your Autolab grade and feedback a few seconds after submitting.
Electronics: Research has shown that devices can greatly detract from student learning. Therefore, students may only use electronic devices in lecture during learning activities which involve those devices, which may involve the use of computers to write programs or phones to submit quiz responses.

Outside of these events, students should only use electronic devices with explicit permission from the instructors. Notes may still be taken, of course, but should be done with pen and paper. This policy is meant to help all students focus, as electronic device as distracting not only for the user, but also for the students surrounding them.
We gladly accommodate students with university-approved extended time (as approved by the Office of Disability Resources (ODR), as explained here). If you are eligible for university-approved extended time, please deliver the appropriate form to the instructors in the first two weeks of the semester. If you need to acquire the form, contact Catherine Getchell, Director of Disability Resources.

For in-lecture quizzes, the extended-time quiz will be administered at a separate location the same day. For midterm and final exams, you will need to request proctoring by the ODR.

Important: to use extended-time, you must attend the extended-time quiz or exam and not the normal-duration quiz or exam. You do have the option of attending the normal-duration quiz or exam, but then you will have to complete it in the assigned time (without extended-time). If you are in lecture during a normal-duration quiz when you plan to take the extended-time quiz, you may remain in the room and work quietly on other materials (without electronics), or you may leave the room for the duration of the quiz.
Auditing: We have found that students who audit 15-112 do not tend to succeed, as they generally cannot dedicate the needed time to the course. Therefore, auditing will only be allowed in exceptional circumstances, and must be approved by the course instructors first.

If you wish to take 15-112 but don't want or need a full letter grade for it, you may take the course as Pass/Fail instead. This is a great option for graduate students who want to learn how to program but don't want to risk their GPAs! (Note: you may not take the course Pass/Fail if you plan to use 15-112 as a prereq).
Waitlist: If you are on the waitlist, don't panic!. Most waitlisted students get into the course eventually. Attend lecture and recitation, submit the assignments, and stay involved. If you are still not enrolled at the beginning of the third week, contact the course instructors and they will help you find a section with open seats.
Recording: Students may not record audio or video of lectures or recitations without explicit permission in writing from the instructor. Violations will result in your failing the course. Exceptions will be granted in accordance with university guidelines for accessibility concerns, but even then such recordings may not be shared publicly or privately and must be deleted at the end of the semester.
Well-being &
We care very much about your well-being and happiness. Yes, CMU students (and faculty) work hard, sometimes very hard. But we must keep our balance and always attend to our well-being and happiness. That comes first, academics follow. So be sure to get enough sleep, eat right, exercise regularly, and attend to your well-being and happiness. Here is a list of ideas that might help.

Also, please know that we do care about you and take your well-being seriously. We want to help you learn while minimizing stress. Towards this end, we are working to reduce the workload of the course as much as is possible, while still meeting the learning goals of the course. If you have any ideas or feedback towards reducing the workload or student stress, or improving the course in general, please let us know!

Finally, if you are feeling overly stressed, or anxious, or unhappy about your performance or your general experience in this course: please come talk to us. We will listen. We are here for you and we will try to help.

Addendum: Here is a great two-page one-stop-shopping summary of many CMU Student Support Services.