After 50 years of teaching, I am convinced that the conventional method of introducing computing to all engineering students at most engineering schools is wrong, and that goes double for computer science and computer engineering majors. Teaching via a high level language (and worse yet an object-oriented course in JAVA) is a mistake and is almost guaranteed to ensure that the student will come away with little more than a superficial awareness of programming and practically no awareness of what the computer is doing. Two things I would like to do today: First, discuss why understanding computers is a core competency for engineering students of 2015 as much as physics and math are. Second, describe my approach, which I call “motivated bottom up,” and explain why I think it makes sense, how it affects the rest of the curriculum, and my experiences with it. I insist it is the correct introduction to computing to prepare students for doing any of the following three things in the future: (1) design a system that includes an embedded controller, whether that system be the gun director of a naval vessel, the cockpit controller of an airplane, or an automobile, (2) program a computer to solve some meaningful problem, or (3) design a computer system, either hardware or software or both for others to use.
The problem with the JAVA approach (or if you prefer, of the FORTRAN approach in the old days) is that students have no understanding of how a computer works and so they are forever memorizing patterns and hope that they can apply those patterns to the application at hand. Unfortunately, memorizing is not learning and the results have been as expected. I introduced the motivated bottom-up approach to the freshman class at Michigan in 1995, and have continually taught and refined it ever since. I start with the switch level behavior of a transistor and build from there. From transistors to gates to muxes, decoders, gated latches, finite state machines, memory, the LC-3 computer, machine language programming, assembly languge programming, and finally C programming. Students continue to build on what they already know, continually raising the level of abstraction. I have taught the course 13 times over the last 20 years to freshmen at Michigan and Texas, and an accelerated version of the course at USTC in Hefei and Zhejiang University in Hangzhou at the invitation of the Chinese.