I’ve personally seen that being strong in certain fundamentals is important – understanding things like testing, SOLID, Code Smell, design patterns, etc.<p>But I’ve never been on a team where I’ve thought, “If only that person had a better understanding of inheritance/encapsulation/polymorphism than s/he would be more productive.” I’m not questioning whether these form the philosophical foundation of OOP, but can anyone please provide an example of how they practically affect an individual’s ability to contribute?
For starters, if they have a good understanding of the fundamentals they'll recognize that SOLID & "design patterns" are built on top of them. Both of those practices are about when & how to use the fundamentals.