SG20 Education and Recommended Videos for Teaching C++
In today’s blog, we look at both the newly minted Study Group for education in the C++ Standard Committee. We also look at a small number of conference videos that I recommend teachers consider while they’re waiting for this Study Group to produce usable materials.
Introducing SG20 Education
WG21, the C++ Standards Committee, has just approved a new Study Group for education. This study group is called SG20 Education, demonstrates that they indeed care about ensuring that C++ is both beginner friendly and expert friendly.
I’ve been teaching C++ since 2013, and ever since the C++ Core Guidelines came out, I’ve wanted to see a set of guidelines emerge for teaching C++. I didn’t know how to go about this, so I kept to myself. I’ve been publicly trying to innovate education in the C++ world since 2016. This was motivated, in part, thanks to Kate Gregory and Sergey Zubkov. I eventually amassed enough experience and feedback that I felt it was time to deliver a talk at the C++ Edinburgh user-group. When I was asked to review a draft of the Direction Group proposal, I made an almost off-hand suggestion to Michael Wong that a Study Group for education would be a nice addition to the Standards Committee. I certainly didn’t expect the idea to fly.
Apparently, the Direction Group liked my suggestion so much that they commissioned JC van Winkel and me to write ‘P1231 Proposal for Study Group: C++ Education’, which asks the committee to officially form a Study Group for education. At the same time as this, I was working on my CppCon 2018 talk about teaching programming using C++, and that helped JC and me work out that we have compatible ideas when it comes to teaching C++. P1231 was so well-received at the C++ Standards meeting in San Diego that the Committee Convener, Herb Sutter, established SG20 as the Study Group for Education, with JC van Winkel as its first chair. Congratulations, JC!
Introducing JC van Winkel
JC has been teaching C++ since 1992, working for AT Computing, a small courseware spin-off of the University of Nijmegen, the Netherlands. He’s been a part of the Netherlands programming languages committee that represents the Netherlands at the WG21. JC joined Google’s Site Reliability Engineering team in 2010, and is a both a founding member and lead educator of the SRE education team, SRE EDU.
P1231 was a joint effort between JC and me. Neither of us are able to individually attend all three WG21 meetings each year. Given JC’s long term experience in WG21, JC was appointed as the chair for SG20. I’ll be acting as a lieutenant, and will step in on organisational matters when he’s unable to attend, but all statements with a sense of finality will come from JC.
What is a Study Group?
A Study Group is an official part of the Standards Committee that focuses on a single particular area of interest. These Study Groups review proposals for additions to C++ that are related to that area of interest. The most famous two are SG1 Concurrency and SG14 Game Development & Low-latency. It is my hope that SG20 will also become a household Study Group.
What does SG20 aim to achieve?
As articulated in P1231, the goal of SG20 is not to provide normative curricula for teaching C++, but rather to provide teaching and curriculum guidelines. Although this was once a dream of mine, full credit goes to JC for suggesting guidelines in favour of normative curricula. The benefit of this approach is that it lets teachers pick-and-choose which recommendations are fit for them so that they can build their own curriculum.
If you’re thinking that there should be prescribed materials, I’d ask if there’s any style guide that you’ve followed, but have disagreed with a particular rule (and possibly disregard it). Teaching is no different, and we fear that prescriptive curricula may be too rigid, which will cause disgruntled teachers to build their own curricula anyway, but without the recommendations of teaching experts.
Tutorials for new C++ features
The C++ Standards Committee releases a new International Standard for C++ every three years, and also releases Technical Specifications when necessary. The problem is that the teaching material for these new features is often lagging and that makes it difficult to adopt new features when a new release comes out right off the bat. This is extremely problematic for Technical Specifications, which are released specifically to get feedback from the community!
Another goal of SG20 is to get teaching material out the door when features are added to either the C++ International Standard or any C++ Technical Specifications. The exact specifics of how this process works remain to be discussed.
Rationale to be added to the C++ Standard
During the discussion that birthed SG20, it became apparent that some members of the C++ Standards Committee would like to see rationale introduced into the Standard. At present, the rationale on new features is lost between the feature’s design and its inclusion into the Standard.
Bjarne has noted that this has been a problem in C++ for a long time: even before C++98. There were attempts to incorporate rationale, but it seems that a lack of time and motivation whittled these attempts to naught. In his opinion, The Design and Evolution of C++ (D&E) and the ACM History of Programming Languages (HOPL) papers address some of the lacking rationale. You can find more in the the C++ papaers for HOPL II and HOPL III.
JC has praised the rationale found in C89, and agrees that both D&E and HOPL are good movements to preserve some of the rationale for design decisions in C++. I’m also in agreement on D&E; I haven’t read the HOPL papers yet (but I trust their opinions).
Finally, Shafik Yaghmour has praised the C99 rationale, saying that it is “an invaluable tool for understanding C99 choice”. Shafik frequently uses this document when he answers questions on StackOverflow.
How often will SG20 meet?
I want to learn or help! How do I join? Do I need to be a member of the C++ Standards Committee?
You don’t need to be a member of the C++ Standards Committee, nor do you ever need to be. In fact, it’s best that we have some input from outside of the committee altogether to keep us true to our mission. If you’re interested in joining, please email either JC van Winkel or me, and we’ll add you to the mailing list.
I expect this process to become automatic at some point, but this is the state of the union at present.
SG20 is still in its infancy; I need stuff now!
Yes, SG20 is still starting out. So much so, that at the time of writing, we haven’t even had our first meeting yet. Below are a list of conference videos that I’ve compiled for teachers to watch (and will update if recommendations come in). There’s well over a day’s worth of videos below, but these aren’t a random assortment of my favourite conference videos. Rather, they are sessions that communicate values about:
- teaching people how to write programs using C++, or
- writing C++ programs using approaches the community agrees produce better code.
Most of the videos listed are not videos on how to facilitate teaching C++, but rather content that every teacher should know, or a demonstration of how a particular topic has been taught well. I have grouped the ‘teaching C++’ videos at the top of the list, and everything else is sorted into various groups.
Some videos should be watched in a particular order: those videos are grouped together and have an ordering to their left. Most videos also have an intended audience for that video. You should still watch all the videos, even if your main student demographic doesn’t fall into the specified level. The intended audience column is designed to give you a bit of a heads up on what level of rigour you ought to expect while watching that video. It’ll then be up to you to adapt that material so that it’s appropriate for your audience.
Please remember that this is a list of videos that I recommend teachers watch, not an exhaustive list of C++ conference and usergroup videos. If you think your talk or your favourite talk should be considered by teachers, please send me an email to discuss.
Strictly on teaching
|1||CppCon 2015||Kate Gregory||Stop Teaching C||Teachers||60 min|
|2||CppCon 2016||Dan Saks||extern c: Talking to C Programmers about C++||Keynote||90 min|
|3||C++ Edinburgh||Christopher Di Bella||Learning C++ isn't Difficult, Teaching is the Trick||Teachers||90 min|
|4||CppCon 2018||Christopher Di Bella||How to Teach C++ and Influence a Generation||Teachers||60 min|
|-||CppCon 2017||Sara Chipps||Building for the Best of Us: Design and Development with Kids in Mind||Everyone||60 mins|
|-||CppCon 2017||Bjarne Stroustrup||Learning and Teaching Modern C++||Keynote||90 min|
Diversity and inclusion
|-||Meeting C++ 2017||Guy Davidson||Diversity and Inclusion||Lightning Talk||15 min|
|-||NDC Oslo 2018||Patricia Aas||Deconstructing Privilege||Everyone||60 min|
The following talks are talks that all programmers should watch as soon as possible. As programming teachers are a subset of programmers, this includes you.
|1||CppCon 2018||Kate Gregory||Simplicity: Not Just For Beginners||Keynote||90 min|
|2||CppCon 2017||Matt Godbolt||What Has My Compiler Done for Me Lately? Unbolting the Compiler's Lid||Keynote||90 min|
|-||CppCon 2018||Bryce Adelstein Lelbach||The C++ Execution Model||Intermediate||60 min|
|-||GoingNative 2013||Sean Parent||C++ Seasoning||-||75 min|
|-||Pacific++ 2018||Titus Winters||C++ Past vs. Future||Keynote||90 min|
|-||CppCon 2018||Jonathan Boccara||105 STL Algorithms in Less Than an Hour||Everyone||60 min|
|-||CppCon 2018||Ben Deane||Easy to Use, Hard to Misuse: Declarative Style in C++||Everyone||60 min|
|-||GoingNative 2013||Stephan T. Lavavej||Don't Help the Compiler||-||75 min|
|-||CppCon 2018||Barbara Geller and Ansel Sermersheim||Undefined Behavior is Not an Error||Everyone||60 min|
|-||CppCon 2016||Chandler Carruth||High Performance Code 201: Hybrid Data Structures||Intermediate||60 min|
|-||CppCon 2016||Jason Turner||Rich Code for Tiny Computers: A Simple Commodore 64 Game in C++17||Keynote||90 min|
|-||Pacific++ 2017||Chandler Carruth||LLVM: A Modern, Open C++ Toolchain||Keynote||90 min|
You might think that videos covering the history of C++ or the history of programming in general aren’t suited for a list on teaching. History is something that teachers need to understand in order to teach effectively: it helps to answer questions or opinions that you might have. Why are things the way they are today? What does this term actually mean? What problems are that feature meant to help solve? What can we learn from the past that will help us write better software in the future? Not all of the knowledge that is imparted by these videos is suitable for students to learn from, but it will help to answer some of the tougher questions that students will eventually ask.
|-||Pacific++ 2018||Sean Parent||Generic Programming||Keynote||90 min|
Good programming habits
|1||CppCon 2014||Bjarne Stroustrup||Make Simple Tasks Simple!||Keynote||90 min|
|2||CppCon 2014||Herb Sutter||Back to the Basics! Essentials of Modern C++ Style||Keynote||90 min|
|1||CppCon 2015||Bjarne Stroustrup||Writing Good C++14||Keynote||90 min|
|2||CppCon 2015||Herb Sutter||Writing Good C++14... By Default||Keynote||90 min|
|3||CppCon 2017||Kate Gregory||10 Core Guidelines You Need to Start Using Now||Everyone||60 min|
|-||CppCon 2015||Eric Niebler||Ranges for the Standard Library||Keynote||90 min|
|-||CppCon 2018||Jason Turner||Applied Best Practices||Everyone||60 min|
|-||CppCon 2017||Titus Winters||C++ as a "Live at Head" Language||Keynote||90 min|
|-||CppCon 2017||Titus Winters and Hyrum Wright||All Your Tests are Terrible: Tales from the Trenches||Everyone||60 min|
|Types, objects, values, and Regular types|
|1||CppCon 2018||Titus Winters||Modern C++ Design (part 1 of 2)||Intermediate||60 min|
|2||CppCon 2018||Titus Winters||Modern C++ Design (part 2 of 2)||Intermediate||60 min|
|3||CppCon 2018||Victor Ciura||Regular Types and Why Do I Care?||Everyone||60 min|
|-||CppCon 2018||Nicole Mazzuca||Value Semantics: Fast, Safe, and Correct by Default||Everyone||20 min|
|-||CppCon 2018||Sy Brand||How to Write Well-Behaved Value Wrappers||Intermediate||60 min|
|1||CppCon 2017||Bryce Adelstein Lelbach||C++17 Features (part 1 of 2)||Everyone||60 min|
|2||CppCon 2017||Bryce Adelstein Lelbach||C++17 Features (part 2 of 2)||Everyone||60 min|
|-||CppCon 2017||Jason Turner||Practical C++17||Everyone||60 min|
|Parallel and Heterogeneous Programming|
|1||CppCon 2016||Bryce Adelstein Lelbach||The C++17 Parallel Algorithms Library and Beyond||Everyone||60 min|
|2||CppCon 2017||Michael Wong and Gordon Brown||Parallel STL for CPU and GPU -- The Future of Heterogeneous/Distributed C++||Everyone||60 min|
|1||CppCon 2016||Gordon Brown, Ruyman Reyes, and Michael Wong||Towards Heterogeneous Programming in C++||Everyone||60 min|
|2||CppCon 2018||Gordon Brown||A Modern C++ Programming Model for GPUs using Khronos SYCL||Everyone||60 min|
|-||CppCon 2018||Andrew Sutton||Concepts in 60: Everything you need to know and nothing you don't||Everyone||60 min|
|-||CppCon 2018||Anastasia Kazakova||Debug C++ Without Running||Intermediate||60 min|
|-||CppCon 2018||Phil Nash||Modern C++ Testing with Catch2||Everyone||60 min|
|-||CppCon 2018||Anny Gakhokidze||Workflow hacks for developers||Lightning Talk||5 min|
|Microsoft Visual Studio and VS Code|
|1||CppCon 2017||Rong Lu||C++ Development with Visual Studio Code||Everyone||60 min|
|2||CppCon 2018||Rong Lu||What's new in Visual Studio Code for C++ development||Everyone||30 min|
|-||CppCon 2017||Steve Carroll and Daniel Moth||Latest and Greatest in Visual Studio for C++ developers||-||60 min|
|-||CppCon 2015||Greg Law||Give me 15 minutes and I'll change your view of GDB||Lightning Talk||15 min|
|-||CppCon 2016||Greg Law||GDB - A Lot More Than You Knew||Everyone||60 min|
|-||CppCon 2018||Sy Brand||How C++ Debuggers Work||Everyone||60 min|
|-||Pacific++ 2018||James McNellis||Time Travel Debugging||Everyone||90 min|
|1||C++ Edinburgh||Morris Hafner||Building C++||Everyone||60 min|
|2||C++Now 2017||Daniel Pfeifer||Effective CMake||-||90 min|
|3||Meeting C++ 2017||Mathieu Ropert||Modern CMake for modular design||-||60 min|
I’ve often seen people claiming that C++ is this programming language that you only use if you’re after high performance, or are wanting to “squeeze every last cycle out of the CPU” as one person put it. This isn’t true: a lot of programmers use C++ for its lightweight abstraction model and its ability to let us expressively write code.
The only time a C++ programmer cares about performance or efficiency is when we benchmark the code that we want to claim is ‘efficient’.
|1||CppCon 2015||Bryce Adelstein Lelbach||Benchmarking C++ Code||-||60 min|
|2||CppCon 2015||Chandler Carruth||Tuning C++: Benchmarks, and CPUs, and Compilers! Oh My!||Keynote||90 min|
|-||CppCon 2017||Frederic Tingaud||quick-bench.com||Lightning Talk||5 min|
|-||CppCon 2018||Frederic Tingaud||A Little Order: Delving into the STL sorting algorithms||Everyone||30 min|
SG20 meets, writes papers, and advises. In the meantime, I plan to blog about some books (maybe book reviews) at some point. Stay tuned.
Comments and feedback
I haven’t yet set up Disqus for this site. If you’d like to discuss what you’ve read here, please head to this GitHub issue. I’m always open to feedback!
If you’d like to find out when I blog next, please use my RSS feed.
Thanks to JC van Winkel, Sy Brand, Kate Gregory, Nicole Mazzuca, Matt Stark, Bjarne Stroustrup, Titus Winters, Michael Wong, and Shafik Yaghmour for reviewing.