Say it ain’t so!

I just learned that one of my favorite magazines, C/C++ User’s Journal, has ceased publications. CUJ was an institution among C++ programmers, edited by the leading lights of C++ and filled with meaty technical articles. I’ve been a subscriber for a few years, and I keep a stack of issues by my desk, slowly working through them from cover to cover during breaks in my work. I’ll be sad to finally make my way to the end of that stack. I’ve seen few publications, online or off, which had such consistent high standards of material.

In the more excitable sectors of the geek community this event has sparked off the manditory annual speculations about C++’s imminent demise. I always get a chuckle out of these forecasts of doom (or deliverance, depending on your point of view), because they never fail to show up the shocking insularity of developers. Most programmers have no concept of the full scale of the industry they inhabit. Have you ever seen those satirical maps entitiled “A [city]ers View of the World”? The ones where the the city named in the map’s title is bloated to fill half of the map, dwarving nearby states, and the rest of the world is represented as tiny islands on the horizon? That’s the typical developer’s view from within her own market segment.

Pop quiz: what’s the most popular type of microprocessor on the market? Nope, it’s not an Intel Cellery or Indublium or whatever they are calling them these days. By far the top-selling CPUs in the world are the 8-bit and even 4-bit microprocessors which power embedded devices. The embedded software market is huge, but most people don’t even think about it when they think about software. When developers see Java or C# or VB.Net or Python or what-have-you eclipsing older languages, they are looking only at the relatively small consumer shrink-wrap industry, or at “enterprise” software.

Let me give you a dose of perspective. The system I am working on right now has 128 kilobytes of RAM. Not megabytes, kilobytes. It runs at 12.5 Mhz. And it’s performance must be absolutely deterministic or air traffic controllers will not see flight-path deviations in time to warn the pilots. In a system like this there are only a few viable choices of language: assembly, C, C++, and maybe ADA. Java, even the “embedded” subset of it, simply is not an option. Of the above choices, only one language facilitates the use of modern metaprogramming techniques and high-level abstractions while still giving the coder iron-fisted control over every aspect of resource usage, and that language is C++.

Not to mention that C++ is still one of the most saught-after skills when hiring IT workers.

To paraphrase Mark Twain, rumors of C++’s demise are highly exaggerated. Which is as it should be. C++ is a hard language, with a lot of warts and limitations. But for it’s intended purpose – to be “a better C than C” – nothing else comes close.

View All

8 Comments

  1. > In a system like this there are only a few viable choices of language: assembly, C, C++, and maybe ADA.

    I’m surprised you left out Forth. Has it gone out of style? I recall reading that it was once wildly popular in the embedded world.

    1. Forth has a very devoted following, but as far as I know (and I am probably as susceptible to myopia as the next programmer) it has never been “wildy popular”. It has been to embedded development kind of like what Lisp or Smalltalk are to higher-level development: claimed (probably deservedly) to be far superior to the alternatives, but always a little too “wierd” to be widely embraced.

  2. I think anytime a person says “Pop Quiz. . .” it needs to be followed by “. . .Jackass!”

    Pop Quiz Jackass!

  3. I’m sorry to see CUJ go, but then I haven’t read it for the past three or four years. So I’m partially responsible for the demise.

    I have a long history with C++ (and C prior to that). But I don’t find them exciting or desirable anymore. I prefer Perl and Ruby. (Not appropriate for embedded, real-time applications, but good enough for the things I have to do.)

    Eight-bit and four-bit processors may be numerous, but numbers of processors does not make for popularity among developers. How many developers write for four-bit and eight-bit processors? And how many for Windows? One team of ten can write code for a microwave oven (run by a four-bit processor) and the company can ship thousands of microwave ovens, but that’s still only ten developers.

    I suspect that of all developers in the world, a small percentage write code for embedded systems. (A quick check of job listings with “embedded” in the description should confirm that.) I suspect that most developers work on business systems, either in C++ or in COBOL.

    In some ways, C++ is the COBOL of the ’90s. Lots of systems are written in it, and it costs too much to replace.

    And yet I remember articles in CUJ about C++ for embedded systems, and how impractical it was, and how people should stay with C because of memory constraints and performance.

    1. I recently saw someone cite a RAND corporation study which said that 70% of software engineering is embedded work. Which strikes me as a little higher than I expected, but not shockingly so. I’ve been holding off updating this post with that statistic until I can locate the source.

      It has been my experience that very few developers who haven’t worked in the embedded field realize just how extensive it is. There is nothing sexy about embedded work, so it doesn’t get the kind of press that other areas do. But I wouldn’t be at all surprised to find that it is one of the biggest chunks of the industry.

    2. BTW, judging just by my experience in my own neck of the embedded industry, a search for “embedded” in job listings may or may not be a realistic measure of the demand. A Northrop or a Raytheon or a Boeing tends to put out boilerplate ads for developers with “C/C++ experience” etc. They expect the developers they hire to be versatile enough to code on UNIX, Windows, and embedded systems. For example, for the first few years I never did any embedded work, and I certainly wasn’t hired for that specifically. But it was almost certain, given the work we do, that I’d be doing some kind of embedded work eventually. In aerospace, at least, one day you could be coding Java on a PC and the next C/assembly for a proprietery board. It’s all in a day’s work…

  4. wow…that made my non comp geek brain hurt:)

  5. Look, we can’t get COBOL to demise…..I doubt we’ll see C demise anytime soon.

    while(demiseCOBOL == false){

    if(demiseCOBOL == true){
    demiseCOBOL = false;
    }

    }

Comments are closed.