Update 2012-June-20: Please also read my follow-up post, Revisited: Your programming language sucks?
I met someone recently that declared “Java sucks.” One proffered argument of that “suckiness” was Java’s lack of expressiveness. In point: you can’t compare two Date
objects with the less or greater -than operators. Further, you can’t override the operators themselves. (I won’t touch that subject; we covered it in Computer Science 201.)
Date now = new Date();
Date epoch = new Date(0);
assert now > epoch; //won't compile
Nope, that won’t compile. What are we to do?
assert now.after(epoch);
There, that works. But what if we really, desperately wanted to use operators?
assert now.getTime() > epoch.getTime();
Both of these seem perfectly expressive to me. Much ado about nothing? I think it’s a matter of comfort and familiarity.
Saying a programming language “sucks” says less about the language and more about the person speaking.