…it help you be more productive? By allowing us to reach the holy grail of programming: reusability. Joe Armstrong talks about how object-oriented programming languages lack reusability, about how you find yourself locked into a corner while trying to share solutions across instances or projects. However, looking at the above we can see that every function is dependent solely on its input and only cares about its output.
OOP languages don’t lack reusability; they lack compactness because of the gorilla/jungle problem. Do not conflate the two.
Functional programming also suffer from the gorilla/jungle problem. Pure functions do not necessarily exist in isolation from all other functions in a program. In nearly all FP languages, functions are grouped together in modules. So if, for example, you compose two functions from two different modules, you pull in extraneous functions that may not ever be called.
Moreover, speaking for Smalltalk, you can prepare an application for deployment by pruning all the unused classes, thus making your application quite compact.
One important thing to remember is that object-oriented programming supports reusability in two different ways: 1) composition or aggregation; 2) inheritance. With #1, there is no “jungle.”
Inheritance may not be appropriate for all situations. You choose composition where it makes more sense. Many applications have shallow class hierarchies for this reason.