I follow the evolution of software engineering and the discoveries in the scientific field and I found very interesting the fact they are going in the same direction.
The Engineering develop the Object Oriented Programming starting from an old approach to the AI problem using the so called “frame” ( but I think its success is related to a very deep mathematical background in the OOP ).
The objective of OOP are to maximize these principle:
etc… (for a deeper description I suggest OOP by Bertrand Meyer )
To maximize this principle the OOP develop different tools and technique to programming . All these nothing say on how to solve a problem that was unsolvable before , this enginerization don’t tell you solutions to problems you need to know the solution of a problem and here you can learn the better way to implement it .
To answer on how to solve problems you need to go in the scientific side where independently from the languages and type of programming , you can learn how to solve problems without investigating the best way to implement the algorithm .
In both case the answer is the same : small is better!