This fall, I’ve had the pleasure and privilege of teaching a course on operating system internals at my alma mater, the University of Maryland. In so doing, I’ve come to see that the current university-based system of training engineers to do embedded systems work is severely flawed.
At most colleges and universities, the job of educating engineers is split along hardware/software lines. This educational system has its basis in the separate history and evolution of the two fields. The faculty of an Electrical Engineering department generally educates future hardware designers, while an unrelated group of faculty in a separate Computer Science department educates future programmers. There is rarely any cooperation between the two departments, nor are students in one program encouraged or required to take courses in the other. A few crossover courses, like the operating system class I’m teaching to EE majors and the computer architecture class most CS majors are required to take, are insufficient preparation for the world of work.
The fact is that the largest demand for engineers these days is for those who can think and work on both sides of the hardware/software boundary. (Even the boundary itself has begun to disappear.) This is true nowhere more so than in the embedded systems industry. Companies designing embedded systems need programmers who can port operating systems, write device drivers and board support packages, and help debug prototype hardware. They also need hardware designers who can write software for the systems they create, and, increasingly, the job of developing digital hardware looks like programming. Even if an individual engineer won’t need to both write software and design hardware, he or she will probably be part of an engineering team that does both. And teams need to be able to think collectively and communicate easily about issues that affect both sides of a system’s design and implementation.
It is clear that what is needed at our colleges and universities as we go forward is a proper system for training embedded software professionals. To fulfill the needs of industry, universities need to graduate a large number of software engineers who are capable of understanding hardware and interfacing directly to it, and hardware engineers who can apply valuable software engineering techniques to their digital designs.
Many schools have already merged the two departments into a single EE-CS department, or borrowed faculty and courses from each curriculum to create a hybrid Computer Engineering degree program. But is either approach really working? Without a focus on the actual skill-sets and integrated knowledge required by industry, these new degree programs are too often simply “six-from-column-A and six-from-column-B” quick fixes.
Bringing together two departments full of people who have long segregated themselves is easier said than done. Just imagine the Democratic and Republican parties coming together to agree that a more centrist third party is essential for the future of democracy in this country. Then imagine them trying to somehow jointly fashion that new political party from amongst their own members. That’s not unlike the challenge now facing the administrators of Electrical Engineering and Computer Science departments at colleges and universities everywhere. But it’s about time that challenge is taken up.
NOTE: this article was originally published on 11/01/00.