1. 13
  1. 20

    This is Dr. Alan Kay we’re talking about! He doesn’t have random opinions about “objects”, he invented the word back in the 60s .

    I hate this meme. Kay did not invent the term “object”. In Smalltalk-72 he directly cites Simula 67 as an inspiration!

    And he’s still bitter about choosing that word. It made people focus on the implementation rather than the behavior and it’s all been downhill from there.

    72, 76, and 80 all emphasize the importance of objects. Only a decade later did Kay decide that OOP was “really” about message-passing this whole time.

    Or as Dr. Kay put it “I invented the term Object-Oriented, and I can tell you I did not have C++ in mind.”

    When John McCarthy invented functional programming, he did not have Haskell in mind. When Dijsktra invented the term structured programming, he did not have Ada in mind. Coiners of terms don’t get to hoard its meaning like a word dragon.

    Why? Well, part of his background was cell biology and when he did the math on their computational power, he realized that while software routinely has trouble scaling, cells can easily coordinate and scale by a factor of over a trillion, creating some of the most fantastically complex things in existence, capable of correcting their own errors.

    It took biology billions of years to get to where it is now. We’ve been doing a pretty good job with computers in just 70.

    Arguably a much, much bigger influence on Kay’s conception of OOP was his work on the Dynabook and FLEX. All of his decisions make sense if you consider the needs of a programmable OS: downloading a new program with new APIs shouldn’t require you to recompile the whole system.

    But that doesn’t really get to the core concept of messaging and frankly, this is the one area where I think Kay has been a touch vague, largely because many developers think that ideas are nice, but they want to see an implementation or proof of concept.

    Smalltalk 76 addressed this: messages correspond to methods. When an object receives a message, it should look up the corresponding method and execute that. If no method was found, it raises a error by default (that the sending object can choose to handle or pass along).

    So class-based OO has won, even with its limitations, arguments over inheritance versus composition

    Smalltalk-80 was class-based and had a strong inheritance scheme.


    Okay, so Alan Kay did contribute a lot to OOP. And Smalltalk was the first “true” OOP language. I say this because:

    • You could call a method on the number 2
    • You could pass a message to another message
    • You could pass a message to an exception
    • etc

    But he wasn’t the sole inventor of it. He was trying to solve a specific problem: how do we make easily-programmable personal computers? This lead to a lot of his decisions about how to make Smalltalk work. But that’s not the only important OOP context! Nygaard and Ole Dahl were solving a different problem: how do we make deep, robust simulations? That lead to different decisions on how they designed Simula. Barbara Liskov was trying to solve “how do we make correct concurrent code”, and that lead to decisions on CLU and Argus. Meyer was trying to solve “how do we go from specifications and analysis to actual code”, and that lead to decisions in Eiffel. They all made major contributions to what we see as OOP! Alan Kay was important, but he’s just one part of a larger historical narrative. We shouldn’t delude ourselves into thinking only he matters.

    1. [Comment removed by author]

      1. 5

        The early Smalltalk documents certainly do talk about the central importance of message passing. Kay talks about message passing in his 1977 article in Scientific American

        You mean Microelectrics and the Personal Computer? It looks like it’s centering messages over objects, but that’s only because he’s using “activity” instead of “object”. It also uses “family” instead of “class” and talks about how Smalltalk is built out of “families” (124/10). He also talks glowingly about “viewpoints”, such as “dogs are animals” and “dogs are vehicles by children”, and says that these languages will be the future of programming (122/8). He’s clearly seeing messages as part of a complex fabric of protocol, encapsulation, and ontology, in stark contrast with his 1998 claim:

        Just a gentle reminder that I took some pains at the last OOPSLA to try to remind everyone that Smalltalk is not only NOT its syntax or the class library, it is not even about classes. I’m sorry that I long ago coined the term “objects” for this topic because it gets many people to focus on the lesser idea.

        …and his 2003 claims:

        OOP to me means only messaging, local retention and protection and hiding of state-process, and extreme late-binding of all things.

        At the time he was working on Smalltalk, he thought of “activities” and “families” as important parts of OOP, and really liked “viewpoints”. Now he thinks they aren’t.

        And here is the first paragraph of “The Smalltalk 80 System” in the August 1981 issue of Byte magazine: […]

        Man reading byte magazine is miserable. So many dang ads. Anyway, here’s another quote from that exact same page:

        The fundamental idea of objects, messages, and classes came from SIMULA. SIMULA allows users to create object-oriented systems, but uses … procedure-oriented ALGOL language to provide numbers, booleans, basic data structures, and control structures.

        It goes on to talk about Smalltalk’s main innovation extending objects to primitives and classes. The rest of the article also supports the idea that messages, objects, and classes all considered very important.

        Did you get that? In an object-oriented system, message passing is the only way for anything to happen, and messages are objects. Also, there is no requirement for classes or inheritance in the definition of what makes an object oriented system.

        Keep reading. On page 82/96 we have

        Class: A description of one or more similar objects.

        Instance: An object described by a particular class.

        Every object is an instance of a class.

        He also defines inheritance and subclassing on page 86/100.

        Although Simula-67 had objects, classes, and inheritance, it didn’t have message passing, and Simula was not an object oriented language in 1980, back when the Xerox PARC definition of “object oriented” was the accepted definition.

        Again, they say SIMULA originated objects, messages, and classes, and allowed users to build object oriented systems. The authors are trying to avoid making sweeping claims about OOP (74/76):

        The words “object-oriented” mean different things to different people. Although the definition given in this article may exclude systems that should rightfully be called object-oriented, it is a useful abstraction of the idea behind many software systems.

      2. 2

        First of all I agree with you on the historical context. However the article does make a valuable technical point aside from the historical analysis. The importance of isolation in designing a resiliant/robust/scalable system can’t be stated enough. The point that Encapsulation is related but not the same thing as Isolation is an important point that should get made more often.

        1. 2

          Yep, tired of this meme too. Every time there’s a discussion about OOP, someone must come and mention Kay, his definitions and how all current OO languages aren’t actually OO. No, really, no.

          1. 1

            I hate this meme. Kay did not invent the term “object”. In Smalltalk-72 he directly cites Simula 67 as an inspiration!

            Simula had the concept of classes, but their respective instances were called “simulations”. There is no such a thing as an object in Simula. If Kay did not invent the term, he also didn’t borrow it from Simula as well.

            1. 7

              The Simula 67 standard uses “object” everywhere, and in fact defines an object as a “dynamic instantiation of the class body”. In the Smalltalk-72 manual, Kay specifically calls Simula “a major inspiration for Smalltalk”.

              1. 1

                I didn’t know of that specific detail. I already knew about Simula and its influence over Smalltalk, but never bothered to read more than its Wikipedia article. Thanks for pointing it out. But, despite of my relative ignorance, I’m still not surprised. Mr. Alan Kay is well known for giving credit where credit is due, and very fond of the idea of “standing on the shoulders of giants.”

                Also, experience is a lamp pointing backwards. If any of his statements contradict whatever he said back in the 70s and the 80s, give it a charitable interpretation.