News for hackers. Stuff that matters.
Re:Why people hate Java? by stcredzero on Sunday August 24, 2008 @12:29PM (#285229)
When you hear a Ruby or PHP or Python programmer cursing "Java", that's often what they're cursing: The school of software architecture that implicitly equates enterprise quality with having a large number of complicated moving parts.

The higher-order problem is that the Java language and tools have evolved to fit the needs of this culture, such that you can't really use the language anymore without an IDE -- a piece of code that is, itself, more complex than the space shuttle

Contrast this with the Smalltalk environment. It's also not very comfortable to do Smalltalk without the IDE, but someone who actually looks at the code of the "IDE" soon discovers that there's relatively little mechanism there. (I know of one "workspace" in a commercial Smalltalk that was implemented by a bored developer in the intro class.) All of the metaprogramming entities are ordinary first-class Objects, so almost the whole "IDE" is a relatively straightforward ordinary app.

Commercial Smalltalk environments also tend to fall prey to the Enterprise = Complex mentality, though.

Someone needs to create a programming language where "There's a Simpler Way to Do It!" is the mantra.

Re:Why people hate Java? by mechanical_fish on Sunday August 24, 2008 @01:38PM (#285269)
Good point about Smalltalk. Not all IDEs are created equal, nor are IDEs in themselves necessarily a bad thing.

To be fair, all good languages can be used to create something that's more complex than humans can understand. That's what they're for. Languages in which complex things are impossible to create are incredibly frustrating.

Good software systems have three features: Most of the complexity is invisible at any given time (Ruby on Mac OS X is horrendously complex, but the author of Hello, World in Ruby needn't know that); the visibly complex things are built out of conceptually simple parts (e.g. Smalltalk Objects), and the visible complexity is needful: You build complex things to solve complex problems, but you don't bolt a lot of complicated stuff onto the side of Hello, World just because there are automated tools to help you do so. I think Java fails test two, and I'm certain it fails tests one and three: My impression of a page like this:

http://java.sun.com/j2se/1.5.0/docs/api/java/util/LinkedList...

... is that now a beginner can't even instantiate a simple list of objects in Java 5 without understanding generics and their syntax. Or, rather, I'm sure he can, but he does it by typing in some code, watching his IDE complain at him, and accepting the fix that the IDE suggests without bothering to understand it. And so begins his Java career, a career which will largely consist of standing by as his IDE conducts an automated, visible running dialogue with his language's increasingly complex spec. And for what benefit?