A couple of years ago I was looking for new ways to improve myself. I had done several trainings on C++, C#, software processes, communication, leadership, and so on, but I was not really finding what I felt I needed. This is of course very subjective: the courses were good and I learned things, but I was not really satisfied with either the pace or the result.
Then, at some point in 2016, I found CppCast, a weekly podcast with news on C++ topics. Things started rolling from there; a few months later I was a guest on CppCast myself. I learned about CppCon, a C++ conference (back then held in Bellevue), and convinced my employer to sponsor my travel, entrance fee and stay.
Seattle is a 10-hour flight from the Netherlands, but well worth it! I was there for 10 days, including a pre-conference course by Stephen Dewhurst. I still feel those 10 days were a turning point for me. I met so many great people, and I was in awe that so many teachers were gathered in one place, easy to approach and talk to. And there were also many people just like me, all searching for more knowledge.
After my first conference I was hooked. I learned how the ISO C++ committee works, met members of SG14 (the study group focused on low latency), met Odin Holmes and learned about the emBO++ conference. In the months after, I visited more conferences and local talks, and retrospectively listened to all episodes of CppCast (well over 100 by then, approaching 200 now). I also learned about other C++ resources, communities and peer groups.
Looking back, once I found ‘my way’, the community I was looking for had been there all along; I just did not know where to look. Below I list resources that I found helpful, starting with the best starting points, followed by what I hope is a useful set of links.
Getting started
So where to start? Say you want to learn more about C++, and let’s assume for the moment that you want to nerd out for the evening (so you stay at home rather than going out into the world and talking to people; that will be stage 2 🙂
Good starting points:
- join Twitter
- find #include <C++>
- join the #include Discord server
Join Twitter, you may ask? Isn’t that a little 2015? It may seem that way at first, but a surprising number of software engineers and teachers are on Twitter! I can really recommend it, and if you encounter content you don’t appreciate, just mute some accounts to keep your timeline interesting and on topic. Start by following @c_plus_plus and me (@janwilmans), of course 🙂 To get the most out of Twitter, it helps to follow more people: just click on @c_plus_plus, see who follows it, and go from there.
The #include <C++> community is very welcoming to everybody. Seriously, their goal is to be inclusive in all respects, and on their Discord server you will find knowledgeable people who can point you to new resources or answer questions directly. In their own words:
IncludeCpp is a global, inclusive, and diverse community for developers interested in C++. Join our Discord.
- Follow Jason Turner on YouTube: https://youtube.com/c/lefticus1
- Check out his best practices on GitHub: https://github.com/cpp-best-practices/cppbestpractices
- If you are looking for a course, take a look at Kate Gregory’s material on Pluralsight: https://www.pluralsight.com/courses/cplusplus-fundamentals-c17
Watch talks from conferences such as CppCon, C++Now or Meeting C++
The links in this article are a rather arbitrary set. There is no particular order or purpose to them, other than to show you that the information exists. It really is out there: search on Google, search on YouTube, and ask around on Twitter about specific topics. Below I list a few that I particularly liked or found useful in my daily job.
Recommended talks
- CppCon 2015: Joshua Gerrard “The dangers of C-style casts” is a nice 5-minute talk to get started with.
- CppCon 2015: T. Winters & H. Wright “All Your Tests are Terrible…”
- ITT 2016: Kevlin Henney “Seven Ineffective Coding Habits of Many Programmers”
- CppCon 2016: Howard Hinnant “A <chrono> Tutorial” (it’s about time)
C++ resources
- https://abseil.io/tips/
- http://ericniebler.com/
- Fluent C++, Jonathan Boccara’s blog
- https://www.youtube.com/c/Cppchat
- http://cppcast.com/
- Jason Turner’s C++ Weekly
More general resources
- Kevlin Henney is a great speaker on many topics; check him out, also on YouTube.
Tips for tweeting and posting on forums
- Ask questions! And when you do, explain what you have already done to explore the problem and why it did not get you to the desired answer or result. This gives context and avoids answers like ‘just google it’.
- Use common sense and be nice. If you see a question you can answer, why not chip in? You may sometimes get it wrong, but that is OK; you will learn from that too!
Stage 2: meanwhile, in real life…
- Go to a conference! (See the list of conferences below.) Conferences are the most immersive way to learn a lot in a short time.
- If a conference seems too expensive, remember that volunteers and students often get special discounts, and some conferences even offer free access!
- If you are employed, remind your boss that a conference is no more expensive than a regular course or training, and much more immersive and interactive. CppCon alone produces over 100 recorded talks every year:
Other things to do
- Read the manual: cppreference.com
- Watch the conference videos! There are many, many hours of premium content available online, free of charge.
- Read books (really!). I recommend, in order:
- Good references:
These last two are not good places to start, but they are excellent references if you want to dive into the full details.
I got feedback from some of the great folks on the orange site that just reading books is not going to make you a good software engineer. They also asked: “All that stuff about variadic templates, metaprogramming, memory barriers and the specifics of memory layout: do you really need to know all that? Isn’t it too obscure and not used on a daily basis?”
There is absolutely truth in this. First of all: practice, practice, practice. Programming, like so many things, is a skill that is really honed by doing it a lot. Still, the books mentioned are great. “A Tour of C++” (make sure to get the second edition, which was just released) is only 256 (yes!) pages. I encourage you to read a few chapters, and as soon as you find something new, try it! Open up your favourite editor and try it out. And by all means skip chapters you find difficult or uninteresting; read through the books to get a sense of the whole, and return to the harder parts later.
Also worth mentioning: The 7 Habits of Highly Effective People is not about C++ at all; it’s about self-management, but it changed my life. Of course there are many other good books; these are just the ones I read that really stuck with me.
- Join communities:
- Stack Overflow is an excellent place for discussion and asking questions.
- Join cpplang on Slack.
List of conferences
- https://cppcon.org/ (student discounts)
- http://embo.io/
- http://cppnow.org/
- https://cpponsea.uk/
- https://meetingcpp.com/
- https://codedive.pl/ (free!)
Meet Dutch C++ people at local groups
Good talks on slightly more advanced topics
- CppCon 2017: Ben Deane & Jason Turner “constexpr ALL the Things!”
- CppCon 2016: Ben Deane “Using Types Effectively”
- CppCon 2018: Robert Ramey “Safe Numerics”
Funny videos about computer complexities
Take these with a grain of salt: yes, there is truth to them, but you will probably never have to solve these problems yourself.
Pingbacks
- https://www.kylegalbraith.com/learn-by-doing/volume/36/how-do-you-feel-about-cplusplus.html
- https://news.ycombinator.com/item?id=18814697
Note from the author
This post got an unusual amount of attention. I would like to emphasize that it is a work in progress, and I may update it as I learn more.
Leave a Reply