Notes from "Daddy, Are We There Yet?" Alan Kay's talk at O'Reilly Emerging Technology Conference 2003 Cory Doctorow doctorow@craphound.com Please see the end of this file for corrections to the notes below -- The last 20 years of the PC have been *boring*. PC vendors aim at businesses, who aren't creative in their tool-use. They're adults: they learn a system and stick to it. We should think about children. The printing revoltuion didn't happen in Gutenberg's day, it happened 150 years later, long after Gutenberg was dead, when all the pople alive had grown up with the press. A small minority of Gutenberg's contemporaries *got* the printing press, but it wasn't until they were dead that the children who grew up with the press were able to put the ideas into practice. James Licklieder: in a couple of years, human brains and computers will be coupled. It hasn't happened yet. Except in science, where scientists and computers are indeed thinking as no human brain has ever thought before. Most of us are instrumental reasoners, though. We judge tools and ideas solely in terms of our current goal-structures. We reject things if they don't contribute to our current goals. Adults have too much context -- too much stuff that works pretty well, and "pretty well" is the enemy of improvement and vice-versa. [[Demoes the UI for Sketchpad, Ivan Sutherland's doctoral thesis project from 1963 -- a vector art program led by a lightpen, running on a TX2 computer the size of a building]] When Ivan Sutherland looked at the Sketchpad output, he asked what else can it do? What can it do that current tools can't? It was the first object-oriented software system that Kay knows of. It was written by one guy in one year, inventing OO and constraint-solving and computer graphics along the way: how did he accomplish it? "I didn't know it was hard." You can d/l this thesis from the MIT library for $6 -- it's comparable to Newton's acheivements. He wrote the app between 3AM and 6AM over the course of a year, because the rest of the time, the mahcine was dedicated to air-defense. Steve Russell implemented "Spacewar," based on EE Doc Smith's novels on a PDP1 in 1963 -- the original video-game. This became the benchmark app for all video systems and it required OO. That was also 40 years ago. John McCarthy invented PDP1 interactive LISP -- a metainvention, the Maxwell's Equations of programming. Today is the 40th aniversary of the first interactive implementation by a 16-year-old Peter Deutsch. It was the first time a programming language became an operating system. [[Shows Englelbart's NLS demo from 1968 -- Engelbart with a a mouse, a keyboard and a video-terminal, looks completely modern. A computer glitch reveals that Kay has hacked his own PowerPoint replacements, alll OO, natch. Engelbart draws a map. Annotates it. Does semantic lookups from a database. Sub-second responsiveness from a 0.5MIP 192k machine that was time-shared, located 40 mi away]] They accomplished this because they REALLY WANTED IT. They wouldn't setllte for any response that was more than sub-second. Today's users will settle for much much less -- less interesting. [[More Engelbart video: videoconferencing without latency, lip-synched to the audio, no visible jitter. They do collaborative whiteboard sharing.]] This immersive sharing was so popular that they'd even use it when they were in the same room -- it was their way of life at SRI in 1968. In 1966, I created dymaic objects, influenced by pen-based systems and a biosciences background. [[Demos a pen-based system that looks like a Newton draw program from 1968]] [[ED: Now I know why Heinlein's computers worked the way they did -- he was watching these awesome demos!]] This stuff is better than anything in our handhelds today. We could implement it from they papers they wrote then, but no one reads the papers that were written in the 60s. Seymour Papert proposed that kids would learn differential geometry on wireless laptops in the 60s. We've gone through a couple generation of kids since the PC and we haven't taught them anything. We need to put a lot more effort into the systems that we build for kids. Kids are the only people who do two-handed, Engelbart interfaces. This is the 30th birdthday of the Alto from Chuck Backo from Xerox PARC. It was a chance to get a PC into schools -- making a PC interesting for kids was the hardest part of the design. Today, kids program by designing cars in paint programs. They aren't necessarily interested in ideas -- they want to role-pplay to. [[Demos Logo-like OO properties of the painted car. It's Squeak. Demos squeak-like scripting properties. Audience is laughing. Creates steering wheel and drives car around. Wild applause]] What's the difference between this and the programming we do? Why shouldn't all programming be like this? [[ED: I miss Hypercard! I miss Logo!]] [[Demos a series of amazing, kid-centric science learning tools, shows videos of small children who've mastered matehmatical concepts that 70% of college students fail to acheive in their courses]] [[Shows how to make a Spacewar game from scratch in a few seconds]] [[Demos a cellular automata car that stays in the middle of the road, written by 2 11-year-old-girls, after six weeks' worth of one-day-a-week courses]] [[Demos an 11-year-old-boy's homemade animation, with rates/sampling notions]] [[Shows how this can be used to create goal-seeking ceullar-automata -- a salmon that can figure out which way is upstream in a graphical sim; then shows ant-colony sim written in Squeak]] [[Shows how this can be used to simulate epidemiological dispersion]] [[Demos a pre-alpha experimental teaching app]] The Internet was desinged to solve an N^2 problem -- P2P networking without a crossbar switch. There are 2^N possible subgroups in a group of N nodes. How to solve this in a P2P universe? [[Shows a fly-though VR interface for collaboration, P2P. The objects are resizable and movable.]] Replication architecture doing realtime transactions over the slow Internet. All objects have their own messages, but we don't have to worry about a master protocol -- every object can communicate to its peers in order to remain in synch. [[Demos amazing stuff that I can't possibly describe. Like a multiplayer first-person shooter, but designed for collaboration and spatial exploration.]] This is all running on a 2lb ultralight laptop. This is all written in SmallTalk and Squeak. [[Demos amazing realtime 3D high-rez graphics effects]] [[Demos drawing new objects into the environment and having them spring to simulated 3D life]] [[The system figures out what a 3D representation of an object is based on the implied perspective in a 2D drawing. a child figured out that this was possible]] [[Demos how window-objects in the VR can suck in web-pages from the public Internet]] [[This is the metaverse, done right -- the spatial metaphor gets out of the way when inconvenient, so if they want to jump to some other spot that's "far", they can]] [[They demo telephony as well -- you need to have your hands free to navigate, so telephony is the collaborative medium]] Unlike Java, this runs bit-identical on every machine -- we invented this 20 years ago. Squeak is its own OS. This kicks PowerPoint's ass. PPT is retrograde. Applications and OSes are retrograde. We killed them in the 1970s, but we used the wrong kind of wood when we staked that vampire. DO LATE BINDING! Java can't add code to itself while running -- LISP could do this 40 years ago. All the stuff we've demoed, includeing the OS is 2.8MB, 230K lines of code, but we're trying to knock it down to 20K lines of code. There are 1.8MM objects in this system. ============== Here are some corrections to these notes, from Alan Kay and Peter Deutsch, as sent by email From: "L. Peter Deutsch" Date: Fri Apr 25, 2003 8:08:14 AM US/Pacific To: Alan.Kay@ Cc: raph.levien@ doctorow@craphound.com Subject: Re: Alan Kay mentioned you in his Emerging Tech keynote > http://craphound.com/kayetcon2003 There seem to be a number of errors of factual detail in these notes, but since I assume they were written down by hand, the errors might be the transcriber's and not Alan's. With respect to my high school Lisp work: > John McCarthy invented PDP1 interactive LISP John invented the Lisp language, but as far as I can remember, he had nothing to do with the interactive implementations. > -- a metainvention, the Maxwell's Equations of programming. Today is > the 40th aniversary of the first interactive implementation by a > 16-year-old Peter Deutsch. This year, but not today. I started it in '62 and finished in late '63. > It was the first time a programming language became an operating > system. I'm assuming this means something like "the first time that there was no distinction between the library functions callable from the programming language and the functions provided by the OS, and no architectural boundary between OS functionality and the PL implementation." If that's the case, I'm quite sure the statement is wrong. I'm pretty sure the early FORTRAN "monitors" didn't have an OS layer distinct from the language processor; certainly the only I/O functions were statements in the language. JOSS definitely predates PDP-1 Lisp. And I think Dartmouth BASIC also predates PDP-1 Lisp slightly, although I could be off by a year or two. > Java can't add code to itself while running Actually, that's not true. There are elaborate and careful facilities in Java for loading new (compiled) code during execution in a type- and even security-safe way. It's true that this only applies to compiled code, but in a wired / wireless world, you don't have to have the compiler in the same physical box as the runtime environment. > All the stuff we've demoed, includeing the OS is 2.8MB, 230K lines of > code The Squeak (development) system for Linux, as distributed, is approximately 10 Mb of executable image derived from 417K lines of Smalltalk source code, plus 0.8 Mb of 80x86 executable code derived from a hard-to-determine amount of C source code (somewhere between 20K and 130K). Presumably what Alan demoed was a stripped system lacking the development tools and a lot of other stuff. For a system like that, 2.8Mb is quite believable. > Squeak is its own OS. Hmmm.... I suppose there is a version of Squeak that includes its own file system and network protocol implementations, although that isn't the one I run. I wonder if it has its own fsck for establishing file system integrity after a crash. The Squeak interpreter can't deliver high computational performance, so its amazing graphics performance depends critically on coding exactly the right set of mid-level operations in C or C++ (or the C-equivalent Smalltalk subset that was designed specifically for implementing Squeak's underpinnings). I wonder how much of this code there is under the hood. -- L. Peter Deutsch | Aladdin Enterprises | 203 Santa Margarita Ave. No government censorship of software! Oppose the CBDTPA! www.eff.org -- From: Alan Kay > http://craphound.com/kayetcon2003 > > There seem to be a number of errors of factual detail in these notes, > but > since I assume they were written down by hand, the errors might be the > transcriber's and not Alan's. With respect to my high school Lisp > work: > > > John McCarthy invented PDP1 interactive LISP I did mention that John's invention was the universal interpreter in itself and that Steve Russell and others did the earlier original implementations, but that you did the PDP1 version. So this got garbled. > > John invented the Lisp language, but as far as I can remember, he had > nothing to do with the interactive implementations. > >> -- a metainvention, the Maxwell's Equations of programming. Today is >> the >> 40th aniversary of the first interactive implementation by a >> 16-year-old >> Peter Deutsch. > > This year, but not today. I started it in '62 and finished in late > '63. I'm pretty sure I said just this, as you reported to me yesterday. > >> It was the first time a programming language became an operating >> system. I didn't quite say this in this way. > > I'm assuming this means something like "the first time that there was > no > distinction between the library functions callable from the programming > language and the functions provided by the OS, and no architectural > boundary > between OS functionality and the PL implementation." If that's the > case, > I'm quite sure the statement is wrong. I'm pretty sure the early > FORTRAN > "monitors" didn't have an OS layer distinct from the language > processor; > certainly the only I/O functions were statements in the language. JOSS > definitely predates PDP-1 Lisp. JOSS is another of my favorites. > And I think Dartmouth BASIC also predates > PDP-1 Lisp slightly, although I could be off by a year or two. I was thinking about not just a standalone load in core, but what you could do once you were there. I think there was a clear difference in control of everything dynamically in what you did compared to these other systems. > >> Java can't add code to itself while running I meant source code. > > Actually, that's not true. There are elaborate and careful facilities > in > Java for loading new (compiled) code during execution in a type- and > even > security-safe way. It's true that this only applies to compiled code, > but > in a wired / wireless world, you don't have to have the compiler in > the same > physical box as the runtime environment. > >> All the stuff we've demoed, includeing the OS is 2.8MB, 230K lines >> of code I was counting the size of all the compiled methods in the system (and said so) including the VM simulator, etc. not the size of the image. This was 2.8MB and is a nice measure. > > The Squeak (development) system for Linux, as distributed, is > approximately > 10 Mb of executable image derived from 417K lines of Smalltalk source > code, > plus 0.8 Mb of 80x86 executable code derived from a hard-to-determine > amount > of C source code (somewhere between 20K and 130K). Presumably what > Alan > demoed was a stripped system lacking the development tools and a lot of > other stuff. For a system like that, 2.8Mb is quite believable. > >> Squeak is its own OS. I said OS-lite > > Hmmm.... I suppose there is a version of Squeak that includes its own > file > system and network protocol implementations, although that isn't the > one I > run. I wonder if it has its own fsck for establishing file system > integrity > after a crash. > > The Squeak interpreter can't deliver high computational performance, > so its > amazing graphics performance depends critically on coding exactly the > right > set of mid-level operations in C or C++ (or the C-equivalent Smalltalk > subset that was designed specifically for implementing Squeak's > underpinnings). I wonder how much of this code there is under the > hood. All the graphics and sound stuff is done via the VM simulator except for OpenGL which is only used for the 3D stuff at present. Cheers, Alan -- From: "L. Peter Deutsch" Date: Fri Apr 25, 2003 8:08:14 AM US/Pacific To: Alan.Kay@ Cc: raph.levien@ doctorow@craphound.com Subject: Re: Alan Kay mentioned you in his Emerging Tech keynote Alan, Thanks a lot for the clarifications. > I think there was a clear difference in control of everything > dynamically > in what you did compared to these other systems. In the sense that PDP-1 Lisp didn't interpose any facilities between the language and the hardware, yes, I agree it was different from FORTRAN, BASIC, and JOSS. TRAC, on which I was working with Calvin Mooers just a year or two later, was actually intended to have the same property. Calvin had the vision for that before I came along -- he was writing about it (coming from a very different perspective than either yours or mine) in the 50's. But TRAC didn't have a real implementation before the one I did around '63-'64. (It may not have had *any* implementation before that -- I don't remember now.) > I was counting the size of all the compiled methods in the system (and > said so) including the VM simulator, etc. not the size of the image. > This > was 2.8MB and is a nice measure. But I don't think it's an entirely realistic one. You can't *run* a system that has only the compiled methods and the interpreter. At the very least you need the method dictionaries, the class objects, and the class variables and whatever they're holding, together with whatever the object overhead is for those things, to be on a par with what would be included in a conventional executable. Did you actually include all of that in the total? Also, you don't need the strings for the method selectors, but you do need selector objects of some kind to use as literals in the compiled methods and as keys in the method dictionaries. Yes, I know you can use non-object tokens, but I'm talking about what Squeak *actually* needs to be able to run. Or does Squeak have good "stripping" technology that explicitly gets rid of things like selector objects? > All the graphics and sound stuff is done via the VM simulator except > for > OpenGL which is only used for the 3D stuff at present. Are you saying that for all the dynamic 2D graphics in the demos, Squeak code was generating every pixel and writing it directly into the frame buffer? Animating an object that takes up 1/10 of a megapixel screen at 30 frames/second requires computing 1/10 x 1M pixels/frame x 3 bytes/pixel x 30 frames/second = 9 megabytes/second. Even 1/2 or 1/3 that rate (for "toy" animation) is a bit hard to believe. Pseudo-color gets you another factor of 3 (although it loses transparency and shading), so now we're getting into a more believable range. OTOH, how fast was the CPU on the machine you were using for the demos? Sound is much easier to believe -- MIDI sound quality is only something like 30K samples/second, right? These are relatively small things. Squeak, especially in its self-hosting aspect, is a delightful and impressive accomplishment. -- L. Peter Deutsch | Aladdin Enterprises | 203 Santa Margarita Ave. No government censorship of software! Oppose the CBDTPA! www.eff.org