Hacker News new | ask | show | jobs
by alankay1 3651 days ago
Good question. If we are talking "real OOP", I'm not sure these days. What do other people think?

Smalltalk is very long in the tooth these days, but it is still "rather object-oriented in good ways".

Erlang and its derivatives are fun and good to help that kind of thinking.

2 comments

What do you think is missing from Smalltalk, and what would you expect for the "21th century Smalltalk" if there was such think?

Even though is "old", I find it extremely valuable for learning to think and reason in a pure OO fashion.

It's worth thinking about what scales and what doesn't scale so well. For example, names are relatively local conventions. We could expect to have to find better ways to describe resources, or perhaps "send processes rather than messages". Think about what's really interesting about the way Parc used what became Postscript instead of trying to define a file format for "documents" for printers ... (a programming language can have far few conventions and be more powerful, so ...)
Granted, names have their problems. But as a tactical solution URLs can be used to send high-level messages or at least as a name resolution scheme to initiate communication between two or more OO systems. And URLs are just names... (credit where it is due: I first heard the thought expressed by you and it gets the job done until something better comes along)

Admittedly this does not (directly) address the issue of sending processes (which could be handled indirectly as payload.) Or am I missing the bigger picture you're driving at here?

Keep on turning the crank ...

What if you need something but don't know its name or URL? Etc.

My example definitely presumed things like service discovery which gets you to URLs. But I think I see the larger point you make about what if you don't even know what kind services are available (which my example assumes you already know) and once told of their existence how do you negotiate their capabilities and usage (my example, as I envisioned it, completely falls apart here without some major plumbing which might require running an open sewage line through the kitchen. i.e. probably not the best way to do it)

P.S. I have found the team's work on STEPS quite thought provoking. If anyone could find the time once things settle down, it would be most appreciated if some quick docs re: how to reproduce (i.e. build) the Frank environment could be put together. (if they already exist, a pointer to them would be helpful)

One thing I've found about the web, as it exists, is that the people who set up a system for the outside world to use change it over time. The URLs change. The CGI their service will accept changes. As things exist now, a program must use "sticky" names, and if a name changes, all of a sudden the connection is broken, even though the exact same functionality still exists. It would be good if a program could find the functionality it needs based on a functional description of what it needs, rather than a name. That gets more to what's really important. I once complained to Alan that Smalltalk had the same problem. If I change the name of a class, all of a sudden all the code in the system that needs that class could no longer find it, even though I had changed none of its functional code. This seemed like an extremely brittle scheme for finding resources. The name is not the important thing about what a program needs. It's just a reference point that does nothing. Names are still good, because they allow us to quickly identify resources, but they should mainly be for us, not the program, because when you really think about it, a program doesn't care what something is called.
Thanks, Alan. I guess sometimes is hard to think about that level of scaling when working on the industry... or at least in projects that are not that massive.

I assume your are talking in the lines of "call by meaning" when you mention that names are relatively local, right?

As for "send processes rather than messages", isn't that what objects are about?

I mean...sending the real thing, not just "data" as part of a message. That reminds me of the Burroughs 220 and "delivering video + codec together" example you mention in your talks.

Modularity is: what is the minimum you need to know to make use of a module, and what is the minimum that a module needs to know to help you?

Making this good is one of the secrets of scaling

Im afraid I'm missing the point about "sending processes rather than messages".

The modularity thing sounds pretty much to well designed objects to me, but it seems that you're trying to make a difference between that and processes.

What do you have in mind or, better said, which could be a concrete example of it?

The question is whether a "message" has enough "stuff" to reify into a real process (so it can help interpretation and negotiation) or whether the receiver has to do all the work (and thus perhaps has to know too much for graceful scaling of the system).
Re. consider "send processes rather than messages"

Interesting thought to ponder!... What came to mind is Smalltalk-80 kind of did that, though the processes (blocks) were not in the "driver's seat" of the interaction. They came as "payload."

Smalltalk and Lisp (via CLOS) would still be my top two choices... haven't come across anything better yet.