EECS 280: Programming and Introductory Data Structures Syllabus

The University of Michigan, Winter 2021

Computer science fundamentals, with programming in C++. Build an image processing program, a Euchre card game, a web backend, and a machine learning algorithm.


Jonathan Beaumont <>
Andrew DeOrio <>
James Juett <>

Remote Instruction

Due to COVID-19, EECS 280 will be remote this semester. You can complete the entire course from anywhere in the world.

Lectures are offered via live and asynchronous formats. You may attend any lecture section or watch any of the recordings, even if it's different than your registered section. We don't take attendance in lecture.

MW 10:30 - 12:00 ET DeOrio Zoom Lecture
MW 1:30 - 3:00 ET Juett Zoom Lecture
MW 3:00 - 4:30 ET Beaumont Zoom Lecture
Asynchronous DeOrio short videos via Panopto
Asynchronous Juett short videos and interactive exercises via Runestone

Labs will be completed remotely in assigned groups of four. A staff member will join your video call for part of the time. Expect to complete a worksheet together as a group. Attendance at your registered lab is required.

Projects will be completed either alone or in a partnership and turned in to an autograder.

Exams will be completed remotely using a web-based exam platform. Expect scheduled, timed midterm and final exams.

Office hours will be held via video conference, both one-on-one and in groups.

Grades are weighted less on exams compared to previous semesters (rubric).

Computer and network recommendations

Make sure you have a laptop consistent with CAEN recommendations.

Test your internet connection with the U-M Custom Speedtest website and make sure it meets the minimum requirements for any UM service. You'll need more bandwidth if there will be multiple simultaneous users in your household.

Resources for help with computing equipment:


EECS 280 is a second-semester foundational programming course. You'll learn how to write correct programs that are easy for others to understand and modify. We focus on computer science concepts including:

  • Value and reference semantics
  • Functional abstraction
  • Data abstraction
  • Inheritance and Polymorphism
  • Dynamic resource management
  • Compound Types
  • Encapsulation
  • Container Data Structures
  • Recursion
  • Generic Programming
  • Higher-Order Functions
  • Testing and debugging
  • Stacks and queues
  • Linked lists and binary trees

In our exploration of these concepts, we cover many elements of the C++ language:

  • Arrays and Vectors
  • File and stream I/O
  • C and C++ strings
  • Pointers
  • Structs and classes
  • Operator overloading
  • Derived types
  • The Big Three
  • Templates
  • Iterators
  • Functors
  • Exceptions


ENGR 101 or ENGR 151 or EECS 180 or EECS 183 with a minimum grade of "C". Prerequisites may be waived with transfer credit or a proficiency exam. Contact the CSE Advising Office in Beyster 2808


Course notes.

Optional C++ Primer by Lippman, Lajoie and Moo. 5th edition. Available free through UM library.

Communication links to all course resources and is required reading.

Piazza is the course discussion forum, best for technical questions and project updates. Do not publicly post your code. reaches the course staff, best for non-technical questions.

Individual professor email addresses are best for confidential matters.

Canvas is where we publish important announcements and grades. It is your responsibility to verify you can receive Canvas announcements.


There will be one midterm and one final examination. Exam dates are posted on It is your responsibility to verify you can attend both exams before registering.

Alternate Exams

We provide a single alternate midterm exam. It is available only to students who have a valid, documented conflict with a required activity in another course, or university-affiliated athletics.

We provide a single alternate final exam. It is available only to students who have a conflict with another final exam.

All requests for alternate exams must be received no later than the third week of the semester.


During lab sections, you will complete worksheets in small groups. A staff member will join you for part of the lab. Labs will be graded on attendance and completion of the worksheet.


You will complete five major programming projects ranging in size from ~100 to ~1,000 lines of code.

Project Partnerships

Project 1 is independent. You may work either alone or in a partnership for the remaining projects.

If you work in a partnership, you must partner with a student registered for EECS 280 this term (any section). You must not partner with anyone outside the course. For those retaking the course: if you submitted an assignment in a previous term, you must not partner on that same assignment this term.

You may change partners between projects. You must not change partners during a project. In exceptional cases, you may request partnership dissolution via email to the faculty. If the dissolution is granted, both partners may use previously shared code and both partners must work alone on the remainder of the project.

You and your partner turn in the same solution to the autograder. You must register your partnership on the autograder.

Project Grading

We use a web-based autograder to evaluate correctness, style, and the thoroughness of your tests.

Before the deadline, you may submit up to 3 times per day. After each submission, the autograder shows the results of the public tests released with the project.

After the deadline, the autograder shows the results of private tests, which are usually more thorough than the public tests.

Your final project score is a combination of public and private tests. We use the submission that received the combined best score. If multiple submissions share the best score, we grade the last.

Programming Environment

You are free to develop on any platform. You are responsible for any differences between your preferred platform and the grading platform, so use only ANSI/ISO standard C++. We recommend testing your code on CAEN Linux, which provides version 4.8.5 of the g++ compiler, the same version used by the autograder.

Project Tips

Tips for doing well on the projects include:

Tips for project partnerships include:


Letter grades are assigned on a straight scale with curved exams. In general, our goal is be consistent with past semesters.

Compared to previous semesters (before Winter 2021), exams are weighted less. Additionally, letter grades are assigned on a straight scale and exams are curved individually. The new process is intended to increase transparency, and we expect the overall grade distribution to remain consistent with past semesters.

We calculate your total weighted score using these weights.

Assignment Weight
Lab (all labs equal weight) 10%
Projects (p1 5%; p2-p5 11% each) 49%
Midterm Exam 20%
Final Exam 20%
Computing CARES entry and exit surveys 1%
Total 100%

After computing the total weighted score, we use these ranges to assign letter grades. Each range is half-inclusive, for example a score of 89.9% is a B+ and a score of 90.0% is an A-. We may adjust thresholds in your favor.

Total weighted score Letter grade
0 - 50% E
50 - 60% D
60 - 70% C-
70 - 77% C
77 - 80% C+
80 - 83% B-
83 - 87% B
87 - 90% B+
90 - 93% A-
93 - 97% A
97 - 100% A+


After each exam, we may adjust your score to account for the difficulty of the exam. In general, our goal is a mean in the mid 80's. We will never adjust scores downward.

Minimum scores

To pass EECS 280 with a C or better, your total weighted project score must be at least 60.0%, and your total weighted curved exam score must be at least 70.0%.

Deadlines and Extension Policy

We do not accept late work. Project and lab submissions are not allowed past the deadline.

Students adding EECS 280 after the Project 1, Lab 1, or Lab 2 deadline may petition to turn in those assignments.

We will consider extension requests made at least two weeks in advance, for example, for religious holidays or planned medical procedures.

If you experience a medical or personal emergency, please reach out to us! We will consider exceptions on a case-by-case basis. Please provide documentation of the emergency if you are able, as this helps us make appropriate accommodations.

We do not consider individual exception or extension requests for labs. Instead, we will automatically drop your two lowest lab scores.

Request an extension using the form linked from


Exams are graded by hand. Request a regrade via Gradescope. We accept requests only to correct grading errors, not disagreement with the rubric. Your score may go up or down.

Labs are graded for attendance and completion. Report a clerical error via the link on

Projects are automatically graded. We do not accept regrade requests.

In all cases regrade requests are due no later than 7 days after a grade is released unless a shorter deadline is specified.

Academic Integrity

We encourage collaboration in EECS 280, especially on concepts, tool, specifications, and strategies.

All work you submit must be your own or your partnership's. Collaboration must not result in code that is identifiably similar to other solutions, past or present.

Encouraged Collaboration Unacceptable collaboration
Sharing high-level design strategies, e.g., helper function organization or data structure choices Walking through an important piece of code step-by-step, sharing pseudocode, sharing comments
Helping others understand the spec or project nuances Providing your code as a reference
Helping someone debug Debugging someone's code for them
Explaining a compiler error to someone Fixing a compiler error for someone
Discussing test strategies Sharing test code to verify someone else's design, even if test cases are not submitted
Brainstorming edge cases for testing Discussing specifics about what tests exposed instructor bugs on the autograder
Sharing code provided by the course staff

Copying code in whole or in part, even if the code is modified

Writing original code for someone else, or paying someone to write your project

Looking at someone else's code to understand concepts Sharing your code in a way that could be copied, e.g., sending code over email or taking a picture of code

You are still responsible for following these rules even after finishing the course.

If you are unsure about what constitutes an honor code violation, please contact the course staff with questions.

Code reuse

If you are retaking the course, you may reuse your own code, provided it was wholly written according to rules outlined in this syllabus. It is possible for instructors to miss an honor code violation in a previous term, but catch and report it when the code is reused.

Code publishing

You may not make your code publicly available in any form, for example in a public GitHub repository or personal website. You are still responsible for following these rules even after finishing the course.

Honor Council Process

We report suspected violations to the Engineering Honor Council. To identify violations, we use both manual inspection and automated software to compare present solutions with each other, with past solutions, and with code found online. The Honor Council determines whether a violation of academic standards has occurred, as well as any sanctions. Read the Honor Code for detailed definitions of cheating, plagiarism, and other forms of academic misconduct.

Here's what you can expect if you are reported for an honor council violation:

If you have a pending honor council case at the end of the term, you receive an "I" (incomplete) grade until the case is resolved. We will send you a grade projection via email to help with planning. Your grade is updated once the case is resolved. The "I" should not remain on your transcript.

Accommodations for Students with Disabilities

If you think you need an accommodation for a disability, please let your instructor know during the first three weeks of the semester. Some aspects of this course may be modified to facilitate your participation and progress. As soon as you make us aware of your needs, we can work with the Services for Students with Disabilities (SSD) office to help us determine appropriate academic accommodations. SSD (734-763-3000; typically recommends accommodations through a Verified Individualized Services and Accommodations (VISA) form. Any information you provide is private and confidential and will be treated as such.

Commitment to Equal Opportunity

As indicated in the General Standards of Conduct for Engineering Students, we are committed to a policy of equal opportunity for all persons and do not discriminate on the basis of race, color, national origin, age, marital status, sex, sexual orientation, gender identity, gender expression, disability, religion, height, weight, or veteran status. Please feel free to contact us with any problem, concern, or suggestion. We ask that all students treat each other with respect.

Students' Mental Health and Well-being

University of Michigan is committed to advancing the mental health and well-being of its students. If you or someone you know is feeling overwhelmed, depressed, and/or in need of support, services are available. For help, contact Counseling and Psychological Services (CAPS) at (734) 764-8312 and during and after hours, on weekends and holidays, or through its counselors physically located in schools on both North and Central Campus. You may also consult University Health Service (UHS) at (734) 764-8320 and, or for alcohol or drug concerns, see For a listing of other mental health resources available on and off campus, visit:

Research Disclosure

Your class work might be used for research purposes. No identifying information about you or your work will be published. For example, we may use anonymized student assignments to design algorithms or build tools to help programmers. Or we might survey responses to help us improve the course and better understand instructional techniques. Any student who wishes to opt out can contact the course staff ( at any time up to seven days after final grades have been issued. This has no impact on your grade in any manner.