In Dordt’s EGR 304, Embedded Computer Systems course we use a lot of assembly language since we desire detailed control of the hardware. When a higher level language is useful, we like the C language. Many people who are used to writing in higher level languages question this choice. Why not use Java for example? Indeed, Java is generally the first choice for teaching programming to new students.
Some say that the choice of language is a “religious choice. ” That carries a number of connotations. Sometimes what is meant is that a language embodies some very important concept(s) which will color all your programming in that language. Thus the choice of a programming language is so fundamental as to be like a religious choice. In this perspective the choice for teaching the Java language first is founded on having a high regard for object-oriented, concurrent, and structured programs. Those are the underlying “religious” principles of Java. Once you have chosen Java as the language, you can’t help but write object-oriented, concurrent, and structured code, even if you don’t really know what you are doing! (I’m not claiming that a choice for Java will automatically help you write good object-oriented, concurrent, and structured code.)
When you are programming for an embedded system, object-oriented programming, concurrency, and structure are not everything nor even dominant concerns, thus Java might not be (probably is not) the best choice. Instead detailed control of the hardware and the timing of execution is needed. Thus we use the C language when high-level code is needed.
Recently however two Professors Emeritus who now preside over a company called “AdaCore” have been a few voices calling for giving students a wider introduction to programming in general, including more of the C language too. In a nutshell the argument is based on giving students fundamental understanding of programming methods, rather than relying on the syntax of a particular language to enforce the fundamental methods. A recent article in CrossTalk is a good case in point. Here’s a quotation from the conclusion of this article:
A well-rounded CS curriculum will include an advanced course in programming languages that covers a wide variety of languages, chosen to broaden the understanding of the programming process, rather than to build a résumé in perceived hot languages. . . .
When you step into a plane, you are putting your life in the hands of software which had better be totally reliable. As a computer scientist, you should have some knowledge of how this level of reliability is achieved. In this day and age, the fear of terrorist cyber attacks have given a new urgency to the building of software that is not only bug free, but is also immune from malicious attack. Such high-security software relies even more extensively on formal methodologies, and our students need to be prepared for this new world.