Course Information

Cross-Listings ENGRD 2140 Computer Systems Programming
Instructor Prof. Christopher Batten, 323 Rhodes Hall
Office Hours: Virtual, Thursday, 9:00–10:00am and 4:30–6:00pm
Peitian Pan, pp482, Office/Lab Hours: Thu, 7:30–9:30pm
Kexin (Grace) Zheng, kz73, Office/Lab Hours: Wed, 7:30–9:30pm
Chris O'Brian, co253, Office/Lab Hours: Thu, 7:30–9:30pm
Eric Hall, ewh73, Office/Lab Hours: Tue, 7:30–9:30pm
Raghav Kumar, rk524, Office/Lab Hours: Wed, 7:30–9:30pm
Sonal Parab, ssp92, Office/Lab Hours: Wed, 7:30–9:30pm
Krithik Ranjan, kr397, Office/Lab Hours: Mon, 8:00–10:00am
Janice Wei, cw655, Office/Lab Hours: Tue, 7:30–9:30pm
Lectures 185 Statler Hall, Mon/Wed/Fri, 3:00–3:50pm
Disc. Section 225 Upson Hall, Monday, 5:20–6:10pm, 7:30–8:20pm, & 8:40–9:30pm
Texbook zyBook: ECE 2400 Computer Systems Programming
Code: CORNELLECE2400BattenFall2020
Cost: $88
Staff Email ece2400-staff-l cornell edu


This course is meant to be a foundational course in computer systems programming. The course will prepare students for more advanced coursework in computer engineering (e.g., embedded systems, computer architecture) as well as more advanced coursework that focuses on a single type of computer systems software (e.g., compilers, operating systems, databases). By the end of this course, students should be able to:


This course is targeted towards sophomore-level undergraduate students, although it is also appropriate for advanced freshman students and upperclassman. An introductory course on computing is required. Students need to be comfortable using at least one programming language (e.g., Python through CS 1110 or MATLAB through CS 1112) and should have some experience in software design, development, and testing. No prior knowledge of the C or C++ programming languages is necessary.


The course includes four parts. The first two parts covers procedural programming in C and then uses C to explore basic algorithms and data structures, while the second two parts cover multi-paradigm programming in C++ and then uses C++ to explore more algorithms and data structures. A tentative list of topics for each part is included below. The exact topics covered in the course are subject to change based on student progress and interest.

Required Materials

The required textbook for the course is the following custom zyBook assembled specifically for this course by the instructor:

zyBooks are online, interactive textbooks that makes it easy and engaging to learn principles and then immediately put them out in practice using a series of integrated participation and challenge activities. The zyBook for this course includes a web-based C/C++ development tool that makes it trivial to try out small code snippets. The zyBook includes one chapter for each of the 20 topics covered in the course.

The assigned readings will be available on the Canvas course site. Students are expected to complete approximately 50% of the participation and challenge activities, and their overall progress on these activities will factor into the participation portion of their final grade. In addition, selected challenge activities will serve as homework and are due on Mondays before lecture.

The first chapter of the zyBook is available free of charge to students after they create a zyBook account. Students can complete zyBook activities in the first chapter while they are finalizing their decision to enroll in the course. Although their work will be saved, this work will not be visible to the instructors until students actually purchase the zyBook. Note that zyBook will offer a full refund for students that drop the course within the first few weeks of the semester. Email to request a refund.

Format and Procedures

This course includes a combination of lectures, short in-class quizzes, optional discussion sections, assigned readings, programming assignments, and exams.

Grading Scheme

Each part or criteria of every assignment is graded on a four-point scale. A score of 4.25 is an A+, 4 roughly corresponds to an A, 3 roughly corresponds to a B, 2 roughly corresponds to a C, and below a 2 roughly corresponds to C- or lower. A score of 4.0 usually indicates that the submitted work demonstrates no misunderstanding (there may be small mistakes, but these mistakes do not indicate a misunderstanding) or there may be a very small misunderstanding that is vastly outweighed by the demonstrated understanding. A score of 3.0 usually indicates that the submitted work demonstrates more understanding than misunderstanding. A score of 2.0 usually indicates that the submitted work demonstrates more misunderstanding than understanding. A score of 1.0 usually indicates that the submitted work is significantly lacking in some way. A score of 4.25 is reserved for when the submitted work is perfect with absolutely no mistakes or is exceptional in some other way.

Total scores are a weighted average of the scores for each part or criteria. Parts or criteria are usually structured to assess a student's understanding according to four kinds of knowledge: basic recall of previously seen concepts, applying concepts in new situations, qualitatively and quantitatively evaluating alternatives, and creatively implementing new designs; these are ordered in increasing sophistication and thus increasing weight. In almost all cases, scores are awarded for demonstrating understanding and not for effort. Detailed rubrics for all quizzes, programming assignments, and exams are provided once the assignment has been graded to enable students to easily see how the score was awarded. A detailed Programming Assignment Assessment Rubric is available on the public course webpage.

The final grade is calculated using a weighted average of all assignments. Participation will be assessed in part based on: (1) zyBook participation activities; (2) lecture attendance and participation; (3) discussion section attendance and participation; (4) online Piazza discussion; and (5) completing student evaluations. The weighting for the various assignments is shown below.

Participation 5%
Homework 10% (assigned zyBook challenge activities)
PA Milestones 5% (weighted equally)
PA Code 25% (weighted equally)
PA Reports 10% (weighted equally, includes testing doc)
Prelim Exam 15%
Semi-Final Exam 25%
Short Take-Home Quiz 5%

Note that the exams account for roughly 40% of a student's final grade. The exams in this course are very challenging. Successful students begin preparing for the exams far in advance by carefully reviewing the assigned readings, independently developing study problems, and participating in critical study groups.

To pass the course, a student must at a bare minimum satisfy the following requirements: (1) submit four out of the five programming assignments; (2) take the prelim exam; (3) take the semi-final exam; and (4) submit the short take-home quiz. If a student does not satisfy these criteria then that student may fail the course regardless of the student's numerical grade. The instructor reserves the right to award a D letter grade for students who barely satisfy this criteria but are clearly making no real effort to engage in the course and their own learning.

Degree Requirements

This section describes how ECE 2400 can satisfy various degree requirements. Students are responsible for confirming this information with the appropriate student services coordinator.


This section outlines various policies concerning auditors, usage of cellular phones and laptops in lecture, turning in assignments late, regrading assignments, collaboration, copyright, and accommodations for students with disabilities.

Auditor Policy

Casual listeners that attend lecture but do not enroll as auditors are not allowed; you must enroll officially as an auditor. If you would like to audit the course please talk to the instructor first! Usually we wait until the second week of classes before allowing auditors to enroll, to ensure there is sufficient capacity in the lecture room. The requirements for auditors are: (1) attend most of the lectures; (2) complete a reasonable amount of the zyBook participation activities; and (3) complete a reasonable amount of the zyBook challenge activities. This does mean you have to buy the zyBook. If you do not plan on attending the lectures for the entire semester or you do not plan on doing any of the reading, then please do not audit the course. Please note that students are not allowed to audit the course and then take it for credit in a later year unless there is some kind of truly exceptional circumstance.

Course Re-Enrollment Policy

Students are not allowed to enroll for credit for a significant fraction of the course, drop or switch to auditor status, and then re-enroll for credit in a later year. A "significant fraction of the course" means after the first prelim; by this time the student will have: attended several lectures, completed multiple programming assignments, and completed several short quizzes. The student should have plenty of experience to decide whether or not they should drop and take the course in a later year. It is not fair for students to have access to assignment solutions and possibly even take both prelims before deciding to drop the course and take it again in a later year; this would essentially enable students to take the course twice to improve their grade.

Cellular Phones and Laptops in Lecture Policy

Students are prohibited from using cellular phones and laptops in lecture unless they receive explicit permission from the instructor. It is not practical to take notes with a laptop for this course. Students will need to write on the handouts, quickly draw state diagrams, and sketch pseudocode during lecture. The distraction caused by a few students using (or misusing) laptops during lecture far outweighs any benefit. Tablets are allowed as long as they are kept flat and used exclusively for note taking. If you feel that you have a strong case for using a laptop during lecture then please speak with the instructor.

Late Assignment Policy

Programming assignment reports must be submitted electronically in PDF format and the code must be submitted electronically via GitHub. No other formats will be accepted! Programming assignments must be submitted by 11:59pm on the due date. No late submissions will be accepted and no extensions will be granted except for a family or medical emergency. We will be using the online Canvas assignment submission system. You can continue to resubmit your files as many times as you would like up until the deadline, so please feel free to upload early and often. If you submit an assignment even one minute past the deadline, then the assignment will be marked as late.

As an exception to this rule, each student has five slip-days that may be used when submitting programming assignments (both incremental milestones and the final assignment) throughout the semester. Each slip-day provides an automatic 24-hour extension. The PA code and report are treated as a single assignment for the purposes of slip days (i.e., a single slip day provides an automatic 24-hour extension for submitting a student's code, report, or both). When working with a partner, both students must have a slip day to secure an automatic 24-hour extension. Regardless, the maximum automatic extension is 48 hours. The purpose of the slip-day system is to give you the freedom to more effectively manage your time. The due dates for the course are available at the beginning of the semester, so please plan ahead so you can handle weeks with many other deadlines. To use a slip day, simply submit the report late; Canvas will allow assignments to be uploaded up to two days late. You are responsible for keeping track of how many slip days you have remaining. If you accidentally submit an assignment late without the proper number of slip days remaining then, although the system will allow the upload, we will not grade the assignment (or we will grade the latest upload before the due date).

Regrade Policy

Addition errors in the total score are always applicable for regrades. Regrades concerning the actual solution should be rare and are only permitted when there is a significant error. Please only make regrade requests when the case is strong and a significant number of points are at stake. Regrade requests should be submitted online via a private post on Piazza within one week of when an assignment is returned to the student. You must provide a justification for the regrade request.

Collaboration Policy

The work you submit in this course is expected to be the result of your individual effort only, or in the case of the final two programming assignments, the result of you and your group's effort only. Your work should accurately demonstrate your understanding of the material. The use of a computer in no way modifies the standards of academic integrity expected under the University Code.

You are encouraged to study together and to discuss information and concepts covered in lecture with other students. You can give "consulting" help to or receive "consulting" help from other students. Students can also freely discuss basic computing skills or the course infrastructure. However, this permissible cooperation should never involve one student (or group) having possession of or observing in detail a copy of all or part of work done by someone else, in the form of an email, an email attachment file, a flash drive, a hard copy, or on a computer screen. Students are not allowed to seek consulting help from online forums outside of Cornell University. Students are not allowed to use online solutions (e.g., from Course Hero) from previous offerings of this course. Students are encouraged to seek consulting help from their peers and from the course staff via office hours and the online Piazza discussion forums. If a student receives consulting help from anyone outside of the course staff, then the student must acknowledge this help on the submitted assignment.

During in-class quizzes and examinations, you must do your own work. Talking or discussion is not permitted during the examinations, nor may you compare papers, copy from others, or collaborate in any way. Students must not discuss a quiz/exam's contents with other students who have not taken the quiz/exam. If prior to taking it, you are inadvertently exposed to material in an quiz/exam (by whatever means) you must immediately inform an instructor.

Should a violation of the code of academic integrity occur, then a primary hearing will be held. See for more information about academic integrity proceedings.

Examples of acceptable collaboration:

Examples of unacceptable collaboration:

Notice that the key is that students should not share the actual solutions or code with each other. Consulting with your fellow students is fine and is an important part of succeeding in this course.

Copyright Policy

All course materials produced by the course instructor (including all handouts, tutorials, homeworks, quizzes, exams, videos, scripts, and code) are copyright of the course instructor unless otherwise noted. Download and use of these materials are permitted for individual educational non-commercial purposes only. Redistribution either in part or in whole via both commercial (e.g., Course Hero) or non-commercial (e.g., public website) means requires written permission of the copyright holder.

Accommodations for Students with Disabilities

In compliance with the Cornell University policy and equal access laws, the instructor is available to discuss appropriate academic accommodations that may be required for students with disabilities. Requests for academic accommodations are to be made during the first three weeks of the semester, except for unusual circumstances, so arrangements can be made. Students are encouraged to register with Student Disability Services to verify their eligibility for appropriate accommodations.

Online and Computing Resources

We will be making use of a variety of online websites and computing resources.