Wednesday, March 21, 2007

So Frickin Expensive

A few years ago, I was visiting the University of Washington, the one in Seattle. In particular, I went to visit one Mr. Stuart Reges (the "Reeg" as I like to call him--no, not really, I hardly know the guy). He was an instructor revamping the way intro computer science was being taught at U-Dub, which is a topic near and dear to my heart.

Indeed, as I made the trek to visit him in his office (and drop by a former instructor's office, whose class I hadn't taken in nearly 20 years), I was, alas, somewhat interrupting a meeting with him and Martin Stepp.

He and Marty were in the process of writing a book. You see, Java had become all the rage. Java tends to force object-oriented programming. You can't declare functions outside of a class (you can make it static, I suppose). There are all sorts of roadblocks to prevent you from easily writing "C" in Java.

Not to say you can't work your way around these, but that this kind of procedural programming would just make for icky Java programming.

So many authors took the OO plunge and promoted an idea called "objects first" where objects were taught plenty early. To be fair, this is not an easy task. OOP implies inheritance, and inheritance is hard to teach if you haven't hit the basics of loops, conditional statements, parameter passing. Still, many a book tried it.

UW decided to change to Java around 2002 or so, and they too opted for objects first since this was the approach being advocated. They moved away from C++. Now, you can avoid objects first in C++. Just teach C first, then head into OO land with C++. It's a heady transition, because you think one way to write stuff procedurally, and another to write it in an OO style.

UW then did something (I gather) that was utterly amazing for a computer science department. Realize many a university had either made this transition to Java or were contemplating this change. You'd think most universities have already made the leap, but the extremes aren't really up for it. MIT wanted to ditch Scheme, a popular intro language they had used for twenty years (and some feel, perfectly good to teach from) for a more "modern" language, say, Python. They aren't that gung-ho over Java. The other extreme are so-so computer science departments who just don't want to change. They taught C++ and mastered it in the early 90s, but don't want to bother learning Java. Too much work, don't you know.

The departments that made the switch to Java just did so. No questions asked. But apparently, UW surveyed the students and found that they didn't quite master OO principles as well as the C++ students had. And the department wanted to rectify situations.

I suppose somewhere Stuart Reges enters the picture. He suggests that what's needed is to go back to a procedural way of teaching. OO is too hard to learn right away, and objects first is shown to be a failure (at least, in his estimation).

Somewhere else, Marty joins the picture. Now, Marty's an Arizona kid, so what's he doing up in Seattle? After graduating, he joins the evil empire and works for M$ (I say this somewhat facetiously). A year or so afterwards he says adios, and goes to teaching, which apparently, he has a good deal of experience (at least, TA-wise).

This is all backstory to my eventual point.

The two wrote a book, and the book is frickin expensive. It's nearly 90 bucks! I mean, seriously! Why on earth does it cost this much when a typical technical book is half the length. Something is dreadfully wrong when textbooks have to cost twice as much as their technical brethren.

Stu, Marty, I know you guys can't help it. If you had your druthers, you'd sell it for forty bucks, and you might even double or triple your sales because the average Joe might buy it, instead of the few students who do actually buy it. Heck, I'd like to read it, but I'm not spending 90 bucks to read it!

Now, what I really want to see is someone write a book that is one or two books down the line. Oh, but everyone wants to write an intro book. Heck, I want to write an intro book, but what's really needed is a CS 3 book.

What's that? OK, here's some background. Every university numbers its courses differently. Traditionally, computer science departments believe it takes only two courses to teach intro programming. First semester is syntax and control flow. Second semester is data structures. These are called CS1 (for "computer science 1") and CS2 (you get the idea), respectively.

But first, Stuart is right about OO programming. It is hard to teach, and it does take time. What Java saves, it takes away in other issues (say, JAR files). But there's something more. Software engineering.

In the end, intro books can't teach you that much about programming. It's much like a basketball book teaching you dribbling, scoring, the basic rules, and layups. It ain't gonna be enough when it comes time to playing high-powered bball, where you need to do crossovers, and such.

The problem with writing that kind of book for programming is the average writer of a book isn't a software engineer. They'd be totally guessing as to what it takes to write a book that teaches you how to program. Marty would, I imagine, be able to write such a book because he worked at Microsoft.

But here's the issue. Who'd buy it? You see, here's the other half of the story. Many computer science professors also haven't been software engineers. Even those who teach software engineering. There's something ironic about that. And furthermore, there's enough CS profs who find programming, much like a non-techie CEO, as monkey work. Anyone can do it! But only a few can do it well.

So even if such a book might be valuable, it would only be valuable for there here and now, and you'd have to convince departments who are still stuck on CS1 and CS2 that they should have a CS3 and a CS4, that programming has become tougher, and it requires more than trivial programming exercises to get any good.

Now, that's the book I really want to see.

But I still wouldn't pay ninety bucks for it.

No comments: