C++ ROADMAP HOÀN CHỈNH - THE COMPLETE GUIDE

Roadmap toàn diện từ Zero đến Hero trong C++, kết hợp lý thuyết, thực hành, và kỹ năng thực tế


1. FOUNDATIONS - NỀN TẢNG

1.1 Setup Development Environment

Timeline: Tuần 1

  • Compiler Installation

    • GCC (Linux/macOS)
    • Clang (cross-platform)
    • MSVC (Windows)
    • MinGW (Windows alternative)
    • Compiler flags và optimization levels (-O0, -O1, -O2, -O3, -Ofast)
  • IDE/Editor Setup

    • Visual Studio (Windows)
    • CLion (cross-platform)
    • VS Code + extensions (C/C++, CMake Tools)
    • Qt Creator
    • Vim/Neovim với LSP
    • Emacs
  • Build Systems Introduction

    • Make và Makefiles
    • CMake basics
    • Ninja build system
  • First Program

    • Hello World với cout
    • Compilation process (preprocessing → compilation → assembly → linking)
    • Understanding executables
    • Header files và source files
    • Multiple file compilation

1.2 C++ Fundamentals (nếu chưa biết C)

Timeline: Tuần 2-4

  • Variables & Data Types

    • Primitive types: int, float, double, char, bool
    • Type modifiers: short, long, signed, unsigned
    • Size của types (sizeof operator)
    • Fixed-width integers: int8_t, int16_t, int32_t, int64_t
    • Type inference với auto (C++11)
    • decltype (C++11)
  • Constants

    • const keyword
    • constexpr (C++11)
    • consteval (C++20)
    • constinit (C++20)
    • Literal types
  • Operators

    • Arithmetic: +, -, *, /, %
    • Comparison: ==, !=, <, >, <=, >=
    • Logical: &&, ||, !
    • Bitwise: &, |, ^, ~, «, »
    • Assignment: =, +=, -=, *=, /=, %=, &=, |=, ^=, «=, »=
    • Increment/Decrement: ++, –
    • Ternary: ? :
    • Comma operator
    • Member access: ., ->
    • Scope resolution: ::
    • Operator precedence và associativity
  • Control Flow

    • if, else if, else
    • switch-case (với fallthrough)
    • Loops: for, while, do-while
    • Range-based for loop (C++11)
    • break, continue
    • goto (và tại sao nên tránh)
    • Nested control structures
  • Functions

    • Function declaration vs definition
    • Function prototypes
    • Parameters và arguments
    • Pass by value
    • Pass by reference
    • Pass by pointer
    • Return values
    • Return by reference
    • Default parameters
    • Function overloading
    • Inline functions
    • Recursion và tail recursion
    • Function pointers
  • Arrays

    • C-style arrays
    • Array declaration và initialization
    • Multi-dimensional arrays
    • Array decay to pointer
    • sizeof với arrays
    • std::array (C++11) - preview
  • Pointers & References

    • Memory addresses
    • Pointer declaration và initialization
    • Dereference operator (*)
    • Address-of operator (&)
    • Null pointers vs nullptr (C++11)
    • Pointer arithmetic
    • Pointers và arrays relationship
    • Pointer to pointer
    • Void pointers
    • Function pointers
    • References basics
    • Lvalue references
    • Reference vs pointer differences
    • Const pointers vs pointer to const
  • Basic I/O

    • cin, cout, cerr, clog
    • Input/output với basic types
    • cin.get(), cin.getline()
    • String input với getline()
    • Formatting output
  • Namespace

    • std namespace
    • using directive vs using declaration
    • Custom namespaces
    • Namespace aliases
    • Anonymous namespaces
  • Preprocessor

    • #include directive
    • Include guards (#ifndef, #define, #endif)
    • #pragma once
    • Macros (#define)
    • Conditional compilation (#ifdef, #ifndef, #if)
    • Predefined macros (FILE, LINE, DATE, etc.)
    • #error và #warning

1.3 C++ vs C - Key Differences

Timeline: Tuần 4

  • cout/cin vs printf/scanf
  • References (không có trong C)
  • Function overloading
  • Default parameters
  • bool type (true/false vs 0/1)
  • new/delete vs malloc/free
  • Namespace concept
  • Inline functions
  • const correctness
  • Strong type checking
  • Classes và OOP
  • Exception handling
  • Templates
  • STL containers

1.4 Basic Debugging

Timeline: Tuần 3-4

  • Print Debugging

    • Using cout strategically
    • Debug vs Release output
    • Conditional debug prints
  • IDE Debugger Basics

    • Setting breakpoints
    • Step over, step into, step out
    • Watching variables
    • Call stack inspection
    • Running to cursor
  • Common Beginner Errors

    • Syntax errors
    • Uninitialized variables
    • Array out of bounds
    • Integer division
    • Comparison vs assignment (= vs ==)
  • Reading Compiler Errors

    • Error messages anatomy
    • Warning messages
    • Template error messages (brief introduction)

2. VERSION CONTROL - GIT

2.1 Git Fundamentals

Timeline: Tuần 5

  • Git Basics

    • Installing Git
    • git init, clone
    • git config (user.name, user.email)
    • .gitignore file
    • Common files to ignore in C++ projects
  • Basic Workflow

    • Working directory, staging area, repository
    • git add, commit
    • Writing good commit messages
    • git status, log
    • git diff
  • Branching

    • git branch, checkout
    • git switch (modern approach)
    • Branch naming conventions
    • git merge
    • Fast-forward vs 3-way merge
    • Merge conflicts resolution
  • Remote Repositories

    • GitHub, GitLab, Bitbucket
    • git remote add
    • git push, pull, fetch
    • SSH keys setup
    • Personal access tokens
  • Collaboration

    • Forking repositories
    • Pull requests / Merge requests
    • Code review basics
    • git rebase (introduction)
    • git stash

2.2 Advanced Git

Timeline: Tháng 3-4 (khi làm projects)

  • git rebase vs merge
  • Interactive rebase
  • Cherry-picking commits
  • git reflog
  • Submodules
  • Git hooks
  • .gitattributes
  • Git LFS (Large File Storage)

3. OBJECT-ORIENTED PROGRAMMING (OOP)

3.1 Classes & Objects Basics

Timeline: Tuần 6-7

  • Class Definition

    • Class syntax
    • Member variables (data members)
    • Member functions (methods)
    • Class vs struct difference
    • Forward declarations
  • Access Specifiers

    • private
    • public
    • protected
    • Default access levels
  • Constructors

    • Default constructor
    • Parameterized constructor
    • Constructor overloading
    • Constructor initialization lists
    • Member initializer order
    • Delegating constructors (C++11)
    • Explicit constructors
    • Default constructor generation rules
  • Destructor

    • Destructor syntax
    • When destructors are called
    • Virtual destructors (preview)
    • Destructor và exception safety
  • Object Lifecycle

    • Object creation
    • Object destruction
    • Automatic vs dynamic objects
    • Stack vs heap objects
  • this Pointer

    • What is this
    • Using this explicitly
    • Returning *this
    • Const member functions và this
  • Const Correctness

    • Const member functions
    • Const objects
    • Mutable keyword
    • Const và constructors
  • Static Members

    • Static data members
    • Static member functions
    • Static initialization order
    • Accessing static members
  • Friend Functions & Classes

    • Friend keyword
    • Friend functions
    • Friend classes
    • When to use friends

3.2 Constructors Deep Dive

Timeline: Tuần 7-8

  • Copy Constructor

    • Shallow vs deep copy
    • Default copy constructor
    • When copy constructor is called
    • Preventing copying (= delete)
  • Move Constructor (C++11)

    • Move semantics introduction
    • Rvalue references preview
    • std::move preview
    • When move constructor is called
  • Copy Assignment Operator

    • Assignment vs initialization
    • Self-assignment check
    • Copy-and-swap idiom
  • Move Assignment Operator (C++11)

    • Move assignment semantics
    • Efficient resource transfer
  • Rule of Three/Five/Zero

    • Rule of Three (C++98)
    • Rule of Five (C++11)
    • Rule of Zero (modern approach)
  • Constructor Best Practices

    • Prefer initialization to assignment
    • Use member initializer lists
    • Avoid calling virtual functions in constructors
    • Uniform initialization (C++11)
    • Aggregate initialization
    • Designated initializers (C++20)

3.3 Encapsulation

Timeline: Tuần 8

  • Data Hiding

    • Private data members
    • Why encapsulation matters
  • Getters & Setters

    • Accessor functions
    • Mutator functions
    • Naming conventions
    • Const getters
    • Returning by reference vs value
  • PIMPL Idiom

    • Pointer to Implementation
    • Benefits: ABI stability, compilation times
    • Implementation techniques
    • Smart pointers và PIMPL
  • Interface Design

    • Public interface vs private implementation
    • Minimal interface principle
    • Const-correct interfaces

3.4 Inheritance

Timeline: Tuần 9-10

  • Basic Inheritance

    • Inheritance syntax (: public Base)
    • Base class và derived class
    • is-a relationship
    • Protected members
  • Access Specifiers in Inheritance

    • Public inheritance
    • Protected inheritance
    • Private inheritance
    • When to use each
  • Constructor/Destructor Chain

    • Constructor calling order
    • Destructor calling order
    • Base class initialization
    • Initialization lists với inheritance
  • Types of Inheritance

    • Single inheritance
    • Multiple inheritance
    • Multilevel inheritance
    • Hierarchical inheritance
    • Hybrid inheritance
  • Multiple Inheritance

    • Diamond problem
    • Virtual inheritance
    • Virtual base classes
    • Ambiguity resolution
    • Multiple inheritance best practices
  • Upcasting & Downcasting

    • Implicit upcasting
    • Explicit downcasting
    • static_cast with inheritance
    • dynamic_cast (preview)
  • Object Slicing

    • What is object slicing
    • How to avoid it
    • Pass by reference/pointer
  • Inheriting Constructors (C++11)

    • using Base::Base;
    • When to use inherited constructors

3.5 Polymorphism

Timeline: Tuần 10-11

  • Compile-time Polymorphism

    • Function overloading
    • Operator overloading (covered later)
    • Template specialization (covered later)
  • Runtime Polymorphism

    • Virtual functions
    • Virtual keyword
    • Override keyword (C++11)
    • Final keyword (C++11)
    • Virtual function tables (vtable)
    • vptr (virtual pointer)
  • Pure Virtual Functions

    • Syntax: = 0
    • Abstract classes
    • Interface classes
    • Cannot instantiate abstract classes
  • Virtual Destructors

    • Why virtual destructors are needed
    • When to use virtual destructors
    • Pure virtual destructors
  • Dynamic Binding

    • How virtual functions work
    • Runtime overhead
    • When to use virtual functions
  • Virtual Function Details

    • Virtual function default arguments
    • Virtual functions và access specifiers
    • Static vs virtual functions
    • Virtual functions in constructors/destructors
    • Covariant return types
  • RTTI (Runtime Type Information)

    • typeid operator
    • type_info class
    • dynamic_cast
    • When RTTI is needed
    • RTTI overhead

3.6 Abstraction

Timeline: Tuần 11

  • Abstract Classes

    • Pure virtual functions
    • Cannot instantiate
    • Can have data members
    • Can have non-virtual functions
  • Interfaces

    • Interface design principles
    • Pure virtual classes
    • No data members in interfaces
    • Multiple interfaces
  • Design by Contract

    • Preconditions
    • Postconditions
    • Invariants
    • Contracts in C++20 (preview)

4. MEMORY MANAGEMENT

4.1 Stack vs Heap

Timeline: Tuần 12

  • Stack Memory

    • Automatic storage duration
    • LIFO structure
    • Fast allocation
    • Limited size
    • Scope-based lifetime
  • Heap Memory

    • Dynamic storage duration
    • Manual management required
    • Slower allocation
    • Large size
    • Explicit lifetime control
  • Memory Layout

    • Text segment (code)
    • Data segment (globals, statics)
    • BSS segment (uninitialized data)
    • Stack
    • Heap
    • Memory addresses

4.2 Dynamic Memory Allocation

Timeline: Tuần 12-13

  • new & delete

    • new operator
    • delete operator
    • new vs malloc
    • delete vs free
    • Mixing not allowed
  • Arrays

    • new[]
    • delete[]
    • Importance of matching new[] with delete[]
  • Memory Leaks

    • What are memory leaks
    • Detecting leaks
    • Valgrind
    • AddressSanitizer (ASan)
    • Memory profiling
  • Dangling Pointers

    • What are dangling pointers
    • Use after free
    • Double delete
    • How to avoid
  • Placement new

    • Syntax và usage
    • Custom memory allocation
    • Object construction in pre-allocated memory
  • nothrow new

    • new (std::nothrow)
    • Returning nullptr instead of throwing

4.3 RAII (Resource Acquisition Is Initialization)

Timeline: Tuần 13

  • RAII Principle

    • Resource tied to object lifetime
    • Constructor acquires
    • Destructor releases
    • Exception safety
  • RAII Examples

    • File handles
    • Mutex locks
    • Memory management
    • Network connections
    • Database connections
  • Benefits

    • Automatic cleanup
    • Exception-safe
    • No leaked resources
    • Clear ownership

4.4 Copy Control

Timeline: Tuần 13-14

  • Copy Constructor Details

    • Shallow copy problems
    • Deep copy implementation
    • Copy elision
    • RVO (Return Value Optimization)
  • Copy Assignment Operator

    • Self-assignment check
    • Copy-and-swap idiom
    • Strong exception guarantee
  • Move Constructor (C++11)

    • Rvalue references
    • std::move
    • Moving vs copying
    • noexcept specification importance
  • Move Assignment Operator (C++11)

    • Efficient resource transfer
    • Self-move check
    • noexcept specification
  • Rule of Three (C++98)

    • Destructor
    • Copy constructor
    • Copy assignment operator
  • Rule of Five (C++11)

    • Add move constructor
    • Add move assignment operator
  • Rule of Zero (Modern C++)

    • Let compiler generate
    • Use standard library types
    • Prefer composition

4.5 Custom Memory Management

Timeline: Tháng 10-11 (Advanced)

  • Overloading new/delete

    • Class-specific new/delete
    • Global new/delete replacement
    • Placement new
    • Array versions
  • Custom Allocators

    • STL allocator interface
    • Polymorphic allocators (C++17)
    • Memory pools
    • Stack allocators
    • Pool allocators
  • Memory Pools

    • Fixed-size pools
    • Variable-size pools
    • Object pools
    • Benefits và use cases
  • Alignment

    • alignof operator
    • alignas specifier (C++11)
    • Aligned allocation (C++17)
    • Over-aligned types
  • Memory Debugging Tools

    • Valgrind (Memcheck)
    • AddressSanitizer
    • LeakSanitizer
    • MemorySanitizer
    • Electric Fence

5. TEMPLATES

5.1 Function Templates

Timeline: Tuần 14-15

  • Basic Syntax

    • template keyword
    • Template parameters
    • Template arguments
    • Function template declaration
  • Template Instantiation

    • Implicit instantiation
    • Explicit instantiation
    • Template argument deduction
  • Template Specialization

    • Full specialization
    • When to specialize
    • Specialization syntax
  • Template Parameters

    • Type parameters
    • Non-type parameters
    • Template template parameters
    • Default template arguments
  • Template Overloading

    • Templates và regular functions
    • Overload resolution
    • Specialization vs overloading
  • Template Compilation Model

    • Two-phase lookup
    • Template definitions in headers
    • Explicit instantiation declarations

5.2 Class Templates

Timeline: Tuần 15-16

  • Basic Class Templates

    • Template class declaration
    • Member function definitions
    • Template class instantiation
  • Member Function Templates

    • Template member functions
    • Constructor templates
    • Conversion operators
  • Template Specialization

    • Full class specialization
    • Partial specialization
    • Member specialization
  • Template Aliases (C++11)

    • using keyword
    • Alias templates
    • vs typedef
  • Class Template Argument Deduction (CTAD) (C++17)

    • Automatic template argument deduction
    • Deduction guides
    • Custom deduction guides

5.3 Advanced Templates

Timeline: Tháng 8-9

  • Variadic Templates (C++11)

    • Parameter packs
    • Pack expansion
    • sizeof… operator
    • Recursive templates
    • Fold expressions (C++17)
  • Template Metaprogramming

    • Compile-time computation
    • Type computations
    • Recursive templates
    • Template recursion limits
  • SFINAE (Substitution Failure Is Not An Error)

    • What is SFINAE
    • std::enable_if
    • Detection idiom
    • SFINAE-friendly code
  • Type Traits

    • <type_traits> header
    • Type properties
    • Type transformations
    • Type relationships
    • Custom type traits
  • Concepts (C++20)

    • Defining concepts
    • Requires clauses
    • Requires expressions
    • Standard library concepts
    • Concept composition
    • Abbreviated function templates
  • Template Best Practices

    • When to use templates
    • Template bloat
    • Compilation times
    • Error messages

6. STANDARD TEMPLATE LIBRARY (STL)

6.1 Containers - Sequence

Timeline: Tuần 16-17

  • std::vector

    • Dynamic array
    • Contiguous memory
    • push_back, pop_back, emplace_back
    • Capacity vs size
    • reserve(), shrink_to_fit()
    • Iterator invalidation rules
    • Performance characteristics
  • std::deque

    • Double-ended queue
    • push_front, push_back
    • Non-contiguous memory
    • vs vector tradeoffs
  • std::list

    • Doubly-linked list
    • Constant time insertion/deletion
    • No random access
    • splice operation
  • std::forward_list (C++11)

    • Singly-linked list
    • Memory efficient
    • Forward iteration only
  • std::array (C++11)

    • Fixed-size array
    • Stack allocated
    • vs C-style arrays
    • No overhead

6.2 Containers - Associative

Timeline: Tuần 17-18

  • std::set & std::multiset

    • Ordered unique elements
    • Red-black tree implementation
    • Logarithmic operations
    • Custom comparators
  • std::map & std::multimap

    • Key-value pairs
    • Ordered by key
    • operator[] vs at() vs insert()
    • find(), count()
  • Unordered Containers (C++11)

    • std::unordered_set
    • std::unordered_multiset
    • std::unordered_map
    • std::unordered_multimap
    • Hash functions
    • Custom hash functions
    • Bucket interface
    • Load factor
  • Container Adapters

    • std::stack
    • std::queue
    • std::priority_queue
    • Underlying containers

6.3 Iterators

Timeline: Tuần 18

  • Iterator Categories

    • Input iterator
    • Output iterator
    • Forward iterator
    • Bidirectional iterator
    • Random access iterator
    • Contiguous iterator (C++20)
  • Iterator Operations

    • begin(), end()
    • cbegin(), cend() (const iterators)
    • rbegin(), rend() (reverse iterators)
    • Advance, distance, next, prev
  • Iterator Adapters

    • Reverse iterators
    • Insert iterators (back_inserter, front_inserter, inserter)
    • Stream iterators (istream_iterator, ostream_iterator)
    • Move iterators (C++11)
  • Iterator Invalidation

    • vector invalidation rules
    • deque invalidation rules
    • list invalidation rules
    • map invalidation rules

6.4 Algorithms

Timeline: Tuần 19-20

  • Non-modifying Algorithms

    • find, find_if, find_if_not
    • count, count_if
    • all_of, any_of, none_of (C++11)
    • for_each
    • search, search_n
    • adjacent_find
    • mismatch, equal
  • Modifying Algorithms

    • copy, copy_if, copy_n, copy_backward
    • move, move_backward (C++11)
    • fill, fill_n
    • generate, generate_n
    • transform
    • replace, replace_if, replace_copy
    • remove, remove_if, remove_copy
    • unique, unique_copy
    • reverse, reverse_copy
    • rotate, rotate_copy
    • shuffle (C++11, replaces random_shuffle)
  • Sorting & Related

    • sort, stable_sort
    • partial_sort, partial_sort_copy
    • nth_element
    • is_sorted, is_sorted_until (C++11)
    • Complexity guarantees
  • Binary Search (on sorted ranges)

    • binary_search
    • lower_bound, upper_bound
    • equal_range
  • Set Operations (on sorted ranges)

    • set_union
    • set_intersection
    • set_difference
    • set_symmetric_difference
    • includes
    • merge
  • Heap Operations

    • make_heap
    • push_heap
    • pop_heap
    • sort_heap
    • is_heap, is_heap_until (C++11)
  • Min/Max Operations

    • min, max, minmax (C++11)
    • min_element, max_element, minmax_element (C++11)
    • clamp (C++17)
  • Numeric Algorithms

    • accumulate
    • inner_product
    • partial_sum
    • adjacent_difference
    • iota
    • reduce, transform_reduce (C++17)
    • inclusive_scan, exclusive_scan (C++17)
  • Parallel Algorithms (C++17)

    • Execution policies (seq, par, par_unseq)
    • Parallel algorithm support
  • Ranges Algorithms (C++20)

    • Range-based algorithm overloads
    • Projections
    • Constrained algorithms

6.5 Function Objects & Lambdas

Timeline: Tuần 20

  • Function Objects (Functors)

    • operator() overloading
    • Stateful functors
    • Standard functors ()
    • plus, minus, multiplies, divides, modulus
    • equal_to, not_equal_to, greater, less, etc.
    • logical_and, logical_or, logical_not
  • Predicates

    • Unary predicates
    • Binary predicates
    • Custom predicates
  • std::function (C++11)

    • Type-erased callable wrapper
    • Storing lambdas và functors
    • Performance considerations
  • std::bind (C++11)

    • Binding arguments
    • Placeholders (_1, _2, etc.)
    • vs lambdas
  • Lambda Expressions (covered in detail later)

    • Preview của lambdas
    • Basic syntax
    • Using with algorithms

6.6 Utility Types

Timeline: Tuần 20

  • std::pair

    • make_pair
    • Accessing first, second
    • Structured bindings (C++17)
  • std::tuple (C++11)

    • make_tuple
    • std::get
    • std::tie
    • Structured bindings (C++17)
    • Tuple operations
  • std::optional (C++17)

    • Optional values
    • has_value(), value(), value_or()
    • Monadic operations (C++23)
  • std::variant (C++17)

    • Type-safe union
    • std::visit
    • std::get, std::get_if
    • std::holds_alternative
  • std::any (C++17)

    • Type-erased storage
    • any_cast
    • When to use
  • std::expected (C++23)

    • Error handling
    • vs exceptions
    • vs std::optional

7. SMART POINTERS & RAII

7.1 Smart Pointer Types

Timeline: Tuần 21

  • std::unique_ptr (C++11)

    • Exclusive ownership
    • Move-only type
    • Custom deleters
    • make_unique (C++14)
    • Arrays with unique_ptr
    • Transferring ownership
    • Zero overhead abstraction
  • std::shared_ptr (C++11)

    • Shared ownership
    • Reference counting
    • make_shared
    • Control block
    • Thread safety
    • Weak reference counting
    • Custom deleters
    • Aliasing constructor
  • std::weak_ptr (C++11)

    • Non-owning reference
    • Breaking circular references
    • lock() để get shared_ptr
    • expired() check
    • Use cases

7.2 Smart Pointer Best Practices

Timeline: Tuần 21

  • Ownership Semantics

    • Exclusive vs shared ownership
    • When to use each type
    • Returning smart pointers
    • Passing smart pointers
  • Performance Considerations

    • unique_ptr has zero overhead
    • shared_ptr overhead (control block)
    • make_shared vs shared_ptr(new T)
    • Avoid shared_ptr when possible
  • Common Pitfalls

    • Circular references
    • Creating shared_ptr from this
    • std::enable_shared_from_this
    • Mixing raw và smart pointers
    • Double delete via raw pointers
  • RAII với Smart Pointers

    • Automatic resource management
    • Exception safety
    • No manual delete needed
    • Custom deleters for non-memory resources

8. EXCEPTION HANDLING

8.1 Exception Basics

Timeline: Tuần 22

  • Basic Syntax

    • try block
    • catch block
    • throw statement
    • Exception propagation
  • Standard Exceptions

    • std::exception hierarchy
    • std::runtime_error
    • std::logic_error
    • std::out_of_range
    • std::invalid_argument
    • std::bad_alloc
    • what() method
  • Catch Handlers

    • Catch by reference
    • Catch by value (avoid)
    • Catch order matters
    • Catch-all handler (catch(…))
    • Multiple catch blocks
  • Rethrowing Exceptions

    • throw; (rethrow current exception)
    • std::throw_with_nested (C++11)
    • std::rethrow_if_nested (C++11)

8.2 Advanced Exception Handling

Timeline: Tuần 22

  • noexcept (C++11)

    • noexcept specifier
    • noexcept operator
    • Move constructors và noexcept
    • Destructors are noexcept by default
    • Performance implications
  • Exception Safety Guarantees

    • No-throw guarantee
    • Strong guarantee (commit or rollback)
    • Basic guarantee (valid state)
    • No guarantee
  • Stack Unwinding

    • How unwinding works
    • Destructors during unwinding
    • Exceptions in destructors (avoid!)
  • Custom Exceptions

    • Creating exception hierarchies
    • Inheriting from std::exception
    • Adding custom information
    • Best practices
  • RAII và Exception Safety

    • Resource cleanup via destructors
    • Automatic cleanup during unwinding
    • Smart pointers và exceptions
    • Lock guards và exceptions
  • Exception Specifications (Deprecated)

    • throw() specification (deprecated C++11, removed C++17)
    • Dynamic exception specifications (removed)
    • Why they were removed

8.3 Exception Best Practices

Timeline: Tuần 22

  • Use exceptions for exceptional conditions
  • RAII for exception safety
  • Prefer noexcept when possible
  • Catch by const reference
  • Don’t throw in destructors
  • Don’t throw in noexcept functions
  • Custom exceptions for domain errors
  • Document exception behavior

9. STREAMS & I/O

9.1 Stream Classes

Timeline: Tuần 23

  • iostream Hierarchy

    • ios base class
    • istream (input)
    • ostream (output)
    • iostream (both)
    • Inheritance structure
  • Standard Streams

    • cin (standard input)
    • cout (standard output)
    • cerr (standard error, unbuffered)
    • clog (standard error, buffered)
  • File Streams

    • ifstream (file input)
    • ofstream (file output)
    • fstream (file input/output)
    • Opening/closing files
    • File modes (in, out, app, ate, trunc, binary)
    • Checking if file is open
  • String Streams

    • istringstream
    • ostringstream
    • stringstream
    • String parsing
    • String formatting

9.2 Stream Operations

Timeline: Tuần 23

  • Formatted I/O

    • Extraction operator (»)
    • Insertion operator («)
    • Type-safe I/O
  • Stream Manipulators

    • std::endl, std::flush, std::ends
    • std::setw, std::setprecision, std::setfill
    • std::fixed, std::scientific
    • std::left, std::right, std::internal
    • std::boolalpha, std::noboolalpha
    • std::hex, std::dec, std::oct
    • std::showbase, std::noshowbase
    • std::uppercase, std::nouppercase
    • Custom manipulators
  • Stream States

    • good(), bad(), fail(), eof()
    • clear() to reset state
    • rdstate() to get state
    • Checking stream health
  • Unformatted I/O

    • get(), getline()
    • read(), write()
    • gcount()
    • peek(), putback(), unget()
  • Stream Buffers

    • streambuf
    • rdbuf()
    • Buffer synchronization
    • sync()

9.3 File I/O

Timeline: Tuần 23

  • Text File Operations

    • Reading line by line
    • Reading words
    • Reading entire file
    • Writing text
    • Formatted output to files
  • Binary File Operations

    • read() và write()
    • Serialization basics
    • POD types vs complex types
    • Endianness considerations
  • File Positioning

    • tellg(), tellp() (get position)
    • seekg(), seekp() (set position)
    • ios::beg, ios::cur, ios::end
    • Random access
  • Error Handling

    • Checking fail states
    • Exceptions with files
    • RAII for file handles

10. MOVE SEMANTICS & RVALUE REFERENCES

10.1 Lvalues & Rvalues

Timeline: Tuần 24

  • Value Categories

    • Lvalues (locator values)
    • Rvalues (temporary values)
    • xvalues (expiring values)
    • glvalues, prvalues
    • Value category rules (C++11/17)
  • Rvalue References (C++11)

    • Syntax: T&&
    • Binding rules
    • Lvalue references vs rvalue references
    • Cannot bind lvalue to rvalue reference
    • Can bind rvalue to const lvalue reference

10.2 Move Semantics

Timeline: Tuần 24-25

  • std::move

    • Casting to rvalue reference
    • Doesn’t actually move anything
    • Enables move operations
    • Use cases
  • Move Constructor

    • Transfer ownership
    • “Steal” resources
    • Leave source in valid state
    • noexcept specification importance
    • Implementation guidelines
  • Move Assignment Operator

    • Self-move check
    • Release current resources
    • Steal from source
    • noexcept specification
  • Move-only Types

    • std::unique_ptr
    • std::thread
    • std::fstream
    • Cannot copy, can move
  • Universal References (Forwarding References)

    • Template type deduction with T&&
    • vs rvalue references
    • Forwarding references in auto&&
  • Perfect Forwarding

    • std::forward
    • Preserving value category
    • Template parameter packs
    • Forwarding references
  • Reference Collapsing

    • T& & → T&
    • T& && → T&
    • T&& & → T&
    • T&& && → T&&

10.3 Optimization

Timeline: Tuần 25

  • Return Value Optimization (RVO)

    • Named RVO (NRVO)
    • Copy elision
    • Mandatory in C++17 for temporaries
    • When RVO cannot happen
  • Move Semantics Performance

    • When moving is beneficial
    • Move vs copy for containers
    • std::move with return values
    • Avoiding unnecessary moves

11. MODERN C++ FEATURES

11.1 C++11 Features

Timeline: Tuần 26-27

  • auto Keyword

    • Type deduction
    • auto vs explicit types
    • auto with references
    • auto with pointers
    • AAA (Almost Always Auto) style
  • decltype

    • Deducing types
    • decltype vs auto
    • decltype(auto) (C++14)
    • Trailing return types
  • Range-based for Loop

    • Syntax: for (auto& elem : container)
    • auto vs auto& vs const auto&
    • Iterating over arrays
    • Iterating over containers
    • Custom range support
  • nullptr

    • vs NULL và 0
    • Type-safe null pointer
    • Overload resolution
  • constexpr

    • Compile-time constants
    • constexpr functions
    • constexpr constructors
    • constexpr variables
    • Limitations in C++11
  • static_assert

    • Compile-time assertions
    • Type checking
    • Template constraints (pre-concepts)
  • Delegating Constructors

    • Constructor calling constructor
    • Code reuse
    • Initialization order
  • Inheriting Constructors

    • using Base::Base;
    • Inheriting constructor parameters
  • Default & Deleted Functions

    • = default
    • = delete
    • Explicitly defaulted special members
    • Deleting functions
    • Non-copyable classes
  • Strongly Typed Enums (enum class)

    • enum class syntax
    • No implicit conversions
    • Scoped enumerators
    • Specifying underlying type
    • vs unscoped enums
  • Raw String Literals

    • R"(…)" syntax
    • No escape sequences needed
    • Multi-line strings
    • Delimiter syntax
  • User-defined Literals

    • operator""
    • Custom suffixes
    • Standard literals (s, ms, h, etc.)
  • Attributes

    • [[attribute]] syntax
    • [[noreturn]]
    • [[carries_dependency]]
    • Compiler-specific attributes
  • Initializer Lists

    • std::initializer_list
    • Uniform initialization
    • List initialization
    • Constructor overloading

11.2 C++14 Features

Timeline: Tuần 27

  • Generic Lambdas

    • auto parameters in lambdas
    • Template lambdas preview
  • Return Type Deduction

    • auto return type
    • Multiple return statements
    • Deduction rules
  • decltype(auto)

    • Perfect return type deduction
    • Preserving references
  • Variable Templates

    • Template variables
    • Compile-time constants
  • Binary Literals

    • 0b prefix
    • Binary constants
  • Digit Separators

    • Single quotes in numbers
    • Readability: 1'000'000
  • std::make_unique

    • Factory function for unique_ptr
    • vs new
    • Exception safety
  • Relaxed constexpr

    • Loops in constexpr
    • Multiple statements
    • Local variables
    • More flexibility

11.3 C++17 Features

Timeline: Tuần 28

  • Structured Bindings

    • auto [a, b] = pair;
    • Decomposing pairs, tuples
    • Decomposing structs
    • References in bindings
  • if/switch with Initializer

    • if (init; condition)
    • switch (init; condition)
    • Limited scope variables
  • constexpr if

    • Compile-time if statements
    • Template metaprogramming
    • Simplifying SFINAE
    • Different code paths
  • Fold Expressions

    • Variadic template simplification
    • Unary folds
    • Binary folds
    • Supported operators
  • std::string_view

    • Non-owning string reference
    • vs const std::string&
    • Performance benefits
    • Substring without copying
    • Careful with lifetime
  • std::filesystem (covered in detail later)

    • File và directory operations
  • Parallel Algorithms

    • Execution policies
    • std::execution::seq, par, par_unseq
  • Class Template Argument Deduction (CTAD)

    • Deducing template arguments
    • Deduction guides
    • pair, tuple simplification
  • inline Variables

    • Inline for variables
    • Header-only definitions
  • Nested Namespaces

    • namespace A::B::C { }
    • Simplified syntax
  • [[nodiscard]]

    • Warning on ignored return values
    • Error-prone functions
  • [[maybe_unused]]

    • Suppress unused warnings
    • Conditional compilation
  • [[fallthrough]]

    • Document intentional fallthrough
    • Switch cases

11.4 C++20 Features

Timeline: Tuần 29-30

  • Concepts (covered earlier in Templates)

    • Constraining templates
    • Better error messages
  • Ranges Library

    • Range-based views
    • Lazy evaluation
    • Composable operations
    • views::filter, views::transform
    • Pipe operator (|)
    • Range adaptors
    • Range algorithms
  • Coroutines

    • co_await
    • co_yield
    • co_return
    • Generators
    • Async operations
    • Promise types
    • Coroutine handles
  • Modules

    • module keyword
    • export keyword
    • import keyword
    • Module interface units
    • Module implementation units
    • Header units
    • Benefits: faster compilation, better encapsulation
  • Three-way Comparison (Spaceship)

    • operator<=>
    • Auto-generated comparisons
    • std::strong_ordering
    • std::weak_ordering
    • std::partial_ordering
    • Defaulted <=>
  • consteval

    • Immediate functions
    • Must be compile-time evaluated
    • vs constexpr
  • constinit

    • Guarantee static initialization
    • vs constexpr
    • Preventing static initialization order fiasco
  • std::span

    • Non-owning view over contiguous sequence
    • Array, vector, C-array view
    • vs std::string_view
  • Calendar & Timezone

    • std::chrono extensions
    • Date types
    • Timezone support
  • std::format

    • Python-style formatting
    • Type-safe printf
    • Custom formatters
  • Designated Initializers

    • Aggregate initialization by name
    • .member = value syntax
    • From C99
  • [[likely]] / [[unlikely]]

    • Branch prediction hints
    • Optimization hints

11.5 C++23 Features

Timeline: Tháng 12 hoặc theo dõi updates

  • Deducing this

    • Explicit object parameters
    • Simplifying CRTP
    • Recursive lambdas
  • if consteval

    • Checking compile-time context
    • vs if constexpr
  • Multidimensional Subscript

    • operator[][][][]
    • Multi-dimensional access
  • std::expected

    • Error handling
    • vs exceptions
    • Result types
  • std::mdspan

    • Multi-dimensional span
    • Non-owning multi-dim view
  • Ranges Improvements

    • More views và adaptors
    • zip, chunk, slide, etc.
  • std::print (optional based on implementation)

    • Simpler output
    • Format integration

12. LAMBDA EXPRESSIONS

12.1 Lambda Basics

Timeline: Tuần 31

  • Basic Syntax

    • capture - parameters -> return_type { body }
    • Minimal lambda: {}
    • Auto return type deduction
  • Capture Clauses

    • [=] capture by value
    • [&] capture by reference
    • capture specific variable by value
    • [&x] capture specific variable by reference
    • [=, &x] default value, x by reference
    • [&, x] default reference, x by value
    • [this] capture this pointer
    • [*this] (C++17) capture object by value
  • Parameters

    • Similar to regular functions
    • auto parameters (generic lambdas C++14)
    • Parameter packs
  • Return Type

    • Automatic deduction
    • Explicit return type
    • -> syntax
  • mutable Lambdas

    • Modifying captured variables
    • mutable keyword
    • Const by default for value captures

12.2 Advanced Lambdas

Timeline: Tuần 31

  • Generic Lambdas (C++14)

    • auto parameters
    • Template lambdas
    • Polymorphic behavior
  • Init Capture (C++14)

    • [x = expr] initialize in capture
    • Move-only captures
    • [ptr = std::move(ptr)]
  • constexpr Lambdas (C++17)

    • Compile-time evaluation
    • Automatic constexpr
    • Explicit constexpr
  • Template Lambdas (C++20)

    • Explicit template parameters
    • in lambda
  • Stateless Lambdas

    • Empty capture list
    • Convertible to function pointer
    • Zero overhead
  • Capturing this

    • Access to member variables
    • [this] vs [*this] (C++17)
    • Lifetime considerations
  • Immediately Invoked Lambda

    • { … }()
    • Const initialization
    • Complex initializers

12.3 Lambda Use Cases

Timeline: Tuần 31

  • With STL algorithms
  • Custom comparators
  • Callbacks
  • RAII wrappers
  • Scope guards
  • Event handlers
  • Async operations
  • Replace small functors

13. CONCURRENCY & MULTITHREADING

13.1 Thread Basics

Timeline: Tuần 32-33

  • std::thread

    • Creating threads
    • Thread constructor overloads
    • Passing arguments to threads
    • Thread objects are move-only
  • Joining & Detaching

    • join() - wait for completion
    • detach() - let thread run independently
    • joinable() check
    • Thread lifecycle
    • Exceptions và threads
  • Thread IDs

    • std:🧵:id
    • std::this_thread::get_id()
    • Comparing thread IDs
  • Hardware Concurrency

    • std:🧵:hardware_concurrency()
    • Optimal thread count
  • Thread Functions

    • std::this_thread::sleep_for
    • std::this_thread::sleep_until
    • std::this_thread::yield

13.2 Synchronization Primitives

Timeline: Tuần 33-34

  • std::mutex

    • Mutual exclusion
    • lock(), unlock()
    • try_lock()
    • RAII wrappers preferred
  • Lock Guards

    • std::lock_guard
    • Automatic locking/unlocking
    • RAII for mutexes
    • Cannot unlock manually
  • Unique Lock

    • std::unique_lock
    • More flexible than lock_guard
    • Can unlock và relock
    • Deferred locking
    • Adopt lock
    • try_to_lock
    • Transfer ownership
  • Scoped Lock (C++17)

    • std::scoped_lock
    • Multiple mutexes
    • Deadlock avoidance
    • Variadic template
  • Shared Mutex (C++17)

    • std::shared_mutex
    • Reader-writer locks
    • Multiple readers, single writer
    • shared_lock for readers
    • unique_lock for writers
  • Recursive Mutex

    • std::recursive_mutex
    • Same thread can lock multiple times
    • Must unlock same number of times
    • Use cases và caveats
  • Timed Mutex

    • std::timed_mutex
    • try_lock_for
    • try_lock_until
    • Timeout-based locking

13.3 Condition Variables

Timeline: Tuần 34

  • std::condition_variable

    • wait() - block until notified
    • wait_for() - wait with timeout
    • wait_until() - wait until time point
    • notify_one() - wake one thread
    • notify_all() - wake all threads
  • Predicate-based Wait

    • wait(lock, predicate)
    • Avoiding spurious wakeups
    • Recommended approach
  • condition_variable_any

    • Works with any lockable
    • vs std::condition_variable
  • Producer-Consumer Pattern

    • Implementation with CV
    • Queue synchronization
    • Bounded buffer

13.4 Atomic Operations

Timeline: Tuần 35

  • std::atomic

    • Atomic types
    • Lock-free operations
    • is_lock_free()
    • Supported operations
  • Atomic Operations

    • load(), store()
    • exchange()
    • compare_exchange_weak()
    • compare_exchange_strong()
    • fetch_add, fetch_sub, etc.
  • Memory Ordering

    • memory_order_relaxed
    • memory_order_consume (deprecated)
    • memory_order_acquire
    • memory_order_release
    • memory_order_acq_rel
    • memory_order_seq_cst (default)
    • Memory model
  • Atomic Flags

    • std::atomic_flag
    • Guaranteed lock-free
    • test_and_set()
    • clear()
    • Spinlock implementation
  • Lock-free Programming

    • Concepts
    • ABA problem
    • Hazard pointers
    • Challenges

13.5 Async Programming

Timeline: Tuần 35-36

  • std::async

    • Launch policies (async, deferred)
    • Returning std::future
    • Automatic thread management
    • vs manual threads
  • std::future

    • Getting async results
    • get() - blocks until ready
    • wait() - wait without retrieving
    • wait_for(), wait_until()
    • valid() check
    • One-time use
  • std::promise

    • Setting values from another thread
    • get_future()
    • set_value()
    • set_exception()
    • Communication channel
  • std::packaged_task

    • Wrapping callable
    • get_future()
    • Delayed execution
    • Moving tasks between threads
  • std::shared_future

    • Multiple threads can wait
    • Copyable
    • vs std::future

13.6 Thread-Safe Programming

Timeline: Tuần 36

  • Data Races

    • What are data races
    • Undefined behavior
    • Detection tools (ThreadSanitizer)
  • Race Conditions

    • vs data races
    • Logic bugs
    • Prevention strategies
  • Deadlocks

    • Causes
    • std::lock() for multiple mutexes
    • Lock ordering
    • std::scoped_lock (C++17)
    • Timeout-based locking
  • Thread-Safe Design Patterns

    • Immutable objects
    • Thread-local storage
    • Double-checked locking (broken!)
    • Call once (std::call_once, std::once_flag)
  • Thread Pools

    • Concept
    • Work queue
    • Task submission
    • std::async limitations
    • Custom implementation (advanced)
  • Parallel Algorithms (C++17)

    • std::execution policies
    • Parallel for_each, transform, etc.
    • Hardware utilization

14. TYPE TRAITS & METAPROGRAMMING

14.1 Type Traits

Timeline: Tuần 37

  • Type Categories

    • is_void, is_null_pointer
    • is_integral, is_floating_point
    • is_array, is_pointer
    • is_lvalue_reference, is_rvalue_reference
    • is_member_object_pointer, is_member_function_pointer
    • is_enum, is_union, is_class
    • is_function
  • Type Properties

    • is_const, is_volatile
    • is_trivial, is_trivially_copyable
    • is_standard_layout, is_pod
    • is_empty
    • is_polymorphic, is_abstract
    • is_signed, is_unsigned
    • has_virtual_destructor
  • Supported Operations

    • is_constructible, is_default_constructible
    • is_copy_constructible, is_move_constructible
    • is_assignable, is_copy_assignable, is_move_assignable
    • is_destructible
    • is_trivially_* versions
    • is_nothrow_* versions
  • Type Relationships

    • is_same
    • is_base_of
    • is_convertible
    • is_invocable (C++17)
    • is_nothrow_invocable (C++17)
  • Type Transformations

    • remove_const, remove_volatile, remove_cv
    • add_const, add_volatile, add_cv
    • remove_reference, add_lvalue_reference, add_rvalue_reference
    • remove_pointer, add_pointer
    • make_signed, make_unsigned
    • remove_extent, remove_all_extents
    • decay
    • common_type
    • underlying_type
    • result_of (deprecated C++17), invoke_result (C++17)

14.2 SFINAE & enable_if

Timeline: Tuần 37

  • SFINAE Principle

    • Substitution Failure Is Not An Error
    • Template argument substitution
    • Failed substitution removes overload
    • Not a compilation error
  • std::enable_if

    • Conditional type definition
    • enable_if<condition, T>::type
    • Template parameter SFINAE
    • Return type SFINAE
    • Function parameter SFINAE
  • Detection Idiom

    • Detecting member types
    • Detecting member functions
    • std::void_t (C++17)
    • is_detected library (optional)
  • constexpr if vs SFINAE (C++17)

    • Simpler alternative
    • Compile-time branching
    • When to use each

14.3 Template Metaprogramming

Timeline: Tuần 38

  • Compile-time Computation

    • Recursive templates
    • Factorial example
    • Fibonacci example
    • vs constexpr
  • Type Computations

    • Type lists
    • Type selection
    • Type filtering
    • Type algorithms
  • Tag Dispatching

    • Iterator tag dispatching
    • Custom tag types
    • Overload resolution
  • Policy-Based Design

    • Policy classes
    • Template template parameters
    • Combining policies
    • Andrei Alexandrescu’s Modern C++ Design
  • Expression Templates

    • Lazy evaluation
    • Avoiding temporaries
    • Operator overloading for expressions
    • Used in Eigen, Blaze, etc.
  • CRTP (Curiously Recurring Template Pattern)

    • Static polymorphism
    • Compile-time polymorphism
    • Mixins
    • Use cases

14.4 Concepts (C++20)

Timeline: Tuần 38

  • Defining Concepts

    • concept keyword
    • Boolean expressions
    • Requires expressions
    • Simple requirements
    • Type requirements
    • Compound requirements
    • Nested requirements
  • Requires Clauses

    • requires keyword
    • Template constraints
    • Where to place requires
    • Conjunctions và disjunctions
  • Standard Concepts

    • header
    • same_as, derived_from, convertible_to
    • integral, floating_point, signed_integral
    • constructible_from, default_initializable
    • move_constructible, copy_constructible
    • movable, copyable, semiregular, regular
    • invocable, predicate, relation
    • Iterator concepts
    • Range concepts
  • Concept Composition

    • Combining concepts
    • && (and), || (or)
    • Subsumption
  • Abbreviated Function Templates

    • auto parameters with concepts
    • Concept auto syntax

15. DESIGN PATTERNS

15.1 Creational Patterns

Timeline: Tuần 39-40

  • Singleton

    • Intent: Ensure single instance
    • Lazy initialization
    • Thread-safe singleton (C++11)
    • Meyers’ Singleton
    • Eager initialization
    • Double-checked locking (avoid!)
    • Singleton destruction
  • Factory Method

    • Intent: Create objects without specifying exact class
    • Virtual constructor
    • Creator và product hierarchies
    • Parallel class hierarchies
  • Abstract Factory

    • Intent: Create families of related objects
    • Factory interfaces
    • Concrete factories
    • Product families
  • Builder

    • Intent: Construct complex objects step by step
    • Director và builder
    • Fluent interface
    • Method chaining
  • Prototype

    • Intent: Clone objects
    • clone() method
    • Shallow vs deep copy
    • Copy constructor usage
  • Object Pool

    • Intent: Reuse expensive objects
    • Pool management
    • Checkout/checkin
    • Thread-safe pools

15.2 Structural Patterns

Timeline: Tuần 40-41

  • Adapter

    • Intent: Convert interface
    • Class adapter vs object adapter
    • Wrapper pattern
  • Bridge

    • Intent: Decouple abstraction from implementation
    • Pimpl idiom relation
    • Reducing compilation dependencies
  • Composite

    • Intent: Tree structures
    • Component interface
    • Leaf và composite classes
    • Recursive composition
  • Decorator

    • Intent: Add responsibilities dynamically
    • Wrapping objects
    • Alternative to subclassing
    • Stream decorators example
  • Facade

    • Intent: Simplified interface to complex system
    • Subsystem hiding
    • Reduce coupling
  • Flyweight

    • Intent: Share common state
    • Intrinsic vs extrinsic state
    • Memory optimization
    • String interning example
  • Proxy

    • Intent: Control access to object
    • Virtual proxy (lazy initialization)
    • Protection proxy (access control)
    • Remote proxy
    • Smart pointers as proxies
  • PIMPL (Pointer to Implementation)

    • Hide implementation details
    • Reduce compilation dependencies
    • Binary compatibility
    • Forward declarations

15.3 Behavioral Patterns

Timeline: Tuần 41-42

  • Chain of Responsibility

    • Intent: Pass request along chain
    • Handler chain
    • Request processing
  • Command

    • Intent: Encapsulate request as object
    • Command interface
    • Invoker, command, receiver
    • Undo/redo implementation
  • Iterator

    • Intent: Access elements sequentially
    • STL iterators
    • Custom iterators
    • Iterator interface
  • Mediator

    • Intent: Reduce coupling between objects
    • Centralized communication
    • Colleague objects
  • Memento

    • Intent: Capture and restore state
    • Originator, memento, caretaker
    • Encapsulation preservation
  • Observer

    • Intent: Notify dependents of changes
    • Subject và observers
    • Push vs pull model
    • Event systems
  • State

    • Intent: Behavior changes with state
    • Context và state objects
    • State transitions
    • vs Strategy pattern
  • Strategy

    • Intent: Interchangeable algorithms
    • Context và strategy interface
    • Algorithm families
    • std::function as strategy
  • Template Method

    • Intent: Define algorithm skeleton
    • Hook methods
    • Invariant vs variant parts
    • Hollywood principle
  • Visitor

    • Intent: Add operations without modifying classes
    • Element hierarchy
    • Visitor interface
    • Double dispatch
    • std::variant và std::visit

15.4 Modern C++ Idioms

Timeline: Tuần 42

  • RAII (already covered)

    • Resource management
  • Copy-and-Swap

    • Exception-safe assignment
    • Strong exception guarantee
  • CRTP (already covered)

    • Static polymorphism
  • Type Erasure

    • std::function implementation concept
    • Hiding types
    • Virtual functions alternative
  • Barton-Nackman Trick

    • Restricted template expansion
    • Hidden friend functions
  • Niebloid

    • Customization point objects
    • ADL prevention
    • Ranges library pattern

16. STANDARD LIBRARY DEEP DIVE

16.1 String Processing

Timeline: Tuần 43

  • std::string

    • Small String Optimization (SSO)
    • COW (Copy-on-Write) implementations
    • String operations
    • substr, find, replace
    • c_str(), data()
    • capacity và reserve
  • std::string_view (C++17)

    • Non-owning view
    • Lightweight
    • Substring without allocation
    • Lifetime management
    • Comparison với const string&
  • String Streams

    • String parsing
    • String formatting
    • istringstream, ostringstream
  • Regular Expressions

    • std::regex
    • std::regex_match
    • std::regex_search
    • std::regex_replace
    • Regex iterators
    • Capture groups
    • Regex syntax options
  • String Algorithms

    • Case conversion
    • Trimming
    • Splitting
    • Joining

16.2 Numerics

Timeline: Tuần 43

    • Mathematical functions
    • Trigonometric functions
    • Exponential và logarithmic
    • Power functions
    • Rounding functions
    • accumulate
    • inner_product
    • adjacent_difference
    • partial_sum
    • iota
    • gcd, lcm (C++17)
    • reduce, transform_reduce (C++17)
    • Random engines: mt19937, etc.
    • Random device
    • Distributions:
      • uniform_int_distribution
      • uniform_real_distribution
      • normal_distribution
      • bernoulli_distribution
      • poisson_distribution
      • etc.
    • Seeding properly
    • Complex numbers
    • Operations
    • Mathematical functions
  • (C++11)

    • Compile-time rational arithmetic
    • ratio<num, den>
    • Ratio operations
    • numeric_limits
    • Type properties
    • Min, max values
    • Infinity, NaN

16.3 Time & Date

Timeline: Tuần 44

  • std::chrono (C++11)

    • Duration
    • Time points
    • Clocks:
      • system_clock
      • steady_clock
      • high_resolution_clock
    • Duration arithmetic
    • Time point arithmetic
    • Casting durations
    • Literals: s, ms, us, ns, h, min
  • Calendar (C++20)

    • year, month, day
    • year_month_day
    • weekday
    • Date arithmetic
  • Time Zone (C++20)

    • time_zone class
    • zoned_time
    • Local time vs system time
    • UTC conversions

16.4 Filesystem (C++17)

Timeline: Tuần 44

  • Path Operations

    • std::filesystem::path
    • Constructing paths
    • Path concatenation
    • Filename, extension, stem
    • Absolute vs relative paths
    • Canonical paths
    • Path iterators
  • Directory Operations

    • directory_iterator
    • recursive_directory_iterator
    • Iterating directories
    • Filtering entries
  • File Operations

    • exists()
    • file_size()
    • copy(), copy_file()
    • rename(), remove()
    • create_directory()
    • current_path()
  • File Status

    • file_status
    • is_regular_file()
    • is_directory()
    • is_symlink()
    • file_type enum
  • Permissions

    • permissions enum
    • Checking permissions
    • Setting permissions
  • Error Handling

    • filesystem::filesystem_error
    • Error codes vs exceptions

16.5 Other Utilities

Timeline: Tuần 44

  • std::bitset

    • Fixed-size bit arrays
    • Bit operations
    • Conversions
  • std::byte (C++17)

    • Type-safe byte
    • vs unsigned char
  • Bit manipulation (C++20)

    • header
    • bit_cast
    • has_single_bit
    • bit_ceil, bit_floor
    • countl_zero, countr_zero
    • popcount
    • rotl, rotr

17. ADVANCED TOPICS

17.1 Name Lookup

Timeline: Tháng 10

  • Qualified Name Lookup

    • Scope resolution operator
    • Class member access
    • Namespace qualification
  • Unqualified Name Lookup

    • Current scope
    • Enclosing scopes
    • Base class lookup
  • Argument-Dependent Lookup (ADL)

    • Koenig lookup
    • When ADL happens
    • Associated namespaces
    • Associated classes
    • ADL và function templates
    • Preventing ADL
  • Two-Phase Lookup

    • Dependent names
    • Non-dependent names
    • Template instantiation
    • typename keyword
    • template keyword in dependent contexts

17.2 Type System

Timeline: Tháng 10

  • Type Conversions

    • Implicit conversions
    • Promotion
    • Standard conversions
    • User-defined conversions
    • Conversion sequences
  • C++ Casts

    • static_cast
    • dynamic_cast
    • const_cast
    • reinterpret_cast
    • C-style cast dangers
    • Function-style cast
  • RTTI (Runtime Type Information)

    • typeid operator
    • type_info class
    • name() function
    • dynamic_cast với polymorphic types
    • Performance cost
    • Disabling RTTI

17.3 Undefined Behavior

Timeline: Tháng 10

  • Common UB Scenarios

    • Signed integer overflow
    • Out-of-bounds access
    • Null pointer dereference
    • Use after free
    • Double free
    • Data races
    • Accessing deleted object
    • Returning reference to local
    • Modifying string literal
    • Violating strict aliasing
  • Detection

    • Compiler warnings
    • UndefinedBehaviorSanitizer (UBSan)
    • Static analysis tools
  • Avoidance

    • Compiler warnings (-Wall -Wextra -Wpedantic)
    • Sanitizers
    • Safe coding practices
    • Code review

17.4 ABI (Application Binary Interface)

Timeline: Tháng 11

  • ABI Basics

    • What is ABI
    • Name mangling
    • Calling conventions
    • Data layout
    • vtable layout
  • ABI Compatibility

    • Binary compatibility
    • Source compatibility
    • Breaking changes
    • Versioning strategies
  • Practical ABI

    • Shared libraries (.so, .dll)
    • extern “C”
    • Platform differences
    • ABI stability concerns

18. PERFORMANCE & OPTIMIZATION

18.1 Profiling

Timeline: Tháng 10-11

  • CPU Profiling

    • gprof (GNU profiler)
    • perf (Linux)
    • Instruments (macOS)
    • VTune (Intel)
    • Identifying hotspots
    • Call graphs
  • Memory Profiling

    • Valgrind (Massif, Memcheck)
    • Heaptrack
    • Memory usage patterns
    • Allocation patterns
    • Leak detection
  • Benchmarking

    • Google Benchmark
    • Writing good benchmarks
    • Statistical significance
    • Avoiding optimizer tricks
    • Warm-up runs
  • Cache Profiling

    • perf stat
    • Cache miss analysis
    • Cache-friendly code

18.2 Optimization Techniques

Timeline: Tháng 11

  • Compiler Optimizations

    • Optimization levels (-O0, -O1, -O2, -O3, -Ofast)
    • -march, -mtune flags
    • Link-Time Optimization (LTO)
    • Profile-Guided Optimization (PGO)
    • Whole Program Optimization
  • Inlining

    • inline keyword
    • Automatic inlining
    • Force inlining (compiler-specific)
    • Inline assembly
  • Loop Optimizations

    • Loop unrolling
    • Loop fusion
    • Loop invariant code motion
    • Vectorization
  • Data Structure Optimization

    • Memory layout
    • Cache lines
    • Structure padding
    • Alignment
    • Data-oriented design
  • Algorithm Selection

    • Complexity analysis
    • Choosing right data structures
    • STL algorithm complexity
  • Move Semantics (already covered)

    • Eliminating copies
    • Perfect forwarding
  • Small String Optimization (SSO)

    • String implementation detail
    • Avoiding heap allocation
  • RVO/NRVO (already covered)

    • Eliminating temporaries
  • Branch Prediction

    • [[likely]] / [[unlikely]] (C++20)
    • Predictable branches
    • Branch-free code
  • SIMD

    • Vectorization
    • Intrinsics
    • Auto-vectorization
    • SSE, AVX
  • constexpr

    • Compile-time computation
    • Reducing runtime work

18.3 Performance Best Practices

Timeline: Tháng 11

  • Pass large objects by const reference
  • Use move semantics
  • Reserve container capacity
  • Avoid unnecessary allocations
  • Prefer stack allocation
  • Use appropriate containers
  • Enable compiler optimizations
  • Profile before optimizing
  • Measure, don’t guess
  • Avoid premature optimization

19. DEBUGGING & TESTING

19.1 Debugging Tools

Timeline: Tháng 5-6

  • GDB (GNU Debugger)

    • Starting GDB
    • Setting breakpoints
    • Conditional breakpoints
    • Watchpoints
    • Step over, into, out
    • Print variables
    • Examine memory
    • Call stack (backtrace)
    • Thread debugging
    • Attaching to process
    • Core dump analysis
    • GDB scripting
    • TUI mode
  • LLDB

    • Similar to GDB
    • Better C++ support
    • LLVM integration
    • Expression evaluation
  • Visual Studio Debugger

    • GUI debugging
    • Data breakpoints
    • Edit và continue
    • Memory windows
    • Parallel debugging
  • Debugging Techniques

    • Reproduce bug consistently
    • Isolate the problem
    • Divide and conquer
    • Rubber duck debugging
    • Binary search for bug location
    • Check assumptions
    • Use assertions

19.2 Assertions & Logging

Timeline: Tháng 5-6

  • Assertions

    • assert() macro
    • static_assert (compile-time)
    • Custom assertions
    • Debug vs release builds
    • NDEBUG macro
  • Logging

    • Logging levels (trace, debug, info, warn, error, fatal)
    • Structured logging
    • Log rotation
    • Performance considerations
  • Logging Frameworks

    • spdlog
    • glog (Google)
    • Boost.Log
    • log4cplus

19.3 Testing Frameworks

Timeline: Tháng 6-7

  • Google Test (gtest)

    • TEST macro
    • TEST_F (test fixtures)
    • Assertions: EXPECT_, ASSERT_
    • Parameterized tests
    • Test discovery
    • Running specific tests
    • Test output formats
  • Google Mock (gmock)

    • Mock objects
    • MOCK_METHOD
    • Expectations: EXPECT_CALL
    • Matchers
    • Actions
    • Testing interactions
  • Catch2

    • Header-only alternative
    • BDD-style tests
    • Sections
    • Generators
    • Simpler syntax
  • Boost.Test

    • Unit testing
    • Auto-registration
    • Test suites
  • doctest

    • Lightweight
    • Fast compilation
    • Similar to Catch2

19.4 Testing Practices

Timeline: Tháng 6-7

  • Unit Testing

    • Testing individual units
    • Test isolation
    • Mocking dependencies
    • Test coverage
  • Integration Testing

    • Testing component interaction
    • End-to-end testing
    • System testing
  • Test-Driven Development (TDD)

    • Red-Green-Refactor cycle
    • Write test first
    • Benefits và challenges
  • Code Coverage

    • gcov/lcov
    • llvm-cov
    • Coverage metrics
    • Interpreting coverage
    • 100% coverage isn’t goal

19.5 Static Analysis

Timeline: Tháng 11

  • Compiler Warnings

    • -Wall -Wextra -Wpedantic
    • -Werror (treat warnings as errors)
    • Specific warnings
  • Clang-Tidy

    • Linting và modernization
    • Checks categories
    • Custom checks
    • Integration with build systems
  • Cppcheck

    • Static analysis tool
    • Finding bugs
    • Undefined behavior detection
  • PVS-Studio

    • Commercial static analyzer
    • Deep analysis
  • Include-What-You-Use (IWYU)

    • Header dependency analysis
    • Cleaning includes

19.6 Sanitizers

Timeline: Tháng 10-11

  • AddressSanitizer (ASan)

    • Memory errors
    • Use-after-free
    • Buffer overflows
    • Memory leaks
  • UndefinedBehaviorSanitizer (UBSan)

    • Undefined behavior detection
    • Integer overflow
    • Null pointer dereference
  • ThreadSanitizer (TSan)

    • Data races
    • Race condition detection
  • MemorySanitizer (MSan)

    • Uninitialized memory reads
  • LeakSanitizer (LSan)

    • Memory leak detection
    • Standalone or with ASan

20. BUILD SYSTEMS & PACKAGE MANAGEMENT

20.1 Make & Makefiles

Timeline: Tuần 2-3

  • Makefile Basics

    • Targets, dependencies, commands
    • Variables
    • Pattern rules
    • Automatic variables ($@, $<, $^)
    • Phony targets
  • Compilation Process

    • Preprocessing
    • Compilation
    • Assembly
    • Linking
    • Static vs dynamic linking

20.2 CMake

Timeline: Tháng 4-5

  • CMake Basics

    • CMakeLists.txt
    • cmake_minimum_required
    • project()
    • add_executable()
    • add_library()
    • target_link_libraries()
  • Variables

    • set(), unset()
    • ${VAR} syntax
    • Environment variables
    • Cache variables
  • Targets

    • Executables
    • Libraries (static, shared, interface)
    • Custom targets
    • Imported targets
  • Properties

    • Target properties
    • set_target_properties()
    • get_target_property()
  • Dependencies

    • find_package()
    • FetchContent (C++11, modern approach)
    • ExternalProject
    • add_subdirectory()
  • Include Directories

    • include_directories() (avoid)
    • target_include_directories() (preferred)
    • PUBLIC, PRIVATE, INTERFACE
  • Compile Options

    • target_compile_options()
    • target_compile_features()
    • target_compile_definitions()
  • Generator Expressions

  • Modern CMake

    • Target-based approach
    • Transitive dependencies
    • Export targets
    • Config files
  • Build Configurations

    • Debug, Release, RelWithDebInfo, MinSizeRel
    • Custom configurations
    • CMAKE_BUILD_TYPE
  • Cross-Platform

    • Platform detection
    • Conditional compilation
    • Generator selection
  • Installation

    • install() command
    • DESTINATION
    • Export và import targets
  • Testing với CTest

    • enable_testing()
    • add_test()
    • Running tests

20.3 Other Build Tools

Timeline: Optional

  • Ninja

    • Fast build system
    • Generated by CMake
    • Parallel builds
  • Meson

    • Python-based
    • Fast và user-friendly
  • Bazel

    • Google’s build system
    • Highly scalable
    • Reproducible builds
  • xmake

    • Lua-based
    • Cross-platform
    • Package management

20.4 Package Managers

Timeline: Tháng 5

  • Conan

    • C/C++ package manager
    • conanfile.txt / conanfile.py
    • Dependency management
    • Prebuilt binaries
    • Creating packages
    • Conan center
  • vcpkg

    • Microsoft’s package manager
    • CMake integration
    • Manifest mode
    • Installing packages
    • Creating ports
  • System Package Managers

    • apt (Debian/Ubuntu)
    • yum/dnf (RedHat/Fedora)
    • brew (macOS)
    • Limitations for C++ development

21. SECURITY & SAFE CODING

21.1 Common Vulnerabilities

Timeline: Tháng 9-10

  • Buffer Overflows

    • Stack overflow
    • Heap overflow
    • Off-by-one errors
    • Strcpy và unsafe functions
    • Prevention: bounds checking
  • Memory Corruption

    • Use-after-free
    • Double free
    • Null pointer dereference
    • Wild pointers
    • Dangling references
  • Integer Vulnerabilities

    • Integer overflow
    • Integer underflow
    • Truncation
    • Sign conversion
    • Division by zero
  • Injection Attacks

    • SQL injection (database context)
    • Command injection
    • Format string vulnerabilities
  • Race Conditions

    • TOCTOU (Time-of-check-time-of-use)
    • Data races
    • Deadlocks

21.2 Input Validation

Timeline: Tháng 9

  • Validation Principles

    • Never trust user input
    • Whitelist vs blacklist
    • Sanitization
    • Length checks
    • Type validation
  • Bounds Checking

    • Array access
    • at() vs operator[]
    • Range checks
    • std::span for safe views
  • String Handling

    • Avoid C-style strings when possible
    • Use std::string
    • Null-termination issues
    • strncpy vs strcpy
    • std::string_view safety

21.3 Safe Coding Practices

Timeline: Tháng 9-10

  • Use RAII

    • Automatic resource management
    • Exception safety
    • No manual cleanup
  • Prefer Smart Pointers

    • Avoid raw new/delete
    • Clear ownership
    • Prevent leaks
  • Use Standard Library

    • Vetted implementations
    • Safe containers
    • Algorithms instead of raw loops
  • Const Correctness

    • Immutability
    • Preventing accidental modification
    • Compiler optimization
  • Initialize Variables

    • Avoid uninitialized variables
    • Default initialization
    • Zero initialization
  • Avoid Casting

    • Minimize casts
    • Use C++ casts for visibility
    • Document why casting is needed
  • Compiler Warnings

    • Enable all warnings
    • Treat warnings as errors
    • Fix warnings promptly
  • Code Review

    • Peer review
    • Security-focused review
    • Automated tools

21.4 Cryptography (Brief Introduction)

Timeline: Optional, Tháng 12

  • Cryptography Libraries

    • OpenSSL
    • Crypto++
    • Libsodium
    • Botan
  • Hashing

    • SHA family
    • Password hashing (bcrypt, scrypt, Argon2)
  • Encryption

    • Symmetric (AES)
    • Asymmetric (RSA, ECC)
  • Random Numbers

    • std::random_device
    • Cryptographically secure RNG
    • Not std::rand()!
  • Best Practices

    • Don’t roll your own crypto
    • Use established libraries
    • Keep libraries updated
    • Key management

21.5 Security Standards

Timeline: Optional

  • CERT C++ Coding Standard

    • Secure coding rules
    • Best practices
  • CWE (Common Weakness Enumeration)

    • Categorized vulnerabilities
    • Awareness
  • CVE (Common Vulnerabilities and Exposures)

    • Known vulnerabilities
    • Patching

22. NETWORKING

22.1 Network Basics

Timeline: Tháng 11

  • OSI Model Review

    • 7 layers overview
    • TCP/IP stack
  • Socket Programming

    • Socket API (POSIX)
    • Socket types (stream, datagram)
    • Socket creation
    • Binding
    • Listening
    • Accepting connections
    • Connecting
    • Sending/receiving data
    • Closing sockets
  • TCP vs UDP

    • Connection-oriented vs connectionless
    • Reliability
    • Ordering
    • Use cases

22.2 Network Programming in C++

Timeline: Tháng 11

  • Boost.Asio

    • Async I/O library
    • io_context
    • TCP sockets
    • UDP sockets
    • Timers
    • Strand (serialization)
    • Async operations
    • Callbacks và handlers
    • Coroutines support (C++20)
  • Simple TCP Server/Client

    • Synchronous version
    • Asynchronous version
    • Echo server example
    • Chat server example
  • HTTP Clients

    • libcurl (C library)
    • cpr (C++ wrapper for curl)
    • cpp-httplib (header-only)
    • Beast (Boost)
  • HTTP Servers

    • Simple HTTP server
    • Beast (Boost)
    • Crow
    • Pistache
  • WebSockets

    • WebSocket protocol
    • Beast WebSockets
    • Real-time communication

22.3 Higher-Level Protocols

Timeline: Tháng 11-12

  • REST APIs

    • RESTful design
    • JSON parsing (nlohmann/json, RapidJSON)
    • HTTP methods (GET, POST, PUT, DELETE)
  • Serialization Protocols

    • JSON
    • XML
    • Protocol Buffers
    • MessagePack
    • FlatBuffers
  • RPC Frameworks

    • gRPC
    • Apache Thrift
    • Cap’n Proto

22.4 Network Security

Timeline: Tháng 12

  • SSL/TLS

    • Encrypted communication
    • OpenSSL
    • Boost.Asio SSL support
    • Certificate validation
  • Authentication

    • Basic authentication
    • Token-based (JWT)
    • OAuth

23. DATABASE INTEGRATION

23.1 SQL Basics

Timeline: Tháng 8

  • SQL Fundamentals

    • SELECT, INSERT, UPDATE, DELETE
    • WHERE clause
    • JOIN operations
    • Aggregation (GROUP BY, HAVING)
    • Ordering và limiting results
    • Indexes
    • Transactions (BEGIN, COMMIT, ROLLBACK)
  • Database Design

    • Normalization
    • Primary keys, foreign keys
    • Entity-relationship diagrams

23.2 C++ Database Connectors

Timeline: Tháng 8-9

  • SQLite

    • Embedded database
    • sqlite3 C API
    • SQLiteCpp (C++ wrapper)
    • Prepared statements
    • Transactions
    • In-memory databases
  • MySQL/MariaDB

    • MySQL Connector/C++
    • Connection pooling
    • Prepared statements
    • Error handling
  • PostgreSQL

    • libpqxx
    • Connection management
    • Async queries
  • ODBC

    • Cross-database connectivity
    • ODBC drivers
    • Portability

23.3 ORM Libraries

Timeline: Tháng 9 (Optional)

  • ODB

    • Object-relational mapping
    • Code generation
    • Database schema
  • SOCI

    • Database abstraction
    • Multiple backends
    • Type-safe queries
  • SQLpp11

    • Embedded DSL
    • Type-safe SQL
    • Compile-time query checking

23.4 NoSQL Databases

Timeline: Tháng 9 (Optional)

  • MongoDB

    • mongocxx driver
    • BSON documents
  • Redis

    • hiredis, redis-plus-plus
    • Key-value store
    • Pub/sub
  • Embedded Databases

    • LevelDB
    • RocksDB
    • LMDB

24. SERIALIZATION

24.1 Text-Based Formats

Timeline: Tháng 7-8

  • JSON

    • nlohmann/json (popular, header-only)
    • RapidJSON (fast)
    • jsoncpp
    • Parsing và generation
    • Type conversions
    • Custom serialization
  • XML

    • TinyXML-2
    • pugixml
    • RapidXML
    • Parsing DOM vs SAX
    • XPath queries
  • YAML

    • yaml-cpp
    • Configuration files
    • Human-readable
  • TOML

    • toml++
    • Configuration files
    • Simpler than YAML

24.2 Binary Formats

Timeline: Tháng 8

  • Protocol Buffers (protobuf)

    • Google’s format
    • Schema definition (.proto files)
    • Code generation
    • Efficient serialization
    • Cross-language
  • MessagePack

    • Binary JSON alternative
    • Compact
    • Fast
    • msgpack-c library
  • FlatBuffers

    • Google’s format
    • Zero-copy deserialization
    • Schema evolution
    • Gaming và performance-critical
  • Cap’n Proto

    • By protobuf author
    • Zero-copy
    • RPC support
  • BSON

    • Binary JSON
    • MongoDB format

24.3 Custom Serialization

Timeline: Tháng 8

  • Manual Serialization

    • Writing binary data
    • read()/write() with structs
    • Endianness handling
    • Versioning
  • Boost.Serialization

    • Automatic serialization
    • Archive concept
    • XML, binary, text archives
    • Pointers và references
  • cereal

    • Header-only
    • Flexible archives
    • Minimal boilerplate

25. CROSS-PLATFORM DEVELOPMENT

25.1 Platform Differences

Timeline: Tháng 9

  • Operating Systems

    • Windows, Linux, macOS
    • OS-specific APIs
    • POSIX vs Windows API
  • Compiler Differences

    • MSVC vs GCC vs Clang
    • Language extensions
    • Standard compliance
  • Endianness

    • Big-endian vs little-endian
    • Network byte order
    • Byte swapping
    • Portable code

25.2 Conditional Compilation

Timeline: Tháng 9

  • Preprocessor Macros

  • _WIN32, _WIN64 (Windows)

  • __linux__ (Linux)

  • __APPLE__ (macOS)

  • #ifdef, #elif, #endif blocks

  • Feature Detection

  • __has_include (C++17)

  • __has_cpp_attribute (C++20)

  • Feature test macros (e.g., __cpp_lib_filesystem)

  • Build System Configuration

  • CMake target_compile_definitions

  • Handling platform-specific sources in CMake

  • Separating platform logic implementation

25.3 Cross-Platform Libraries

Timeline: Tháng 9-10

  • Boost Libraries

  • Boost.Asio (Networking)

  • Boost.Filesystem (Pre-C++17)

  • Boost.Beast (HTTP/WebSocket)

  • Lịch sử và vai trò của Boost trong C++

  • POCO C++ Libraries

  • Networking, Database, XML/JSON

  • Portable threading/process

  • Qt Core (Non-GUI part)

  • QString, QList, QVector

  • Signals & Slots mechanism

  • Event loop


26. LIBRARIES & FRAMEWORKS

26.1 GUI Development

Timeline: Tháng 10

  • Qt Framework

  • Qt Widgets vs Qt Quick (QML)

  • Signals & Slots deep dive

  • Meta-Object Compiler (MOC)

  • Resource system (.qrc)

  • Qt Creator IDE usage

  • wxWidgets

  • Native look and feel

  • Event tables vs Bind

  • Macro-based system

  • Dear ImGui

  • Immediate Mode GUI concept

  • Debug tools, Game UIs

  • Integration with OpenGL/DirectX/Vulkan

  • State management in IMGUI

  • GTKmm

  • C++ wrapper for GTK+

  • Linux-centric development

26.2 Graphics & Game Development

Timeline: Tháng 10-11

  • SDL2

  • Window management

  • Input handling

  • Basic 2D rendering

  • Audio mixing

  • SFML

  • Object-oriented simple interface

  • Graphics, Audio, Network, Window, System modules

  • Rendering APIs (Basics)

  • OpenGL (Modern OpenGL 3.3+)

  • Vulkan (Low-level, high complexity)

  • DirectX (Windows specific)

  • Shaders (GLSL/HLSL)

  • Math Libraries

  • GLM (OpenGL Mathematics)

  • Eigen (Linear algebra for graphics/physics)

26.3 Scientific & Math

Timeline: Tùy nhu cầu

  • Eigen

  • Matrix/Vector arithmetic

  • Linear algebra solvers

  • Header-only library

  • OpenCV

  • Computer Vision

  • Image processing

  • cv::Mat structure

  • Video capture

  • Blaze

  • High performance math

  • Expression templates optimization

26.4 Logging

Timeline: Tháng 5 (Review)

  • spdlog

  • Fast C++ logging library

  • Format string syntax

  • Async logging

  • Console & File sinks

  • Daily rotation

  • Google Glog

  • Severity levels

  • Conditional logging (LOG_IF)

  • Fatal error handling


27. CI/CD & DEVOPS

27.1 CI/CD Fundamentals

Timeline: Tháng 11

  • Concepts

  • Continuous Integration

  • Continuous Delivery/Deployment

  • Build pipelines

  • Artifact management

  • GitHub Actions

  • Workflows YAML

  • Matrix builds (Win, Linux, Mac)

  • Caching dependencies (ccache, vcpkg)

  • Running tests automatically

  • GitLab CI

  • .gitlab-ci.yml

  • Runners

  • Docker integration

27.2 Docker for C++

Timeline: Tháng 11

  • Containerization

  • Creating Dockerfiles for C++ apps

  • Multi-stage builds (Build env vs Runtime env)

  • Reducing image size (Alpine, Distroless)

  • Cross-compilation with Docker

  • Environment Consistency

  • “It works on my machine” fix

  • Dev containers (VS Code integration)

27.3 Static Analysis Automation

Timeline: Tháng 11

  • Integration
  • Running clang-tidy in CI pipeline
  • Formatting check (clang-format)
  • SonarQube integration
  • Code coverage reports (Codecov)

28. SPECIALIZED DOMAINS

28.1 Game Development

Timeline: Advanced

  • Unreal Engine

  • C++ in Unreal vs Standard C++

  • Garbage Collection in Unreal

  • UObject architecture

  • Blueprints vs C++

  • Macros (UPROPERTY, UFUNCTION)

  • Custom Engines

  • ECS (Entity Component System) architecture

  • Memory arenas

  • Resource management

28.2 Embedded Systems

Timeline: Advanced

  • Constraints

  • Memory limitations

  • No heap allocation rules

  • Real-time requirements

  • Exception handling issues

  • Hardware Interaction

  • Register manipulation

  • volatile keyword usage

  • Interrupt Service Routines (ISR)

  • Bare-metal programming

  • FreeRTOS with C++

28.3 High-Frequency Trading (HFT)

Timeline: Expert

  • Low Latency Techniques
  • Kernel bypass
  • Zero-copy networking
  • Lock-free data structures
  • CPU affinity / Pinning
  • Cache warming
  • Avoiding virtual functions on hot paths

28.4 Audio & DSP

Timeline: Advanced

  • JUCE Framework
  • Audio plugins (VST/AU)
  • Real-time audio processing thread constraints
  • MIDI handling

29. BEST PRACTICES & GUIDELINES

29.1 Coding Standards

Timeline: Ongoing

  • C++ Core Guidelines

  • Maintained by Bjarne Stroustrup & Herb Sutter

  • Philosophy of modern C++

  • Safety profiles

  • Google C++ Style Guide

  • Common in industry

  • Restrictions on C++ features (e.g., exceptions, streams)

  • LLVM Coding Standards

  • Useful for compiler dev references

29.2 Code Review

Timeline: Ongoing

  • What to look for

  • Ownership semantics

  • Lifecycle issues

  • Exception safety

  • Const correctness

  • Readability vs “Cleverness”

  • Refactoring

  • Identification of “Code Smells”

  • Extract Method/Class

  • Modernizing legacy code (C++98 to C++11/17)

29.3 Design Principles

Timeline: Ongoing

  • SOLID Principles

  • Single Responsibility

  • Open/Closed

  • Liskov Substitution

  • Interface Segregation

  • Dependency Inversion

  • KISS (Keep It Simple, Stupid)

  • DRY (Don’t Repeat Yourself)

  • YAGNI (You Aren’t Gonna Need It)


30. SOFT SKILLS & PROFESSIONAL DEVELOPMENT

30.1 Communication

  • Explaining memory leaks/pointers to non-technical stakeholders
  • Writing documentation (Doxygen)
  • Writing clear bug reports

30.2 Learning Resources

  • Conferences: CppCon, C++Now, Meeting C++ (Watch on YouTube)

  • Books:

  • “Effective Modern C++” (Scott Meyers)

  • “A Tour of C++” (Bjarne Stroustrup)

  • “C++ Concurrency in Action” (Anthony Williams)

  • Blogs: ISO C++, Fluent C++, Herb Sutter’s blog

30.3 Community

  • Stack Overflow (asking smart questions)
  • Reddit r/cpp
  • Open source contributions (finding “good first issue”)

31. REAL-WORLD PROJECTS

31.1 Beginner Projects

  • Task Manager CLI: CRUD operations, file I/O (JSON/TXT), command parsing.
  • Student Management System: Classes, Vector, Sort/Search algorithms.
  • Number Guessing Game: Random generation, loops, basic logic.

31.2 Intermediate Projects

  • Chat Application: TCP/IP sockets, threading, basic UI (Qt or ImGui).
  • File Encryption Tool: File streams, XOR or AES implementation, binary mode.
  • HTTP Server: Implement a basic GET/POST handler using sockets, parsing HTTP headers.
  • Ray Tracer: Math (vectors), graphics output (PPM format), classes/inheritance.

31.3 Advanced Projects

  • Game Engine Core: ECS implementation, resource manager, rendering loop.
  • Database Engine: B-Tree implementation, simple SQL parser, file paging.
  • Compiler/Interpreter: Lexer, Parser, AST for a simple script language (using LLVM optionally).
  • High-Performance Logger: Lock-free queue, async writing thread.

32. INTEROPERABILITY

32.1 C++ & Python

  • Python C API

  • Reference counting

  • PyObject

  • pybind11 (Standard Industry Choice)

  • Exposing C++ classes to Python

  • Header-only

  • Automatic type conversion

  • Creating Python modules with C++

  • Embedding Python

  • Running Python interpreter inside C++

32.2 C++ & C

  • extern “C”

  • Name mangling prevention

  • Calling C libraries from C++

  • Exposing C++ API to C (wrapper functions)

  • ABI Compatibility

  • Struct layout compatibility

  • Calling conventions

32.3 C++ & Java

  • JNI (Java Native Interface)
  • native keyword in Java
  • JNIEnv pointer
  • Type signatures
  • Garbage collection interaction
  • Performance overhead

32.4 C++ & C#

  • P/Invoke

  • Exporting DLL functions

  • Marshaling data types

  • C++/CLI (Windows only)

  • Managed vs Unmanaged code

  • Bridge between .NET and Native C++

32.5 WebAssembly (Wasm)

  • Emscripten
  • Compiling C++ to Wasm
  • Running C++ in browser
  • Binding C++ to JavaScript
  • HTML5 interactions