CMU 15-112 Syllabus
Fall 2017

Previous versions of 15-112/15-110/15-100:
S17, F16, S16, F15, S15, F14, S14, F13, S13, F12, M12, S12, F11, S11, F10, S10, F09, APEA-09, S09, F08, APEA-08, S08, F07
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
Topic List
and Schedule
See the topic list and schedule here (includes schedule, notes, video mini-lectures, homeworks, quizzes, and tests).
Office Hours:

Instructor Office Hours:
     Kelly Rivers (krivers): GHC 4109, Tue/Thu noon to 1:30pm
     Ryan Riley (rdriley): GHC 4003, Mon 1pm to 2pm, Fri 1pm - 2:30pm Wed 1pm to 4pm

Head TA Office Hours:
Eddie Dryer (edryer): by appointment
     Tara Stentz (tstentz): by appointment

Associate Head TA Office Hours:
Abhiram Gogate (angogate): by appointment
     Arman Hezarkhani (armanh): by appointment
     Chaya Wurman (cwurman): by appointment

TA Office Hours

Mon Tue Wed Thu Fri Sat Sun
2pm-8pm 2pm-8pm 2pm-7pm 4pm-8pm 10:30pm-5:30pm 2pm-6pm 2pm-6pm
GHC 5th Floor Teaching Commons (and/or nearby clusters)

Piazza Virtual Office Hours:
   * Daily (7 days/wk):  5pm - 11pm (on most days)

Additional Optional Sessions
WEH 7500
MM A14/WEH 7500
GHC 4303
Extensive previous-week review Quiz review and preparation Optional Lectures on Interesting Topics

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.
  • Mudge Reading Room, Sun+Mon+Tues, 8:30pm-11pm
    Tutors: Marie Moskal (mmoskal) and Kimberly Lim (klimjinx)
  • Donner Reading Room, Sun, 8:30pm-11pm
    Tutors: Yi Chen (ychen2)
of Classes:
  Days Lecturer / TA's Time Room
Lecture 1 TR Kelly Rivers 10:30am - 11:50am DH 2210
    Section Q WF Bridget (bsoderna) and Nitya (nraju) and Daniel (dlin2) 8:30am - 9:20am WEH 5415, WEH 5415
    Section A WF Josh (jmoavenz) and David (dyd) and Chris (cfulton1) 9:30am - 10:20am WEH 4709, PH 225B
    Section B WF Hadley (hkillen) and Andrew (aschreff) 10:30am - 11:20am DH 2122, WEH 5320
    Section C WF Alex (yuzhes) and Austin (aschick) 11:30am - 12:20pm PH 125B, PH 126A
    Section D WF Madeline (mbgardne) and Justyn (oweijin) and Tushar (tchetal) 12:30pm - 1:20pm PH A22, PH 225B
    Section E WF Joseph (youngchk) and Bulut (ybb) 1:30pm - 2:20pm SH 222, SH 222
    Section F WF Nikolai (jlenney) and Charlotte-Alyss (cweissgl) and Amy (agwu) 2:30pm - 3:20pm WEH 5310, PH A22
    Section G WF Lisa (xinranl1) and Stephen (she2) and Sean (spark3) 3:30pm - 4:20pm DH2302, PH A22
    Section H WF Kyle (kdchin) and Daniel (lanhaow) and Alex (atomarel) 4:30pm - 5:20pm PH 126A, PH 125B
Lecture 2 TR Ryan Riley 3:00pm - 4:20pm DH 2210
    Section R WF Sanjna (sbhartiy) and Jason (jasonh1) 8:30am - 9:20am WEH 5421, WEH 5421
    Section I WF Jessie (jessieli) and Jason (jxgong) 9:30am - 10:20am WEH 5312, WEH 5312
    Section J WF Amy (cs1) and Xining [She-Ning] (xiningg) 10:30am - 11:20am WEH 5320, GHC 4215
    Section K WF Rishabh (rishabhc) and Lavonca (lld) 11:30am - 12:20pm PH 126A, BH 237B
    Section L WF Alan (azguo) and Cathy (mengyinf) and Judy (judyz) 12:30pm - 1:20pm DH 1209, PH 126A
    Section M WF Raunak (raunaksg) and Eric (eclinch) and Nanaki (nanakis) 1:30pm - 2:20pm GHC 5222, WEH 5310
    Section N WF Vasu (vasua) and Doug (dzq) and Tian (cowarang) 2:30pm - 3:20pm PH 225B, PH 225B
    Section O WF Joe (jyzhao) and Emily (ewwong) and Anne (asilbaug) 3:30pm - 4:20pm PH A19, PH A19
    Section P WF Fletcher (fmarsh) and Lisanne (ldegroot) and Nick (nviggian) 4:30pm - 5:20pm PH 125B, WEH 6423
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
  • Pyzo, a free IDE (code editor) for Python.
  • 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.
Assignments: Solo Homeworks:
Solo homeworks are generally released on Mondays and are due on Saturdays at 8pm. These homeworks are used primarily to assess learning. As the name implies, these homeworks should not be done collaboratively; see the collaboration policy for more details.

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!

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.

Collaborative Labs:
Collaborative labs are generally released on Mondays and are due Thursday by 10pm. These labs are primarily used to support learning. For lab assignments you may work with a small group; you should work with these students to solve the problems, though you may not copy work from them. See the collaboration policy for more details.

Collaborative labs contain exercises like those in the solo homeworks, but in simpler forms. They generally contain material taught the week they are released.

Collaborative Checks:
Checks occur prior to lectures, and can be done individually or collaboratively. Checks will always be graded on participation, not accuracy; these checks are done to help you learn, not to assess your knowledge. Checks are released Sunday/Tuesday and are due by Tuesday/Thursday at 10am.

Checks may include required reading or videos, and occasionally short exercises. These checks may sometimes contain content the class has not covered yet as a pretest, but again, accuracy will not be measured in grading.
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.

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).

Quizzes will be given about once weekly, generally at the beginning of lecture on Thursday. Quizzes generally cover material from the previous week and the previous homework. Quizzes are designed to be extra hard, to demonstrate where additional study is needed.

Extended-Time Policy:
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 Professor Rivers' office at noon that same day. If you have a university-approved time conflict at that time, please let us know ahead of time and we can arrange another time on the same day as the quiz, or by prior arrangement with the ODR. For in-recitation quizzes, should they occur, the extended time will be provided immediately in the same recitation period. For midterm and final exams, the ODR proctors the extended-time sessions. Important: to obtain 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 attending lecture or recitation and a quiz is commencing that you have already completed (having taken the extended-time version of the quiz that morning), you may remain in the room and work quietly on other materials or you may leave the room for the duration of the quiz (your choice).

Late Policy:
Unfortunately, the scale of this class makes it impossible to allow general flexible time for taking tests. Therefore, no late/make-up quizzes or tests will be administered, except in the case of medical or family emergencies or other university-approved absences. Students who fall into this category should obtain instructor approval before missing the test. You may then make up the missed quiz by attending Professor Rivers' or Professor Riley's office hours in the week following the quiz.
 Course Component    Weight 
Final Exam 20%
Midterm Exams 20%
Quizzes 10%
Homeworks 25%
Collaborative Checks1%
Collaborative Labs4%
Solo Homeworks20%
Term Project 25%

Each homework, lab, check, quiz, midterm, term project, and final will be graded on a standard scale:
   A: 90 - 100
   B: 80 - 89
   C: 70 - 79
   D: 60 - 69
   R:  0 - 59

The same scale will be used for final grades, though the 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.

Half-Weight Policy:
The lowest 2 hw's, lowest 2 labs, lowest 2 quizzes, lowest 2 checks, and lowest midterm are all half-weighted.

Regrades & Submission Issues:
Regrades and special cases are handled by Eddie Dryer ( and Chaya Wurman ( on a case by case basis. If you would like to request a regrade, or if you had a submission issue (broken computer, submitted the wrong file, etc) email both Eddie and Chaya. When you email, please include all relevant details (picture of the quiz, relevant file, etc).

In exceptional circumstances submissions may be accepted past the deadline. If you are requesting submission past the deadline, do not modify your file (we look at the last modified date).


Alternate Minimum Grading (AMG) Policy
This 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 Standard Grading as described above, we will separately compute your grade using an Alternate Minimum Grading (AMG). Students do not sign up for AMG. 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 Alternate Minimum Grade, first use the following to compute your raw score:
 AMG CourseComponent  Weight 
Final Exam 40%
Best Midterm Exam 20%
Best 5 Quizzes 10%
Best 5 Solo Homeworks 15%
Term Project 15%

The half-weight policy (for the lowest two scores) still applies to the best-5 quizzes and homeworks, but it does not apply to the best midterm (since that makes no sense with only one midterm counting towards the AMG).

Unlike the Standard Grade, effort is heavily factored into your AMG score, and in fact you cannot qualify for AMG unless you put forth sustained effort (as judged by the course faculty) on every homework, quiz, and exam.  The effort grade is determined by the discretion of the course faculty (in consultation with the course staff), and is a multiplier of your raw score, so your AMG score is (effort * rawScore).  Note that any cheating violation would typically result in an effort score of 0, and so disqualify students from AMG consideration. Also, just as a lack of sustained effort will result in disqualification, in a select few cases, students exhibiting exceptionally strong effort may receive an effort score exceeding 100% (by some small amount).  In any case, if your effort-adjusted AMG score is 70 or higher, you qualify for a C as your semester grade. Once again, the highest grade possible via AMG is a C.

Learning how to program is exhilarating, but also challenging. To succeed in this course, you will need to do the following things:
  • Participate. To learn, you must engage with the course. This includes attending and engaging with all lectures and recitations, and reading all the assigned material. Note that, because most material is introduced in lectures and recitations, attendance is required; repeated failure to attend and participate in lectures and/or recitations (as measured by quiz completion and recitation roll call) may result in a lowered semester grade.
  • Practice. Programming cannot be learning merely by observing; you must practice to master this skill. This includes attempting all the collaborative checks, working collaboratively on all the labs, and working on all the solo homeworks. This also includes engaging fully with the term project in the last 3-4 weeks of the semester and doing your best to create a project you can take pride in.
  • Test Yourself. At some point, we will need to assess your knowledge. Therefore, you will need to take all the quizzes, midterms, and the final.
  • And above all, you will need to support a positive course culture. In all course activities you should follow the course collaboration policies (more below); in general this means submitting work that you yourself have generated and which you understand. When working collaboratively you should support your teammates and attempt to work productively. When you find yourself struggling or falling behind, you should seek help early instead of submitting work late. And of course, you should treat all classmates and course staff with respect.
  • Additional note: 15-112 is a 12-unit course. Therefore, you should expect to spend approximately 12 hours a week on the course, including time spent in lecture, recitation, working on assignments, and studying.
In exchange, the course staff will do their best to support you in your learning process. We promise to do the following things:
  • Provide Appropriate Instruction. We know that many students only take 15-112 because it is a requirement, and that many other students enter the course with prior programming experience. We will seek to provide instruction that is accessible for students at all levels, with remedial and advanced content for those students who need it. We also promise that all assessed material will be taught adequately in lectures and recitations.
  • Provide Support. We will provide extensive office hours (in person and online), supplemental learning sessions, and one-on-one tutoring as needed, and we will sincerely attempt to help when you struggle with the learning process.
  • Provide Feedback. We will attempt to provide you with appropriate feedback in person and on assessments. We will do our best to return feedback to you quickly (and to always return feedback within a week), and will seek to make that feedback accurate, detailed, and helpful.
  • And above all, we will also work to support a positive course culture. We will work to provide consistent instruction across sections and to be fair in grading, so that all students have equal opportunity. We will respect your time by avoiding last-minute schedule changes, by starting and ending class on time, and by releasing assignments as early as possible. We will find ways to help any student who needs assistance. And of course, we will treat all students with respect.
Additional note: We are aware that some students regularly spend more than 12 hours a week on 15-112. We are working to improve this, and welcome any suggestions you may have.
Late Homework, Labs, and Checks:
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 3 grace days for solo homework assignments. These can be used to submit solo 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. Grace days are not available for labs or checks, as both of these activities are designed to be short and mostly completed in recitation/lecture.

After you have used your grace days, no further extensions are allowed. Therefore if you find that you have not finished an assignment by the deadline and have no grace days left, submit it anyway; often you will get partial credit for the work you've done.

Homework Extensions:
Students who have medical or family emergencies or other pre-arranged university-approved absences (such as multi-day athletic or academic trips) may request an extension from the course faculty. You should request these extensions before the assignment due date. These extensions are separate from grace days. Additionally, if a religious day you observe conflicts with an assignment date, let us 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).

Homework 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 a few seconds after submitting.

Show Your Work:
Some homework assignments, and most quizzes and tests, will include some written work (meaning: work that is not performed with access to Python or an IDE or a calculator (unless otherwise noted), whether or not it involves programming). In order to receive credit for these problems, you must show your work. Correct answers without supporting documentation will not be given full credit. Some questions may not require work to be shown (e.g.: "Name three software companies in Silicon Valley"), but most questions assuredly do. When in doubt, show your work.
Solo Homework Policy:

Unless otherwise noted, for Solo homework assignments, students are encouraged to talk to each other, to the course staff, or to anyone else about the assignments. This assistance, though, is limited to the discussion of the problems in general. Each student must develop their own solutions to the homework. Consulting another student's solution is prohibited, and submitted solutions may not be copied in whole or in part from any source.

Specifically: do not look at other students' code or written answers, and do not show them your code or written answers, until after the assignment deadline has passed and the assignment has been submitted and graded.

And: do not email or otherwise electronically or physically transfer your code to other students, and do not receive such transmissions from other students, until after the assignment deadline has passed and the assignment has been submitted and graded.

In particular, this precludes students helping each other debug their code (since you may not even look at their code). Of course, students may (and should!) seek debugging assistance (and any other help) from the course staff, who provide extensive support to all students via email, office hours, review sessions, and 1-on-1 tutoring by appointment.

Also, if you find a reference (say, in an optional textbook or some online source) that contains code or a written solution that is identical or overtly similar to an assigned problem, then you are required to not look at that code or written solution! You may still refer to supporting figures and explanatory text, but you may not look at or copy the code.

Collaborative / Group-Based Homework Policy:

Note that some assignments (or portions thereof) will be explicitly marked as collaborative or group-based. In those (and only those) assignments, you must work with the other students in your group, even writing code together, and certainly debugging each other's code. However, you may only work with your approved group members -- the restrictions for solo homeworks apply here, too, for everyone who is not in your group. Also, even when working in an approved group, you absolutely may not copy solutions from anyone or anywhere. In all cases, you must be intellectually involved in the authoring of everything you submit.

Retaking Course / Reusing Prior Material Policy: If you are repeating 112, your prior work in this course is treated just as anyone else's work -- that is, you may not consult it. This is to promote the best possible learning, and using your prior answers will only hurt in that regard. So do not refer to your prior work, and solve everything from scratch. This will result in your best learning experience.

Autograder / Decompiling Policy:

Any attempt to decompile solutions, or object code that may help produce solutions, or in any way to extract solutions from the autograder, or to "hack" the autograder in any way, will result in your failing the course.

Plagiarism Detector Policy:

In addition to manual checks on homework and exam submissions, we will also routinely use an automated plagiarism detector. Here is a video demonstrating how it works (AVI or MP4).


Homeworks or portions thereof that are deemed overly similar (as opposed to mostly identical) will face these consequences:
  • 1st event: no penalty (just a warning).
  • 2nd event: will be treated like a cheating violation, which will generally result in letter-grade drop at the semester and a letter to the Dean of Student Affairs.
  • 3nd event: fail the course and another letter to the Dean of Student Affairs.
By contrast, homeworks or portions thereof that are mostly identical (even if they were edited and are somewhat different) are not "overly similar", but are an immediate cheating violation, and will face these consequences:
  • 1st event: letter-grade drop at the semester and a letter to the Dean of Student Affairs
  • 2nd event: fail the course and another letter to the Dean of Student Affairs
Finally, regarding proctored events (quizzes, exams): any copying or collaboration of any kind (no matter how seemingly minor) on any proctored event will face these consequences:
  • 1st event: fail the course and a letter to the Dean of Student Affairs
These are the general rules, and while we do not anticipate exceptions, we respect that they may occur, and so the faculty reserve the right to make appropriate adjustments as the particulars of any case require.

Online "Help" Policy:

Generally: Students may not post any course content, nor any questions related to any assigned material, to any online venue

Why? There are many online 'help' resources, and while some may be legitimate, many are basically providing a homework outsourcing service, or otherwise violating the spirit (and often also the letter) of our course policies on cheating and collaboration. Importantly, we cannot control the quality of 'help' students receive from such sources, and experience indicates many 'answers' from such sources are of very low quality. Finally, given the truly extensive support this course provides through daily office hours, private and small-group tutoring, email-based help, collaborative assignments, and so forth, not to mention the support of the broader CMU community of learners, there is no compelling reason students should need any external sources. Posting course content online to seek help may result in failing the course on the first offense.
Recording (audio or video): Students may not record 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.

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.
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.