Monday, 9 February, 2004
Bitchslap java = new Bitchslap(Rage,99);

I'm putting the world on notice: If, in the next two days, Sun Microsystems' headquarters blows up, I did it. I did it, I'm not sorry I did it, and I intend to plead diminished capacity by reason of temporary insanity induced by having to deal with Java's astonishingly broken object system and the nightmare that is class casting through interfaces.

It might not be so bad if my text didn't suck ass. Seriously: If the book were better, and the solution to every problem didn't seem to be "look at the scary API," I might not be on the verge of ending up in psychiatric intensive care for what is ultimately 4% of my course grade. Were it not for the fact that it would involve admitting to myself that yes, I am that stupid, I'd be sorrily tempted to fall back and punt this assignment.

Part of this is Java's fault. I get this feeling that I missed something fundamental along the way, something that might have explained the underlying principles of the design of the language; it feels like there's just this one bit of information that, if I could grok it, everything about Java would make sense. Even if that one bit is "Gosling was on drugs," it would be a cathartic discovery, because I could then go ahead and stop looking for my grand unified theory of programming. As it stands, I have no idea why stuff is the way it is, and every time I get fucked over by a design issue, then look up the reason why I got fucked over by a design issue, I become absolutely enraged because it's presented as though it's the most logical thing in the world. It's a Javaism! How else would it be? I dunno, how about we build an object system that doesn't require complex casting rituals so I can (a) insert an Inserted object into an array list and then (b) tell the Inserted object its array index position without having to (c) instantiate a new Object object and then (d) cast the Object object to the type of Inserted object. Only then can I access the Inserted object's methods and variables and then pass messages back to the Inserted object. Why do we do it this way? Why the hell not?

If you didn't understand the preceeding paragraph, don't worry -- I don't understand it either.

And the text. Hoo, don't get me started on the text. (Too late!) I'm back to using last semester's text because this new one is so godawful it makes me want to cry. Seriously: I'm now sleeping with SICP under my pillow and periodically cracking open The Art of Computer Programming because I find Knuth's hairy, mathematically-derived explanations for How Things Work to be infinitely simpler and easier to understand than Goodrich, and it's easier to conceptualize topics in Scheme and then figure out how to implement them in Java than it is to conceptualize in Java from the beginning. Those of you who've suffered through TAoCP know exactly what I'm talking about: Big, scary mathematical formulas don't seem so scary when contrasted with big, scary mathematical formulas in poorly written English and implemented in Java fragments.

Memo to publishers: It's a really good idea if, when publishing a computer book, you follow the same publishing conventions the rest of the world follows, i.e., when you have a code sample it needs to be in a monospace font and not in a smaller, more condensed version of the sans font you typeset the rest of the book in. God! This isn't rocket science.

(Can someone recommend a better data structures text? I'm gonna flunk this class without one.)

I'd also like to take this opportunity to complain that the assignment scenario is horribly contrived, and that there's a reason God created Larry Ellison. Larry is a bozo, and Oracle is a creepy corporation, and the Oracle software is a hulking monstrosity (speaking of poorly designed systems), but relational database management systems exist so that downtrodden programmers who don't want to re-invent the wheel don't have to. You know what it would take to solve this assignment's "problem" in the real world? About 150 lines of SQL, including the table definitions, and maybe another 200 of some other language (Tcl?) for the interface.

Instead, I have about a K of code that doesn't work and will probably strangle me in my sleep.

Java: It's not just a language. It's a cult.

Epilogue: I am no longer capable of doing anything I learned in this course. This does not depress me in any way, shape, or form.

phloem@fumbling.com