MSU
Spring 2026
| Instructors | Charles Ofria (ofria@cse.msu.edu) |
| Josh Nahum (nahum@msu.edu) | |
| Kira Chan (chanken1@msu.edu) | |
| TA | Karen Suzue (suzuekar@msu.edu) |
| Modality | In Person, in STEM 2202 |
| Meeting Time | M/W 3 pm - 4:50 pm |
| Office Hours | After class and by appointment |
| Credits | 4 |
| Textbook | None |
| Web Site | https://cse498.github.io/ |
Students are expected to bring a laptop running a modern operating system (Windows or MacOS) to each class session. This laptop must be capable of running a modern C++ compiler and have access to the web.
Students will develop large C++ projects and gain expertise with the language. Topics include modern features of C++, effective use of the standard library, and developing custom libraries, with links to other areas of computer science. Emphasis will be placed on writing code that is secure, reliable, efficient, and generic, including good memory management practices, avoiding undefined behavior, automating through testing, and up-to-date documentation.
Understanding of C++ basics (as taught in CSE 232 and CSE 335), completion of all 300-level CSE requirements and at least two other 400-level CSE courses.
Most sessions of this course will be taught using a “flipped classroom” methodology. Students will be expected to watch provided videos (or read assigned web pages) before each session where they are assigned. Sessions will briefly review these topics, but focus on discussion of concepts and live implementation, supplemental lectures, debugging demonstrations, code reviews, quizzes, small group discussions, and student presentations for project coordination. The course schedule will include any required material at least a week before it is due (and typically sooner than that).
In this course you will have the opportunity to earn up to 100 points toward your final grade. Grades will be based on:
| Project | 40 points |
| Quizzes | 25 points (5 quizzes at 5 points each) |
| Weekly Updates | 12 points |
| Peer Reviews | 15 points (3 reviews at 5 points each) |
| Participation | 8 points |
| TOTAL | 100 points |
Each area is important: If you get fewer than half the points in any single category, that is grounds for receiving a zero as a final course grade.
| Points | Grade |
|---|---|
| 90%+ | 4.0 |
| 86%+ | 3.5 |
| 82%+ | 3.0 |
| 78%+ | 2.5 |
| 74%+ | 2.0 |
| 70%+ | 1.5 |
| 66%+ | 1.0 |
| Under 66% | 0.0 |
We reserve the right to adjust these numbers (almost certainly in your favor) to account for an unexpected challenges during the semester.
You will work in a group on a semester-long project. You may earn up to 40 points this way, based on both consistent progress, video presentations, and the quality of the final product. Your project grade will be based on three main factors: Functionality (Meeting the project goals and creating a positive user experience), Code Quality (Consistent style, documentation, function modularity, file layout, test coverage, etc.), and your Individual Contributions (Teammate ratings, presentations, info in weekly progress reports, and git logs).
Each Friday before midnight (starting in week 2) students will be expected to turn in a weekly progress report. Each report must contain four sections:
Some reports might have extra specific questions that you will be told at least 48 hours ahead of time. Reports are worth 1 point each and will be graded on a pass/fail basis (honest attempts will be given a “pass” as long as problems are corrected in future reports). Overall you are expected to turn in 14 of these reports, but a maximum of 12 points will count toward your final grade, so two can be missed without penalty.
There will be five quizzes over the course of the semester. You will be able to take at least two versions of each quiz, with only the highest score counting toward your final grade (at 5% per quiz). Quizzes will occur most Wednesdays during the final 15 minutes of class. During the final exam period you will be given an opportunity to take a third version of all of the quizzes.
At three points during the semester you will conduct a peer review of another group’s project, identifying potential problems and making suggestions for improvement. You will be provided with a specific rubric to follow and are expected to do a detailed review. You will be granted up to five points per review. The group being reviewed will have an opportunity to fix any identified problems before being graded by the instructors. Note that no AI usage will be allowed in creating the peer reviews (groups can always use AI to review their own code; peer reviews are intended to get another set of human eyes looking through the code).
Both attendance and being prepared are critical aspects of participation in this course; they are essential for learning the material and to be able to fully contribute to your project groups.
Attendance: We will ask one or more clicker questions in most class sessions so that we can adjust material as needed and verify attendance. You should try your best to answer these correctly so that we can assess student understanding, but any answer at all will verify attendance.
Class preparation: During class we will discuss that session’s material in addition to any other activities. You are expected to be ready to contribute to the discussion. To do so, you must watch the assigned videos or read the assigned material before each class. Some of the clicker questions will be clearly labeled as Participation Questions. These questions are intended to be easy if you completed the assigned watching or reading, but impossible to answer confidently otherwise (e.g., “Which of the following example problems was used throughout the video?”).
Grading: You begin the course with 8 participation points. You may miss up to two class sessions without penalty; each additional class session missed will reduce your participation score by one. Likewise, you may get up to two participation questions incorrect without penalty. Each additional additional incorrect answer to a participation question will be treated as a missed class. In exceptional circumstances, we will waive an absence for illness, religious observation (please notify us two weeks ahead), or limited other sanctioned events.
A note about participation: If you engage in conversation, you provide us with another source of information as to how well you are learning the material, and how much effort you are putting into the course. Let’s have an active class! Class participation will never harm your grade; always ask any questions you may have about the material.
Unlike most CSE classes, we encourage you to discuss any course material with each other and even make extensive use of outside sources including AI systems. The main issues that you need to be careful about are that you provide appropriate credit (i.e., cite your sources and do not claim someone else’s work as your own) and that you take any in-class quizzes or participation questions on your own without getting help from anyone else. While it is okay to use previously written code or AI-generated code (with citations in either case), your project group is responsible for generating the bulk of new code that you use. Furthermore, you are responsible for fully understanding all code that you use – do not just insert code because it works; make sure you know why it works.
Because a primary goal of this course is to teach professionalism, any academic dishonesty will be grounds for receiving a failing grade for the semester. Specific examples of academic dishonesty include (but are not limited to):
The goals of this class is for you to (1) learn how to write large-scale C++ code that is safe, efficient, and reliable; (2) improve your ability to write about computational topics, and (3) develop strong teamwork capabilities. If anything is getting in your way of these goals, please talk with us. We plan to keep the class flexible to the learning styles that seem to work best for the students, so feedback is always appreciated.