My name is Jon Kalb. I’m best known for helping with and/or presenting at C++ events like C++Now, CppCon, ACCU, and CppNorth, but since 2015, my “day job” has been C++ training. I work with teams to get the most out of C++.
I’ve personally conducted C++ training for hundreds of experienced professional software engineers to be more comfortable and productive with, what may be the single most powerful software engineering tool in existence—their modern C++ compiler.
Starting in 2011, the ISO Standards Committee for C++ has released a full update to C++ every three years. Some of these releases have incorporated more changes than others, but all have provided engineers with new and powerful tools for creating C++ in both the core language and the standard library.
It has been my experience that even software engineers that attend a week-long C++ conference every year, which is recommended, are not able to keep up with the fast-moving industry that is state-of-the-art C++ development. Focused C++ training and continuing education is required to keep up-to-date for any professional.
I’d like to address some of the most common myths or traps that I’ve seen managers fall into when thinking about C++ training.
C++ training myths
My team already knows C++/is made up of great engineers. Although C++ training will no doubt make your team better engineers, it isn’t about “fixing” bad engineers. It is about modernizing their language skills. The longer your engineers have been out of college, the more experienced and better they are as engineers, but the more out-of-date is their knowledge and use of C++. Their experience is teaching them to be better and better with an out-dated version of their primary tool. Imagine what they can do with a more modern understanding of what is possible! An investment in language skill learning will pay off more with your most seasoned team members.
My team is made up of experienced C++ programmers, they only need to hear about expert-level features. This is the biggest misconception I see in C++ training. I hear the questions that team members ask. It is surprising, but true, that talented, knowledgable engineers can create working code without a thorough understanding of how language/library features work. This results in not exploiting features to their fullest extent, leading to compromised designs and poorer maintainability, and, sometimes, in subtle bugs that are hard to find and harder to fix because they are based on misconceptions about how things are supposed to work. I’ve never found a review of language basics to be a waste of class time.
We don’t need to keep up with the new stuff. We are doing just fine with what we have now. As challenging as it is to keep up with our fast-moving industry, it is even harder to climb out of the technical debt that accumulates if you don’t try. Even if your team doesn’t move forward, state-of-the-art tools and techniques will. It will become increasing difficult to find support for older approaches as time goes by. It will be harder to leverage third-party libraries and tools over time as more of these will target more modern approaches. It will also become increasingly difficult to recruit, as engineers will look for teams that are staying up-to-date and have regular C++ training.
A day or two of training/attending a conference is all that is needed to keep up. For some new language features, a quick introduction/overview may be sufficient C++ training, but some best-practices require unlearning long-held habits and some new language features are designed to enable/support superior, but some-what different, approaches and solutions. These take time to explore and practice. The single biggest error I’ve seen made by both managers and inexperienced instructors is under-estimating the amount of time it takes to cover material adequately.
We’ve a team member that is very knowledgable/articulate so we can do training in-house. The build/buy decision is one faced by engineers all the time. Is creating top-flight, state-of-the-art C++ training material really the best use of you team’s time? For most teams, bringing in an dedicated training professional, with time-tested training material and extensive experience explaining complicated issues and answering technical questions on the fly, is clearly the best approach. It also has the advantage of side-stepping the ego/political issues of having one team member take on the role of team trainer.
What will we get from training? I’m responsible for the bottom line. Most managers quickly realize that the true cost of training is not the instructor’s fee, but it is taking team members off the schedule for the duration of the class. I wish I could promise you that your trainees will be fifty percent more productive after taking the class, but that isn’t going to happen. What is going to happen is that trainees will use C++ more effectively. They will better exploit new language and library features. Some of these features were added for programmer productivity, but others address issues like clarity (what is the value of getting new people up to speed faster?), performance (what is the value of code that is faster/uses less memory), portability (what is the value of supporting more platforms easily?), or reliability (what is the value of fewer show-stopping bugs discovered at the last minute?) The code your team will produce after C++ training will be more valuable and they’ll do it more quickly, easily, and confidently.
But there is another benefit of training that I’d like to share. Teams report that training has often kicked off a long, on-going discussion about code-quality that has resulted in improved code, coding guidelines, code-reviews, and team morale.
Making a regular practice of team member training results in better retention and recruiting, which go a long way to justifying the cost of training to upper management.
Let’s get started…
Whether you have a small team that can’t justify the the cost of a dedicated class or a large company that wants to incorporate training as part of a regular on-boarding process, I can help. In addition to my personal experience, I’ve extensively interviewed the top C++ trainers about their techniques and experiences. In my capacity running CppCon Academy, I have hired more C++ instructors than anyone else in the world. I can find a solution that works for you.