Inheritance is a useful tool. The article mentions the strategy pattern which, ironically, often requires inheritance to implement. So I feel like the author may have been burned and/or confused by inheritance, and following true nerd form has cast it aside completely.
Sometimes when you are using a framework, the productivity gained from inheritance cannot be ignored. I suppose this depends on the language and framework design, to a limited extent.
That said, I try to compose rather than inherit when possible, as it provides a more opaque implementation.
> The article mentions the strategy pattern which, ironically, often requires inheritance to implement.
Not really. It only requires interface inheritance for statically-typed languages, which is not really inheritance, and no inheritance at all for duck-typed languages.
Sometimes when you are using a framework, the productivity gained from inheritance cannot be ignored. I suppose this depends on the language and framework design, to a limited extent.
That said, I try to compose rather than inherit when possible, as it provides a more opaque implementation.