About eight years ... nine years ago, I was between jobs and thought I might use the large amounts of free time I had at my hands to learn something that might improve my chances of finding a new job. Lots of companies use Java EE, right?
So I downloaded the JDK, Glassfish and a PDF of a book called "The Java EE tutorial" from Sun.
I found it slightly disturbing that Glassfish (or was it JBoss? It was so long ago...) used ~400-450 MB of RAM before I had done anything to it.
And then I started reading the so-called tutorial. The fact that it had ~1100 pages should have tipped me of, but it did not frighten me. When I looked and the Table of Contents, however, which came with a freaking flow chart on how to navigate your way through the book depending on what you already knew, I ran away screaming. ;-)
And to be fair, in my brief attempt to learn C++ I, too, looked at my first slightly-nontrivial-toy-program when it was finished and found it incredibly over-engineered. So I know how easy it can be to give in to that temptation.
Also, there is this old saying that a given piece of software will reflect the organizational structure that created it, if large corporations send hordes of programmers to attack such a problem as creating Java EE or the servlet API, it is not a surprising result.
In a way, .Net has the same problem, to a degree. I have not used it much, but one of my first toy programs was an address book that got its data from the Active Directory, and the LDAP API was significantly more complex than, say, Net::LDAP in Perl. Not unusable, but the difference is noteworthy.