7 ms·
Alan Kay on Messaging (1998)
- bazoom42 2y agoHe should just have called it microservices instead of objects.
- mpweiher 2y agoWell...his original vision was communicating computers, and then scaling that down. Except that Microservices tend to use REST (or something roughly like it) and not CORBA. https://blog.metaobject.com/2019/11/what-alan-kay-got-wrong-about-objects.html https://blog.metaobject.com/2019/11/what-alan-kay-got-wrong-...
- ape4 2y agoOr signal, receptor, effector https://en.wikipedia.org/wiki/Cell_signaling https://en.wikipedia.org/wiki/Cell_signaling
- agumonkey 2y agoThe more I see how microservices evolve the more I think about J2EE remote objects / ejb. A little personal facepalm moment.
- thom 2y agoMicroservices today have all the same problems as OOP, but vastly amplified. My kingdom for some more functional approach to architecture, with services as more or less pure functional transforms, and some sort of extremely well-typed data mesh underneath.
- TZubiri 2y agoThe world runs on microservices, government, agencies, companies, departments, bodies, organs, cells. Sure, reality has problems, and no it won't be solved by trying to understand everything as functions. Welcome to the world
- Phiwise_ 2y agoSmalltalk is a partially-functional language (first-class functions in 1976, inspired by lisp) and also got static typing extensions many years ago.
- smallstepforman 2y agoClear as mud. No matter how good Alan Kay is, he failed to properly describe messaging, as used in an Actor environment. He missed the Actor Programming model. Also the late Carl Hewitt failed to properly explain and implement a working Actor model. A shame, since there are many working Actor implementations in many languages.
- mpweiher 2y agoIt thought the final paragraph was very clear: I would suggest that more progress could be made if the smart and talented Squeak list would think more about what the next step in metaprogramming should be - how can we get great power, parsimony, AND security of meaning? Did you mean that he should have described actors, but did not? To me at least, "ma" goes beyond just the actor model.
- nabla9 2y agoHe is not describing Actor Programming model. He describe his own model. Message passing in Smalltalk predates Hewitts Actor Model and was used as inspiration. The messaging in Smalltalk is little different and IMHO better in many cases.
- mpweiher 2y agoBut he's not describing Smalltalk. He is describing what he wanted Smalltalk to evolve into. Which he didn't know how to do, because otherwise we would have it by now. This quip by him from OOPSLA '97 is well-known: I made up the term object oriented. And I can tell you I did not have C++ in mind.. A little less well-known are the words that immediately follow: So, the important thing here is: I have many of the same feelings about Smalltalk https://youtu.be/oKg1hTOQXoY?t=634 https://youtu.be/oKg1hTOQXoY?t=634
- Phiwise_ 2y agoWhy would you a hypothetical quote of Kay for cutting off the full context that he also has criticisms of Smalltalk, and then cut yourself before he specifies that what he's not committed to is the syntax and library system, while the message-passing execution model is the important thing he's trying to promote? That just muddies the waters more. This email was sent a year after OOPSLA 97, so clearly he can't have been talking about messaging as Smalltalk's problem. As for where he wants Smalltalk to go, that's what Squeak was for. He talked about it on plenty of occasions, at least one of which was also before OOPSLA, and actually did get a research team together to develop it out in the late 2000s: https://tinlizzie.org/IA/index.php/Papers_from_Viewpoints_Research_Institute https://tinlizzie.org/IA/index.php/Papers_from_Viewpoints_Re...
- raintrees 2y ago"The messaging IS the program" (Apologies to Marshall McLuhan)
- bitwize 2y agoKay cites McLuhan A LOT in his talks.
- abdellah123 2y agoOop is about modeling... Messaging is optional. See yhe beta programmimg language
- recursivecaveat 2y agoI always thought that the Alan Kay model is fundamentally misguided, in that it is explicitly inspired by cell biology and distributed computer systems, ie extremely hard problems. Basically all the hardest things to model, predict design, and debug are these kind of bottom up systems where all interesting behavior comes from the emergent runtime interaction of tons of tiny components. This works okay for cells because there is no programmer floating above the system trying to understand it and make specific changes, but until we start programming by natural selection I wouldn't describe it as a good paradigm for organizing behavior. I much prefer my programs to have a sort of top down structure, more like a military instead of an economy. Obviously late-binding and dynamic behavior is many times necessary, but I would not lean in to it, in the same way I would not say, make all my variables global just because sometimes you need it.
- bmitc 2y agoBut many times, such top-down structure cannot work, especially if your program interacts with external systems, such as hardware. In such systems, you need a model in your program that is very similar to biological systems. For example, a module that interacts with hardware needs to be self-sufficient and asynchronous, interacting with the rest of the system through messaging. Even if there is a top-down structure at the higher-level, such structure cannot fully dictate how the hardware behaves or performs. For example, someone outside of your program could go off and change settings on the front panel.
- pakl 2y agoIMHO (from the viewpoint of a neuroscientist) the biological inspiration is quite measured and restrained in his work… The problem he was proposing we solve is computing with heterogenous “machines”. This doesn’t preclude the regimented organization you are favoring, above. Please see my other comment on call-by-meaning.
- cxr 2y agoThis is also why the "computer science" label (until now) never really made sense for traditional programming; you start from an intention to reach a goal, and contrive a system that can achieve it, generally understanding the means by which it is accomplished from end to end—or at least you have the option of zooming in from a given level of abstraction to a lower one to work out how the pieces fit together there and play their part in getting us where we're aiming at the highest level. Science isn't that. Science is what humanity has to resort to when a thing is not knowable by other means—the preferred from for modification is not at hand. Generally, when someone is doing something akin to science where traditional software development is concerned, it's regarded as sloppy—that you need to stop goofing around and actually do the work of understanding and reasoning about what you're dealing with instead of poking at it and making observations and inferences. This is different now with black box systems like LLMs and other neural networks (transformer-based or not) that we don't understand because they were never actually designed from a blueprint that lends itself to an understanding by others that approaches the understanding of the originator(s). There's an argument to be made that our avoidance of systems that call for actual science and our attraction to focusing on the smaller subset consisting of grokkable systems, out of a larger set of possible ones, is an indication of immaturity. It's parochial and blinkered. We are big fish in a small pond.
- lcuff 2y agoDoes anybody have a pointer to a good description of what Alan Kay means by messaging?
- pakl 2y agoAt Alan Kay’s Viewpoints Research Institute, the problem was phrased in a more concrete form and a solution was provided — “Call by Meaning”[0]. The most succinct way I have found to state the problem is: “For example, getting the length of a string object varies significantly from one language to another... size(), count, strlen(), len(), .length, .length(), etc. How can one communicate with a computer -- or how can two computers communicate with each other -- at scale, without a common language?” [1] The call-by-meaning solution is to refer to functions (processes, etc) not by their name, but by what they do. VPRI provided an example implementation in JavaScript[0]. I re-implemented this -- a bit more cleanly, IMHO -- in Objective C[1]. [0] http://www.vpri.org/pdf/tr2014003_callbymeaning.pdf http://www.vpri.org/pdf/tr2014003_callbymeaning.pdf [1] https://github.com/plaurent/call-by-meaning-objc?tab=readme-ov-file https://github.com/plaurent/call-by-meaning-objc?tab=readme-...
- toast0 2y ago> The call-by-meaning solution is to refer to functions (processes, etc) not by their name, but by what they do. This seems like call by an even longer, more difficult to use name. And it would seem to rely on a common language to describe functions/methods, which clearly we don't have or everyone would use the same names for things that do the same thing already.
- pakl 2y agoThink about it. A “meaning” in this usage is definitely not a longer name.
- toast0 2y agoFrom the doc you linked we have var clock = K . find ( "(and (variableRepresents that thing) (typeBehaviorCapable-DeviceUsed thing (MeasuringFn Time-Quantity)))") So if I want a clock instead of using the name system.timer, now I need to know the much longer name. Maaaybe you think I can reason about the parts of this name, but it's just a longer string with funny syntax. And it's only really useful if we all agree on the language of description, which if we had a common language of description, we wouldn't have the problem this is trying to address. If you've got an example of a real system using this where it's actually better than searching docs, or learning what the language of today uses to measure the size in bytes and the size in codepoints and the size in glyphs, please link to that. But this feels like yet another thing where if everyone agrees about the ontology, everything would be easier, but there's no way everyone would agree, and there's not even an example ontology.
- Animats 2y agoKay's ideas about "messaging" were never communicated well. He seemed to be arguing for a pure imperative style. You send a message to make something happen. This is the opposite extreme from pure functional programming. A style of programming where everything is an imperative statement with no return value might be possible. GPU programming is kind of like that. Neural nets are like that. There's an analogy to biology, which doesn't seem to do function calls but does push information around. That apparently appealed to Kay. Functional programming makes things local. Pure imperative programming makes things global. This is hard on human programmers. It takes more short-term memory than most humans have to work in pure imperative mode. Kay was heavily into discrete-event simulation. That's what Simula had objects for, and that's where Smalltalk got objects. All those objects are sending messages to each other, driving the simulation forward. The original Smalltalk paper has discrete-event simulation examples. It's possible to build a GUI as a discrete-event simulator, with all the widgets sending one-way messages to each other, but that's seldom done. Discrete-event simulation became a tiny niche in computing. Kay thought of it as a central organizing concept for computing. That's not where the field went.
- ninetyninenine 2y ago> Neural nets are like that. No neural nets are functional in nature. Each neuron is a combinator which is the fundamental and most modular unit of abstract computation. The net is simply a composition of these combinators. Training the neuron though is imperative because data is discrete. You have to train one piece of data after another. >GPU programming is kind of like that. Not true. See futhark. What's going on here is that the high level language is imperative. Why is the high level language usually imperative? Because the implementation of computing is usually imperative. Assembly whether it's for the CPU or GPU is imperative by implementation. But the high level abstraction on top of these things don't necessarily need to be imperative. >Functional programming makes things local. Pure imperative programming makes things global. What do you mean by this?
- TZubiri 2y ago>Kay's ideas about "messaging" were never communicated well. Yeah, he just started one of the most popular programming styles that is still taught in universities (even if a different version than the one he envisioned) > He seemed to be arguing for a pure imperative style. You send a message to make something happen. This is the opposite extreme from pure functional programming. A style of programming where everything is an imperative statement with no return value might be possible. Agreed, OOP is orthogonally opposite of pure functional programming. Objects have state. Big revelation. >Functional programming makes things local. Pure imperative programming makes things global. This is hard on human programmers. It takes more short-term memory than most humans have to work in pure imperative mode. Imperative programming =/= OOP, are you even aware of OOP and its relation with Alan Kay? Not sure if I should argue anything here, but in summary, OOP doesn't make things global, it precisely limits the knowledge and effect of objects, its originally inspired by cells, which have cell walls and communicate via specific hormones with other cells. Have you ever used a language with private modifiers to variables or something? On simulation, it's worth noting that OOP was developed when the prevailing architecture was a full-local monolith, with the advent of the internet the prevailing architecture was client-server and microservices. In this context OOP becomes the default, and objects no longer need to be simulated, but are natural objects in the world. A GUI is an object nowadays, some HTML running in a browser, and the server is another object, a server running in AWS. > Kay thought of it as a central organizing concept for computing. That's not where the field went. Absolutely the opposite, the only central organizing concept would be the scheduler/simulator I guess? Since machines were usually single processor machines, there was a central abstraction that allowed independent objects to exist, processes for example are designed to be separate and independent, you can separate them across machines or run them in the same machine without much difference, you wouldn't argue that processes are a form of centralized computing? It's a feature designed precisely for the opposite, independence of compute and memory fractions. The fact that many independent processes/objects run in the same computer and that it somehow needs to allocate compute resources between them, is not a central architecture. Are hypervisors and Virtual Machines a centralized computing architecture? That's just ridiculous. It's quite the opposite. There's a federated layer in VMs, in processes and in Object Oriented Languages yes, but it is completely practical removable and splittable into separate physical layers due to the nature of its design.
- dang 2y agoRelated. Others? Alan Kay on Messaging (1998) - https://news.ycombinator.com/item?id=9481074 https://news.ycombinator.com/item?id=9481074 - May 2015 (61 comments)
- naveen99 2y agohttps://hn.garglet.com/similar/stories/41685824 https://hn.garglet.com/similar/stories/41685824
- virtualbluesky 2y agoAnother way to look at it is by analogy. You pick up a cup, the cup warms your hand uncomfortably, so you put it down. You and the cup are objects, and physically send messages as you interact. That leads to changes in the physical world as each actor decides what to do with the incoming information, by physics or by conscious action. So far so good. Except software is just information, and so the software version of that interaction includes the "person put hot cup down on table" event. That interests somebody, so they rapidly express their displeasure and rush to put a coaster underneath... And that is valid a model of computing. Direct messaging between interacting objects, a stream of events of the produced changes, and actors that consume that stream for things and optionally chose to initiate a new interaction