Jon Kalb speaks about CppCon, C++17 standard and C++ community

Here comes another interview in our blog. This time we speak with Jon Kalb, CppCon Chair and C++ instructor.

Russel WinderJon Kalb is a freelance C++ instructor and chairs CppCon, C++Now, and the Boost Steering Committee. He has been programming in C++ for over 25 years and has written C++ for Amazon, Apple, Dow Chemical, Intuit, Lotus, Microsoft, Netscape, Sun, and Yahoo! Jon has taught C++ at the graduate school at Golden Gate University in San Francisco and is a Microsoft MVP.

Twitter: @_jonkalb

Jon: Anastasia, thank you for this opportunity to share my point of view and for what you and JetBrains are doing to support the C++ community, particularly, CppCon, C++Now, and CppCast.

Anastasia: How do you feel in general about the C++ community? You meet so many developers at CppCon and C++Now and at each meetup you are participating. What are they mostly interested in?

Jon: Obviously I wouldn’t have invested so much of my career in this community if I didn’t find value here. I’ve found that C++ developers, at least the ones that are interested enough to attend user group meetings, conferences, and the classes that I give, to be concerned about doing things right. By that I mean producing well-engineered code. Code that is clear and therefore understandable and maintainable, modular and therefore reusable, and efficient in time and space. Hacks that “get the job done,” but create maintenance problems down the line are not looked on favorably. These characteristics mean that the code that they are producing will be valuable to their organizations for years to come.

Anastasia: With your strong relationship with the C++ community lasting for so many years, you must be able to outline some major trends where the community is moving in terms of language usage, libraries and tools?

Jon: The kind of developers that speak at conference and attend standards committee meetings are leading edge and are working with cutting-edge language features sometimes even before they are standardized. But the vast majority of development teams are slow, sometimes very slow to adopt languages changes. Library adoption can happen more quickly, but I see some missed opportunities here as well.

I am seeing some improvement. I do think we are seeing that “regular” programmers are now more comfortable with templates and modern solutions. I suspect that most of this is just the result of years of exposure to templates, but some is no doubt that Modern C++ (C++11/14/17) has made template solutions a little easier to create.

Anastasia: Talking about C++17, after the C++ meeting at Jacksonville some developers were disappointed about some features not making their way to the standard, such as Modules, Concepts (and thus Ranges), Coroutines. One even called C++17 a minor update. Do you also feel we’ll get a less significant language update with C++17?

Jon: There is no doubt that it won’t be as significant as many people were expecting. I think there was a lot of over-promising and that can lead to a backlash of disappointment. It was apparent to me last year that most of the features that people were expecting were only at the Technical Specification stage.

For those that aren’t familiar with the process (which is relatively new for C++), the standards committee has the option of releasing a Technical Specification for major features before the feature is accepted in the standard. The point of this is to allow tool makers to implement and users to get experience with the feature before it is frozen into the standard. But this is only useful if the committee gives the TS time to be implemented and used, so that we can learn from it. The model needs to be: release the TS, give it time to be implemented and used in real-world production, and then revise the specification based on this experience before adding it to the standard. If the committee releases a TS one year and then puts it in the standard the next year, to me, it seems to be defeating the purpose.

Many of the features that people have been expecting are only at the TS stage and are not ready for C++17.

But I’m not disappointed. I don’t think the committee has been wasting its time. I’m very happy that committee has decided to make a rock solid C++17 and release several valuable Technical Specifications for the community to use and evaluate.

I think we as users need to change our thinking about the standard, because we need to recognize the value of the Technical Specifications. They are not (yet) part of the official standard, but are valuable tools that we as engineers can use to get work done. The specification may be “beta,” but that doesn’t mean that the code provided by tool vendors can’t be used in production code. Each team needs to evaluation on a case by case basis if a specific TS is appropriate for a specific project, just like we always evaluate the cost of accepting the dependency of a third party library.

I’ve said before (on twitter), I’d rather have a solid feature spending time in a TS then have a premature feature accepted in the standard. I think there are some features in C++11 that would have been better if they’d gone through the TS process.

Anastasia: You do CppCon, a fantastic and famous event in the C++ world, the best one probably (at least from my personal opinion). Assuming someone is going to start a conference, any advice you can give them? Maybe some tips?

Jon: On behalf of the CppCon team, thanks for your kind words. There are now at least three other very strong C++ conferences in the world: ACCU, C++Now, and Meeting C++ and that is not counting the JUCE summit for audio devs, so I don’t know if we need any more competition, but I’ll share how we think about C++Now and CppCon in case that helps anyone thinking about an event.

There is a secret ingredient and a magic ingredient. The secret ingredient, of course, is unpaid labor. If we had to pay the speakers what their time is worth for their presentations, let along for their preparation time, we couldn’t afford to do either CppCon or C++Now. The fact is that some of the best minds in our community are anxious to share what they’ve learned. I think there is a feeling that C++ is difficult and we are all in this together to figure out and share best practices. Some of these speakers are freelancers like me who are doing this to promote their businesses, but most of the speakers we have are working software engineers whose companies are supporting their efforts to promote best practices and push the envelope of C++ development.

The magic ingredient is the attendees. Many of them and most of their bosses, think they are coming for the sessions, but regular attendees know that you really come to talk to the other attendees. What I say about C++Now is that the program is the second best thing about the conference and if you want to know what the best thing is, talk to an attendee. This is also true for CppCon.

We put a lot of time and effort into freely distributing recordings of (almost) all our sessions. For CppCon we pay to have the sessions professionally recorded, edited, and posted to YouTube and Channel9. If these recordings represented the real value of the conference, we’d be putting ourselves out of business by distributing them so freely. But you don’t get the real value out of the conference by staying home watching the videos. The real value of the conference comes from the conversations that you have with your fellow attendees.

By fellow attendees I do include the speakers. One well-known speaker told me that before CppCon they attended two kinds of conferences–ones where they presented, but weren’t interested in attending any other sessions and ones where they attended sessions, but didn’t present. At CppCon, the presenters are as excited to be attending sessions and be part of the discussion as anyone else.

One tip that I might share with anyone wanting to start a conference, neither C++Now nor CppCon have a “green” room or speakers’ lounge or anywhere that speakers can “hide” from attendees. I heard from one attendee that they were delighted to see Bjarne in line to register just like everyone else. Our conferences are very democratic. My badge as a conference chair looks just like Bjarne’s badge as keynote speaker and just like the badges worn by all the registered attendees, volunteers, and exhibitors. I think this creates an environment where the speakers are approachable and discussion is encouraged. The speaker to attendee ratio is much better at C++Now because it is a smaller conference, but CppCon speakers are available, approachable, and interested in engaging with attendees.

Anastasia: CppCon 2015 was big and really interesting with great keynotes by Bjarne Stroustrup and Sean Parent, fantastic talks (my personal favourite was Eric Niebler doing magic with a calendar and ranges), many one-on-one conversations and some spontaneous off the agenda events. How was it from the organizational perspective? Any interesting story behind the scene you can share here?

Jon: I have one story to share, but mostly, you don’t want to know what happens behind the scenes. I always ask attendees how their conference is going and I’m very happy whenever I’m told that people are having a great time and haven’t seen any problems. Because I hear about every problem. If a badge is misspelled, if a session starts late due to a technical glitch, if something goes wrong at break time, I hear about it. I very much hope that attendees see a smoothly running conference, but what I see are several (small) problems that happen every day of the conference. Even after the fact when everything has been workout, I still hear about every issue. That is how it should be because that is how we learn how to avoid these problems in the future.

But I’ll share one story from last year. On the way to the conference one morning, Lloyd Moore, one of the leaders of the Northwest C++ Users Group and a CppCon volunteer, spotted a kitten on the freeway. He stopped his car—on the freeway in Seattle rush hour traffic—to rescue this kitten. So for awhile we had a kitten at registration, being looked after by the volunteer team. The kitten, given the names CppCat or Schrödinger, depending on who you asked, was adopted by the one of the employees at the Meydenbauer conference center. Here is the complete story with photos including one of Lloyd holding the kitten whose life he saved:

Anastasia: And you know I have to ask. CLion. What do you think of it? Have you tried it? Maybe even using it on a daily basis? If so, any feedback you’d like to share?

Jon: I use CLion as my default editor for C++ code, so I do use it regularly. I feel like it has a lot of features that I a haven’t tapped into yet. Unfortunately, I don’t have much feedback to give you because, since I quit my “day job” working on the Amazon search engine to pursue my dream job of onsite training (and running conferences), I’m not working on a large code base. I create very small applications to test out features or techniques or to use as in-class exercises as part of a course I’m working on. My use of CLion is just very different from your typical C++ developer that would stress it with thousands of files and millions of lines of code.

Anastasia: Last year JetBrains actually started several IDEs for C++: CLion and ReSharper C++. Bjarne Stroustrup in his keynotes talking about code analysis and C++ Core Guidelines at CppCon 2015 stated that “we need tools”. In 2015 also package managers for C++ started evolving widely with Biicode and Conan. And my question is do you think it’s really the era of tools for C++? Taking into account that the language has celebrated its 33 year birthday?

Jon: Don’t forget the build2 build system by Boris Kolpackov.

I hope this is an era of tools for C++, because there are so many opportunities. Not only for a cross-platform IDE that really understands C++, like CLion, and analysis tools like we have seen based on the Clang sanitizers and the Core Guidelines, but also a defacto standard package manager. Of these I think the package manager is the most daunting. It seems so easy because we see that other languages (like Perl and Python) seem to have pulled it off, but it is a really difficult problem because C++ is used in so many ways on so many different platforms/tool chains.

I think we are at the dawn of cloud-based build systems where developers will see the results of their changes almost immediately. Not just being told about compile errors even before they save the file, which CLion does today (Anastasia: Actually, CLion now reports not the compile errors, but some more profound inspection cases, like unreachable code, always true/false code, etc., even including full Data Flow Analysis on the codebase), but even being told which tests are broken because of the change. I’m optimistic that we’ll have package management integration so that all I need to do is import a module and its package is downloaded, added to my repository, and the build file (which I almost never see) is updated for the module and its test suite.

Let the tools handle all of that so I can focus on algorithms.

Anastasia: Thanks Jon!

image description

Discover more