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/delete should 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.