I read this article about computer science education this morning –
Software Engineering and the Cause of the CS Enrollment Crisis
I propose that our current undergraduate computer science programs are designed to produce coders for software engineers.
Yeah. This is so true! I immediately thought of Shelley Powers’ comments about what we should do with computer science curriculum:
Break up the computer science programs, split the participants into specialized fields within other disciplines, and stop spending all our time on talking about Ruby and how cool it is.
(btw, I don’t mind talking about how cool Ruby is.)
So much of programming for a business is finding solutions for real-world problems. And you need to do that cost effectively. There’s a lot of “value engineering” in there, rather than perfection. And for me, I think there’s often way too much emphasis on correctness for correctness sake, in education and in the user group circles.
Here’s another choice quote:
It seems to me that the cause of the student’s disdain for “programming” and for the decline in CS enrollment lies there. As civil engineers need armies of construction workers to build their designs, and as mechanical engineers use armies of factory workers to produce their designs, so do software engineers use armies of programmers or coders, people who are explicitly not software engineers, to produce their designs. Few students go to college to become construction or factory workers. Why should it be surprising, then, that few Western students want to go to college to be the Information Age equivalent workers?
and a final point about creativity:
Computer scientists do not need to write good, clean code. Science is about critical and creative thinking. Have you ever read the actual source code for great programs like Sketchpad, or Eliza, or Smalltalk, or APL 360? The code that I have seen produced by computational scientists and engineers tends to be short, without comments, and is hard to read. In general, code that is about great ideas is not typically neat and clean. Instead, the code for the great programs and for solving scientific problems is brilliant. Coders for software engineers need to write factory-quality software. Brilliant code can be factory-quality. It does not have to be though. Those are independent factors.
Hell yes! I feel like so much of my computer science classes sucked the fun out of computers. The most fun I ever had in class was showing people how to use makefiles in the lab. By which I mean, not fun.
Fun was tracking down the exploits and then the crackers who broke into our servers, getting all the evidence together and talking to the FBI. And after that, learning about ways to monitor the system that wouldn’t be detected by intruders, but would immediately tell us someone just managed to get elevated system privs. That was engaging. I did that work as a junior in college, but a first year CS student. And I learned something I’ll never forget about operating system privileges and system administration (thanks, Steve).
What about the third term of my Intro to CS class? Or my software development class? I was bored. I did the homework as fast as I could to get back to my real job.