One of the minor points I discussed in my response to Dr. Bjarne Stroustrup’s memory safety comments was the controversial, apparently deeply upsetting term C/C++. It is controversial and interesting enough that I decided to say a little more about it here.

A little background: Many people, especially outside the C and C++ communities (which, to be clear, don’t always like each other that much) use the term C/C++ to talk about the two programming languages together, as an informal short-hand for “C and C++” or “C or C++.” Within the C/C++ C and C++ communities, it is widely hated.

And now for me to say the thing guaranteed to anger the most possible people: I see both sides of this debate.

On the one hand, the term “C/C++” is especially jarring because C and C++ fans regularly engage in actual controversy (famously including Linus Torvalds, of the C-based Linux kernel, insulting C++ and its programmers). It is frustrating to be a C++ programmer, to have strong opinions on what it means to be a C++ programmer, to think that C programmers are making a misguided decision, that using C over C++ is technologically backwards and regressive, and hear people cavalierly implying that the programming languages are the same. And likewise, of course, for the C programmer who feels similarly about C++.

And continuously, both C and C++ programmers are exposed regularly to people who mix up the programming languages when it is harmful. They see bosses and hiring managers who expect you to transition back and forth between them without any friction, and to enjoy them equally. They see resources that promise to teach you “C/C++ skills,” and know that they won’t teach how to use either the way that that language’s particular community actually prefers. They see people using “C/C++” all the time to talk about the languages in a way that only would make sense if they were much more similar than they, in fact, are – or at the very least, than a die-hard partisan of C or C++ would think they are.

And I do think this is understandable. After all, people don’t tend to lump together other languages like this. Java and C# are probably equally related (if not more related), and no one writes that they’re hiring a “Java/C# programmer.” Why should C and C++ get treated this way?

But, on the other hand, C and C++ are actually extremely closely related programming languages. I was writing something recently comparing Rust features to C and C++ features, specifically Rust enums to the tagged union idiom which is used in … C and C++, in very similar ways. I know all the reasons why as a C programmer and as a C++ programmer, I’m not supposed to write C/C++, and still, I was tired of writing “C and C++” over and over again to describe this particular thing that those languages have in common.

It turns out the real problem isn’t the act of writing “C/C++” – it turns out that just banning a problematic word doesn’t fix the real problem here at all – if it has ever fixed any problems. Some people do need to be told that C and C++ programming are different programming languages, different communities and different skillsets, even though they are still related skillsets and related programming languages. But some people who don’t need to be told that still find themselves needing a shorthand sometimes, and don’t feel the cultural need to be over-accommodating in avoiding it.

Because when two things are similar – and stop me if this is confusing! – there’s some ways in which they’re the same, and some ways in which they’re different. Sometimes, it makes sense to lump them together, and sometimes, it doesn’t. But yelling that people shouldn’t write “C/C++” won’t magically help anyone understand this – especially since those people are almost certainly not listening, and you’re preaching to the choir.

In the case of Dr. Stroustrup, he was using the “faux pas” of the NSA using “C/C++” to avoid having to actually address what they said and defend C++. He brought this up in his criticism of the NSA white paper:

As is far too common, it lumps C and C++ into the single category C/C++, ignoring 30+ years of progress.

I said, among other things, that Dr. Stroustrup was being unnecessarily exclusionary based on buzz-words:

He’s reading too much into the orthography and the NSA’s failure to use insider shibboleths of the programming languages they’re trying to criticize. Outside of the “C” and “C++” communities, “C/C++” is a fairly common way to refer to the two related programming languages.

But also, he was calling them out when they were right. In the specific category that the NSA was talking about, there actually is no difference, as I also mention in my post:

While there might be 30+ years of divergence between C and C++, none of C++’s so-called “progress” involved removing memory-unsafe C features from C++, many of which are still in common use, and many of which still make memory safety in C++ near intractible.

Perhaps we all should spend more time thinking critically than nit-picking word choice. And perhaps I should find something better to do than writing blog posts joining the fray, so that’s all I’ll say on the issue for now.