EECS 280: Programming and Introductory Data Structures Syllabus
The University of Michigan, Spring 2022
Computer science fundamentals, with programming in C++. Build an image processing program, a Euchre card game, a web backend, and a machine learning algorithm.
|James Juett <email@example.com>|
|Jule Schatz <firstname.lastname@example.org>|
Lectures are offered via in-person, recorded, and asynchronous formats. You may attend or participate in any lectures, regardless of your registered lecture section.
Labs are held 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 for credit. 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 administered in-person, taken on a personal laptop or lab computer. Details will be provided closer to the exam date.
Office hours will be held in-person and virtually, both one-on-one and in groups.
eecs280.org links to all course resources and is required reading. The page will be updated each week with general announcements and course content.
Piazza is the course discussion forum, best for technical questions and project help. Do not publicly post your code.
Administrative requests must be submitted through the forms linked from eecs280.org:
- Assignment extensions/exceptions due to medical or personal emergencies
- Assignment extensions for students adding the course late
- Excused lab absences due to illness (separate from the regular lab drops)
- SSD documentation and accommodation requests
- Alternate exam scheduling requests
Extension requests will only be considered if made at least 24 hours before the assignment deadline unless an emergency prevents prompt communication to course faculty or staff.
email@example.com reaches the course staff. (Please do not use this email for technical questions or requests covered by the administrative forms.)
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.
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:
- Information and Technology Services (ITS) Laptop loaner program
- College of Engineering (CoE) Office of Student Affairs, email requests to firstname.lastname@example.org
You may also use computer workstations in CAEN labs on campus or connect remotely.
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|
|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|
|Structs and classes||Functors|
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.
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 email@example.com.
There will be one midterm and one final exam. Exam dates are posted on eecs280.org.
We may provide alternate exam times for students with a valid, documented conflict with a required activity in another course, or university-affiliated athletics. All requests for alternate exams must be submitted through the administrative form linked on the course website.
We also provide alternate exams in cases of unanticipated medical or personal emergencies.
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 be 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.
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 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.
We use a web-based autograder to evaluate correctness, style, and the thoroughness of your tests.
Before the deadline, you may submit up to 6 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.
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.
Tips for doing well on the projects include:
- Start early. This is the most common problem.
- Try a debugger. One major goal of this course is for you to learn to test and debug your programs independently.
- Ask for help. We want to help you in office hours!
- Back up. We can't help you with lost data.
Tips for project partnerships include:
- Form your partnership early. Don't partner with someone who has already written most of the code, or vice versa. You won't get as much out of the project.
- Plan your strategy. When will you meet? Do you plan to attend office hours? Do you prefer to work during the day, at night, or on the weekends? Will you start early?
- Work on all parts of the project together. We strongly encourage pair programming. It's also valuable practice for exams.
- Do NOT split the work in half and work separately. You'll have no control over your partner's contribution. Splitting the work also harms your readiness for exams.
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.
|Lab (all labs equal weight)||10%|
|Projects (P1 5%; P2-P5 11% each)||49%|
|Computing CARES entry and exit surveys||1%|
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.99% is a B+ and a score of 90.0% is an A-.
|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 low 80's. We will never adjust scores downward.
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 late may petition for additional time to turn in 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.
If you must miss a lab due to e.g. a planned medical procedure or an unanticipated medical or personal emergency, please fill out the exception form linked on eecs280.org. We will drop the two lowest lab scores for each student at the end of the term.
Request an extension/exception using the forms linked from eecs280.org.
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.
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|
|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.
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.
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:
- The EECS 280 instructors submit an official report to the honor council.
- The honor council notifies you of the report, and explains the next steps of the process. You receive a copy of the report, including the evidence of the suspected violation.
- The course instructors play no role in adjudicating reported cases.
- The honor council notifies course instructors when your case is resolved. Any penalties they prescribe are applied to your grade. If you are found not responsible, your grade is unaffected.
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.
Our goal is to provide an effective and safe learning environment in EECS 280 that is as close as possible to a traditional in-person term. We also understand that the pandemic affects students in significant and varied ways, and we will work to ensure all students are able to participate in the course. Please reach out to us to discuss specific challenges or needs you have.
As they have throughout the past two years, policies around academic and public health are subject to change as this pandemic evolves. This course will follow all policies issued by the University. Please see the UM Campus Blueprint for the most up to date information.
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/article/um-mental-health-resources.
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.
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.
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 (firstname.lastname@example.org) at any time up to seven days after final grades have been issued. This has no impact on your grade in any manner.