Your Constructors are Completely Irrational - The Code Whisperer

> I think this is the biggest problem with Java culture: a tendency to overgeneralize, to build a framework when the business only wanted an application.

I understand. I do the exact opposite. I understand the principles to nudge the design towards just enough framework/abstraction/generalisation. Unfortunately, in order to describe that to a wide audience, I have to choose examples simple enough to illustrate the concept that many people perceive (rightly so) as far too simple to merit such refactoring. I don't know how to solve this problem, except to ask my audience to bear that in mind.

Moreover, techniques like pushing details up the call stack serve not only to generalise incrementally (as needed), but also to allow the programmer to experiment with increasing the level of abstraction without committing to some framework that they later regret. Of course, if we don't push, then we don't learn, but sometimes when we push, we design ourselves into a corner. So use version control and be prepared to undo when you notice this happening. Every programmer, so far as I can tell, learns this way, and some of the best programmers I've seen have left some insane designs in their wake.

As for your distinction between GameRuleBook and MonopolyRuleBook and TrivialPursuitRuleBook--yes, of course. So far, we only have one Game and we only know that it's called "The Trivia Game". As we extract towards an increasingly generic framework, we will certainly have a layer of generically-named Game modules/objects/classes implemented by their Trivia counterparts, possibly linked together with some Abstract Factory that ensures that we don't try to combine Trivia implementation of some interfaces with Monopoly implementations of others. (Although... that could make for an interesting game, and if we respect the contracts of the various interfaces, then we could put these things together and just see what they do.)

So at this point I can't tell whether you're critiquing me or lamenting the current state of the average Java application. What I see so far amounts to you saying "But you have to do X too" or "But you have to be careful about Y", and I do X and am careful about Y, but I can't put all that into a single article. It'd be 100,000 words long.