EECS 280: Programming and Introductory Data Structures Syllabus

The University of Michigan, Fall 2023

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

Instructors

Amir Kamil <akamil@umich.edu>
James Juett <jjuett@umich.edu>
Saquib Razak <razak@umich.edu>
Sofia Saleem <sofias@umich.edu>

Course Overview

Lectures are offered via in-person, recorded, and asynchronous formats. You may attend in any lecture, regardless of your registered lecture section. We don't take attendance in lecture.

Labs are in-person, with most work completed in small groups of four. Course staff facilitate lab sessions and are available for questions. Lab attendance is required. We will drop the two lowest lab scores for each student at the end of the term.

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

Exams will be in-person, on-paper, at a scheduled time.

Office hours will be held in-person and virtually, both one-on-one and in groups.

Communication

eecs280.org links to all course resources and is required reading.

Piazza is the course discussion forum, best for technical questions and project help. Do not publicly post your code.

Administrative request forms are best for:

eecs280admin@umich.edu reaches the course staff.

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. Please do not send messages to instructors via Canvas. It is difficult to track these messages and we want to ensure you receive a prompt reply.

Discord is best for social stuff.

Getting Help

Piazza is the course discussion forum, best for technical questions and project help. Do not publicly post your code.

Staff office hours. Check the calendar.

Professor office hours. Check the calendar.

Administrative request forms for things like extension requests.

Tutoring outside the course.

Diversity and Inclusion

We care about our course community and want it to be a place where all students feel included, valued, and safe to learn from and with others. Diversity of thought and of people are important to us. We ask that you treat all other students with respect and work to create an inclusive community, and we hold ourselves to the same standard. Please feel free to contact us with any problem, concern, or suggestion. You may also report any concerns or misconduct via the resources linked at https://cse.engin.umich.edu/about/reporting-concerns-and-misconduct/.

Computer and Network Recommendations

We recommend you have a personal 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:

You may also use computer workstations in CAEN labs on campus or connect remotely.

Curriculum

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 Container Data Structures
Functional abstraction Recursion
Data abstraction Generic Programming
Inheritance and Polymorphism Higher-Order Functions
Dynamic resource management Testing and debugging
Compound Types Stacks and queues
Encapsulation Linked lists and binary trees

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

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

Textbook

The course notes cover the same material as lecture, sometimes in more depth or with additional examples.

(Optional) C++ Primer by Lippman, Lajoie and Moo. 5th edition. May be used as a reference for the C++ language.

Many C++ reference materials are freely available online.

Prerequisites

ENGR 101 or ENGR 151 or EECS 180 or EECS 183 or ROB 102 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 or at ugadmin@eecs.umich.edu.

Exams

There will be one midterm and one final exam. Exam dates are posted on eecs280.org.

Alternate Exams

We may provide alternate exam times for students with a valid, documented conflict with a required activity in another course or official university-affiliated activity. We also provide alternate exams in cases of unanticipated medical or personal emergencies.

All requests for alternate exams must be submitted through the administrative form linked on the course website.

Labs

Labs consist of a short large-group review followed by work in small groups to complete a worksheet. Course staff facilitate labs and are available for questions. Labs are graded on attendance and completion of the worksheet, submitted as a group. Attendance is taken at the beginning of the small-group worktime. Individuals will not receive credit for the lab unless they are present when attendance is taken.

Projects

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

Project 1: Statistics . Analyze data from the "How Couples Meet and Stay Together" research study.

Project 2: Computer Vision . Resize images without distortion.

Project 3: Euchre . Simulate a card game popular in Michigan.

Project 4: Web . Build a small web server for an office hours queue.

Project 5: Machine Learning . Automatically identify the subject of EECS 280 forum posts.

We update and improve the projects from time to time, so they may change any time before the project release date.

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 may not partner with anyone outside the course.

You may change partners between projects. You may 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.

For those retaking the course: if you submitted an assignment in a previous term, you may still partner, but we encourage you to start coding from scratch with your partner, without reusing previous code. This will provide the best learning experience for you and your partner. If you choose to work alone, you are free to reuse your own code from a previous term.

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.

Projects 3 and 5 each have a checkpoint worth 0.5% of the overall course grade. The full submission for each project is worth the remaining 9.5% of the overall course grade, for a total of 10%. See the project specs for more details.

Programming Environment

You are free to develop on any platform. You are responsible for any differences between your preferred platform and the autograder platform, so use only ANSI/ISO standard C++17 and compile with the provided Makefile or equivalent compiler options. It is essential to submit your code early and often so that you can identify and fix any compatibility issues reported by the autograder.

Project Tips

Tips for doing well on the projects include:

Tips for project partnerships include:

Grades

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

You can estimate your letter grade using our grade calculator.

Assignment Weighting

We calculate your total weighted score using these weights.

Assignment Weight
Lab (all labs equal weight) 5%
Projects (P1 4%; P2-P5 10% each)
44%
Midterm Exam 25%
Final Exam 25%
Entry and Exit surveys 1%
Total 100%

Exam Curve

After each exam, we adjust your score to account for the difficulty of the exam. We never adjust scores downward. See our grade calculator for more details and examples of curves on previous exams.

No other assignments are curved.

Minimum Pass Thresholds

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 65.0%. Otherwise, the maximum grade you may earn is a C-.

(Note: In previous terms, these thresholds were set higher at the start of the term and adjusted to be more lenient later on. In this term, we've set the thresholds at their appropriate place from the start and do not expect to adjust them.)

Letter Grades

After computing the total weighted score and considering the minimum pass thresholds, we use these ranges to assign letter grades. Each range is half-inclusive, for example a score of 89.999% is a B+ and a score of 90.0% is an A-.

We do not curve the course overall or otherwise adjust letter grade thresholds.

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

Extensions and Exceptions

We do not accept late work. Project and lab submissions are not allowed past the published deadline, except in the circumstances outlined below.

Submit extension/exception requests via the administrative request forms.

Late Adds. Students adding EECS 280 late may petition for additional time to turn in assignments.

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

Emergencies. 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. Requests must be made at least 24 hours before the assignment deadline, unless the emergency prevents prompt communication to course faculty or staff.

Lab Drops. We drop the lowest 2 lab scores for all students. This policy is intended to cover situations in which you must miss a lab due to e.g. a planned medical procedure, an unanticipated medical or personal emergency, or an official university conflict. If (and only if) you have already used your two drops, you may petition for an additional drop in cases of illness or emergency. Requests will be considered on a case-by-case basis.

Regrades

Exams are graded by hand. We will provide an opportunity to request a regrade to correct grading errors. We will regrade the entire problem and fix any mistakes (your score may go up or down).

Labs are graded for attendance and completion. You may check your scores on Canvas. Please report any clerical errors.

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, tools, 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
Using starter code provided with a project or based on examples shown in lecture

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 or help someone debug 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 the 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.

Generative AI Policy

The use of generative AI tools (e.g. GitHub Copilot, ChatGPT, Bard, etc.) is permitted only in the same contexts where collaboration with another person is allowed, following the guidelines above. For example:

Allowed Use Prohibited Use
Learning course concepts, generating examples of a particular coding pattern, interactively checking your knowledge, etc. Generating project code, test cases, or any other work to be submitted (with or without modifications)
Understanding compiler errors or getting suggestions for debugging a problem Exhaustively proofreading your code to find and/or correct any mistakes
Brainstorming and identifying potential edge cases for testing Asking for a list of test cases (even if they aren't written out as code)
Generating additional practice exam questions or other use for studying Using generative AI tools during exams

Additionally, the use of generative AI in a deceptive or malicious fashion is prohibited. This includes but is not limited to:

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

Course Policies

Health and Wellness

Our goal is to provide a safe and effective in-person learning environment in EECS 280 for all students in line with University policies. Please reach out to us to discuss specific health challenges or needs you have.

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.

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 https://caps.umich.edu 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 https://www.uhs.umich.edu/mentalhealthsvcs, or for alcohol or drug concerns, see www.uhs.umich.edu/aodresources. For a listing of other mental health resources available on and off campus, visit: https://caps.umich.edu/resources.

Wolverine Support Network

Another resource available to you as a U-M student is Wolverine Support Network, a student organization offering free peer-facilitated weekly groups on campus. With 30+ groups per week, students are placed in a group at a time and location most convenient for them. Trained students lead groups to promote students' well-being and build community in an accessible, confidential, and inclusive environment. To sign up for a group, go to umichwsn.org/join, or email wsndirectors@umich.edu with any questions.

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; http://ssd.umich.edu) 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.

FCI Initiative

This semester, EECS 280 is partnering with the Foundational Course Initiative (FCI) at the Center for Research on Learning and Teaching (CRLT). FCI is a program to improve undergraduate experience and learning in large enrollment courses and involves a course design collaboration between instructional staff, former course students, and FCI consultants. Over the course of the term, FCI consultants may attend class sessions, and you may be asked to complete surveys and/or participate in focus groups aimed at evaluating the effectiveness of specific course elements.

While this is an educational improvement project, it also has a research component to understand educational experiences and document the effectiveness of various course design strategies (IRB: HUM00150716).

Your participation in surveys and focus groups will be voluntary, and at no time will your name or any identifying details be included in any research presented either within or beyond the University of Michigan.

More information on FCI can be found here: Foundational Course Initiative

Please feel free to contact crltfciteam@umich.edu if you have any questions or concerns about this project.

Recordings

Course lectures may be audio/video recorded and made available to other students in this course. As part of your participation in this course, you may be recorded. If you do not wish to be recorded, please contact your instructor the first week of class to discuss alternative arrangements.

Students may not record or distribute any class activity without written permission from the instructor, except as necessary as part of approved accommodations for students with disabilities. Any approved recordings may only be used for the student's own private use.

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 (eecs280admin@umich.edu) at any time up to seven days after final grades have been issued. This has no impact on your grade in any manner.