From the Canyon Edge -- :-Dustin

Wednesday, September 15, 2010

Java isn't Evil, but it's not for Me

First off, I apologize. In my last post, I called Java "evil". That's not fair, and several people called me out in the comments. The post has been updated to drop the "evils of Java" verbiage.

My statement was a reference to the humorous-though-irreverent Call of Codethulhu.

It's a personal taste issue. I dislike writing Java, packaging Java programs, chasing down Java dependencies, and even reading Java code. There's nothing necessarily "evil" about it. I have declined job offers that require work to be exclusively performed in Java. I just don't like being around Java and really dislike some of the habits it encourages.

Before I started my University work, I had extensive programming experience in Basic, Pascal, C, and C++ as an ambitious (dorky?) high school kid. The "Intro to Computer Programming" class most Computer Science freshman at my University took was based in Java. And at that time, they were being taught on Windows computers.

I found it very disappointing that a more UNIX/C approach was not used to introduce most of my college freshmen computer science classmates to programming. The approach nursed bad habits, and many programming fundamentals were missed, in my opinion.

A few years later, while working at IBM, I again landed on a series of projects where Java was king. And once again, I found some of these Java programmers lazy in their approach, and bloat-ware abounded. 2GB of memory were required to run simple services that should run in a few MB. Do-one-thing-and-do-it-well was no where to be found And finally, write-once-run-anywhere couldn't have been further from the truth.

I exited myself from the Java world, once again, choosing C, Python, Perl, PHP, and Shell for the projects I initiated and maintain. I'm able to use sound object oriented practices (in Python, Perl, and PHP), and able to honor to the principles of UNIX (with C and Shell).

Occasionally, I'm required to deal with Java when maintaining or packaging something for Ubuntu. I generally start from scratch, trying to have an open mind, but within minutes or hours, my skin starts to boil and steam flows out of my ears. I find over-engineered code in the source, binary JARs lumped within other projects out of laziness, and memory requirements that are simply staggering for the goal of the program.

Sorry, that's not for me.

Still, thanks for keeping me honest, making me explain myself, and pruning the potentially offensive language out of the other post.