DonaldKnuth once wrote that
PrematureOptimization is the root of all evil. At the time, object-oriented programming either hadn't been invented or wasn't in wide use, and so he did not utter what could be
another important idea: that premature generalization is the root of all evil. Well, they can't both be root, can they...
Abstract classes, base classes, and interfaces are in part generalizations drawn upon their descendants or implementors. It's probably important not to create an abstract base class or an interface until you can think of
at least two descendants or implementations - that you are actually going to use
right now.
Because YouArentGonnaNeedIt.
See also
PrematureGeneralization,
YouArentGonnaNeedIt, Ron's article on
TheCostOfAnticipatoryDesign,
http://www.xprogramming.com/xpmag/cost_of_antici.htm
Contrast
ThereAintNoSuchThingAsPrematureGeneralization.
"
DirectedAcyclicalGraph of all evil" doesn't have the same ring somehow. --
WillSargent [How about 'DAG of all evil'? That sounds cool.]
Premature generalization makes one construct a root of all evil?
Root of some
evil?
This is referred to in the
RefactoringBook as
SpeculativeGenerality, clarified in
ThereAintNoSuchThingAsPrematureGeneralization as
PrematureCommitmentToGeneralizationIsEvil, and seems to really refer to
TooMuchAnticipationIsHarmful.
There is also debate as to
WhatIsGeneralization. There seems to be general agreement that making code smaller to still do the same thing often involves generalization. There is debate though as to whether adding extra methods and hooks etc (because you might need them later) which is agreed is often bad and against
YouArentGoingToNeedIt, constitutes generalization or specialization.
CategoryEvil