I’ve been writing Peter Pontificates since 1996, when we made The NT Insider available (for free!) to anybody who was interested in the field of Windows System Software. Some of my Pontifications are intended to be funny – most of these weren’t. Some attempt to predict the future – most of these work out wrong. A fair number comment on the state of the industry. When you look back on them years later, a lot of these Pontifications show the swings of the pendulum over time: Microsoft loves driver developers, Microsoft ignores driver developers, Microsoft sort of loves driver developers, Microsoft loves driver developers again.
What’s really weird is that some situations in which our industry finds itself and on which I’ve pontificated over the years have not changed a bit. Back in 2002, I bemoaned the state of Computer Science education in the US. 2002. 14 years ago. George W. Bush was president of the United States (and I Pontificated at the time that it could never, ever, get worse… look who’s running now!). Gerhard Schröder was German Chancellor. You could take a plane without having your lower intestinal tract inspected. Popular music was just starting to go downhill. Windows XP had shipped (but not the 64-bit version), and WS03 hadn’t shipped yet.
It’s against this backdrop that I wrote about how CS education – at least here in the States – was in dire need of fixing. I didn’t think it could get worse. But, guess what? It has. Not only has it gotten worse, it’s gotten much, much, worse. Recent CS grads now rarely even learn C. It’s ridiculous. We see the evidence of this, every single day, in the posts on NTDEV. People write in with questions that demonstrate beyond a reasonable doubt that they do not know C, do not understand devices, and do not have any clue whatsoever about what an operating system is, does, or why you would want one.
Here, with modification, is exactly what I wrote in 2002:
I am totally depressed and disgusted by the state of computer science education here in the States. Once upon a time, it was impossible to graduate with a degree in computer science without knowing something about operating systems. In most “good” schools, you were required to take a minimum of two operating system classes, a compiler theory class, and a variety of languages including at least one assembler language.
These requirements ensured that new CS graduates were at least familiar with the fundamental principles of computer science down to the hardware level. You simply couldn’t escape learning the basics of memory management, interrupts, ports, and registers. And every CS major had to be exposed to the principals of recursion, concurrency, and multi-threading. Learning about these topics provided you the basic grounding necessary to be a competent software engineer, regardless of the type of coding you eventually decided to pursue in your professional career.
Of course, even in those days not everybody was up to the challenge. If you wanted to work in the computer biz but basically not learn anything about computers, you could choose to major in something like “information technology” instead of computer science. Within this discipline you could learn really important things like how to write command procedures, execute SQL queries, and maybe even do backups. Hey, engineering isn’t for everybody, right? And somebody’s got to run those backups. At least nobody pretended these people were competent engineers.
What has me so seriously nauseated is that these days you can graduate from a reasonably well-respected university in the States and never learn an assembly language. Even worse, in many schools you can graduate with a CS degree without ever having taken an operating system theory class. Really. I am not kidding.
I encounter recent CS grads all the time that have absolutely no idea – I mean none, zero, zip, nada – about how a virtual address is translated to a physical address. It might as well be by magic. Be clear about what I’m saying here: I’m not saying they don’t know how virtual memory works in detail on some specific processor. I’m saying they don’t understand the concept of virtual memory at all. You say “page fault” and they look back at you with a blank stare, as if you were reciting one of the Vedas. As for knowing the differences between running in kernel mode and user mode… forget about it. Interrupts? Ha! Memory mapped I/O? No way. Port space, device registers? No clue.
What’s even scarier (like it could get scarier) is that these folks are equally ignorant of important fundamental concepts that can apply in user mode as well as in kernel mode, such as concurrency and multi-threading. “Multithreading…. That’s something taken care of by the run-time library, isn’t it?” Well, yes it is indeed! Here’s your diploma. Please proceed directly to writing code in Java or TCL or something. When writing code in C#, please select the “threading model” of your choice from the list of radio buttons shown. Just whatever you do, stay way the f**k away from my kernel, OK?
I don’t blame students for this mess. Hey, they don’t know they’re stupid. Students rely on the CS department to tell them what they need to study. And when universities are graduating kids who don’t know that the words “register” and “port” have meanings other than those associated with food stamps and boats (respectively) then the schools are failing both their students and the industry. And up in Redmond, they actually wonder why so many drivers crash…
Is this problem peculiar to the States? I’m not sure, but there’s evidence to suspect the situation is not nearly as hopeless everywhere. Have you noticed the increasing number of non-US trained engineers in the system software business? When was the last time you were at a driver writer’s conference that didn’t include a heaping helping of Asian and/or Eastern European engineers? Ever wonder why? I’d say it’s probably because these people actually learned something beyond the definition of “constructor” and “destructor” while in university. Talk to them sometime. Ask them what they learned in school. I bet before they could graduate they had to learn the difference between a North Bus and a bus heading north.
Before you go all “America First” on me, decide to put me in jail without the right to counsel, and accuse me of being an Al Qaeda sympathizer, please understand that I’m not saying that there are not some very good CS programs taught at some very good universities here in the United States. Several months ago on a plane, I actually sat next to a kid who was completing his junior year at CMU and actually knew what a spin lock was. Even more salutary was the fact that he knew why he’d want to use one. So, I suspect all is not lost. However, also note that this kid was sitting in first class. I wonder if this is significant.
We, here in the industry, have got to do something to try and stop the stupidizing of CS curricula in the States. That means you should do something about this, oh gentle and ever-lazy reader. If you’re on an alumni committee, ask what’s being taught in the CS department. Make your views known. If you teach at a University (even part-time), lobby to teach a real operating systems course to undergraduates. Push the department chair (who probably came up during the time when operating systems were still important and already harbors a closet resentment for the fact that assembler language isn’t taught to freshmen) to talk to folks in the industry about our needs and revisit the graduation requirements.
If you’re a recent CS grad, write to your former professors and tell them how well your education prepared you for the world of writing systems software. Explain to them that if they taught you the first thing about the fundamentals of computer science, you wouldn’t have been so badly disadvantaged compared to your non-US trained colleagues. Copy and mail them this article. Heck, copy and send them this entire issue of The NT Insider just to see if they can understand anything more than this article and the letters section.
For the good of our industry, the current trend has to change. Either that or the rest of us will have to choose between getting lobotomized (so that we can make effective use of the Driver Wizard that will ship as part of Microsoft Office) and moving to Taiwan (where they’ll still be writing drivers that talk to hardware). Me? I’ve already taken two semesters of Chinese, thank you.
Peter Pontificates is a regular column by OSR Consulting Partner, Peter Viscarola. Peter doesn’t care if you agree or disagree with him, but there’s always the chance that your comments or rebuttal could find its way into a future issue. Send your own comments, rants or distortions of fact to: PeterPont@osr.com.