> tl;dr: Writing software is encoding knowledge.<p>OK.<p>> Knowledge takes the shape of propositions.<p>That seems a bit reductionistic, but I'll ignore it.<p>> Compressing rich propositions into is-a and has-a relationships does not lend itself to clarity.<p>And if the <i>only</i> way to put knowledge or propositions into OO code was in the form of an object hierarchy, there might be a point here.<p>The author goes on to say:<p>> I’m not claiming is-a and has-a are the only types of abstraction available object-oriented languages. As a reader pointed out, most object-oriented languages have other types of abstractions which are not the object-oriented parts, like interfaces (responds-to), plain functions, and more.<p>OK, so despite the title, the actual point is, don't try to encode all knowledge in the type hierarchy. Well, there may be some people who need to hear that, but the good OO programmers already know...