Modern-CPP-Programming: a 29-lecture slide course for engineers who already write C
Modern C++ Programming Course (C++03/11/14/17/20/23/26)
At a glance
- What is it?
- Federico Busato's Modern-CPP-Programming is a free, open-access slide deck covering C++03 through C++26, aimed at programmers who already know C and object-oriented basics. This review covers what it contains, how to read it offline, and where it stops being the right tool.
- Who is it for?
- Adopt it if you already write C or another OO language and want a fast, dense tour of modern C++ semantics that you can read offline as PDF. Do not adopt it if you need graded exercises, a compiler setup walkthrough with troubleshooting, or a beginner path from zero.
- Can I use it commercially?
- Yes, with credit. CC-BY-SA-4.0 allows commercial use as long as you credit the authors and indicate what you changed. It is written for creative content, so check how it applies to any code.
- Is it still maintained?
- Yes. The repository last received commits 164 days ago.
- What is it written in?
- Mainly HTML, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on September 29, 2026, and from our analysis. They are not legal advice.
Editorial analysis
Who the Modern-CPP-Programming course is written for
The README states the target audience plainly: the course is "directed at those who are already familiar with C and object-oriented programming aiming for a proficiency level of C++ programming." That single sentence rules out a large share of people who search for a C++ course. There is no chapter that teaches what a variable is, and no chapter that explains what a class is in the abstract. Chapter 9 starts from class hierarchy, constructors, destructors and class keywords, which assumes the reader has written classes in some language before.
The problem it solves is narrower and more useful than "learn C++". Most engineers who arrive at C++ from C write C with classes: raw pointers, manual new and delete, no move semantics, no constexpr, no concepts. The course's job is to close that gap. Chapters 7 and 8 cover heap, stack, pointers, references, const properties, conversion operators, functions and lambda expressions. Chapters 11 and 12 move into function templates, type traits, compile-time utilities, class templates and SFINAE. That progression is a semantics upgrade path, not an introduction.
The README also lists a secondary audience: the material is "experience-based", with many aspects and problems taken from real-world cases the author faced as a software engineer. That framing matters because the later chapters are not language-lawyer material. Chapters 15 and 16 cover code conventions, 17 covers debugging, 18 covers the ecosystem, and 23 through 25 cover optimization. A working engineer who wants to know why their binary is large (chapter 28) or why their build is slow (chapter 29) gets more out of those than a student would.
How the material is organised: 29 PDFs, mirrored as HTML
The repository is not a codebase you build. The top level is a flat list of 29 PDF files, numbered from 01.Introduction.pdf to 29.Build_time.pdf, plus a combined modern-cpp.pdf, an htmls/ directory, and an other/ directory. The README describes the scale as "29 lectures, 2000+ slides".
Each chapter has a stated main focus in the README's table. Chapter 3 covers the type system, fundamental types and operators; chapter 4 covers integral types and arithmetic; chapter 5 covers floating-point types and arithmetic. Splitting the type system across three chapters is a deliberate choice. Floating-point arithmetic gets its own lecture, which is unusual in a general C++ course and reflects the author's background in numerical work. Chapter 13 and 14 cover translation units, split into two parts, which is where linking, ODR issues and the compilation model live.
The HTML mirror is published on GitHub Pages at federico-busato.github.io/Modern-CPP-Programming. The README links each chapter's PDF and its HTML counterpart side by side, so you can link a specific chapter to a colleague without sending a PDF attachment.
The repository also carries CONTRIBUTING.md and CODE_OF_CONDUCT.md, and the roadmap in the README lists two open items: move from LaTeX to Typst, and "fully-open source the material and allow direct contribution". That second item is the honest one. The slides are published, but the source that generates them is not yet open, so a reader who finds a typo in a slide cannot fix it in place today.
Reading the C++ course offline: PDF, HTML and a first pass
There is nothing to install. The README points at the release page for versioned downloads and at the repository for the files themselves. The release history shows 1.9.0 published on 2026-01-06, 1.8.0 on 2024-11-08 and 1.7.0 on 2024-03-31, so a tagged snapshot exists if you want a fixed revision rather than the master branch.
To get a local copy of the whole course:
git clone https://github.com/federico-busato/Modern-CPP-Programming.git
cd Modern-CPP-Programming
ls *.pdfThe last command lists the 29 numbered chapter PDFs plus modern-cpp.pdf, which is the single combined document. If you only want one file on a laptop for a flight, modern-cpp.pdf is the one to take.
For a first real use, do not start at chapter 1. The README's own table is the index. Pick the chapter whose "main focus" column matches a gap you can name. If you have never used move semantics in anger, chapter 7 on heap, stack, pointers, references and const properties is the entry point. If you write templates by copying patterns you do not fully understand, go to chapters 11 and 12 on type traits and SFINAE.
The README gives this example of what a chapter contains, quoting the key features: "Minimal code examples for showing just a specific feature or issue without digressing". That is the design rule for every slide. You will not find a 300-line application in the deck. You will find a short snippet that isolates one behaviour, which is what makes the slides usable as a reference during code review.
The HTML version is the better choice for search. Each chapter is a separate page under htmls/, so a browser find-in-page or a search engine query lands on the exact lecture.
The gap between slides and practice in Modern-CPP-Programming
The README does not document exercises, solutions, quizzes or a grading path, and the repository layout shows none. There is no tests/ directory, no assignments/ directory, and no answer key among the top-level entries. A reader who learns by writing code and getting it wrong will have to supply that loop themselves.
This is the sharpest limitation of the course. Slides that state a rule are easy to nod along to and hard to internalise. Chapter 12 on SFINAE is a good example: reading a slide that shows a substitution failure is not the same as writing a trait that fails to substitute and then diagnosing the compiler error. Without exercises, the reader has to invent the failure cases.
The second limitation is the delivery format. PDF slides are linear. The material covers C++03 through C++26 in one deck, and the README lists "latest language standard concepts and features" as a key feature, which means newer standards are folded in alongside older ones rather than separated. A reader who needs to know which construct is available under which standard flag will have to cross-reference the standard version tables themselves. The README does not claim to provide a per-feature standard availability matrix.
The third is the contribution model. The roadmap item to "fully-open source the material" is still listed as a goal, so the LaTeX sources are not in the repository. If your team wants to fork the deck, strip chapters, and add internal examples, the current state of the repository does not support that workflow.
Modern-CPP-Programming compared with cppreference and learncpp
The obvious alternative for a working engineer is cppreference.com. The difference in approach is structural: cppreference is a per-entity reference with a page for every function, class and language rule, organised for lookup. Modern-CPP-Programming is organised for reading, in a fixed order, with a stated narrative from type system through templates to optimization and build time. If you know the name of the thing you forgot, cppreference wins. If you do not know what you do not know about move semantics, a reference site cannot help you, because you have no term to search.
A second alternative is learncpp.com, which is a tutorial series that starts from zero and includes exercises. The trade is depth against accessibility. learncpp covers the ground a beginner needs, in a sequence designed for someone who has never compiled C++. Modern-CPP-Programming starts at chapter 3 with the type system and expects you to already be comfortable with compilation. For a C programmer, the learncpp path spends a long time on material you already know. For a career switcher, the Modern-CPP-Programming path skips material you need.
There is also the question of the optimization and build-time chapters. Chapters 23 through 25 on optimization and chapters 28 and 29 on binary size and build time are the parts of this deck that have no direct equivalent in either alternative. General C++ tutorials rarely treat binary size and build time as first-class topics. That is where the course's experience-based framing pays off, and it is the strongest argument for reading it even if you use cppreference for daily lookup.
Licence and upgrade cost for the Modern-CPP-Programming slides
The repository carries two licence files: LICENSE-CC-BY-SA-4.0.md and LICENSE-MIT.md. The split is the normal one for this kind of project. The prose and slide content fall under CC-BY-SA-4.0, which permits sharing and adaptation with attribution, but requires that derivative works carry the same licence. Code snippets fall under MIT, which permits reuse with attribution and no copyleft requirement.
For a team, the practical consequence is that quoting a code snippet from a slide into your own codebase is a different act from reproducing a slide in an internal training deck. The former is MIT territory. The latter is CC-BY-SA-4.0, and ShareAlike means an adapted slide deck you distribute has to be licensed the same way. Whether that matters depends on whether your internal deck leaves the company. This is not legal advice; read both licence files and decide with whoever handles compliance at your organisation.
Upgrade cost is low but not zero. The release cadence visible in the release list is roughly annual or faster: 1.7.0 in March 2024, 1.8.0 in November 2024, 1.9.0 in January 2026. The repository's last push is dated 2026-04-19. Because the material is a document rather than a dependency, there is no version pinning problem and no breaking change to absorb. If you link to the HTML chapters on GitHub Pages, those links track master and will change under you. If you need stability, download the PDFs from a tagged release instead.
Editorial conclusion
Adopt it if you already write C or another OO language and want a fast, dense tour of modern C++ semantics that you can read offline as PDF. Do not adopt it if you need graded exercises, a compiler setup walkthrough with troubleshooting, or a beginner path from zero. Before committing, open 17.Debugging.pdf and 23.Optimization_I.pdf and check that their depth matches what your team actually needs, and confirm whether your use of the slides is a redistribution (CC-BY-SA-4.0) or a code excerpt (MIT).
Frequently asked questions
Is C++ still relevant in 2026?
The course does not argue the point directly, but its scope is an implicit answer: it covers C++03 through C++26 and includes chapters on optimization, binary size and build time, which are concerns that only matter for languages in active production use. The README frames the material around the latest language standard concepts and features.
What is the most modern version of C++?
The course title and README list C++03, C++11, C++14, C++17, C++20, C++23 and C++26, with C++26 the newest standard named in the course. The README states the course includes the latest language standard concepts and features.
What is the difference between C++ and modern C++?
The course is built around that distinction. It targets readers already familiar with C and object-oriented programming and moves from basics into advanced semantics, with chapters on templates, type traits, SFINAE, translation units, code conventions, debugging and optimization. The README describes the progression from basic C++ programming to advanced C++ semantics and concepts.
Will C++ be phased out?
The course does not address this. It is a teaching deck, and the README makes no claim about the language's future adoption or decline.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/federico-busato-modern-cpp-programming)