1 00:00:00,255 --> 00:00:06,134 2 00:00:39,965 --> 00:00:45,764 3 00:00:48,060 --> 00:00:49,752 Thank you. 4 00:00:51,558 --> 00:00:55,044 Well, I presume most of you have been up all night. 5 00:00:56,041 --> 00:01:00,716 I can't imagine ever seeing this many programmers at eight o'clock in the morning. 6 00:01:04,910 --> 00:01:09,898 I guess this is the largest bathroom I've ever given a talk in. 7 00:01:13,984 --> 00:01:16,880 So, that was just a test to see if you could understand me. 8 00:01:17,180 --> 00:01:20,173 I can't actually understand myself up here. 9 00:01:21,236 --> 00:01:23,060 Now ... 10 00:01:24,362 --> 00:01:30,843 I actually haven't been to OOPSLA since the first one, and ... 11 00:01:31,642 --> 00:01:37,023 when I got invited to give this talk, I was thinking about ... 12 00:01:37,015 --> 00:01:42,425 Well, should I go, or should I not, or what should I do ... 13 00:01:42,923 --> 00:01:48,845 And it occured to me that this conference, on this day, ... 14 00:01:49,643 --> 00:01:55,757 ... is pretty much in the epicenter of the twenty-fifth anniversary of Smalltalk. 15 00:02:05,435 --> 00:02:10,618 The one page interpreter scheme that I wrote out 16 00:02:11,628 --> 00:02:14,820 was done just a few weeks ago twenty-five years ago. 17 00:02:14,921 --> 00:02:20,405 And the first working version of it was done in a few weeks from now 18 00:02:20,500 --> 00:02:25,116 twenty-five years ago, so this is about in the center, and ... 19 00:02:28,087 --> 00:02:31,883 Let me see if I can get our motto up on. 20 00:02:31,838 --> 00:02:33,932 Could I have that first slide, please? 21 00:02:34,182 --> 00:02:38,562 So, I thought one way ... I don't wanna ... 22 00:02:38,563 --> 00:02:43,744 I'm not gonna give a historical talk 'cause I finally discharged those obligations 23 00:02:43,745 --> 00:02:47,403 in the History of Programming Languages Conference a couple of years ago. 24 00:02:47,403 --> 00:02:52,063 But I thought it might be interesting for some of you 25 00:02:52,064 --> 00:02:57,182 who might not have been computing for the last twenty-five or thirty years, to ... 26 00:02:57,384 --> 00:03:00,386 ... take a two-minute trip. 27 00:03:00,583 --> 00:03:04,073 I believe that this set of images ... 28 00:03:05,974 --> 00:03:12,362 ... basically goes back to 1973 and 1974, at Xerox PARC, ... 29 00:03:12,365 --> 00:03:15,260 ... show some of the first children that we worked with ... 30 00:03:15,861 --> 00:03:18,748 The music that you'll hear on this clip 31 00:03:18,746 --> 00:03:21,935 was composed by one of the members of our group, Chris Jeffers. 32 00:03:22,838 --> 00:03:27,947 It's called "The Happy Hacker", in case you want a theme song. 33 00:03:27,947 --> 00:03:32,738 It's played in the real time FM synthesis 34 00:03:32,738 --> 00:03:35,837 that we developed for the Alto computer. 35 00:03:35,835 --> 00:03:42,510 So this is the forerunner of the workstations and the Macintosh 36 00:03:43,308 --> 00:03:47,394 without any additional sound synthesis hardware at all. 37 00:03:47,393 --> 00:03:51,486 Because why should you have that if your computer is designed well? 38 00:03:54,388 --> 00:03:57,485 And you'll just get a ... I think you'll get a little picture of it 39 00:03:57,486 --> 00:04:01,497 Before I turn on that clip, let's just for the heck of it 40 00:04:01,666 --> 00:04:04,555 see how many people are in this room today 41 00:04:04,961 --> 00:04:08,853 who participated in the Xerox PARC Smalltalk experience 42 00:04:08,853 --> 00:04:13,395 between roughly 1971 and 1983. 43 00:04:13,330 --> 00:04:17,736 Could you stand up? Let's see if we khow many people are actually here. 44 00:04:20,238 --> 00:04:22,833 Anybody without gray hair? 45 00:04:25,720 --> 00:04:27,315 Thank you. 46 00:04:27,860 --> 00:04:30,847 Okay, let's roll that, that clip. 47 00:05:27,062 --> 00:05:30,759 Well, that was things as they existed about twenty-five years ago. 48 00:05:32,550 --> 00:05:40,176 And the other thing I wanted to do in the beginning part of this talk ... 49 00:05:40,074 --> 00:05:42,466 I tried to figure out how to work my way into it 50 00:05:42,465 --> 00:05:46,470 and I finally remembered a paper that Dijkstra — 51 00:05:47,363 --> 00:05:50,750 I don't know how many of you have ever met Dijkstra 52 00:05:50,751 --> 00:05:54,643 but you probably know that arrogance in Computer Science 53 00:05:54,641 --> 00:05:57,342 is measured in nano-Dijkstras. 54 00:06:05,347 --> 00:06:12,713 And he once wrote a paper — of the kind that he liked to write a lot of 55 00:06:12,713 --> 00:06:17,536 which had the title "On the fact that the Atlantic has two sides". 56 00:06:19,130 --> 00:06:24,914 And it was basically all about how different the approaches to computing science 57 00:06:25,130 --> 00:06:32,911 were in Europe, especially in Holland and in the United States. 58 00:06:33,161 --> 00:06:35,755 And there are many interesting ... you know ... 59 00:06:35,523 --> 00:06:40,085 In the US, here, we were not mathematical enough, and ... 60 00:06:41,278 --> 00:06:47,067 Gee, in Holland, if you're a full professor, you're actually appointed by the Queen ... 61 00:06:47,068 --> 00:06:51,465 and there are many other important distinctions 62 00:06:51,467 --> 00:06:55,441 made between the two cultures. 63 00:06:55,462 --> 00:06:59,963 So, I wrote a rebuttal paper, just called 64 00:06:59,974 --> 00:07:04,659 "On the fact that most of the software in the world is written on one side of the Atlantic". 65 00:07:09,593 --> 00:07:13,378 And it was basically about — 'cause I have a math degree too 66 00:07:14,277 --> 00:07:18,360 It was basically about that computers form a new kind of math. 67 00:07:19,157 --> 00:07:20,451 You can't judge them. 68 00:07:20,451 --> 00:07:23,961 They don't really fit well in classical math and people who try to do that 69 00:07:24,662 --> 00:07:28,549 are basically indulging in a form of masturbation. 70 00:07:30,043 --> 00:07:31,839 Maybe even realizing it. 71 00:07:36,682 --> 00:07:41,477 And it was about that ... It was kind of a practical math. 72 00:07:42,473 --> 00:07:47,455 The balance was between making structures 73 00:07:47,456 --> 00:07:49,851 that were supposed to be consistent 74 00:07:49,852 --> 00:07:52,344 of a much larger kind than classical math 75 00:07:52,345 --> 00:07:55,490 had ever come close to dreaming of attempting. 76 00:07:56,624 --> 00:07:59,884 And having to deal with the exact same problems 77 00:07:59,885 --> 00:08:03,116 that classical math of any size has to deal with 78 00:08:03,310 --> 00:08:10,903 which is being able to be convincing about having covered all of the cases. 79 00:08:11,618 --> 00:08:14,312 There's a mathematician by the name of Euler 80 00:08:14,907 --> 00:08:19,232 whose speculations about what might be true 81 00:08:19,828 --> 00:08:25,979 formed twenty large books, and most of them were true. Most of them were right. 82 00:08:26,038 --> 00:08:28,330 Almost all of his proofs were wrong. 83 00:08:29,333 --> 00:08:33,319 And many PhDs in mathematics in the last and this century 84 00:08:33,650 --> 00:08:38,535 have been formed by mathematicians going to Euler's books 85 00:08:39,138 --> 00:08:43,359 finding one of his proofs, showing it was a bad proof, and then 86 00:08:44,752 --> 00:08:48,448 guessing that his insight was probably correct 87 00:08:48,449 --> 00:08:51,666 and finding a much more convincing proof. 88 00:08:51,770 --> 00:08:57,748 So debugging actually goes on in mathematics as well. 89 00:08:58,454 --> 00:09:03,836 I think the main thing about doing OOP work — 90 00:09:04,832 --> 00:09:07,924 or any kind of programming work, is that there has to be 91 00:09:08,022 --> 00:09:14,501 some exquisite blend between beauty and practicality. 92 00:09:14,451 --> 00:09:18,801 There's no reason to sacrifice either one of those 93 00:09:18,801 --> 00:09:22,350 and people who are willing to sacrifice either one of those 94 00:09:22,351 --> 00:09:26,051 I don't think really get what computing is all about. 95 00:09:26,567 --> 00:09:31,054 It's like saying I have really great ideas for paintings, but 96 00:09:31,256 --> 00:09:34,941 I'm just gonna use a brush but no paint 97 00:09:36,245 --> 00:09:40,969 So my ideas will be represented by the gestures 98 00:09:40,970 --> 00:09:45,053 I make over the paper. And don't tell any 20th century artist that 99 00:09:45,054 --> 00:09:48,082 or they might decide to make a videotape of them doing that 100 00:09:48,083 --> 00:09:49,579 and put it in a museum. 101 00:09:52,129 --> 00:09:53,486 So I thought ... 102 00:09:54,229 --> 00:09:57,620 I had this problem figuring out what to talk about. 103 00:09:58,823 --> 00:10:03,806 It's always difficult because technical people always seem to know so much. 104 00:10:04,401 --> 00:10:11,286 But it's interesting, again, to look at what is actually being done out in the world 105 00:10:11,387 --> 00:10:13,482 under the name of OOP. 106 00:10:13,979 --> 00:10:19,544 And I've been shown some very, very strange-looking 107 00:10:19,547 --> 00:10:21,747 pieces of code over the years 108 00:10:22,893 --> 00:10:26,685 by various people, including people in universities that ... 109 00:10:27,693 --> 00:10:33,286 ... they have said is OOP code, and written in an OOP language. 110 00:10:34,281 --> 00:10:36,273 And actually, I made up the term "object-oriented" 111 00:10:36,970 --> 00:10:40,764 and I can tell you I did not had C++ in mind. 112 00:10:50,366 --> 00:10:57,879 So, an important thing here is I have many of the same feelings about Smalltalk. 113 00:11:00,521 --> 00:11:02,916 I'm not going to try and do Smalltalk in here 114 00:11:02,917 --> 00:11:06,808 because I think there is one really important thing about Smalltalk 115 00:11:07,411 --> 00:11:11,433 and some of the languages like it, that we should pay 116 00:11:11,628 --> 00:11:13,944 really, really close attention to. 117 00:11:14,105 --> 00:11:17,903 But it has almost nothing to do with either the syntax 118 00:11:19,889 --> 00:11:24,779 or the accumulated superclass library. 119 00:11:24,463 --> 00:11:29,343 Both of these are taken as being the language 120 00:11:29,344 --> 00:11:33,636 as though it was issued from some gods on Olympus. 121 00:11:34,232 --> 00:11:36,564 So I want to talk a little bit more about 122 00:11:37,063 --> 00:11:43,155 my personal reaction to OOP when I started thinking about it in the sixties 123 00:11:43,373 --> 00:11:49,279 and instead of making it a historical talk, to try and think about 124 00:11:49,678 --> 00:11:55,656 whether these reactions and insights have any place today. 125 00:11:56,468 --> 00:11:58,995 So let me ... I'll just move ... 126 00:12:05,566 --> 00:12:08,063 So I guess my slide thing doesn't work. 127 00:12:09,746 --> 00:12:11,044 Maybe it does. 128 00:12:13,740 --> 00:12:17,539 Yeah, just go to the .. there is blank slide here, just go to the next one. 129 00:12:18,989 --> 00:12:24,679 So, in the sixties, things were quite mechanical. 130 00:12:25,703 --> 00:12:29,852 There's a sense of simple mechanism 131 00:12:29,852 --> 00:12:33,241 because computers, of course, were as large as this room. 132 00:12:33,242 --> 00:12:37,461 The one that Ivan Sutherland did Sketchpad on was the size of this room. 133 00:12:38,256 --> 00:12:43,452 It was one of the last computers in the US large enough to have its own roof. 134 00:12:43,452 --> 00:12:46,651 It was the building it was in. 135 00:12:47,350 --> 00:12:49,745 But the programs were quite small 136 00:12:49,813 --> 00:12:56,403 and they had a lot in common with their mathematical antecedents. 137 00:12:57,908 --> 00:13:04,003 One way of thinking about the semantics of math that is based on logic 138 00:13:05,105 --> 00:13:11,703 is as interlocking gears. Everything kind of has to fit together, and if it does 139 00:13:11,901 --> 00:13:18,589 and everything is compatible at the end, you get the final turning of the shaft that you want. 140 00:13:19,983 --> 00:13:22,380 Sort of a real world analogy. 141 00:13:22,815 --> 00:13:24,910 Go to the next slide, please. 142 00:13:26,559 --> 00:13:31,743 Uops, so we missed a slide. Go back two slides, please. 143 00:13:32,809 --> 00:13:34,306 There we go. 144 00:13:34,834 --> 00:13:41,226 So, an analogy to these programs of the sixties is a dog house. 145 00:13:42,126 --> 00:13:46,316 If you take any random boards, nail, and hammer 146 00:13:46,514 --> 00:13:50,010 pound them together and you've got a structure that will stay up. 147 00:13:50,610 --> 00:13:55,501 You don't have to know anything, except how to pound a nail to do that. 148 00:13:55,502 --> 00:13:59,002 Now, somebody could come along and look at this dog house and say 149 00:13:59,001 --> 00:14:04,053 "Wow! If we could just expand that by a factor of a hundred" 150 00:14:04,054 --> 00:14:05,580 "we could make ourselves a cathedral." 151 00:14:05,581 --> 00:14:08,052 "It's about three feet high, that would give us something ..." 152 00:14:08,053 --> 00:14:10,551 ".... thirty stories high." 153 00:14:11,354 --> 00:14:14,751 "And that would be really impressive. We could get a lot of people in there." 154 00:14:15,697 --> 00:14:18,431 So the carpenters would set to work 155 00:14:18,429 --> 00:14:23,127 blowing this thing up by a factor of a hundred. Now, we all know — 156 00:14:23,425 --> 00:14:26,156 being engineers and scientists, that 157 00:14:26,277 --> 00:14:29,028 when you blow something up by a factor of a hundred 158 00:14:29,029 --> 00:14:31,957 its mass goes up by a factor of a million. 159 00:14:32,256 --> 00:14:36,457 And its strength, which is mostly due to cross sections of things 160 00:14:36,458 --> 00:14:38,856 only goes up by a factor of ten thousand. 161 00:14:40,167 --> 00:14:43,657 So when you blow something up by a factor of a hundred 162 00:14:44,070 --> 00:14:47,865 it gets by a factor of hundred weaker in its ability. 163 00:14:47,866 --> 00:14:51,482 And in fact, what will happen to this dog house, it would just collapse 164 00:14:51,709 --> 00:14:53,463 into a pile of rubble. 165 00:14:54,557 --> 00:14:58,247 Then there are two choices you can have when that happens. 166 00:14:59,445 --> 00:15:04,129 The most popular one is to say "Well, that was what we were trying to do all along". 167 00:15:07,613 --> 00:15:12,054 Put more garbage on it, plaster it over with limestone, and ... 168 00:15:12,353 --> 00:15:16,739 ... say "Yes, we were really trying to do pyramids, not gothic cathedrals". 169 00:15:19,731 --> 00:15:22,596 That, in fact, I think accounts for much of the structure 170 00:15:22,597 --> 00:15:25,102 of modern operating systems today. 171 00:15:32,041 --> 00:15:37,433 Or, you can come up with a new concept 172 00:15:37,533 --> 00:15:42,323 which the people who started getting interested 173 00:15:42,324 --> 00:15:48,121 in complex structures many years ago did. They called it "architecture". 174 00:15:48,319 --> 00:15:52,911 Literally, the designing and building of successful arches. 175 00:15:53,318 --> 00:15:59,507 A non-obvious, non-linear interaction between simple materials 176 00:15:59,508 --> 00:16:03,811 to give you non-obvious sinergies 177 00:16:04,411 --> 00:16:08,404 and a fast multiplication of materials. 178 00:16:08,605 --> 00:16:14,897 It's quite remarkable to people when I tell them that the amount of material in 179 00:16:14,896 --> 00:16:19,694 [Chartres?] Cathedral, which is an enormous physical structure 180 00:16:20,193 --> 00:16:24,187 is less than the amount of material that was put into the Parthenon. 181 00:16:25,710 --> 00:16:32,402 The reason is that it's almost all air. And almost all glass. 182 00:16:32,499 --> 00:16:36,495 Everything is cunningly organized in a beautiful structure 183 00:16:37,007 --> 00:16:43,003 to make the hole have much more integrity than any of its parts. 184 00:16:43,004 --> 00:16:47,987 So, that's the other way you can go, and part of the message of OOP 185 00:16:47,986 --> 00:16:53,673 was that, as complexity starts becoming more and more important 186 00:16:53,672 --> 00:16:56,867 architecture's always going to dominate material. 187 00:16:57,760 --> 00:17:05,067 And in fact ... the sad fact, I think, about OOP 188 00:17:05,068 --> 00:17:10,555 is people didn't get interested in architecture because of the beauty of it 189 00:17:10,954 --> 00:17:13,444 They're only starting to get interested in architecture now 190 00:17:13,445 --> 00:17:16,535 when the Internet is forcing everybody to do it. 191 00:17:17,032 --> 00:17:18,827 That's pretty pathetic. 192 00:17:23,031 --> 00:17:27,827 So, I'm going to use a metaphor here for this talk 193 00:17:28,326 --> 00:17:32,069 which is drawn from a wonderful book called 194 00:17:32,068 --> 00:17:35,318 "The Act of Creation" by Arthur Koestler 195 00:17:35,816 --> 00:17:42,393 Koestler was a novelist who became a cognitive scientist in his later years 196 00:17:43,088 --> 00:17:48,924 And one of the great books he wrote was about what might creativity be 197 00:17:49,174 --> 00:17:55,393 Learning ... He realized that learning, of course, is an act of creation itself 198 00:17:55,322 --> 00:17:59,322 because something happens in you that wasn't there before 199 00:17:59,825 --> 00:18:09,609 And he used the metaphor of thoughts as ants crawling on a plane 200 00:18:10,307 --> 00:18:13,803 In this case it's a pink plane 201 00:18:14,403 --> 00:18:16,896 and there's a lot of things you can do on a pink plane 202 00:18:17,494 --> 00:18:21,311 You can have goals. You can choose directions. 203 00:18:21,909 --> 00:18:27,044 You can move along. But you're basically aways in the pink context 204 00:18:28,635 --> 00:18:35,223 And, if you think about that, it means that progress, in a fixed context 205 00:18:35,183 --> 00:18:40,483 is almost always a form of optimization 206 00:18:41,296 --> 00:18:44,990 because if you're actually coming up with something new 207 00:18:45,487 --> 00:18:50,081 it wouldn't have been part of the rules or the context 208 00:18:50,091 --> 00:18:52,189 for what the pink plane is all about 209 00:18:52,689 --> 00:18:59,982 So creative acts generally are ones that don't stay in the same context that they're in 210 00:19:01,881 --> 00:19:04,471 He says "every once in a while 211 00:19:06,072 --> 00:19:11,055 even though you have been taught carefully by parents and by school for many years 212 00:19:11,750 --> 00:19:13,942 you have a blue idea." 213 00:19:14,686 --> 00:19:16,584 Maybe when you're taking a shower 214 00:19:16,989 --> 00:19:19,991 Maybe when you're out jogging 215 00:19:20,555 --> 00:19:24,446 Maybe when you're resting in an unguarded moment 216 00:19:24,672 --> 00:19:30,403 suddenly, that thing that you were puzzling about, wondering about, looking at 217 00:19:31,610 --> 00:19:35,108 appears to you in a completely different light, as though it were something else 218 00:19:35,620 --> 00:19:41,709 And Koestler said that the emotional reaction to this comes basically in three forms 219 00:19:41,715 --> 00:19:46,104 Which is if you're telling a joke, it's "HA HA!" 220 00:19:47,212 --> 00:19:49,512 If you're doing science, it's "A HA!" 221 00:19:50,111 --> 00:19:53,407 and if you're doing art, it's "AHHH!" 222 00:19:53,747 --> 00:19:58,343 He says, because in each case, something very similar is happening 223 00:19:58,274 --> 00:20:01,023 A joke takes you down the garden path 224 00:20:01,723 --> 00:20:07,917 and then suddenly reveals it's about something else, and you get a very aggressive explosion 225 00:20:08,778 --> 00:20:13,559 And science has much of the same feeling to it, and often 226 00:20:14,455 --> 00:20:17,244 when you see something in science, you start laughing 227 00:20:17,646 --> 00:20:21,032 because it was right there in front you, and it is a kind of a joke 228 00:20:21,460 --> 00:20:28,078 And of course, art is there to remind us .... Great art is there to remind us 229 00:20:27,978 --> 00:20:31,571 that whatever context we think we're in, there are other contexts 230 00:20:32,069 --> 00:20:35,763 Art is always there to take us out of the context that we are in 231 00:20:36,162 --> 00:20:39,057 and make us aware of other contexts 232 00:20:38,748 --> 00:20:44,749 So, this is a very simple -- you can even call it a simple minded metaphor 233 00:20:44,698 --> 00:20:48,290 but it will certainly serve for this talk today 234 00:20:49,587 --> 00:20:55,969 And he also pointed out that you have to have something blue to have blue thoughts with 235 00:20:56,967 --> 00:21:05,256 I think this is generally missed in people who specialize to the extent of anything else 236 00:21:05,123 --> 00:21:12,098 When you specialize, you are basically putting yourself into a mental state 237 00:21:11,943 --> 00:21:14,635 where optimization is pretty much all you can do 238 00:21:15,733 --> 00:21:18,827 You have to learn lots of different kinds of things 239 00:21:19,027 --> 00:21:23,615 in order to have the start of these other contexts 240 00:21:24,843 --> 00:21:31,035 So here's a couple of knocks on the head I had over the years 241 00:21:31,733 --> 00:21:34,029 I just want to tell them to you quickly 242 00:21:34,128 --> 00:21:40,093 This one I think you'll find interesting because it is the earliest known form 243 00:21:40,087 --> 00:21:42,581 of what we call data abstraction 244 00:21:42,831 --> 00:21:47,553 It goes all the way back, actually pre 1961 245 00:21:47,803 --> 00:21:52,366 I was in the Air Force in 1961, and I saw it in 1961 246 00:21:53,416 --> 00:21:57,013 and it probably goes back one year before 247 00:21:57,926 --> 00:22:01,147 So, back then, they really didn't have operating systems 248 00:22:03,065 --> 00:22:07,812 Air training command had to send tapes of many kinds of records around 249 00:22:08,028 --> 00:22:10,622 from Air Force base to Air Force base 250 00:22:10,623 --> 00:22:12,555 There was a question on how can you deal 251 00:22:13,052 --> 00:22:17,763 with all of these things that used to be card images, because tape had come in 252 00:22:17,862 --> 00:22:22,053 were starting to be more and more complicated formats 253 00:22:22,750 --> 00:22:29,456 and somebody -- almost certainly an enlisted man, because officers didn't program back then 254 00:22:31,053 --> 00:22:34,250 came up with the following idea 255 00:22:35,147 --> 00:22:41,236 This person said "on the third part of the record on this tape 256 00:22:41,236 --> 00:22:46,425 we'll put all of the records of this particular type 257 00:22:48,441 --> 00:22:53,163 On the second part -- the middle part -- we'll put all of the procedures 258 00:22:53,959 --> 00:23:01,148 that know how to deal with the formats on this third part of the tape 259 00:23:01,955 --> 00:23:06,001 And in the first part we'll put pointers into the procedures" 260 00:23:07,232 --> 00:23:11,812 and in fact let's make the first ten or so pointers standard 261 00:23:13,371 --> 00:23:18,160 like reading and writing fields, and trying to print 262 00:23:19,056 --> 00:23:21,564 Let's have a standard vocabulary for the first ten of these 263 00:23:21,814 --> 00:23:24,523 and then we can have idiosyncratic ones later on 264 00:23:24,523 --> 00:23:27,940 So, all you had to do to read a tape back in 1961 265 00:23:28,190 --> 00:23:32,442 was to read the front part of a record 266 00:23:32,714 --> 00:23:36,203 one of these big records, into core storage 267 00:23:36,703 --> 00:23:42,084 and start jumping indirect through the pointers, and the procedures were there 268 00:23:42,184 --> 00:23:47,079 Now, I really would like you to contrast that with what you have to do with HTML on the Internet 269 00:23:48,564 --> 00:23:49,762 Think about it. 270 00:23:49,505 --> 00:23:53,336 HTML on the Internet has gone back to the dark ages 271 00:23:53,734 --> 00:23:59,027 because it presupposes that there should be a browser that should understand its formats 272 00:24:00,131 --> 00:24:04,426 This has to be one of the worst ideas since MS-DOS 273 00:24:10,266 --> 00:24:12,466 This is really a shame 274 00:24:12,715 --> 00:24:18,709 It's maybe what happens when physicists decide to play with computers, I'm not sure 275 00:24:20,103 --> 00:24:22,866 And, in fact, we can see what's happened to the Internet now 276 00:24:23,380 --> 00:24:25,177 is that it is gradually getting ... 277 00:24:25,675 --> 00:24:28,430 There are two wars going on -- there's a set of browser wars 278 00:24:28,629 --> 00:24:31,328 which are %100 irrelevant 279 00:24:32,122 --> 00:24:37,724 They're basically an attempt, either at demonstrating a non-understanding 280 00:24:38,523 --> 00:24:40,617 of how to build complex systems 281 00:24:41,315 --> 00:24:47,503 or an even cruder attempt simply to gather territory 282 00:24:47,903 --> 00:24:51,905 So, I suspect Microsoft is in the latter camp here 283 00:24:53,444 --> 00:24:55,239 You don't need a browser 284 00:24:56,235 --> 00:25:04,225 if you followed what this Staff Sergeant in the Air Force knew how to do in 1961 285 00:25:04,724 --> 00:25:06,724 You just read it in 286 00:25:07,922 --> 00:25:10,822 It should travel with all the things that it needs 287 00:25:11,623 --> 00:25:16,014 and you don't need anything more complex than something like X Windows 288 00:25:16,812 --> 00:25:18,609 Hopefully better 289 00:25:20,040 --> 00:25:23,445 But basically, you want to be able to distribute 290 00:25:23,443 --> 00:25:25,441 all of the knowledge of all the things that are there 291 00:25:25,383 --> 00:25:29,763 and in fact, the Internet is starting to move in that direction 292 00:25:29,732 --> 00:25:36,407 as people discover ever more complex HTML formats, ever more intractable 293 00:25:37,104 --> 00:25:41,696 This is one of these mistakes that has been recapitulated every generation 294 00:25:43,091 --> 00:25:45,281 And it's just simply not the way to do it. 295 00:25:44,924 --> 00:25:47,116 So here's a great idea 296 00:25:48,215 --> 00:25:55,106 and by the way, this kind of programming was done before there were higher level languages in the Air Force 297 00:25:55,505 --> 00:26:00,922 And this approach to things was forced out of the Air Force by COBOL 298 00:26:01,722 --> 00:26:03,726 when they standardized on COBOL 299 00:26:07,133 --> 00:26:09,031 Ivan Sutherland's Sketchpad 300 00:26:10,029 --> 00:26:14,147 I've usually shown a movie of what it was like. I won't today. 301 00:26:15,146 --> 00:26:17,043 Immensely sophisticated 302 00:26:17,441 --> 00:26:21,731 Almost staggering in its conception on what it was able to do 303 00:26:22,058 --> 00:26:25,069 Very much an object-oriented system 304 00:26:25,023 --> 00:26:30,215 It had an actual notion of classes and sub-classes 305 00:26:31,619 --> 00:26:41,327 It had a notion of polymorphism, even stronger than the air training command version 306 00:26:44,064 --> 00:26:45,310 Next slide, please. 307 00:26:50,891 --> 00:26:53,531 Now, I had seen the idea three or four times 308 00:26:54,234 --> 00:26:56,630 but it wasn't till I had to figure out Simula 309 00:27:00,028 --> 00:27:01,625 we thought it was supposed to be an ALGOL 310 00:27:03,034 --> 00:27:08,156 And it turned out this pile of tapes was the first Simula 311 00:27:08,665 --> 00:27:13,050 and ALGOL that had been doctored by Case Western Reserve 312 00:27:13,548 --> 00:27:18,241 and the inventors of Simula, Nygaard and Dahl in Norway 313 00:27:19,042 --> 00:27:26,430 and distributed along with some incomprehensible documentation, in 1966 314 00:27:27,123 --> 00:27:34,858 And it was through trying to understand what Simula was that, finally 315 00:27:35,613 --> 00:27:36,858 I'm not sure exactly why 316 00:27:36,758 --> 00:27:41,060 it's just ... I think it's maybe if you see a good idea that's odd 317 00:27:41,959 --> 00:27:46,952 four times, in four different costumes, it finally starts to make an impression 318 00:27:47,407 --> 00:27:52,789 And here's the choice you have when you're faced with something new 319 00:27:54,402 --> 00:27:58,816 You can take this technological advance and you could decide 320 00:27:59,317 --> 00:28:04,012 this is a better way of doing the stuff I'm doing now 321 00:28:04,710 --> 00:28:09,707 and I can use this to continue on the path that I'm going 322 00:28:10,708 --> 00:28:12,505 That's staying in the pink plane 323 00:28:13,406 --> 00:28:18,001 Or, you can say this is not a better old thing, this is almost a new thing 324 00:28:18,499 --> 00:28:20,895 and I wonder what that new thing is trying to be 325 00:28:21,927 --> 00:28:28,405 And, if you do that, there's a chance of actually, perhaps gaining some incredible leverage 326 00:28:28,639 --> 00:28:32,932 over simply optimizing something that can't be optimized very much 327 00:28:35,111 --> 00:28:37,805 So, the choice here was ... 328 00:28:39,700 --> 00:28:43,604 Simula came out of the world of data structures and procedures 329 00:28:44,103 --> 00:28:48,213 and had much of that flavour, if you wanted to look at it that way 330 00:28:48,343 --> 00:28:58,530 But it had a way of making relationships of the states of your computation with procedures 331 00:28:59,028 --> 00:29:03,251 that was extremely helpful, and much better, and more general 332 00:29:03,670 --> 00:29:07,655 than what were called own variables in ALGOL 60 333 00:29:08,043 --> 00:29:09,957 So, that was one way to think of it 334 00:29:10,773 --> 00:29:12,666 Then there's this other question 335 00:29:12,665 --> 00:29:17,747 if it was almost a new thing, what kind of a new thing was it? 336 00:29:18,444 --> 00:29:23,429 Well, one of my undergraduate majors was in molecular biology 337 00:29:24,428 --> 00:29:32,299 and my particular interest was both in cell physiology and in embryology 338 00:29:33,113 --> 00:29:34,905 Morphogenesis they call it today. 339 00:29:36,389 --> 00:29:41,677 And this book, Molecular Biology of the Gene, had just come out in 1965 340 00:29:43,975 --> 00:29:46,273 Wonderful book. Still in print. 341 00:29:46,371 --> 00:29:49,067 It has gone through many, many editions 342 00:29:50,467 --> 00:29:54,394 Probably, the only words that are common between this book and the one today 343 00:29:54,798 --> 00:29:58,193 are the articles, like "the" and "an" 344 00:29:58,992 --> 00:30:01,791 Actually, the word "gene", I think, is still in there 345 00:30:02,090 --> 00:30:03,686 but it means something completely different now 346 00:30:04,284 --> 00:30:09,378 But one of the things that Watson did in this book was to make an assay [Pun on essay] 347 00:30:10,676 --> 00:30:14,668 The first assay of an entire living creature 348 00:30:15,565 --> 00:30:18,574 That was the E. coli bacterium. 349 00:30:20,893 --> 00:30:22,287 Next slide, please. 350 00:30:27,764 --> 00:30:34,183 So, if you look inside one of these, the complexity is staggering 351 00:30:34,221 --> 00:30:41,506 Those popcorn things are protein molecules that have about five thousand atoms in them 352 00:30:42,308 --> 00:30:48,913 And, as you can see on the slide, when you get rid of the small molecules 353 00:30:49,319 --> 00:30:53,917 like water and calcium ions, and potassium ions, and so forth 354 00:30:54,416 --> 00:30:59,706 which constitute about 70% of the mass of this thing 355 00:31:01,011 --> 00:31:06,289 the 30% that remains has about a 120 million components 356 00:31:06,188 --> 00:31:08,822 that interact with each other in an informational way 357 00:31:09,757 --> 00:31:16,363 And each one of these components carries quite a bit of information 358 00:31:16,836 --> 00:31:18,431 And you can think of it ... 359 00:31:19,428 --> 00:31:25,106 The simple-minded way of thinking of these things is that it works kind of like OOPS 5 360 00:31:26,404 --> 00:31:28,681 There is a pattern matcher 361 00:31:28,993 --> 00:31:32,879 and then there are things that happen if patterns are matched successfully 362 00:31:34,802 --> 00:31:40,712 So, the state that's involved in that is about a hundred gigs 363 00:31:41,644 --> 00:31:51,251 and you can multiply that out today. It's only a hundred desktops or so 364 00:31:51,203 --> 00:31:55,698 but it's still pretty impressive as an amount of computation 365 00:31:55,948 --> 00:31:59,448 Maybe the most interesting thing about this structure 366 00:31:59,832 --> 00:32:08,970 is that the repetity of computation seriously rivals 367 00:32:09,220 --> 00:32:14,616 that of computers today. Particularly when you are considering it's done in parallell 368 00:32:14,855 --> 00:32:20,943 For example, one of those popcorn-sized things moves its own length in just two nanoseconds 369 00:32:22,410 --> 00:32:27,283 So, one way of visualizing that is, if an atom was the size of a tennis ball 370 00:32:28,319 --> 00:32:33,501 then one of these protein molecules would be about the size of a Volkswagen 371 00:32:34,499 --> 00:32:40,188 and it's moving its own length in two nanoseconds 372 00:32:39,882 --> 00:32:43,082 That's about eight feet on our scale of things 373 00:32:43,978 --> 00:32:49,351 Can anybody do the arithmetic to tell me what fraction of the speed of light 374 00:32:49,651 --> 00:32:52,445 moving eight feet in two nanoseconds is? 375 00:32:57,584 --> 00:32:59,482 Four times? Yeah 376 00:33:00,183 --> 00:33:01,283 Four times the speed of light 377 00:33:02,683 --> 00:33:03,381 Scale. 378 00:33:04,129 --> 00:33:07,225 If you've ever wondered why chemistry works, this is why 379 00:33:07,624 --> 00:33:14,119 The thermal agitation down there is so unbelievably violent that we could not imagine it 380 00:33:14,618 --> 00:33:16,514 even with the aid of computers 381 00:33:17,511 --> 00:33:21,206 There's nothing to be seen inside one of these things until you kill it 382 00:33:22,404 --> 00:33:26,800 because it's just a complete blur of activity 383 00:33:27,198 --> 00:33:31,492 and under good conditions, it only takes about fifteen to eighteen minutes 384 00:33:31,892 --> 00:33:34,686 for one of these to completely duplicate itself 385 00:33:35,308 --> 00:33:40,502 Okay, so that's a bacterium. Of course, lots more is known today 386 00:33:41,897 --> 00:33:47,529 Then, another fact to relate this to us, is that these bacteria 387 00:33:47,628 --> 00:33:52,121 are about one five hundreth the size of the cells in our bodies 388 00:33:53,022 --> 00:33:59,012 which instead of 120 million informational components have about sixty billion 389 00:34:00,010 --> 00:34:10,390 And, we have between ten to the twelvth, and ten to the thirteenth, maybe even more of these cells in our body 390 00:34:12,386 --> 00:34:21,883 and yet only fifty cell divisions happen in a nine month pregnancy 391 00:34:22,162 --> 00:34:24,553 It only takes fifty cell divisions to make a baby 392 00:34:26,745 --> 00:34:30,137 Actually, if you multiply it out, you realize you only need around fourty 393 00:34:31,340 --> 00:34:38,612 and the extra ten powers of ten are there because, during the embryological process 394 00:34:39,210 --> 00:34:43,965 many of the cells that are not fit in one way or another 395 00:34:44,487 --> 00:34:47,382 for the organism as a whole are killed 396 00:34:48,698 --> 00:34:52,472 So, things are done by overproliferating, testing, and trimming 397 00:34:52,765 --> 00:34:55,359 to this much larger plan 398 00:34:56,554 --> 00:35:02,712 Then, of course, each one of these structures, us, is embedded in an enormous biomass 399 00:35:03,096 --> 00:35:10,177 So, to a person whose blue context might have been biology 400 00:35:11,568 --> 00:35:16,017 something like a computer could not possibly be regarded 401 00:35:16,017 --> 00:35:21,996 as being particularly complex, or large, or fast 402 00:35:24,484 --> 00:35:27,675 Slow. Small. Stupid. 403 00:35:27,370 --> 00:35:29,364 That's what computers are 404 00:35:30,357 --> 00:35:37,684 So the question is, how can we get them to realize their destiny 405 00:35:39,876 --> 00:35:41,379 Next slide, please 406 00:35:48,188 --> 00:35:55,279 I guess we're using a form of technology that Napoléon used, which ... 407 00:35:55,276 --> 00:35:59,305 Do you remember those semaphores across France? 408 00:36:01,543 --> 00:36:07,563 So, the shift in point of view here is from mechanical ... 409 00:36:07,588 --> 00:36:10,481 This is a problem. If you take things like dog houses 410 00:36:10,485 --> 00:36:13,116 they don't scale by a factor of a hundred very well 411 00:36:13,186 --> 00:36:18,083 If you take things like clocks, they don't scale by a factor of a hundred very well 412 00:36:19,982 --> 00:36:24,746 Take things like cells, they not only scale by factors of a hundred 413 00:36:24,757 --> 00:36:27,450 but by factors of a trillion. 414 00:36:28,093 --> 00:36:30,306 And the question is how do they do it 415 00:36:30,556 --> 00:36:37,106 And how might we adapt this idea for building complex systems 416 00:36:38,376 --> 00:36:40,472 Okay, this is the simple one 417 00:36:40,869 --> 00:36:45,158 This is the one, by the way, that C++ has still not figured out, though. 418 00:36:48,258 --> 00:36:50,715 There is no idea so simple and powerful 419 00:36:51,114 --> 00:36:54,211 that you can't get zillions of people to misunderstand it. 420 00:36:57,955 --> 00:37:06,026 So, you must ... must, must not allow the interior of any one of these things 421 00:37:05,904 --> 00:37:09,795 to be a factor in the computation of the whole 422 00:37:11,295 --> 00:37:14,595 Okay? And this is only part of the story. Is not just the cell ... 423 00:37:14,749 --> 00:37:19,347 Cell membrane is there to keep most things out 424 00:37:19,647 --> 00:37:23,172 as much at it is there to keep certain things in. 425 00:37:25,381 --> 00:37:33,975 I think our confusion with objects is the problem that in our Western culture 426 00:37:35,168 --> 00:37:39,364 we have a language that has very hard nouns and verbs in it 427 00:37:41,160 --> 00:37:43,563 Our process words stink. 428 00:37:45,258 --> 00:37:48,291 So it's much easier for us when we think of an object ... 429 00:37:49,288 --> 00:37:53,676 I have apologized profusely over the last twenty years 430 00:37:53,751 --> 00:37:56,310 for making up the term "object-oriented" 431 00:37:57,216 --> 00:38:01,328 because as soon as it started to be misapplied, I realized that 432 00:38:02,028 --> 00:38:06,422 I should have used a much more process-oriented term for it 433 00:38:07,620 --> 00:38:14,629 Now, the japanese have an interesting word, which is called "ma" 434 00:38:15,625 --> 00:38:17,337 Spelled in english, just m-a. Ma 435 00:38:18,797 --> 00:38:24,735 And "ma" is the stuff in-between what we call objects 436 00:38:25,532 --> 00:38:30,618 It's the stuff we don't see, because we're focused on the nounness of things 437 00:38:30,422 --> 00:38:32,837 rather than the processness of things. 438 00:38:35,490 --> 00:38:40,333 Japanese has a more process-field oriented way 439 00:38:40,532 --> 00:38:43,305 of looking at how things relate to each other. 440 00:38:43,766 --> 00:38:46,773 You can always tell that by looking at the size of a word 441 00:38:47,270 --> 00:38:49,964 it takes to express something that is important. 442 00:38:51,454 --> 00:38:53,176 So, Ma is very short. 443 00:38:53,776 --> 00:38:58,304 We have to use words like "interstitial" or worse 444 00:38:58,927 --> 00:39:02,123 to approximate what the japanese are talking about. 445 00:39:04,084 --> 00:39:07,587 So, the realization here 446 00:39:08,585 --> 00:39:12,999 and it's not possible to assign this realization to any particular person 447 00:39:13,201 --> 00:39:18,795 because it was in the seeds of Sketchpad 448 00:39:18,893 --> 00:39:23,922 and in the seeds of the air training command file system 449 00:39:24,233 --> 00:39:25,932 and in the seeds of Simula 450 00:39:26,231 --> 00:39:30,130 That is, that once you have encapsulated 451 00:39:30,726 --> 00:39:36,060 in such a way that there is an interface between the inside and the outside 452 00:39:36,762 --> 00:39:39,658 it is possible to make an object act like anything. 453 00:39:39,908 --> 00:39:45,887 And, the reason is simply this: that what you have encapsulated is a computer. 454 00:39:46,534 --> 00:39:49,984 So, you have done a powerful thing in computer science 455 00:39:50,283 --> 00:39:53,379 which is to take the powerful thing you're working on 456 00:39:53,379 --> 00:39:57,272 and not lose it by partitioning up your design space 457 00:39:57,869 --> 00:40:02,236 This is the bug in data procedures ... data and procedure languages. 458 00:40:03,633 --> 00:40:08,363 I think this is the most pernicious thing about languages a lot like C++ and Java 459 00:40:08,730 --> 00:40:11,276 is that they think they're helping the programmer 460 00:40:11,526 --> 00:40:15,942 by looking as much like the old thing as possible 461 00:40:15,942 --> 00:40:18,538 but in fact they are hurting the programmer terribly 462 00:40:18,743 --> 00:40:22,139 by making it difficult for the programmer to understand 463 00:40:22,155 --> 00:40:25,350 what's really powerful about this new metaphor. 464 00:40:27,373 --> 00:40:31,777 And again, people who were doing time-sharing systems had already figured this out as well 465 00:40:32,276 --> 00:40:36,975 Butler Lampson's thesis in 1965 466 00:40:37,785 --> 00:40:41,545 was about that what you want to give a person on a time-sharing system 467 00:40:41,754 --> 00:40:45,376 is something that is now called a virtual machine 468 00:40:46,074 --> 00:40:50,870 which is not the same as what the Java VM is 469 00:40:51,267 --> 00:40:55,607 but something that is as much like the physical computer as possible 470 00:40:55,966 --> 00:40:58,283 but give one separately to everybody 471 00:40:59,191 --> 00:41:03,510 UNIX had that sense about it. 472 00:41:03,809 --> 00:41:06,548 And, the biggest problem with that scheme 473 00:41:06,798 --> 00:41:13,633 is that a UNIX process had an overhead of about two thousand bytes 474 00:41:13,883 --> 00:41:18,606 just to have a process. And so it was going to be very difficult in UNIX 475 00:41:18,705 --> 00:41:21,635 to let a UNIX process just be the number three 476 00:41:23,034 --> 00:41:26,127 You would be going from three bits to a couple of thousand bytes 477 00:41:26,127 --> 00:41:28,222 and you have this problem with scaling. 478 00:41:28,393 --> 00:41:35,514 So, a lot of the problem here is both deciding that the biological metaphor 479 00:41:35,516 --> 00:41:39,710 is the one that is going to win out over the next twenty-five years or so 480 00:41:40,608 --> 00:41:44,689 and then committing to it enough to get it 481 00:41:45,189 --> 00:41:50,447 so it can be practical at all the levels of scale we actually need. 482 00:41:51,773 --> 00:41:55,144 Then we have one trick we can do that biology doesn't know how to do 483 00:41:55,455 --> 00:41:59,169 which is, we can take the DNA out of the cells 484 00:42:00,267 --> 00:42:03,276 and that allows us to deal with cystic fibrosis 485 00:42:03,274 --> 00:42:06,368 much more easily than the way it is done today. 486 00:42:07,270 --> 00:42:09,768 Systems do have cystic fibrosis. 487 00:42:09,552 --> 00:42:15,408 And, some of you may know that cystic fibrosis today, for some people 488 00:42:15,917 --> 00:42:18,746 is treated by infecting them with a virus 489 00:42:19,343 --> 00:42:24,019 A modified cold virus giving them a lung infection 490 00:42:24,621 --> 00:42:29,929 but the defective gene for cystic fibrosis is in this cold virus 491 00:42:30,640 --> 00:42:35,531 And the cold virus is too weak to actually destroy the lungs, like pneumonia does 492 00:42:36,035 --> 00:42:41,039 but it is strong enough to insert a copy of that gene in every cell in the lungs 493 00:42:41,836 --> 00:42:44,366 And that is what does the trick. 494 00:42:44,665 --> 00:42:51,788 That's a very complicated way of re-programming an organism's DNA, once it has gotten started. 495 00:42:55,105 --> 00:43:01,244 So, here's one that it is amazing to me that we haven't seen more of ... 496 00:43:01,543 --> 00:43:03,444 For instance, one of the more amazing things to me 497 00:43:03,750 --> 00:43:08,764 of people who have been trying to put OOP on the Internet, is that I do not ... 498 00:43:09,169 --> 00:43:13,099 and I am hoping someone will come up afterwards and tell me of an exception to this ... 499 00:43:13,397 --> 00:43:14,924 but I do not know of anybody yet 500 00:43:15,722 --> 00:43:21,208 who has realized that, at the very least, every object should have a URL 501 00:43:23,105 --> 00:43:27,631 because, what the heck are they if they aren't these things 502 00:43:28,029 --> 00:43:33,124 and I believe that every object on the Internet should have an IP 503 00:43:34,830 --> 00:43:45,827 because that represents much better what the actual abstractions are of the physical hardware to the bits 504 00:43:46,625 --> 00:43:51,823 So this is an early insight that objects basically are like servers 505 00:43:53,715 --> 00:43:58,485 And, this notion of polymorphism, which used to be called generic procedures 506 00:44:01,075 --> 00:44:03,871 is a way of thinking about classes of these servers 507 00:44:03,970 --> 00:44:05,665 Everybody knows about that. 508 00:44:06,250 --> 00:44:09,106 And, here's one we haven't faced up to much yet 509 00:44:11,010 --> 00:44:15,811 that, now we have to construct this stuff and soon we'll be required to grow it 510 00:44:17,410 --> 00:44:21,142 So, it's very easy, for instance, to grow a baby six inches 511 00:44:22,250 --> 00:44:24,524 They do it about ten times in their life 512 00:44:25,125 --> 00:44:27,222 and you never have to take it down for maintenance. 513 00:44:28,617 --> 00:44:34,364 But if you try and grow a 747, you are faced with an unbelievable problem 514 00:44:34,289 --> 00:44:38,889 because it's in this simple-minded mechanical world 515 00:44:39,963 --> 00:44:44,654 in which the only object has been to make the artifact in the first place 516 00:44:45,154 --> 00:44:46,872 Not to fix it. Not to change it. 517 00:44:47,272 --> 00:44:50,403 Not to let it live for a hundred years. 518 00:44:52,462 --> 00:44:54,888 So let me ask a question 519 00:44:55,589 --> 00:44:59,386 I won't take names, but how many people here still use 520 00:45:00,199 --> 00:45:05,716 a language that essentially forces you, in the development system ... 521 00:45:06,713 --> 00:45:10,147 forces you to develop outside of the language 522 00:45:10,844 --> 00:45:14,438 compile and reload, and go, even if it's fast 523 00:45:15,235 --> 00:45:19,026 like Virtual Café 524 00:45:20,022 --> 00:45:24,053 How many here still do that? Let's just see ... 525 00:45:24,063 --> 00:45:25,769 Come on. Admit it! 526 00:45:26,517 --> 00:45:28,814 We can have a Texas tent meeting later 527 00:45:29,713 --> 00:45:35,201 So, if you think about that, that cannot possibly be other than a dead end 528 00:45:35,900 --> 00:45:37,796 for building complex systems 529 00:45:38,793 --> 00:45:44,083 where much of the building in complex systems is, in part, going to go into trying to understand 530 00:45:44,081 --> 00:45:49,003 what the possibilities for interoperability is with things that already exist 531 00:45:48,923 --> 00:45:55,452 Now, I was ... just played a very minor part in the design of the ARPANET 532 00:45:55,753 --> 00:45:59,958 I was one of thirty graduate students who went to systems design meetings 533 00:46:00,272 --> 00:46:06,875 to try and formulate design principles for the ARPANET, also about thirty years ago 534 00:46:06,742 --> 00:46:10,785 And, if you think about ... 535 00:46:12,883 --> 00:46:15,077 The ARPNANET, of course, became the Internet 536 00:46:15,874 --> 00:46:25,297 and from the time it started running -- just around 1969 or so -- to this day 537 00:46:25,697 --> 00:46:28,529 it has expanded by about a factor of a hundred million 538 00:46:30,749 --> 00:46:32,777 That's pretty good. Eight orders of magnitude. 539 00:46:33,772 --> 00:46:38,203 And, as far as anybody can tell -- 540 00:46:38,502 --> 00:46:40,904 And I talked to Larry Roberts about this the other day ... 541 00:46:41,707 --> 00:46:50,701 There is not one physical atom in the Internet today, that was in the original ARPANET 542 00:46:51,798 --> 00:46:58,137 And there is not one line of code in the Internet today that was in the original ARPANET. 543 00:46:59,798 --> 00:47:05,500 Of course, if we had IBM main frames in the original ARPANET, that wouldn't have been true. 544 00:47:08,931 --> 00:47:12,297 So, this is a system that has expanded by a hundred million 545 00:47:12,296 --> 00:47:17,184 has changed every atom and every bit, and has never had to stop 546 00:47:19,573 --> 00:47:27,147 That is the metaphor we absolutely must apply to what we think are smaller things. 547 00:47:27,752 --> 00:47:30,172 When we think programming is small 548 00:47:31,565 --> 00:47:35,994 that's why your programs are so big. 549 00:47:37,785 --> 00:47:41,200 That's why they become pyramids instead of gothic cathedrals. 550 00:47:42,207 --> 00:47:43,387 Next. 551 00:47:47,460 --> 00:47:50,494 Ok, here's the other big source 552 00:47:52,459 --> 00:47:59,006 Certainly the greatest, single language along with Simula of the sixties 553 00:48:00,856 --> 00:48:07,654 I think, one with as many profound or more profound insights -- LISP 554 00:48:08,351 --> 00:48:12,767 On page thirteen of this book that was published in 1962 555 00:48:13,471 --> 00:48:21,360 there's a half page of code which is the reflective model of LISP written in itself 556 00:48:22,259 --> 00:48:27,889 All the important details of LISP semantics and the guidelines 557 00:48:27,987 --> 00:48:32,675 for how to make a LISP interpreter are in that half page. 558 00:48:33,772 --> 00:48:41,227 And, it is this aspect -- this meta-reflective aspect -- that I think, to me 559 00:48:41,526 --> 00:48:46,616 is the saddest thing about what is happening with Java. 560 00:48:48,316 --> 00:48:50,492 When Java first happened I thought: Well 561 00:48:51,493 --> 00:48:56,040 it's legitimizing something that most people have not believed in for a long time 562 00:48:55,865 --> 00:49:02,882 which is this byte-code approach of being multi-platform like we had at Xerox PARC 563 00:49:03,183 --> 00:49:07,081 It's not a new idea. It actually goes back into the sixties. 564 00:49:07,478 --> 00:49:12,006 But when I looked at Java, I thought, My goodness, how could they possibly -- 565 00:49:12,105 --> 00:49:14,121 and of course, we know that the history was not ... 566 00:49:14,520 --> 00:49:19,553 was more about programming toasters, originally, than being on the Internet, but 567 00:49:19,952 --> 00:49:24,764 my goodness, how do they hope to survive all of the changes 568 00:49:25,365 --> 00:49:31,096 modifications, adaptations, and interoperability requirements 569 00:49:31,395 --> 00:49:32,395 without a meta-system? 570 00:49:33,305 --> 00:49:39,394 Without even, for instance, being able to load new things in while you're running? 571 00:49:40,191 --> 00:49:45,042 So to me this is... the fact that people adopted this as some great hope 572 00:49:45,755 --> 00:49:51,343 is probably the most distressing thing to me, personally, as I said, since MS-DOS. 573 00:49:51,642 --> 00:49:59,713 It represents a real failure of people to understand what the larger picture is, and is going to be. 574 00:50:01,507 --> 00:50:02,810 Next slide. 575 00:50:07,218 --> 00:50:09,641 So, this notion of meta-programming 576 00:50:10,440 --> 00:50:11,870 Lots of different ways of looking at it 577 00:50:13,169 --> 00:50:20,464 One of them is that, any particular implementation is making pragmatic choices 578 00:50:22,264 --> 00:50:28,256 and these pragmatic choices are likely not to be able to cover all of the cases 579 00:50:28,754 --> 00:50:35,544 at the level of efficiency and even at the level of richness required. 580 00:50:36,041 --> 00:50:38,734 Of course, this is standard OOP lore. 581 00:50:39,032 --> 00:50:40,631 This is why we encapsulate. 582 00:50:41,327 --> 00:50:44,923 We need to hide our messes. 583 00:50:45,123 --> 00:50:50,304 We need to have different ways of dealing with the same concepts 584 00:50:50,514 --> 00:50:53,423 in a way that does not distract the programmer. 585 00:50:54,419 --> 00:51:02,005 But in fact, it is also applicable, as the LISP people found, and we at Xerox PARC found ... 586 00:51:02,103 --> 00:51:05,027 You can also apply it to the building of the language itself 587 00:51:05,032 --> 00:51:07,494 The more the language can see its own structures 588 00:51:07,996 --> 00:51:16,592 the more liberated you can be from the tyranny of a single implementation. 589 00:51:17,490 --> 00:51:24,122 I think this is one of the most critical things that very few people are worrying about in a practical form. 590 00:51:26,766 --> 00:51:35,269 One of the reasons why this meta stuff is gonna be important, in such a way that nobody will be able to ignore it 591 00:51:35,965 --> 00:51:42,866 is this whole question of how do we really interoperate on the Internet five and ten years from now 592 00:51:43,961 --> 00:51:49,058 And if you think about it ... I don't believe Microsoft is going to be able to capture the Internet. 593 00:51:50,355 --> 00:51:52,050 I think it's too big. 594 00:51:52,245 --> 00:51:55,439 I think there are too many people supplying ideas into it 595 00:51:55,935 --> 00:52:02,122 and I think that people are going to be sophisticated enough to realize that an IBM or a Microsoft type solution 596 00:52:02,820 --> 00:52:06,446 is simply neither called for nor possible. 597 00:52:07,645 --> 00:52:11,365 What that means is that there's going to be dozens and dozens -- 598 00:52:11,464 --> 00:52:17,147 there almost already are -- dozens and dozens of different object systems 599 00:52:18,043 --> 00:52:24,226 all with very similar semantics, but with very different pragmatic details. 600 00:52:25,429 --> 00:52:29,002 And If you think about what a URL actually is 601 00:52:29,145 --> 00:52:33,869 and you think of what an HTTP message actually is 602 00:52:34,067 --> 00:52:36,801 and if you think of what an object actually is 603 00:52:37,099 --> 00:52:40,993 and if you think of what an object oriented pointer actually is 604 00:52:41,093 --> 00:52:46,631 I think it should be pretty clear that any object-oriented language 605 00:52:46,636 --> 00:52:53,904 can internalize its own local pointers to any object in the world regardless of where it was made. 606 00:52:53,904 --> 00:52:58,614 That's the whole point of not being able to see inside 607 00:52:58,660 --> 00:53:05,622 And so... A semantic interoperability is possible almost immediately 608 00:53:05,635 --> 00:53:08,732 by simply taking that stance. 609 00:53:10,083 --> 00:53:12,215 This is gonna change really everything. 610 00:53:12,261 --> 00:53:17,499 And, things like JavaBeans and CORBA are not gonna suffice 611 00:53:18,098 --> 00:53:23,399 because at some point one is gonna have to start really discovering 612 00:53:23,498 --> 00:53:25,941 what objects think they can do. 613 00:53:25,947 --> 00:53:33,776 This is going to lead to a universal interface language, which is not a programming language per se 614 00:53:34,983 --> 00:53:41,841 It's more like a prototyping language that allows an interchange 615 00:53:41,932 --> 00:53:44,825 of deep information about what objects think they can do. 616 00:53:45,339 --> 00:53:49,459 It allows objects to make experiments with other objects in a safe way 617 00:53:50,056 --> 00:53:53,099 to see how they respond to various messages. 618 00:53:53,596 --> 00:53:57,417 This is going to be a critical thing to automate in the next ten years. 619 00:53:58,522 --> 00:53:59,521 Next slide. 620 00:54:01,167 --> 00:54:02,845 So here's a great book 621 00:54:04,246 --> 00:54:06,330 How many people have read this book? 622 00:54:07,426 --> 00:54:11,823 Ok, so when they wrote this book, I called them up and I said 623 00:54:11,821 --> 00:54:14,318 This is the best book anybody has written in ten years 624 00:54:14,916 --> 00:54:25,448 but why the hell did you write it in such a LISP centric, closed club centric way? 625 00:54:25,954 --> 00:54:28,759 This is a hard book for most people to read. 626 00:54:28,856 --> 00:54:32,253 If you don't know the LISP culture, it's very hard to read. 627 00:54:32,252 --> 00:54:38,894 If you don't know how CLOS is done, it's a very hard book to read. 628 00:54:38,893 --> 00:54:45,945 But this book has some of the most profound insights about, and the most pratical insights about OOP 629 00:54:46,246 --> 00:54:48,744 than anybody has done in the last many years. 630 00:54:49,444 --> 00:54:50,989 So, I really commend it to you. 631 00:54:51,036 --> 00:54:58,783 And, if there are any university professors here who would like to get the next [?] balloon 632 00:54:59,383 --> 00:55:08,194 I will give it to anybody who rewrites that book so that the general object-oriented community can understand it. 633 00:55:08,293 --> 00:55:11,044 It would be a great service to mankind. 634 00:55:13,737 --> 00:55:22,633 So, what happened in most of the world, starting in the seventies, was Abstract Data Types 635 00:55:23,230 --> 00:55:28,929 which is really staying with an assignment centered way of thinking about programming 636 00:55:29,429 --> 00:55:30,388 And I believe that ... 637 00:55:32,043 --> 00:55:39,731 In fact, when I made this slide, C++ was just sort of a spec on the horizon 638 00:55:40,754 --> 00:55:44,862 It was one of those things, like MS-DOS, that nobody took seriously 639 00:55:44,860 --> 00:55:49,778 because who would ever fall for a joke like that? 640 00:55:52,577 --> 00:55:53,974 Next slide, please. 641 00:55:56,611 --> 00:56:05,417 Actually, my favourite C++ story is: at Apple, there is this operating system 642 00:56:05,824 --> 00:56:10,418 remarkably, coincidentally named Pink 643 00:56:13,509 --> 00:56:15,604 It was so great! 644 00:56:17,106 --> 00:56:21,453 And there are two interesting features of this new operating system that they were working on 645 00:56:21,503 --> 00:56:25,401 One was, it was always going to be done in two years. 646 00:56:28,412 --> 00:56:34,392 We have known some really great operating system designers over the years 647 00:56:34,592 --> 00:56:39,333 and I do not know of any decent operating system that has ever been done in two years 648 00:56:39,331 --> 00:56:44,429 even by people who had ten times the IQ of the pink people. 649 00:56:44,525 --> 00:56:49,217 The other thing about it was, it was gonna be done in C++ for efficiency 650 00:56:52,165 --> 00:56:55,166 Oh, let's not do it in Smalltalk, that's too slow! 651 00:56:56,670 --> 00:57:03,961 Let me tell you, there's nothing more inefficient than spending ten years on an operating system that never works. 652 00:57:13,043 --> 00:57:17,332 Actually, the worst ones are the ones that appear to work. 653 00:57:26,153 --> 00:57:34,574 So, let's take our pink plane, and we can also use this McLuhan quote 654 00:57:34,872 --> 00:57:36,406 my favourite McLuhan quote 655 00:57:36,406 --> 00:57:39,427 "I don't know who discovered water, but it wasn't a fish." 656 00:57:39,725 --> 00:57:45,465 And he meant us as the fish, and he meant water as our belief structures -- as our context 657 00:57:46,045 --> 00:57:47,996 And I believe this is the single .. 658 00:57:48,394 --> 00:57:54,537 If you had to pick one cause, of both particular difficulty in our field 659 00:57:55,334 --> 00:57:58,230 and also a general difficulty in the human race ... 660 00:57:58,229 --> 00:58:01,874 it's taking single points of view and committing to them like they're religions. 661 00:58:03,170 --> 00:58:05,087 This happend with Smalltalk. 662 00:58:05,355 --> 00:58:08,255 There's a wonderful quote by Schopenhauer 663 00:58:08,951 --> 00:58:12,618 a German philosopher of the nineteenth century, who said 664 00:58:12,476 --> 00:58:15,830 "Every idea goes through three stages" 665 00:58:16,029 --> 00:58:19,582 First, it is denounced as the work of madmen 666 00:58:20,976 --> 00:58:24,972 This is what Swift called "A Confederacy of Dunces" 667 00:58:25,974 --> 00:58:36,563 and then later, it's remarked as being totally obvious the whole time 668 00:58:37,676 --> 00:58:44,606 "and then the last stage is when the original denouncers claim to have invented it" 669 00:58:47,412 --> 00:58:50,704 That's when it gets in its religious stage. 670 00:58:50,715 --> 00:58:56,043 Now, to me, the most distressing thing that happened to Smalltalk when it came out of Xerox PARC 671 00:58:56,543 --> 00:59:00,258 was, for many respects and purposes it quit changing. 672 00:59:01,254 --> 00:59:05,198 And I can tell you, at Xerox PARC there are four major versions 673 00:59:05,099 --> 00:59:10,215 completely different versions of the language over about a ten year period 674 00:59:10,914 --> 00:59:18,333 and many dozens and dozens of significant releases within those different versions. 675 00:59:19,041 --> 00:59:24,362 And I think one of the things we liked the most about Smalltalk was not what it could do 676 00:59:24,960 --> 00:59:29,843 but the fact that it was such a good vehicle for bootstrapping the next set of ideas 677 00:59:29,757 --> 00:59:32,106 we had about how to do systems building. 678 00:59:32,305 --> 00:59:37,030 And that, for all intents and purposes -- when Smalltalk went commercial -- ceased. 679 00:59:37,854 --> 00:59:43,635 Even though there is a book -- the famous blue book that Adele and Dave wrote 680 00:59:43,734 --> 00:59:50,248 that had the actual code in it for making Smalltalk interpreters and starting this process oneself 681 00:59:50,862 --> 00:59:53,457 almost nobody took advantage of this. 682 00:59:53,454 --> 00:59:56,002 Almost no university took advantage of it 683 00:59:56,007 --> 00:59:59,163 Almost no commercial [?] took advantage of it 684 00:59:59,464 --> 01:00:05,733 And what they missed was, to me, the deepest thing I would like to communicate with you today 685 01:00:05,734 --> 01:00:08,970 and that is we don't know how to design systems yet 686 01:00:09,168 --> 01:00:13,102 So let's not make what we don't know into a religion, for God's sakes 687 01:00:13,210 --> 01:00:19,994 What we need to do is to constantly think and think and think about what's important. 688 01:00:20,592 --> 01:00:27,094 And we have to have our systems let us get to the next levels of abstraction as we come to them. 689 01:00:28,692 --> 01:00:32,510 The thing that I am most proud of about Smalltalk 690 01:00:32,622 --> 01:00:36,671 pretty much the only thing, from my standpoint, that I am proud of 691 01:00:37,069 --> 01:00:42,816 is that it has been so good at getting rid of previous versions of itself 692 01:00:43,314 --> 01:00:45,709 until it came out into this world. 693 01:00:46,669 --> 01:00:51,383 One of the reasons we got involved in doing Smalltalk again 694 01:00:51,242 --> 01:00:56,229 after, for me, it was sixteen years of not working on programming languages 695 01:00:56,528 --> 01:00:59,721 A couple of years ago we started this project called Squeak 696 01:01:00,619 --> 01:01:05,164 which is simply not an attempt to give the world a free Smalltalk 697 01:01:05,563 --> 01:01:11,583 but an attempt to give the world a bootstrapping mechanism for something much better than Smalltalk 698 01:01:11,883 --> 01:01:17,019 and when you fool around with Squeak, please, please, think of it from that [standpoint]. 699 01:01:16,810 --> 01:01:19,010 Think of how you can obsolete the damn thing 700 01:01:19,207 --> 01:01:24,404 by using its own mechanisms for getting the next version of itself. 701 01:01:25,865 --> 01:01:30,281 So look for the blue thoughts! 702 01:01:33,844 --> 01:01:38,732 I was trying to think of how I could stop this talk -- because I'll go on and on 703 01:01:38,732 --> 01:01:42,963 and I remembered a story -- I'm a pipe organist 704 01:01:43,379 --> 01:01:49,867 and most pipe organists have a hero whose name is E. Power Biggs 705 01:01:52,286 --> 01:01:59,647 He kind of revived the interest in the pipe organ especially as it was played 706 01:01:59,954 --> 01:02:05,517 in the seventeenth and eighteenth centuries, and had a tremendous influence on all of us organists 707 01:02:05,616 --> 01:02:13,716 And a good friend of mine was E. Power Biggs' assistant for many years back in the fourties and fifties. 708 01:02:14,015 --> 01:02:15,157 He's in his eighties now 709 01:02:16,964 --> 01:02:21,988 And when we get him for dinner, we always get him to tell us E. Power Biggs stories 710 01:02:23,050 --> 01:02:29,944 The organ E. Power Biggs had in those days for his broadcasts, was a dinky little organ 711 01:02:30,943 --> 01:02:35,169 neither fish nor foul, in a small museum at Harvard 712 01:02:36,464 --> 01:02:37,932 called the Busch-Reisinger Museum 713 01:02:38,429 --> 01:02:41,436 But in fact, all manner of music was played on it 714 01:02:41,739 --> 01:02:46,326 and one day this assistant had to fill in for Biggs, and he asked Biggs 715 01:02:46,625 --> 01:02:56,103 "Well what is the piece played", and he said "Well I had programmed Caesar Franck's heroic piece" 716 01:02:57,900 --> 01:03:01,308 and if you know this piece, it is made for the largest organs that have ever been made 717 01:03:01,707 --> 01:03:05,996 The loudest organs that have ever been made, in the largest cathedrals that had ever been made 718 01:03:06,595 --> 01:03:10,802 because it's a nineteenth century symphonic type organ work 719 01:03:11,602 --> 01:03:17,568 and Biggs was asking my friend to play this on this dinky, little organ 720 01:03:18,066 --> 01:03:23,054 And he said "But how can I play this, on this?" 721 01:03:24,172 --> 01:03:27,399 Biggs, he said "Just play it grand" 722 01:03:29,293 --> 01:03:31,084 Just play it grand 723 01:03:32,882 --> 01:03:42,415 To stay with the future as it moves, is to always play your systems more grand than they seem to be right now 724 01:03:42,514 --> 01:03:43,383 Thank you.