Modern C++ Programming Course
A freely available “Modern C++” course aimed at developers who already know C has prompted debate over how C++ should be learned and whether prior C experience is a help or a hindrance. Commenters compare this material with other books and courses, argue over the role of raw pointers vs. smart pointers, STL vs. hand-rolled code in embedded and kernel contexts, and stress the importance of understanding compilation, build tooling, and memory models. Many note that C++ remains central to fields like embedded systems, game engines, HPC, and finance, but contend that its complexity, tooling friction, and teaching approaches make carefully chosen resources—and often a constrained “modern subset”—essential for real-world use.
Audience and scope of the course
- Course is aimed at people who already know C and basic OOP, not absolute beginners.
- Seen as a good fit for embedded C developers wanting to “move up” or use C++ as “better C”.
- Some say another resource (learncpp.com) is more beginner‑friendly and verbose.
How to learn C++ (from C, Java/JS, or scratch)
- Strong disagreement on whether you should learn C first:
- One side: C++ is layered on the C abstract machine; understanding C and raw pointers is essential.
- Other side: C idioms can be harmful when brought into C++; better to learn C++ directly and avoid bad C patterns.
- For people from Java/JS, several book/video courses are recommended; some canonical C++ books are criticized as poor tutorials.
- Multiple posters argue that C++ (and Rust) require both a book‑style study and practical projects, unlike “hackable” languages like Python/JS.
Embedded and low-level C++
- Concerns: limited RAM, no heap, long‑running systems, allocator complexity, exception support, and binary size.
- Common embedded rules of thumb:
- Often avoid STL, exceptions, RTTI, and heavy dynamic allocation.
- Use C++ language features (RAII, constructors, templates,
constexpr/consteval) without pulling in large libraries. - Consider third‑party “embedded STL” alternatives when exceptions are off.
- Several links and mini‑tutorials are shared on:
- The C++ object model and how classes translate to C.
- Bare‑metal C++ without the standard library.
Modern C++ practices and pitfalls
- Many argue smart pointers and RAII should be taught early, not as “advanced” topics;
new/deleteshould be rare in new code. - Debate over raw pointers:
- Some say they must be learned deeply.
- Others say their ownership role should be minimized, used mainly as nullable/non‑owning references.
- Warnings about subtle C‑legal but C++‑undefined patterns (e.g., type punning).
- Complaints about language complexity (e.g., entire books on initialization) and incomplete areas like Unicode/text.
Teaching style and materials
- Mixed views on the slide‑based format:
- Some like concise slides; others think slides alone are weak for learning.
- Criticism of “feature dump” intros that list every construct before showing practical use.
- Recommendations to:
- Pair study with real projects or open‑source codebases.
- Explicitly teach the compilation model (translation units, templates, LTO) early.
Tooling and build systems
- Desire for containerized dev environments with multiple compilers and static analyzers.
- Some see containerization as evidence C++ tooling is not “modern”; others do the same for Rust/Python for isolation.
- Meson and CMake (often with Ninja) are the main suggested build systems; dependency management in C++ is widely viewed as painful.
- Discussion of using devcontainers or Nix to tame toolchains and library visibility.
C++ in industry and job market
- C++ still heavily used in:
- Compilers, OS kernels, browsers, databases, HPC, graphics, robotics, trading/HFT, and game engines.
- Perceived job landscape:
- Fewer roles than web/Python, but often more “algorithmically interesting”.
- Very high salaries cited in trading/HFT; average in games; relatively low in embedded.
- Some suggest broadening to Python, C#, or project management if goal is “higher‑level” jobs.
- Rust often mentioned as an attractive alternative, but C++ is seen as entrenched, especially in games and systems.