Reflections on Embedded Programming

A few months ago, I had a pleasant lunch in Baltimore with two young entrepreneurs who had recently graduated from the Computer Science department at Johns Hopkins University and started a rapidly growing consulting company. Their company specializes in writing web-centric database software using a language known as Ruby on Rails (also referred to as Ruby).

Article reference: http://www.eepw.com.cn/article/249851.htm

During our meal, we discussed various work-related topics, and one of the young men made a memorable comment: “Writing programs in C is for real men!” This phrase was coined during a classification of available programming languages among his classmates; even he, being quite talented, admitted that he did not meet the criteria of being a “real man”. It seems this statement reflects not only the high difficulty of C but also indicates that for younger design engineers, C is indeed challenging to master.

For modern computer science students, learning C is akin to taking a course taught in Latin; however, C is not an outdated design language and maintains a dominant position in the burgeoning field of embedded software development. Below is Figure 1, a survey conducted by the U.S. version of EETimes’ sub-site Embedded Systems Design over the past thirteen years regarding the design languages used in embedded software.

Reflections on Embedded Programming

Figure 1

From Figure 1, it can be seen that C was the most used language for embedded software development between 1997 and 2009; in the past five years, C and C++ have divided most of the territory that was previously dominated by assembly language. Although the growth rate of the higher-level C++ has not met expectations, it still maintains about a 27% market share in embedded software design. Overall, the usage of C++ accelerated in the late 1990s, peaked in 2001, then slightly declined and has since stabilized.

Regardless, embedded software designers will not abandon C in the short term for many reasons: first, C language compilers support most 8-bit, 16-bit, and 32-bit CPUs; second, C has characteristics of both high-level and low-level languages at the processor and driver levels.

Of course, if only a small and gradually decreasing group of programmers supports C, it will struggle to continue as an important design language; however, since C remains so significant, it also means that embedded software designers will not diminish. Currently, 98% of new CPUs released each year are embedded, and the long-term development of these new CPUs is also very optimistic. Figure 2 shows the relationship between the NASDAQ index and the changes in new CPU shipments.

Reflections on Embedded Programming

Figure 2

Education Gap in Embedded Software Design

However, while the importance of C is increasing globally, fewer and fewer students are willing to learn how to use this design language in schools; this reflects the increasingly serious “education gap” issue in the field of embedded system design. U.S. higher education institutions have failed to provide practical skills education essential for embedded software design, and relevant development skills can only be learned on the job.

Reflections on Embedded Programming

Figure 3

From Figure 3, it can be seen that only a small portion of courses in electronic engineering-related departments are related to embedded software development; the courses offered by computer science departments related to embedded software development are only slightly more. Many U.S. universities now offer additional computer engineering credits, but most still come from existing electronic engineering and computer science courses and professors, with not much new content related to embedded software development. Furthermore, on-the-job training rarely offers embedded software development courses.

If the evidence I have presented regarding the continued importance of C in the foreseeable future, especially in the field of embedded software design, is true, then we have a serious problem—because while today’s young programmers are quite intelligent, they may not know how to write programs in C or even want to learn.

Someone has to write the increasingly in-demand embedded software—new generations of design languages may help, but they cannot support all those CPU architectures that have been in use for decades and will continue to be used for decades to come; since this trend is unavoidable, our community needs to cultivate a new generation of C programmers. But how do we do that? If the situation continues to develop, what will be the consequences?

Leave a Comment