Oh boy, David Buck has posted a comment on Java Complexity. He points to this post which probably has some of the funniest comments I've read in awhile.
It makes me think about my time wrestling with Swing. At the time, I wanted to write a book on bad design and use Swing as the example. Swing is riddled with poor usage of private and final keywords (in other words, the protect you from bits you need to get to if you write your own widgets). There's also poor use of inheritance (why are the Swing components subclassed from the AWT Components?!!!). And to make matters worse, Swing is very complex and daunting for the average programmer. Don't even get me started with J2EE which is supposed to be a distributed framework that was suppossed to make enterprise development easier by making the connection to relational databases easier (oh what a joke, it's the one that it's the poorest at and it wasn't like this problem hasn't been thought about before). My last project in Java, we used Toplink for our relational mapping and used very little of the J2EE API (only the parts we needed). Don't even get me started on Struts (just go look at Seaside and you'll see an excellent web framework).
So, what's it like being back in Smalltalk land? I can safely say I never want to go back to Java. Smalltalk developers get it right most of the time. They understand computer engineering and simplicity. We embrace simplicity and find warmth in it. So, what makes our culture different? I think we don't have to spell every thing out and we get used to getting little bits of our design done incrementally. Our tools support this and the language does as well. It allows us to try more things out and be more experimental. In Java, you just have to nail things down earlier because of lesser tool set and strong typing. It's not to say you can't have simplicity in Java (you most certainly can). You just have to work harder at it than most developers are willing to.