There are sound reasons why no substantial system in common use is coded in Smalltalk. Kay could have spent the decades since his time at PARC figuring out why, and remedying them. One of the reasons is that O-O is just one of several important ways discovered to organize software. Any big enough problem will have places for each. Specialization is for insects.
you may or may not be aware that when he headed vpri, they did some substantial research into some of the other important ways to organize software, including things like array languages, david p. reed's work on spatially replicated computation, and cooperating communities of specialized solvers. in this talk, he also mentioned gelernter's tuple-space architecture, though you may have missed it. he definitely isn't arguing that oo should be the universal way to build everything, much less smalltalk; he's lamenting that no better paradigm than their research prototype has emerged since then
however, i do agree that there are some advances made since then that he doesn't fully appreciate, things like the importance of free-software licensing, roy fielding's work on architectural styles, recent advances in formal methods and functional programming, and the web's principle of least power
With a live programming model: https://en.wikipedia.org/wiki/Live_coding
It would be cool to be able to just click on anything and adjust its code to however you like it. I guess that Smalltalk and its descendants allow this. But so does Emacs. It's not an operating system, but it covers a lot of the use-cases.
You would need live routing of messages. And the ability to reroute, filter, inject messages dynamically into code.
Why must everything be done as a function call? You can’t change anything without recompiling the code.
Today everything is implemented as a function call. Need to send a message? Call a function named “snd_msg” or something.
There are sound reasons why no substantial system in common use is coded in Smalltalk. Kay could have spent the decades since his time at PARC figuring out why, and remedying them. One of the reasons is that O-O is just one of several important ways discovered to organize software. Any big enough problem will have places for each. Specialization is for insects.
you may or may not be aware that when he headed vpri, they did some substantial research into some of the other important ways to organize software, including things like array languages, david p. reed's work on spatially replicated computation, and cooperating communities of specialized solvers. in this talk, he also mentioned gelernter's tuple-space architecture, though you may have missed it. he definitely isn't a…
And static type calculus as seen in the MLs, Haskell, and lately C++.
you may or may not be aware that when he headed vpri, they did some substantial research into some of the other important ways to organize software, including things like array languages, david p. reed's work on spatially replicated computation, and cooperating communities of specialized solvers. in this talk, he also mentioned gelernter's tuple-space architecture, though you may have missed it. he definitely isn't a…
And static type calculus as seen in the MLs, Haskell, and lately C++.
yes, although recent advances in functional programming and formal methods go a lot further than that
Wow, this guy Vannevar Bush was the definition of being early:
> Wholly new forms of encyclopedias will appear, ready-made with a mesh of associative trails running through them, ready to be dropped into the memex and there amplified.
The idea of computing as the shared stage to reflect our own intelligence is really what sticks out to me as the best way to frame what interacting with a computer means. It's not new but Alan did a great job of motivating and framing it here. Thanks for posting this great reminder that what we use as computers today are still only poor imitations of what could truly be done if we can transport our minds to be more d…
A first-class programming language (not an LLM) to talk to the computer's OS along with a rich library is the most important missing component IMO. Humans communicate mainly with language and no OS provides this in a satisfactory way for the average user. The result is users mostly clicking on signs to choose among predetermined tasks, like monkeys in a lab.
I agree. I think one way to achieve that is to first acknowledge the important distinction between modes of programming and levels of abstraction. See, even in programming, we’re still restricted to a given domain. A web dev does not program to the network stack, thus needs not to known NICs and TCP frames internals. The web dev only interacts with the lower levels via high level parameters (data) through the low level APIs, which are already done and settled, not directly with code. The same goes for each layer and domain. Now, expecting users to write actual code is not realistic or sustainable. What’s more reasonable is to imagine a scenario where users needs only to give the parameters for the functions which are already done and settled. So, composing super high level functions in an environment which disposes of an extensive library of utilities seems the way to go. Users already do parameterization everyday, such as when they press buttons and fill forms. What’s missing is simply an abstraction which gives them the power to compose those functions. Regarding the paradigmatic framing for an end user language, I think stack-based programming offers a superior model, because the context window is directly visible and easy to track and reason, but more than that, stack languages offer a good avenue for learning, since it’s the easiest model to teach by analogy, even physical analogies can be made. It boils down to just pushing and popping in a coherent order. The order of operations is in fact the program. Hard to beat this simplicity and universality.
I heard of Alan Kay via Steve Jobs's intro of the iPhone [1], but otherwise know little about him - can anyone recommend other Alan Kay talks/essays/books? [1] https://www.youtube.com/watch?v=VQKMoT-6XSg&t=10m2s
Alan Kay won the Turing Award in 2003 for, "For pioneering many of the ideas at the root of contemporary object-oriented programming languages, leading the team that developed Smalltalk, and for fundamental contributions to personal computing." His Dynabook [1], developed during the 70s, is the predecessor of modern tablets and laptops.
And static type calculus as seen in the MLs, Haskell, and lately C++.
yes, although recent advances in functional programming and formal methods go a lot further than that
This is really interesting; it’s really cool to think about the “statics” and “dynamics” of programming, and I while I have a basic understanding of functional programming (both the dynamic world of Scheme and the static world of languages like Standard ML and Haskell), I’m unfamiliar with these recent advances in functional programming and formal analysis. I’m wondering if you could share some links or references to some of this material?
yes, although recent advances in functional programming and formal methods go a lot further than that
This is really interesting; it’s really cool to think about the “statics” and “dynamics” of programming, and I while I have a basic understanding of functional programming (both the dynamic world of Scheme and the static world of languages like Standard ML and Haskell), I’m unfamiliar with these recent advances in functional programming and formal analysis. I’m wondering if you could share some links or references to…
i'm not the best person to ask, and i don't really know where to start
tla+ is getting uptake in industry, idris is sort of making dependent types practical, acl2 has more and more stuff in it, pvs is still around and still improving, adam chlipala keeps blogging cool stuff, so does hillel wayne, sel4 is an entire formally-proven-secure microkernel, you can try compcert on godbolt's compiler explorer, ləɐn has formalized significant mathematical definitions that working mathematicians use actively while metamath has an extremely convincing approach to proof and an ever-growing body of proofs of basic math, smt solvers like z3 are able to solve bigger and bigger problems and therefore able to tackle bigger subproblems of verifying software (and are easily apt installable and callable from python or from cprover's cbmc), cryptocurrency smart contracts have an incentive to be correct in a way that no previous software did (and people are applying at least idris to at least ethereum), ...
There are sound reasons why no substantial system in common use is coded in Smalltalk. Kay could have spent the decades since his time at PARC figuring out why, and remedying them. One of the reasons is that O-O is just one of several important ways discovered to organize software. Any big enough problem will have places for each. Specialization is for insects.
The reason is called Java, and having all key Smalltalk vendors pivoting into Java.
Smalltalk was the ".NET" of OS/2, and Visual Age for Smalltalk code browser still lives on Eclipse.
Then there are those Objective-C and Ruby developers still around, heavily influenced from Smalltalk.