*Please note: This is the syllabus from the 2021/22 academic year and subject to change.*
In this continuation of the Winter's C++ course, we go beyond the basics to cover the powerful and surprising techniques that make C++ a different language in the hands of an expert. If you use C++ in your daily life, you and your team will see striking benefits from understanding and using C++ at a deeper level. While the course is focused on C++, it can also be considered in many ways a course on advanced programming techniques that can be reused in any programming language to build enterprise-scale software as we build up both conceptual and practical models of advanced programming techniques.
One of our main goals will be to understand holistically how the broad feature set of C++ fits together to enable powerful programming paradigms. One example we will build over the course of the quarter is how to use metaprogramming techniques to implement Software Engineering "Design Patterns" with the aim of making a metaprogram that simply "executes your design documents." While this can't be done completely, C++ usefully comes way closer than one would ever guess, and we will be forced to hone our skills and tools to the utmost to get there.
As a seminar style course, many of the topics are influenced by the goals of the students, so please let me know if there is topic of interest to you. Typical topics have included:
• Advanced concurrency techniques like futures and promises with best practices to avoid the myriad pitfalls of multi-threaded programming.
• Advanced template techniques like SFINAE, CRTP, and variadics, which we will illustrate by implementing full featured classes like tuples.
• Using metaprograms to implement seamlessly Embedded Domain Specific Languages and Design Patterns.
• Learning how to read and leverage the C++ standard, so you can quickly locate definitive answers to any language questions.
• A tour of standard and popular libraries so you don’t have to reinvent the wheel.
• Creating your own STL-style iterators, so your types work seamlessly with STL algorithms
• Customizing I/O streams.
• Future directions of C++ to help you produce forward looking programs.
Weekly homework, and student chooses between a final exam and a final project
I try to focus on teaching "what you can't get from a textbook." When I teach a C++ feature, I start with real-life use cases that can't be satisfactorily addressed without it, recap the discussions in the C++ committee during the design of the feature, including criticisms and alternative solutions, until we understand the actual outcome. What started out looking like an obscure feature full of mysterious technicalities and exceptions ends up being natural and "just what you expect."
About the Instructor
"As the founder of Boost (www.boost.org), the first and best known C++ library repository, and also as a long-time voting member of the C++ standards committee, I have come into contact with many of the notables of the C++ world. Mike Spertus is right up there with the best of them." -- Beman Dawes
Michael Spertus is a Distinguished Engineer at Symantec, where he serves as the Chief Architect for Symantec's Information Security Service. He is also a member of the C++ Standards Committee, where he has authored over 30 standard proposals. He has been involved in C/C++ languages since the 1980s, when he helped write one of the first commercial MS-DOS C compiler for the IBM PC-AT.