The Liskov Substitution Principle (2019)
I feel like the real Liskov Subsitution Principle should be &quot;if you have a subtype P of type S, redesign your code so that there are no subtypes&quot;.<p>Seriously though, I have been a professional developer in a classical object oriented language for the last 5 years and have written 0 class hiarchies.  Common functionality can be mixed in by composing &quot;parent&quot; objects around common child objects.  Passing multiple types of objects to a single function is better handled via interfaces, not inheritance.<p>Is there a good reason to have a class hierarchy in modern programming?