Re:OO is not Computing, Newer is not More modern
by cageface on Monday April 30, 2012 @09:23AM
(#3909103)
That started me wondering: what is it about Java that encourages the craziness?
It doesn't hurt when you're trying to rack up a lot of billable errors and keep clients dependent on you.
Re:OO is not Computing, Newer is not More modern
by tetha on Monday April 30, 2012 @12:11PM
(#3909825)
I think the lack of higher order functions is a huge part. If you don't have built in higher order functions, you have to add 1 interface per function taking a higher order function and 1 class per different call. From there on, you have to manage all those extra classes and interfaces somehow, which easily spawns more classes you wouldn't need otherwise.
These resulting structures then end up being factories (You could pass the object creation function), command objects (you could have a function to call instead of a command to pass back) and so on.
F# is interesting, Scala is interesting, and we both wondered what it would be like to really try ocaml for real. But Java's just pretty solid. It's not exciting, but it's quality engineering. It makes some questionable trade-offs, but it seems to provoke more hate than it deserves.
Of course, we then rolled our eyes about all the crazy Java stuff we've seen, with XML-everywhere, FactoryFactories, and gratuitous IoC.
That started me wondering: what is it about Java that encourages the craziness? My theory is that it's a combination of garbage collection and lack of easy blocks/anonymous functions. Garbage collection lets you get away with things that you'd never try in C++, and lack of blocks means you're stuck with a pretty limited API, so you end up inventing extra-language channels for information.
Note: I intentionally didn't demand closures. I think the original blocks in Smalltalk weren't closures, but they were still useful for things like "monkeys select: [:m | m throwsPoop]". I'm not sure if this is really enough; closures make some things a lot easier.