Ilya Suzdalnitski recently published, “Object-Oriented Programming — The Trillion Dollar Disaster.” This screed goes to great lengths to point out OOP’s shortcomings. While I don’t necessarily agree with everything he says, I do agree with one thing:
OOP, as taught and practiced with languages like C++, Java and C#, has been a disaster.
These languages treat OOP as a way to apply abstract data types, rather than the message-based conception espoused by Alan Kay.
There is another way to look at OOP: from the standpoint of Smalltalk, which was the first language to popularize OOP in the 1980s and 1990s. (Simula was the first language to introduce OOP concepts.)
To understand the essence of Smalltalk’s philosophy, watch this video clip of Alan Kay’s tribute to Ted Nelson (start at 2:17):
Some more insight comes from Alan Kay’s “The Early History Of Smalltalk” (©1993 ACM):
Smalltalk is a recursion on the notion of computer itself. Instead of dividing “computer stuff” into things each less strong than the whole — like data structures, procedures, and functions which are the usual paraphernalia of programming languages — each Smalltalk object is a recursion on the entire possibilities of the computer. Thus its semantics are a bit like having thousands and thousands of computers all hooked together by a very fast network.
Smalltalk’s contribution is a new design paradigm — which I called object-oriented — for attacking large problems of the professional programmer, and making small ones possible for the novice user. Object-oriented design is a successful attempt to qualitatively improve the efficiency of modeling the ever more complex dynamic systems and user relationships made possible by the silicon explosion.
The big takeaway is this: All the complaints you’ve heard about object-oriented programming and inheritance and scalability issues have come from using C++, Java, C#, etc. The Abstract Data Type philosophy is detrimental to large-scale software development.
Alan Kay famously said:
Actually, I made up the term “object-oriented,” and I can tell you I did not have C++ in mind.
(Start at 10:00.)
Said Alan Kay: “The Internet was done so well that most people think of it as a natural resource like the Pacific Ocean, rather than something that was man-made. When was the last time a technology with a scale like that was so error-free?”
Alan Kay likened his object-oriented philosphy to how the Internet was built, or how biological organisms consisting of billions of cells are built. Smalltalk is fantastic for truly scalable solutions.
As much as Mr. Suzdalnitski admires Erlang, it is not an object-oriented language in the sense that Smalltalk is, in the sense that Alan Kay intended. I would argue that Smalltalk is the only true, pure object-oriented programming language in history. It doesn’t even have built-in syntax for conditional and iterative execution, both of which are procedural elements!