Alan Kay on Object Oriented Programing
“I invented the term object oriented, and I can tell you that C++ wasn't what I had in mind.” —Alan Kay.
At Utah sometime after Nov 66 when, influenced by Sketchpad, Simula, the design for the ARPAnet, the Burroughs B5000, and my background in Biology and Mathematics, I thought of an architecture for programming. It was probably in 1967 when someone asked me what I was doing, and I said: “It's object-oriented programming”.
The original conception of it had the following parts.
- I thought of objects being like biological cells and/or individual computers on a network, only able to communicate with messages (so messaging came at the very beginning — it took a while to see how to do messaging in a programming language efficiently enough to be useful).
- I wanted to get rid of data. The B5000 almost did this via its almost unbelievable HW architecture. I realized that the cell/whole-computer metaphor would get rid of data, and that “<-” would be just another message token (it took me quite a while to think this out because I really thought of all these symbols as names for functions and procedures.
- My math background made me realize that each object could have several algebras associated with it, and there could be families of these, and that these would be very very useful. The term “polymorphism” was imposed much later (I think by Peter Wegner) and it isn't quite valid, since it really comes from the nomenclature of functions, and I wanted quite a bit more than functions. I made up a term “genericity” for dealing with generic behaviors in a quasi-algebraic form.
- I didn't like the way Simula I or Simula 67 did inheritance (though I thought Nygaard and Dahl were just tremendous thinkers and designers). So I decided to leave out inheritance as a built-in feature until I understood it better.
My original experiments with this architecture were done using a model I adapted from van Wijngaarten's and Wirth's “Generalization of Algol” and Wirth's Euler. Both of these were rather LISP-like but with a more conventional readable syntax. I didn't understand the monster LISP idea of tangible metalanguage then, but got kind of close with ideas about extensible languages draw from various sources, including Irons' IMP.
The second phase of this was to finally understand LISP and then using this understanding to make much nicer and smaller and more powerful and more late bound understructures. Dave Fisher's thesis was done in “McCarthy” style and his ideas about extensible control structures were very helpful. Another big influence at this time was Carl Hewitt's PLANNER (which has never gotten the recognition it deserves, given how well and how earlier it was able to anticipate Prolog).
The original Smalltalk at Xerox PARC came out of the above. The subsequent Smalltalk's are complained about in the end of the History chapter: they backslid towards Simula and did not replace the extension mechanisms with safer ones that were anywhere near as useful. (I'm not against types, but I don't know of any type systems that aren't a complete pain, so I still like dynamic typing.)
OOP to me means only messaging, local retention and protection and hiding of state-process, and extreme late-binding of all things. It can be done in Smalltalk and in LISP. There are possibly other systems in which this is possible, but I'm not aware of them.
One of the things I should have mentioned is that there were two main paths that were catalysed by Simula. The early one (just by accident) was the bio/net non-data-procedure route that I took. The other one, which came a little later as an object of study was abstract data types, and this got much more play.
If we look at the whole history, we see that the proto-OOP stuff started with ADT, had a little fork towards what I called “objects” — that led to Smalltalk, etc., — but after the little fork, the CS establishment pretty much did ADT and wanted to stick with the data-procedure paradigm. Historically, it's worth looking at the USAF Burroughs 220 file system (that I described in the Smalltalk history), the early work of Doug Ross at MIT (AED and earlier) in which he advocated embedding procedure pointers in data structures, Sketchpad (which had full polymorphism — where, for example: the same offset in its data structure meant “display” and there would be a pointer to the appropriate routine for the type of object that structure represented, etc., and the Burroughs B5000, whose program reference tables were true “big objects” and contained pointers to both “data” and “procedures” but could often do the right thing if it was trying to go after data and found a procedure pointer. And the very first problems I solved with my early Utah stuff was the “disappearing of data” using only methods and objects. At the end of the 60s (I think) Bob Balzer wrote a pretty nifty paper called “Dataless Programming”, and shortly thereafter John Reynolds wrote an equally nifty paper “Gedanken” (in 1970 I think) in which he showed that using the lamda expressions the right way would allow data to be abstracted by procedures.
The people who liked objects as non-data were smaller in number, and included myself, Carl Hewitt, Dave Reed and a few others — pretty much all of this group were from the ARPA community and were involved in one way or another with the design of ARPAnet->Internet in which the basic unit of computation was a whole computer. But just to show how stubbornly an idea can hang on, all through the seventies and eighties, there were many people who tried to get by with “Remote Procedure Call” instead of thinking about objects and messages. Sic transit gloria mundi.
[from a post by Alan Key. http://www.purl.org/stefan_ram/pub/doc_kay_oop_en ]
for a introduction on lisp's OOP, that didn't bind methods to single object (multi-dispatch), see [Object Reorientation: Generic Functions By Peter Seibel. At http://www.gigamonkeys.com/book/object-reorientation-generic-functions.html , accessed on 2015-08-20 ]
see also Wikipedia [ Common Lisp Object System ] [ https://en.wikipedia.org/wiki/Common_Lisp_Object_System ]
see also Polymorphism, Dispatch, and the Tale of Poly-Tinting
for more about the original meaning of object oriented programing, see http://programmers.stackexchange.com/questions/142327/what-did-they-call-object-oriented-programming-before-alan-kay-invented-the-term
by the way, I, Xah Lee, have no idea what Alan Kay is talking about.
truly, i do not even understand almost a single word he's saying.
he says that his original idea of OOP, is like biological cell passing messages. Now, what does it mean concretely in programing languages? Note that, Just about anything in the universe can be said to be like X, where X is whatever metaphor you are excited about. And programing charlatan thrive on opaque jargon and philosophical concepts thru the ages.
although i think OOP (in modern sense, such as Java, python's OOP), are idiotic to the most extreme. But i also got the feeling that Alan Kay, is also talking voodoo. And his mentioning of math algebra is voodoo. Alan Kay's voodoo, simply got replace by later voodoos.
The only good thing in programing, is mathematics. Alan Kay's “i invented OOP as biological cells passing messages”, is not.