Let the bug-ironing begin! Plus, does teaching Java dumb would-be programmers down?

Ah, so there’s a new version of WordPress – version 2 – officially released. It has all sorts of whizzy enhancements, apparently, though I have to say that this site (using 1.5) seems pretty good to me. Personally I’m going to hold off taking it up until I’ve seen how well its anti-spam functionality works, and in particular whether Spam Karma 2 works with it. I know there’s been some upgrading of SK to cope with 2.0, but as there’s also an anti-spam plugin in 2.0, and as I’m running various other plugins (like recent comments, recent posts, which while simple in PHP terms still might need some hacking around that I’m unwilling to do for time reasons – I mean, look at how I still haven’t got the nested LI items right on the bottom of the RH column here) I think I’ll just wait and see how the bugs unravel, or whatever it is that bugs do. (Appear? Emerge?)

Meanwhile, I’ll just point you to The Perils of JavaSchools – Joel on Software

You may be wondering if teaching object oriented programming (OOP) is a good weed-out substitute for pointers and recursion. The quick answer: no. Without debating OOP on the merits, it is just not hard enough to weed out mediocre programmers. OOP in school consists mostly of memorizing a bunch of vocabulary terms like “encapsulation” and “inheritance” and taking multiple-choice quizzicles on the difference between polymorphism and overloading. Not much harder than memorizing famous dates and names in a history class, OOP poses inadequate mental challenges to scare away first-year students. When you struggle with an OOP problem, your program still works, it’s just sort of hard to maintain. Allegedly. But when you struggle with pointers, your program produces the line Segmentation Fault and you have no idea what’s going on, until you stop and take a deep breath and really try to force your mind to work at two different levels of abstraction simultaneously.

A fascinating article, showing that dumbing-down doesn’t only happen on TV; it can happen in software too.


  1. A fascinating and entertaining article from Joel O’Software, but I’d question the truth of it. There’s an excellent appraisal of it on this non-techie site: http://itre.cis.upenn.edu/~myl/languagelog/archives/002736.html

    There may be dumbing-down in university CS courses, but not with Joel’s argument.

  2. Java is a hideous (I’ve always thought so) and it is a terrible choice for a first programming language. I don’t teach our Java course, but I do have to pick up the pieces in later years and the average student is not an average programmer. (N.B. the people teaching the Java courses are great teachers who work really hard with the students – I am not criticising them.) There are lots of reasons for this, first, as I said Java is a horrible, ugly, complex language (you are entitled to disagree, but *NOTHING* anyone can say will change my opinion so don’t even try), second, OOP is great but you have to appreciate why it is great, and to do that you have to have struggled with imperative procedural stuff, and third, people don’t seem to find programming fun anymore, not even the really good programmers. I don’t know a single student who writes programs just for the fun of it, which we used to do all the time when I was a student (they do write programs but usually for business reasons). They also don’t seem to try out new languages just for the hell of it – we used to have a go with every language we could find (mind, in those days there were lots more of them around) And yes, they don’t understand recursion or pointers which does lead them into all kinds of problems because understanding these can help you see better solutions faster even if the solutions don’t actually use pointers or recursion.

  3. Oh, this is great stuff, L.

    “Java is a horrible, ugly, complex language”: I wouldn’t attempt to change your mind, but I’m interested to know what you think would be good and why.

    “OOP is great but you have to appreciate why it is great, and to do that you have to have struggled with imperative procedural stuff”: Are you sure? I think building houses with bricks is great, but do builders really have to have struggled with wattle and daub before they’re allowed to go near it?

    “people donít seem to find programming fun anymore”: very likely. Although that remark, and the remainder of your piece, suggest a significant problem is with the changing attitude of students. You know you do sound very much like the four Yorkshiremen that Joel O’Software referenced :-)

  4. I’ve programmed in pretty well every major language there is and some pretty obscure ones as well, and now only ever program in scripting languages. Java takes C++, leaves most of the bits they got wrong and throws away almost all the stuff they got right, and then adds in a lot more junk besides which just gets in the way for novices. There may well be a case for Java for building huge systems (though I remain to be convinced of that also), but not for teaching where the aim is not to put people off before they get started : Java is like trying to juggle 7 balls before you know how to juggle 3.

    I don’t get your analogy with bricks : that’s more like a valves v transistors argument to me. And did I say that we shouldn’t teach OOP? No, I didn’t. Of course we should teach people OOP – it is a vital technique (though you don’t need an OO language to do OOP of course), however I also think that good old-fashioned imperative programming is a vital technique and I think that it is a better place to start than with objects. You can make all kinds of arguments about objects and how natural they are (and god knows in the past I have made those arguments as often as anyone else) but it turns out students have a hard time getting it, whilst they do get imperative programming pretty quickly. (and for many students that’s all they will ever need to know) Knowing why objects are good and why they are good is a lightbulb thing that you get when you find out how much easier it can be to express some of the clunkier imperative things using them.

    Students don’t find programming fun anymore because it isn’t if you use Java. I don’t write in Java because it isn’t fun. Indeed I hate it, because the language gets in my way when I want to do something and I intend never to write a program in it again. Currently, I’m having fun with Ruby (which is *much* more OO than Java) and just taught it to a class of students who had struggled through a Java course which every single one of them hated and quite a few of them started having fun. Not all of them by any means but more than before. That is a good thing. No, Ruby is not a perfect language, some of its semantics are horrible too and I would have done it quite differently, but it doesn’t get between the problem and me, and has some wonderfully expressive features which make sense to people. I would agree that the changing attitude of students is a significant problem, but Java is definitely not going to help you there, whereas something like Ruby will. They need to be able to do something interesting quickly so that they can start having fun.

    (Yes I am banging on about fun a lot – it’s important, and if you don’t already read http://headrush.typepad.com/creating_passionate_users/ then you should start, and especially today’s piece about learning (and I know that the writer is a Java fan : nobody is perfect))

    As to the Yorkshiremen, maybe I do sound like them, but there again I’ve been in this business logn enough to be allowed to sound like them….

  5. Someone else below asked this already about antispam scripts.
    I am getting nailed with Spam on my website mails and in our blog website – now its offline too

    much spam. Is there anyway to stop this? If not, there really isn’t any point in leaving it up

    and active. Any help will be greatly appreciated.

    Thanks for help, Keep up the good work. Greetings from Poland

Comments are closed.