It never hurts to study the masters in serious enterprise software: <a href="https://github.com/EnterpriseQualityCoding/FizzBuzzEnterpriseEdition" rel="nofollow">https://github.com/EnterpriseQualityCoding/FizzBuzzEnterpris...</a>
The names are extremely predictable (as shown by this Markov chain), which is actually a Good Thing (tm). The bad thing is that things got complex enough to warrant these names.<p>It's the knee jerk reflex of decoupling everything, to the point that you have 80% configuration/wiring/setup vs 20% of code that actually does something useful.<p>Each extension point in the framework is represented by a couple of these classes to handle the layer of indirection. Maybe Spring should run a study and see which of their extension points is actually used, at all, or by more than x % of users, and then cut down all the useless ones. I'm not too familiar with Spring these days, but I'd expect that the vast majority of indirections isn't actually useful for anybody.<p>The other problem is that our mechanisms to introduce and handle these abstractions are too verbose. Each extension point spawns multiple classes where it's really just one little method that needs to be called instead of another block of code. That makes software systems extremely hard to understand and use, and the overall bloat does actually slow things down - if not in production, then in deployment, startup, and build.
This is sort of like making fun of German for using long combinations of smaller words to denote a concept.<p>Or making fun of medical jargon. (ha ha, you said subdermal hematoma not bruise)<p>Once you know what the individual words mean, you can use them in different places, and know right away what the class does. Do you need to use 80% of these? No, but they're there, like parts in a car, in case you need to tinker.
Most of the atrocious stuff is in J2EE related frameworks (looking at you spring and hibernate).<p>I think core java libraries are amazingly designed and a good part of why the language became popular. You won't find many FactoryFactories there, The land of c,c++ libraries that came before is incredibly fragmented, inconsistent and difficult to use by comparison, not to mention the documentation. Good lord the docs ;x.
It's not surprising that a Markov chain could put together plausible sounding class names, because yeah, there are definitely patterns that class names fall into.<p>What's surprising is that one third of the names it's showing me are actually real. I mean, "MetaMetaContextHierarchyConfig" actually exists?
Some answers are not 100% right. I got:<p>- HttpServlet<p>- AbstractXmlWebMvcResultProcessingInterceptorAdapter<p>- MockJtaTransaction<p>While there is HttpServlet class, it is considered wrong, and 3rd option is considered correct :(
I don't like complaining about submissions not working in my browser, but this time I feel like I'm missing a lot of fun.<p>On Firefox DevEdition nothing past "Pick the one that's not made up!" appears.
On latest IE it's every time "ComplexPortletApplicationContext.EditController" vs "ModelMapBasedHandlerMethodProcessor" vs "AbstractPlatformTransactionAttributeSource". 16 times the same question. Well, this could be just bad luck if questions are random. With randomness you never know.
Note that some classes exist (even if not in Spring, at least in base Java) <a href="http://imgur.com/sNk4mE2" rel="nofollow">http://imgur.com/sNk4mE2</a><p>The key thing to keep in mind with generative models based on real data is that just because results were based on random generation doesn't mean they can't match something real.
Spring is not the only framework with bad names; look at this class name from aspectj:<p>org.aspectj.weaver.patterns
.HasThisTypePatternTriedToSneakInSomeGenericOrParameterizedTypePatternMatchingStuffAnywhereVisitor
It's been a few years since I've seriously used Spring, but I when I did, I used the hell out of it. I'm pretty surprised by how many times I was fooled.
Like any other primitive, dogmatic religion, Java will stay for ages, because there will never be a shortage of idiots to repeat the dogmas and mediocries to have a decent living by manipulating the crowd.<p>Java is triumph of the "packers mindset".<p><a href="http://the-programmers-stone.com/the-original-talks/day-1-thinking-about-thinking/" rel="nofollow">http://the-programmers-stone.com/the-original-talks/day-1-th...</a>