CS Education

July 2, 2006

I only recently ran across this rant on poor CS education. While getting my PhD, I had a side job teaching IT drones how to program. It has been enormously helpful to me to learn what IT departments actually do and how IT workers actually work. I think the difference between IT and CS is analogous to the difference between auto mechanics and automotive engineers. A good mechanic knows enough about how cars work to diagnose and repair almost any problem. However, a mechanic doesn’t have a deep understand of the underlying technology. They see a car as a collection of black-box parts. Their job is to locate and replace the failed parts. An engineer, on the other hand, has a much deeper understanding of the underlying technology. Engineers invent hybrid engines, aerodynamic shapes, airbags, anti-lock brakes, etc. They can do this because they understand how those “black-box” parts actually work.

Although I have a doctorate in CS, I never bothered to learn how to write HTML or Javascript. I’ve never setup a database. I hate and avoid writing UI code. Basically, I can’t do most of the work performed by IT departments. On the other hand, I know that Javascript is a prototype OO language; therefore, one could implement those Ajax widgets using the Morphic style invented for Self and currently used by Squeak. I know that SQL is sorta’ like a functional language; therefore, it can be written without side-effects and easily distributed across multiple DBs providing a scalable data environment (much like MapReduce). I know that UIs tend to overload users with information; therefore, simple AI techniques could radically simplify UIs. I understand the technology at a deeper level than someone who merely uses technology to get something done.

Companies need vastly more people with IT backgrounds than CS training. CS people like me, however, are developing technologies to automate large swaths of IT work. IT workers are literally drones who follow scripts (complex, but still scripts) to get work done. The sad thing, which I see in my students, is that they can’t even understand how simple and rote most of their work truly is. In fact, their vision is so impoverished by their poor education that they can’t grasp even simple CS concepts that would make their jobs easier and their software better. It’s like missionaries explaining to primitive tribes how airplanes are superior to wagons. They can’t even imagine the concept, so they just write it off as another wacky idea. I believe this is why there are so many rants against that article, and so many of them fail to understand Spolsky’s point.

To summarize: IT vs. CS are two distinctly different career paths, like mechanics vs. engineers. CS departments should teach CS or change their department to IT, but they shouldn’t fool their students into believing that computer science is simply about setting up web pages and databases. They are doing them a disservice and confusing potential employers.


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: