3 ms·
When a programmer today tries to understand what Kay is saying, they usually get caught up with decades of intellectual structure labelled "object oriented prog
by madhadron 8y ago
When a programmer today tries to understand what Kay is saying, they usually get caught up with decades of intellectual structure labelled "object oriented programming." You need to go back to the influences he's pointing at as instrumental and see what the words meant in the zeitgeist of the time. And you also need to tease out what parts have become implicit in our own zeitgeist and what haven't. Then you need to figure out what implications the sum of all the parts that haven't are.
This isn't an issue just with Kay. It's true for basically any intellectual structure you care to engage with. The definition of "gene" in biology is a similar case, but that's a rant for a different time.
For example, when he says dataless programming, he points to a couple of papers. For example, Balzer's "Dataless Programming."[1] Go read the abstract. It's talking about the algorithms part of the C++ Standard Template Library and the idea that you shouldn't have to rewrite your program just because you're changing from an array to a linked list.
But that's not all. Add "the cell/whole-computer metaphor would get rid of data, and that "<-" would be just another message token." That is, why stop with the Standard Template Library? A program made of assignments, loops, and conditionals is as much a formal object as a linked list. Why should we have to rewrite it when the "data structure" is changed from running as a traditional program on a single core messing with registers to having its state stored in a distributed tuple space and steps in it being executed by workers that pull them off a queue?
This is where his math background really comes in. For a mathematician, the algebra of structured programs is the same in kind as the algebra of numbers or the algebra of sequences of numbers or the algebra of topology preserving mappings of a space. What Kay was trying to get at was a way of letting you write an expression in such an algebra and be able to bind it to whatever instantiation of the algebra you might want, including ones that don't exist yet.
To do that, all the pieces of your language have to be of the same kind, whether they be numbers, lists, types, or loops. And here's our big delta from "everything is an object" in familiar languages to what Kay was talking about. In Ruby, Python, JavaScript, or Java (let's ignore Java's primitive types for now and pretend boxing is all smiles and rainbows) the only things that are objects are the things that were values in structured programming languages. That's why Kay doesn't see these as object oriented.
Also, consider his comment "I don't know of any type systems that aren't a complete pain, so I still like dynamic typing" against this background. It suddenly feels a lot more reasonable. A type system for this kind of work is basically pointing Kanren at your expressions and writing a logic program to reason about your domain. Then, next week, when you change the algebra substantively, that logic program might be almost unchanged or may have to be almost entirely scrapped and rewritten.
[1]: https://www.rand.org/pubs/research_memoranda/RM5290.html https://www.rand.org/pubs/research_memoranda/RM5290.html