| Date | Topic | Slides, Notes | Remarks, chapter references, additional recommended readings
                    (if any).  BO: Bryant and O'Hallaron.  BS: Bjarne Stroustrup. | 
        
            | 1. Jan 27 | Introduction to recitations, setting up your C++ environment | slides-pdf | Provides an overview of the course including major goals, and provides instructions to set up VSCode
                with a remote linux machine | 
        
            | 2. Feb 3 | C++ Types and Containers | slides-pdf    demo | Discusses various C++ types and inner workings of std::array and std::vector | 
        
            | 3. Feb 10 | Linux and C++ Class | slides-pdf    demo | Provide overview of Linux and file system, introduction to C++ classes and its object-oriented programing convention | 
        
            | 4. Feb 21 | More about C++ Class and Compilation | slides-pdf | More about C++ class constructor and hierarchy introduction; introducing C++ compilation with MakeFile and CMakeLists. | 
         
            | 5. Feb 24 | C++ resource managemenet & C++ pointers | slides-pdf    demo | Introduce C++ resource management, stack and heap memory, and how to write the program memory safe, using C++ pointer and reference types. | 
        
            | 6. Mar 3 | C++ resource managemenet & C++ functions | slides-pdf    demo | More about C++ resource management, introducing RAII principle, smart pointers. Function parameter and return types. | 
        
            | 7. Mar 10 | C++ Templates | slides-pdf    demo | Introduce C++ template: function templates, class templates, template specializations and variadic template. | 
        
            | 8. Mar 17 | Multi-processing and multi-threading | slides-pdf    demo | Introduce two ways of parallelism in C++, multi-processing and multi-threading. For multi-processing, introduce fork() and exec() functions; for multi-threading, introduce thread's creation and accessing. | 
        
            | 9. Mar 24 | Performance(Gprof) and multi-threading I | slides-pdf    demo | Introduce CMake and performance profiling tool: GProf. Introduction to multi-threading programing. | 
        
            | 10. Mar 31 | Multi-threading and syncrhonization II | slides-pdf    demo | Introducing concurrency under multithreading, and synchronization using mutex and locking mechanism. | 
        
            | 11. Apr 14 | Multi-threading and syncrhonization III | slides-pdf    demo | Introducing condition variable, and reader&writer locking implementation demo | 
        
            | 12. Apr 21 | Prefetching and Caching | slides-pdf    demo | Introducing motivation and implementaion about prefetching and caching, perform a demo that runs Memcached locally through telnet and use a Python interface, python-memcached, to interact with data therein | 
        
            | 13. Apr 28 | Prelim2 Review | slides-pdf | Review of course materials for prelim2 |