John Ousterhout writes:
In my opinion, objects provide only a modest benefit: perhaps a 20 to 30 percent improvement in productivity but certainly not a factor of two, let alone a factor of 10. … OO programming does not provide a large improvement in productivity because it neither raises the level of programming nor encourages reuse. … The strong typing of most OO languages encourages narrowly defined packages that are hard to reuse.
… Another problem with OO languages is their emphasis on inheritance. Implementation inheritance, in which one class borrows code that was written for another class, is a bad idea that makes software harder to manage and reuse. … [It] causes the same intertwining and brittleness that have been observed when
gotostatements are overused. As a result, OO systems often suffer from complexity and lack of reuse.
Scripting languages, on the other hand, have actually generated significant software reuse.
… Nonetheless OO programming does provide at least two useful features. The first is encapsulation: objects combine data and code in a way that hides implementation details. This makes it easier to manage large systems. The second useful feature is interface inheritance, where classes provide the same methods and application programming interfaces (APIs) even though they have different implementations. This makes the classes interchangeable and encourages reuse.
Fortunately, the benefits of objects can be achieved in scripting languages as well as system programming languages … for example, Python is an OO scripting language.
John K. Ousterhout, "Scripting: Higher-Level Programming for the 21st Century," (IEEE Computer, 31/3: 23–30), pp. 29-30. http://www.stanford.edu/~ouster/cgi-bin/papers/scripting.pdf