EECS 280: Programming and Introductory Data Structures
Fall 2024
Computer science fundamentals, with programming in C++. Build a satistical analysis tool, an image processing program, a Euchre card game, a machine learning algorithm, and a text editor. Analyze and implement foundational data structures.
Course Overview
Lectures are offered via in-person, recorded, and asynchronous formats.
· You may attend or engage with any lecture, regardless of your registered lecture section.
· Participation in live lecture is optionally worth 3% of your overall grade. We'll compute it both ways and take the higher. You can max out this credit even if you miss a few lectures.
Labs are in-person, with exercises completed in small groups. 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.
Ed is the course discussion forum, best for technical questions and project help. Do not publicly post your code.
Administrative request forms via eecs280.org are best for:
· 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 requests
eecs280admin@umich.edu reaches the EECS 280 faculty and administrators (not IAs or GSIs).
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
Ed 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 via eecs280.org 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:
Information and Technology Services (ITS) Laptop loaner program
College of Engineering (CoE) Office of Student Affairs, email requests to coe-studentaffairs@umich.edu
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
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 exam and one final exam, administered in-person, on-paper, at a scheduled time. 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, or to help students avoid negative academic consequences when their religious obligations conflict with academic requirements.
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
Lab sessions are 110 minutes, starting at the scheduled time. Course staff facilitate labs and are available for questions. At the start of the term, you'll receive two lab group assignments, group A and group B. You'll work on two deliverables during lab:
1. Main Worksheet ~85 min
Work with group A on practice exercises, tutorials, and group coding mini-projects. Submit a single main worksheet as a group to Gradescope.
2. Debrief Worksheet ~20 min
Work with group B on a short "debrief" worksheet, reviewing or building on your work from the main exercises.
Submit a single debrief worksheet as a group to Gradescope.
Every other lab, the roles of groups A and B switch. e.g. For lab 1, work with A for main exercises and debrief with B. For lab 2, work with B for main exercises and debrief with A. And so on...
Labs are graded on completion of both worksheets and submission to Gradescope. Attendance is required to earn any credit for lab. Attendance is taken 30 minutes into the main worktime. Individuals will not receive credit for the lab unless they are present when attendance is taken. Students who leave before completing the debrief with their second group will not receive attendance credit.
Projects
You will complete six major programming projects ranging in size from ~100 to ~1,000 lines of code.
Project 1: Statistics. Implement a two-sample statistical analysis tool.
Project 2: Computer Vision. Resize images without distortion.
Project 3: Euchre. Simulate a card game popular in Michigan.
Project 4: Machine Learning. Automatically identify the subject of EECS 280 forum posts.
Project 5: Text Editor. Interactively edit text files via the terminal.
Project 6: Binary Search Tree. Implement an efficient map using a binary search tree.
NOTE: In previous terms of EECS 280, we released projects 4 and 6 as a single, combined project. This term, it is split into two individual projects, but the overall workload is unchanged.
We update and improve the projects from time to time, so they may change any time before the project release date.
Retaking the Course
If you are retaking the course and plan to work alone on a project, you are allowed to reuse your own code. If you choose to work with a partner, you should start the project from scratch to ensure the best learning experience for you and your partner.
Project Partnerships
Partnership Availability
Project 1 is done independently by each student.
You may work either alone or in a partnership for the remaining projects.
Partnering Rules
Eligibility: You may only partner with students registered in EECS 280 this term (any section).
Collaboration: Both students must engage fully in all aspects of the project. Dividing the project into separate components to work on independently is not allowed.
Changing Partners: You may change partners between projects but not during a project. In exceptional cases, you may request partnership dissolution via email to eecs280admin@umich.edu. If dissolution is granted, both partners may use previously shared code, but both must work alone on the remainder of the project.
Submission and Grading
Registration: You must register your partnership on the autograder before submitting.
Submissions: You and your partner share the same number of submissions allowed per day as granted to individuals.
Grading: Both partners receive the same final grade overall for a project.
Collaboration Strategies
If you are working with a partner, collaboration is key to your success. Adopt the following strategies to work effectively as a team:
Collaboration: Complete most of the project together during shared worktime, whether in person or virtual.
Pair Programming: Write code together (e.g. one person types, the other reviews) to enable collaborative learning opportunities, catch errors earlier, and promote better program design.
Task Rotation: Rotate roles and responsibilities regularly to ensure both partners gain experience with all aspects of the project.
Planning and Communication: Set expectations for work habits and milestones for project completion. Establish means of communication and expected norms for response time.
Shared Documentation: Maintain a shared document for notes, ideas, and updates to keep everyone on the same page.
Mutual Support: Offer and seek help from your partner when faced with difficulties. Collaboration is about leveraging each other's strengths.
Discuss these strategies with potential partners before you begin working together. If you don't agree on these strategies, you should opt to work alone or seek other partners. Not everyone is a great fit together, and that's okay.
Responsibility and Honor Code
Accountability: Each student is responsible for the complete project. Both must understand and be able to explain every component of the project.
Honor Code: Any honor code violation, such as plagiarism or unauthorized collaboration, will be the responsibility of both students in the group. Work together with integrity and adhere to the honor code at all times. By following these strategies, you will enhance your learning experience and develop valuable teamwork skills essential in the professional world.
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.
Some projects have a checkpoint worth a small portion of the overall course grade. The full submission for each project is worth the remaining portion. See the course schedule and project specifications 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:
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.
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=10%, P3=10%, P4=5%, P5=10%, P6=5%) 44%
Midterm Exam 25%
Final Exam 25%
Entry and Exit surveys 1%
Total 100%