MSU
Spring 2026
This course is divided up into five units, covering a range of C++ topics. Before each class session, students will be expected to either watch a video (typically under 60 minutes) or read a blog post for in-class discussion. The course will meet twice a week (Mondays and Wednesday, 3 pm to 4:50pm in STEM 2202); in addition to the discussion of material from the videos (which may include elaboration on content), classes will consist of live-coding demonstrations, live code reviews, quizzes, time for students to try out coding techniques, or time for the project groups to work together.
| Date | Discussion Topic | |
|---|---|---|
| Week 1 | ||
| 1/12/26 | A review of 232 and 335 | |
| 1/14/26 | Tools: Compiler Features and Static Analysis | |
| Watch: 31 nooby C++ habits you need to ditch (16 min) | ||
| Watch: Software Development with C++: clang-format (9 min) | ||
| Watch: Software Development with C++: Compiler Optimization Levels (13 min) | ||
| Week 2 | ||
| 1/19/26 | NO CLASS (MLK Day) | |
| 1/21/26 | C++ Core Guidelines | |
| Watch: 10 Core Guidelines You Need to Start Using Now (first 54 min + optional Q&A session) | ||
| Out: Project Group Assignments | ||
| Quiz: 1a | ||
| Week 3 | ||
| 1/26/26 | C++ Terminology and Basic Concepts | |
| Watch: Never free memory yourself! Do this instead (in modern C++) (first 14 min, though watch the end if you need a smart pointer refresher) | ||
| Watch: Why is there Undefined Behavior in C++? (4 min) | ||
| Watch: L-Values vs. R-Values (4:18 to 12:42; 8 min) | ||
| Read: When should static_cast, dynamic_cast, const_cast, and reinterpret_cast be used? (first answer is best, but later answers provide examples) | ||
| Read: Using the C++23 std::expected type | ||
| Slides From Lecture | ||
| 1/28/26 | Compiling C++ into WebAssembly with Emscripten | |
| Install and Read Tutorial: Getting Started with Emscripten | ||
| Optional: Using WebAssembly and C++ to Make a Simple Game (72 min) | ||
| Quiz: 1b | ||
| Due: Team agreements (sample) | ||
| Due FRIDAY Jan 30: Specs for initial C++ classes and module proposal | ||
| Git Slides From Lecture |
| Date | Discussion Topic |
|---|---|
| Week 4 | |
| 2/2/26 | Avoiding Undefined Behavior |
| Watch: Undefined Behavior in C++: What Every Programmer Should Know and Fear (33 min) | |
| Lecture Slides | |
| Lecture Slides [Halting problem] | |
| 2/4/26 | Tools: Setting up Testing Frameworks |
| Read over: Catch 2 - Tutorial | |
| Read over: Unit vs. Integration Testing | |
| Quiz: 2a | |
| Milestone: Initial working C++ classes | |
| Lecture Slides [Software Testing] | |
| Week 5 | |
| 2/9/26 | Debugging your code |
| Watch: Lessons from 20 years of Debugging C++ Code (only need the first 45 min) | |
| Watch: Constexpr and Static Assert (7 min) | |
| Lecture Slides: Debugging / compile-time work | |
| Quiz: 1c | |
| Lecture Slides [Non-conventional Testing Techniques] | |
| 2/11/26 | Memory Management + Casting |
| Watch: Smart Pointers in C++ (25 min) | |
| Quiz: 2b | |
| Milestone: Test suite, class asserts | |
| Lecture Slides [Memory Safety] |
| Date | Discussion Topic | |
|---|---|---|
| Week 6 | ||
| 2/16/26 | Template Rules | |
| Watch: Templates Introduction (11 min) | ||
| Watch: Template Functions (14 min) | ||
| Watch: Multiple Template Parameters & Non-Object Parameters (8 min) | ||
| Due: Fully functional C++ classes (5 pts) | ||
| Out: Code review assignments and rubrics | ||
| 2/18/26 | Template Specialization and Variadic templates | |
| Watch: Template Specialization (10 min) | ||
| Watch: Variadic Templates and Function Arguments (15 min) | ||
| Quiz: 3a | ||
| Due: Video Overview (5 pts) | ||
| Week 7 | ||
| 2/23/26 | Status Discussions (Normal class time AND optional 5-7pm for additional team discussions) | |
| Due: Code Reviews | ||
| 2/25/26 | Status Discussions (Normal class time AND optional 5-7pm for additional team discussions) | |
| Milestone: Full specs for Modules (including APIs and C++ class improvements) | ||
| Quiz: 3b | ||
| 2/27/26 | Due: Code fixes based on peer reviews | |
| SPRING BREAK! | (no class this week) | |
| Week 8 | ||
| 3/9/26 | Lambdas | |
| Watch: Lambda Part I (15 min) | ||
| Watch: Lambda Part II (20 min) | ||
| Watch: Lambda Part III (optional: 8 min) | ||
| Lecture Slides [Lambdas] | ||
| 3/11/26 | Ranges and Views | |
| Watch: C++ Ranges (Only need to watch starting from 37:47 if you remember iterators and algorithms; 23 minutes) | ||
| In-Class Code | ||
| More Examples Range Code | ||
| Milestone: Initial working modules and improved C++ classes; Integrate additional template functionality. |
| Date | Discussion Topic |
|---|---|
| Week 9 | |
| 3/16/26 | Compile-time execution |
| Watch: Why constexpr Matters (6 minutes) | |
| Watch: More constexpr Math! (9 minutes) | |
Watch: How To Use constexpr In C++23 (Can start at 12:00 and stop at 35:30, but you are welcome to watch the whole video; 24 minutes) |
|
| In-Class Code | |
| More Examples constexpr Code | |
| Lecture Slides [constexpr] | |
| Lecture Slides [Software Testing (Part II)] | |
| Milestone: Integrate lambdas into project. | |
| 3/18/26 | Value semantics |
| Watch: Re-inventing move semantics in modern C++ in 13 minutes (optional: 13 minutes) | |
| Watch: Back to Basics: Rvalues and Move Semantics in C++ (59 minutes) | |
| In-Class Code | |
| Lecture Slides [Value and move semantics] | |
| Quiz: 4a | |
| Week 10 | |
| 3/23/26 | Measuring Efficiency + Profiling Code |
| Watch: BENCHMARKING in C++ (15 min) | |
| Watch: Intro to Profiling (25 min) | |
| Lecture Slides [Edsger W. Dijkstra and Structured Programming] | |
| Milestone: Integrate compile-time operations OR value semantics into project. | |
| 3/25/26 | Deep Dive: Implementing std::string |
| Watch: The strange details of std::string at Facebook (31 min) | |
| Lecture Slides [Optimisation - Branch Prediction] | |
| Due: Code for improved C++ classes (5 pts) + initial working module (5 pts) classes | |
| Quiz: 4b | |
| Out: Code review assignments and rubrics |
| Date | Discussion Topic |
|---|---|
| Week 11 | |
| 3/30/26 | Using AI with C++ |
| Watch: Best Practices for AI Tool Use in C++ (62 min) | |
| Lecture Slides [Technical debt and other challenges] | |
| Milestone: Integration tests for full software system | |
| 4/1/26 | Concepts |
| Watch: Back to Basics: Concepts in C++ (61 min; watch at least first 38 min) | |
| Lecture Slides [A sneak peak into modern LLMs] | |
| Quiz: 5a | |
| Due: Code Reviews | |
| Week 12 | |
| 4/6/26 | Concurrency |
Watch: Back to Basics: Concurrency - at least until 44:30; through std::atomic |
|
| Milestone: Alpha version of full software system complete. | |
| 4/8/26 | Attributes and User-defined Literals |
| Watch: Attributes (13 min) | |
| Watch: User Defined Literals // How to invent custom literal values (11 min) | |
| Quiz: 5b | |
| Week 13 | |
| 4/13/26 | Deep Dive: Sorting |
| Milestone: Efficiency analyses with bottleneck identification | |
| 4/15/26 | Understanding Code Licenses |
| Week 14 | |
| 4/20/26 | Catchup or Special Topics |
| Due: Code for final module (15 pts) + project video (5 pts) | |
| Out: Code review assignments and rubrics | |
| 4/22/26 | Newer features in C++ |
| Week 15 | (Finals Week) |
| Sun 4/26/26 | Due: Peer reviews of Final Projects! |
| 4/29/26 | Project Demonstrations and Final Quiz Redos |
| Wednesday, April 29th, 3pm-5pm | |
| Quiz: redos | |
| Due: Code fixes before final grading |