Real men program in C
Figure 3 shows the education gap in a Venn diagram, which is a kind of a tool we mostly did learn in university. Only a little bit of what is studied in electrical engineering curricula is applicable to embedded software development--typically in a lab class requiring assembly programming near the end. And only a little bit more of the applicable stuff is taught in computer science curricula--typically in early classes on computer architecture and now mostly elective courses in C and C++. At least computer science students are taught some of what we must know about software lifecycle management.

Though there has been a positive trend toward the addition of computer engineering degrees at many universities, these tend to be too little too late. From what I have seen these CE programs mostly draw courses and professors from the existing EE and CS departments--adding little new content specific to embedded software development. Though the CE program is aimed squarely at educating chip designers and system software developers (a field that includes more than just embedded software), at least one program I am familiar with gives their freshman the choice between a C and a Java track!
Unfortunately, on-the-job learning is also poorly organized in embedded software. It is possible, even common, to start writing firmware with only an EE degree and to begin by making the mistakes of any novice, to receive little code review if any, and to ship a "glitchy" product, only to be rewarded with a new product to work on. Where is the critical feedback that a bug you created frustrated or even injured a user?
Solutions needed
If you accept from the evidence I've presented here that C shall remain important for the foreseeable future and that embedded software is of ever-increasing importance, then you'll begin to see trouble brewing. Although they are smart and talented computer scientists, my younger friends don't know how to competently program in C. And they don't care to learn.
But someone must write the world's ever-increasing quantity of embedded software. New languages could help, but will never be retrofitted onto all the decades-old CPU architectures we'll continue to use for decades to come. As turnover is inevitable, our field needs to attract a younger generation of C programmers.
What is the solution? What will happen if these trends continue to diverge?
Michael Barr is the author of three books and over 40 articles about embedded systems design, as well as a former editor in chief of Embedded Systems Programming (Embedded Systems Design) magazine. Michael is also a popular speaker at the Embedded Systems Conference and the founder of embedded systems consultancy Netrino. You may reach him at mbarr@netrino.com or read more by him at www.embeddedgurus.net/barr-code.
Endnotes:
1. I'm sure he wasn't trying to be sexist. Real women surely program in C, too!
2. The 7% average is a pretty strong showing for assembly. By comparison, all other languages averaged less than 5% combined during the same period, including Java (2%) and Basic (1%).
3. The use of Java has never been more than a blip in embedded software development, and peaked during the telecom bubble--in the same year as C++.
4. While the numbers for the Nasdaq index are accurate, the numbers of CPUs per year are my interpolations between a small number of data points of varying reliability.


Loading comments... Write a comment