Notes on Alan Kay's "Rethinking Design, Risk, and Software" (2016)

3rd April 2020 - 16:01:32 - 6742 characters

From Alan Kay's 2016 talk on Rethinking Design, Risk, and Software, Kay explores the link between traditional engineering and software engineering as well as questioning whether all the existing complexity is necessary.

The New York State Building was an unequivocal success - 85 stories of steel and granite in six months. The project involved 3000 people - a scale of human power that no software project would be able to contemplate using. Kay notes that a foreman's notebook was found and reproduced, titled Building the Empire State, and represents the step by step creation of the building itself. In interviewing potential construction teams, asked "What tools do you have for this jobs?", to which Paul Starrett replied "Not even a pick or a shovel. Gentlemen, this building of yours will represent unusual problems. Ordinary building equipment won't be worth a damn on it. We'll buy and make new stuff fitted for the job. It costs less than renting second hand stuff and it's more efficient". This is the exact opposite for what is stated in software engineering.

The New York State Building was optimized for the construction project itself. Each floor had a narrow gauge railway that was on every floor of the building. There were twice as many elevators during construction as when it was completed with these elevators installed and used only during development.

Roman engineering still stands up two thousand years later. That is the state of excellence our engineering projects should work toward.

Software engineering is frozen in time however. Whilst we have hundreds of languages and decades of computing, the standard programmer works in the same way as they would have decades ago. The languages mirror the storage and structure of the machine, not the structure of the tasks we tackle. We haven't reconsidered the brick. We haven't come to terms that some projects will require more construction and resources than the final product uses - such as an arch.

If you are willing to reconsider the basic building blocks, and if you're willing to get to work on what matters forgetting whether a task should be simple or hard, you may come away with a thesis like Ivan Sutherland's. In a single year his thesis, Sketchpad, an interactive system that computed by placing constraints that Sketchpad had to figure out. You provided the nature of the problem to Sketchpad and it would use three different solvers. He also invented computer graphics and object oriented programming as part of this.

How could you do these three things in one year? He said he didn't know it was hard. Ivan is a genius but he also had the advantage of just aiming for what we really needed. He didn't worry about whether it was easy or hard because nobody knew what was easy or hard in 1962. He just went for what we needed - an interactive system where you could sort of show what you wanted and then tell it what the criteria was to finish the job up and it'd finish the job up. Too bad we don't have it today.

Referencing Dan Amelang's nile, allowing for a 2D vector graphics renderer in only 200 lines of code, and Alex Warth's thesis he notes that the entirety of the rendering engine for his slide presentation is implemented in a few hundred lines.

At some stage you must "make an algebra" for your problem - collapse all the things that seem artificially dissimilar into things that are similar.

The higher level domain specific / problem oriented languages he creates that allow for a single line of complexity are lowered into representations closer to machine language. He bemoans existing compiler courses as they're far too complicated and will confuse students at worst or convince students it's too complicated at best. As you get closer to the bottom of the system you begin using these base components over and over again but keep the high level problem oriented language at the top. With this tactic they're able to implement TCP/IP in only 160 lines of code. The key was less the language as the method, allowing the complicated task to collapse down.

With his software he creates a demo of ants gathering food. The simulation uses 11,000 parallel processes as each cell diffuses the pheromone that the ants lay down. Each ant follows the pheromone trail of other ants who have successfully found what they intended. The ants are loosely coupled. He notes that this could be readily extended to text, even an encyclopedia, by having these ants operate on paragraphs. Following the ant that was in front of you, especially if it's successful, is akin to attention and an obvious form of supervision that a child might use. All of the editing of this simulation is simply another document part of the same suite as his presentation.

What you want is a universal document and different ways (of interacting with it). You really don't need to have a different system for the world wide web as it's just a different way of accessing these multimedia documents.

Kay hoped that Moore's law would enable software to evolve beyond brittle and specific gears to systems that were resilient, operationally independent, and featured loose coupling. This is how the Internet successfully grew to the scale it has. He mentions the idea of "an operating system for the Internet" - what would you need to allow for a system to operate at the scale of the Internet itself? The LOCUS distributed system architecture is a classic book with the first two chapters considering the issues that need to be solved.

The Internet could be simple except for the legacy of the Internet itself. If you think about analogies for the scaling that's going on here it begins to look like a biological ecology. This system has its own dynamics and must be thought about in specific ways. The ability to scale Moore's law will require us to think more and more like this. Minsky's Society of Mind was also referenced.

The system that Kay demos is less than 20,000 lines of code and doesn't use any of the Macintosh software. Kay would spend $28,500 for a laptop - the same cost as an average car - as he sees the full possibility it represents. The majority of the world would only pay as much for a laptop as a television however as they see it only as a consumption device, not a device through which they can create.