Advertisement
Guest User

liskov ACM interview

a guest
May 20th, 2019
275
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 134.17 KB | None | 0 0
  1. WEBVTT
  2. Kind: captions
  3. Language: en
  4.  
  5. 00:00:05.509 --> 00:00:10.340
  6. Hello, I’m Tom Van Vleck, and I have the
  7. honor today to interview Professor Barbara
  8.  
  9. 00:00:10.340 --> 00:00:20.670
  10. Liskov, the 2008 ACM Turing Award winner.
  11. Today is April 20th, 2016.
  12.  
  13. 00:00:20.670 --> 00:00:29.880
  14. To start with, why don’t you tell us a little
  15. bit about your upbringing, where you lived,
  16.  
  17. 00:00:29.880 --> 00:00:34.660
  18. and how you got into the business?
  19.  
  20. 00:00:34.660 --> 00:00:45.729
  21. I grew up in San Francisco. I was actually
  22. born in Los Angeles, so I’m a native Californian.
  23.  
  24. 00:00:45.729 --> 00:00:54.920
  25. When I was growing up, it was definitely not
  26. considered the thing to do for a young girl
  27.  
  28. 00:00:54.920 --> 00:01:01.679
  29. to be interested in math and science. In fact,
  30. in those days, the message that you got was
  31.  
  32. 00:01:01.679 --> 00:01:10.790
  33. that you were supposed to get married and
  34. have children and not have a job. Nevertheless,
  35.  
  36. 00:01:10.790 --> 00:01:15.690
  37. I was always encouraged by my parents to take
  38. academics seriously. My mother was a college
  39.  
  40. 00:01:15.690 --> 00:01:20.900
  41. grad as well as my father, so it was expected
  42. that I would go to college, which in those
  43.  
  44. 00:01:20.900 --> 00:01:25.920
  45. times was not that common. Maybe 20% of the
  46. high school class would go on to college and
  47.  
  48. 00:01:25.920 --> 00:01:37.170
  49. the rest would not. I was always very interested
  50. in math and science, so I took all the courses
  51.  
  52. 00:01:37.170 --> 00:01:42.500
  53. that were offered at my high school, which
  54. wasn’t a tremendous number compared to what
  55.  
  56. 00:01:42.500 --> 00:01:48.390
  57. is available today. The most advanced course
  58. that was offered was a pre-calculus course,
  59.  
  60. 00:01:48.390 --> 00:01:52.250
  61. which I took in my senior year.
  62.  
  63. 00:01:52.250 --> 00:01:57.000
  64. There weren’t many girls in these classes.
  65. I don’t really remember how many there were.
  66.  
  67. 00:01:57.000 --> 00:02:07.370
  68. I might have been the only one. But that didn’t
  69. seem to matter much. But I did feel from the
  70.  
  71. 00:02:07.370 --> 00:02:16.360
  72. students around me that this was not something
  73. I should be doing, so I kept a low profile.
  74.  
  75. 00:02:16.360 --> 00:02:21.389
  76. I think that I was probably encouraged by
  77. the math teacher that I had in my senior year,
  78.  
  79. 00:02:21.389 --> 00:02:25.400
  80. though I don’t remember anything specific.
  81. But I certainly don’t remember picking up
  82.  
  83. 00:02:25.400 --> 00:02:30.580
  84. anything negative.
  85.  
  86. 00:02:30.580 --> 00:02:36.569
  87. I definitely was encouraged by my parents
  88. to do well in academics, although not anything
  89.  
  90. 00:02:36.569 --> 00:02:41.779
  91. specifically having to do with math and science.
  92. On the other hand, there were also no negative
  93.  
  94. 00:02:41.779 --> 00:02:50.939
  95. signs. I think that probably what was particularly
  96. important was my father, who had very high
  97.  
  98. 00:02:50.939 --> 00:02:59.310
  99. academic aspirations, and my mother who did
  100. never said anything negative about what I
  101.  
  102. 00:02:59.310 --> 00:03:06.110
  103. was doing. I think that sometimes mothers
  104. can have a lot of impact on young girls, and
  105.  
  106. 00:03:06.110 --> 00:03:10.480
  107. if they show signs of disapproving of the
  108. path you’re taking, that could be a big
  109.  
  110. 00:03:10.480 --> 00:03:13.290
  111. push in the opposite direction.
  112.  
  113. 00:03:13.290 --> 00:03:18.510
  114. My father insisted I take Latin because he
  115. said it would serve me in good stead, which
  116.  
  117. 00:03:18.510 --> 00:03:25.889
  118. it has over the years, but he also insisted
  119. that I take typing. The rationale there was
  120.  
  121. 00:03:25.889 --> 00:03:31.909
  122. that if, heaven help me, I ever had to support
  123. myself because I didn’t get married or something
  124.  
  125. 00:03:31.909 --> 00:03:38.540
  126. happened to my husband, then I could get a
  127. job as a secretary. A secretary or a teacher
  128.  
  129. 00:03:38.540 --> 00:03:46.769
  130. were sort of the acceptable professions for
  131. a woman who had to work.
  132.  
  133. 00:03:46.769 --> 00:03:54.160
  134. In those days, if you went to high school
  135. in California and you had I think a B+ average,
  136.  
  137. 00:03:54.160 --> 00:04:00.209
  138. then you were guaranteed a slot at the University
  139. of California. The question was which of the
  140.  
  141. 00:04:00.209 --> 00:04:06.400
  142. campuses would you end up going to. The top
  143. campus was UC Berkeley, and I had a very high
  144.  
  145. 00:04:06.400 --> 00:04:14.879
  146. average, so I got into UC Berkeley. I went
  147. there for college. And I started off thinking
  148.  
  149. 00:04:14.879 --> 00:04:20.669
  150. I was going to major in physics. I think this
  151. was the aspiration of many students because
  152.  
  153. 00:04:20.669 --> 00:04:25.530
  154. physics was considered to be the hardest major.
  155. But I pretty quickly discovered that I didn’t
  156.  
  157. 00:04:25.530 --> 00:04:29.760
  158. have a lot of aptitude for physics and I liked
  159. math a lot better, so I switched to a math
  160.  
  161. 00:04:29.760 --> 00:04:38.200
  162. major and a physics minor. I didn’t know
  163. anything about computers. I don’t remember
  164.  
  165. 00:04:38.200 --> 00:04:41.980
  166. any computers as an undergraduate. They were
  167. there. I mean I’ve talked to people after
  168.  
  169. 00:04:41.980 --> 00:04:47.150
  170. the fact and I know that some of the men who
  171. were there at that time had discovered them.
  172.  
  173. 00:04:47.150 --> 00:04:52.650
  174. They were probably in the School of Engineering.
  175. And Berkeley has a separate admissions process
  176.  
  177. 00:04:52.650 --> 00:04:57.070
  178. for that. I did not apply to engineering.
  179. It never crossed my mind to do something like
  180.  
  181. 00:04:57.070 --> 00:04:59.850
  182. that.
  183.  
  184. 00:04:59.850 --> 00:05:09.410
  185. So I majored in math in the College of Letters
  186. & Science. Again, looking back at these classes,
  187.  
  188. 00:05:09.410 --> 00:05:17.150
  189. if there was another woman in the class, that
  190. would be it, and often I was the only one.
  191.  
  192. 00:05:17.150 --> 00:05:25.200
  193. And I would say that at Berkeley, I definitely
  194. got push-back. You know, I was not the one
  195.  
  196. 00:05:25.200 --> 00:05:31.160
  197. called on in class, I was not the one that
  198. was invited to do a research project with
  199.  
  200. 00:05:31.160 --> 00:05:36.710
  201. somebody. I was usually the top or one of
  202. the top two in the class, but it didn’t
  203.  
  204. 00:05:36.710 --> 00:05:44.970
  205. really make any difference. On the other hand,
  206. I never encountered anything overt. Or if
  207.  
  208. 00:05:44.970 --> 00:05:52.180
  209. I did, I didn’t notice it, because I have
  210. a tendency to not pay too much attention to
  211.  
  212. 00:05:52.180 --> 00:05:58.220
  213. negative signals, which I think has stood
  214. me in very good stead.
  215.  
  216. 00:05:58.220 --> 00:06:04.040
  217. So I majored in math, I minored in physics,
  218. and when I finished at Berkeley, I thought
  219.  
  220. 00:06:04.040 --> 00:06:12.050
  221. about going to graduate school and I actually
  222. applied to both UC Berkeley and to Princeton.
  223.  
  224. 00:06:12.050 --> 00:06:16.561
  225. I got into Berkeley. From Princeton I received
  226. a postcard saying that they didn’t admit
  227.  
  228. 00:06:16.561 --> 00:06:26.330
  229. women to their graduate program. This is 1961,
  230. so it was before the Ivy League men’s schools
  231.  
  232. 00:06:26.330 --> 00:06:30.180
  233. had meshed with the women’s schools, and
  234. women were not allowed into these schools.
  235.  
  236. 00:06:30.180 --> 00:06:37.300
  237. But I was very surprised. I had no idea this
  238. applied to the graduate school as well and
  239.  
  240. 00:06:37.300 --> 00:06:38.820
  241. the undergraduates
  242.  
  243. 00:06:38.820 --> 00:06:44.970
  244. But I decided that I wasn’t ready to go
  245. on to graduate school because I didn’t feel
  246.  
  247. 00:06:44.970 --> 00:06:55.460
  248. like I was ready to work that intensely on
  249. my studies. So I decided instead to take a
  250.  
  251. 00:06:55.460 --> 00:07:01.020
  252. break. And I wasn’t really thinking of it
  253. as a break. I was just thinking I wasn’t
  254.  
  255. 00:07:01.020 --> 00:07:04.150
  256. ready to go to school. I wasn’t thinking,
  257. “Well, in a couple of years, I’ll go to
  258.  
  259. 00:07:04.150 --> 00:07:09.980
  260. school.” I just thought this wasn’t what
  261. I wanted to do right now.
  262.  
  263. 00:07:09.980 --> 00:07:14.910
  264. My father came from the Boston area. Actually
  265. he grew up in Portland, Maine and then went
  266.  
  267. 00:07:14.910 --> 00:07:19.280
  268. to Harvard and his family moved to Boston,
  269. so I had relatives in the Boston area and
  270.  
  271. 00:07:19.280 --> 00:07:23.340
  272. I thought it would be nice to go to Boston
  273. for a while and see what it’s like. I had
  274.  
  275. 00:07:23.340 --> 00:07:27.320
  276. a friend from high school who’d gone to
  277. Stanford who was interested in doing this
  278.  
  279. 00:07:27.320 --> 00:07:35.090
  280. too. She was a biology major. So we decided
  281. to go to Boston together.
  282.  
  283. 00:07:35.090 --> 00:07:42.410
  284. We went to Boston in the summer of 1961. I
  285. didn’t have a job lined up. I decided I
  286.  
  287. 00:07:42.410 --> 00:07:46.590
  288. would just go and then I would look around
  289. to see what I could find. I got to Boston
  290.  
  291. 00:07:46.590 --> 00:07:56.710
  292. probably in August and sent out résumés
  293. to various places. I wasn’t able to get
  294.  
  295. 00:07:56.710 --> 00:08:03.830
  296. an interesting job as a mathematician but
  297. I was offered a job as a programmer at the
  298.  
  299. 00:08:03.830 --> 00:08:13.460
  300. Mitre Corporation, and so I took that. That
  301. was my first intimation that there was such
  302.  
  303. 00:08:13.460 --> 00:08:20.100
  304. a thing as computers. And at that time, since
  305. there were no computer science programs and
  306.  
  307. 00:08:20.100 --> 00:08:26.520
  308. nobody coming out of college who knew anything,
  309. or they were very rare, they would take anybody
  310.  
  311. 00:08:26.520 --> 00:08:30.330
  312. they thought might have an aptitude for programming.
  313.  
  314. 00:08:30.330 --> 00:08:39.930
  315. I got a job at Mitre and on my first day at
  316. work, they handed me a FORTRAN manual and
  317.  
  318. 00:08:39.930 --> 00:08:43.419
  319. they gave me a problem. They said, “Write
  320. a program to do" something. I forget what
  321.  
  322. 00:08:43.419 --> 00:08:55.060
  323. the “something” was. I discovered that
  324. I really enjoyed this. So I’m totally self-taught
  325.  
  326. 00:08:55.060 --> 00:09:00.990
  327. as far as programming is concerned. I had
  328. to do this by myself. Nobody was training
  329.  
  330. 00:09:00.990 --> 00:09:05.750
  331. me. If I had a question, I could go ask somebody,
  332. but basically I was doing it all on my own.
  333.  
  334. 00:09:05.750 --> 00:09:13.900
  335. I discovered I really liked it. I was really
  336. good at it. I had an aptitude for it. So that
  337.  
  338. 00:09:13.900 --> 00:09:20.670
  339. was a great door that opened for me, to find
  340. something that I could do really well and
  341.  
  342. 00:09:20.670 --> 00:09:21.910
  343. that I really enjoyed.
  344.  
  345. 00:09:21.910 --> 00:09:25.320
  346. Were there other women at Mitre working with
  347. you at the time?
  348.  
  349. 00:09:25.320 --> 00:09:30.500
  350. There definitely were other women there. There
  351. were a large percentage of women, because,
  352.  
  353. 00:09:30.500 --> 00:09:36.840
  354. as I said, they were taking them if they thought
  355. they could do it and had the ability to think
  356.  
  357. 00:09:36.840 --> 00:09:40.770
  358. logically. You didn’t even have to be a
  359. math major, though math would be a good background
  360.  
  361. 00:09:40.770 --> 00:09:48.790
  362. for this. But it had to do with being able
  363. to think logically and be organized. Yeah,
  364.  
  365. 00:09:48.790 --> 00:09:55.990
  366. so I definitely remember women who were working
  367. there.
  368.  
  369. 00:09:55.990 --> 00:10:01.920
  370. They had different levels of employees. I
  371. was just a “programmer” but there was
  372.  
  373. 00:10:01.920 --> 00:10:09.940
  374. a higher level known as “tech staff.”
  375. While I was there, they hired a man and a
  376.  
  377. 00:10:09.940 --> 00:10:15.390
  378. woman, and both had master’s degrees. The
  379. woman was hired as a programmer and the man
  380.  
  381. 00:10:15.390 --> 00:10:20.730
  382. was hired as a tech staff. I noticed this
  383. and thought “Hmm, that doesn’t really
  384.  
  385. 00:10:20.730 --> 00:10:26.120
  386. look quite right to me.” Although in retrospect,
  387. the man had a degree from MIT and the woman
  388.  
  389. 00:10:26.120 --> 00:10:30.110
  390. had it from someplace else, so there could
  391. have been a rationale. But that was how things
  392.  
  393. 00:10:30.110 --> 00:10:36.279
  394. were in those days. In fact, to get that job,
  395. I had to tell them that I was looking for
  396.  
  397. 00:10:36.279 --> 00:10:40.750
  398. permanent career employment. That was the
  399. way you had to approach these jobs, because
  400.  
  401. 00:10:40.750 --> 00:10:46.980
  402. they were worried about women coming and them
  403. leaving, and they would have lost their money
  404.  
  405. 00:10:46.980 --> 00:10:48.210
  406. or something.
  407.  
  408. 00:10:48.210 --> 00:10:55.200
  409. I worked at Mitre for a year and I was living
  410. in Cambridge. I saw an ad for a position at
  411.  
  412. 00:10:55.200 --> 00:11:00.970
  413. Harvard working on the language translation
  414. project and I thought it would just be nice
  415.  
  416. 00:11:00.970 --> 00:11:06.990
  417. not to have to commute, so I applied for that
  418. job. I got that job at a pretty good raise
  419.  
  420. 00:11:06.990 --> 00:11:12.870
  421. in salary. I knew nothing about how you might
  422. negotiate for a higher salary by getting a
  423.  
  424. 00:11:12.870 --> 00:11:18.840
  425. competing offer. Mitre offered to counter
  426. that. They offered to give me a tech staff
  427.  
  428. 00:11:18.840 --> 00:11:22.620
  429. position. But of course it wasn’t why I
  430. was doing it. I just thought it might be fun
  431.  
  432. 00:11:22.620 --> 00:11:27.470
  433. to do something different for a year. So I
  434. went to work at Harvard on the language translation
  435.  
  436. 00:11:27.470 --> 00:11:30.770
  437. project.
  438.  
  439. 00:11:30.770 --> 00:11:36.190
  440. That was a good move as it turned out. The
  441. project used a huge program that was written
  442.  
  443. 00:11:36.190 --> 00:11:43.960
  444. in assembler - it was probably for the IBM
  445. 7094. I think in both places it was a 7094.
  446.  
  447. 00:11:43.960 --> 00:11:50.150
  448. That gave me an opportunity to really understand
  449. how the machine worked, and since I was maintaining
  450.  
  451. 00:11:50.150 --> 00:11:55.660
  452. a very large program, it taught me a lot about
  453. program structure. It was a pretty good program
  454.  
  455. 00:11:55.660 --> 00:12:03.200
  456. as these programs go, and fairly well modularized,
  457. although I knew nothing about modularity in
  458.  
  459. 00:12:03.200 --> 00:12:09.730
  460. those days. But it was non-reentrant code,
  461. so when you would call a procedure, they might
  462.  
  463. 00:12:09.730 --> 00:12:13.620
  464. modify an instruction in the procedure they
  465. were calling so that when it got to the end
  466.  
  467. 00:12:13.620 --> 00:12:20.370
  468. it would go back to the caller without having
  469. to have a stack where you branch through something.
  470.  
  471. 00:12:20.370 --> 00:12:25.740
  472. Of course that was a very error-prone way
  473. of doing things. So that was a good lesson
  474.  
  475. 00:12:25.740 --> 00:12:27.910
  476. for me, to see that.
  477.  
  478. 00:12:27.910 --> 00:12:30.050
  479. So this was led by Tony Oettinger?
  480.  
  481. 00:12:30.050 --> 00:12:38.370
  482. Tony Oettinger and Susumu Kuno was a postdoc.
  483. Yes. But I was just a programmer, so I wasn’t
  484.  
  485. 00:12:38.370 --> 00:12:43.360
  486. doing research. They’d find an error in
  487. the program and they’d just say, “Track
  488.  
  489. 00:12:43.360 --> 00:12:48.710
  490. this down and fix it.” That was my job.
  491.  
  492. 00:12:48.710 --> 00:12:55.230
  493. But it was good training. I worry about our
  494. current students who may not ever really understand
  495.  
  496. 00:12:55.230 --> 00:12:59.790
  497. how machines work. Although of course machines
  498. are a lot more complicated now than they were
  499.  
  500. 00:12:59.790 --> 00:13:04.980
  501. then, since in those days they weren’t doing
  502. speculative execution, they didn’t have
  503.  
  504. 00:13:04.980 --> 00:13:11.360
  505. multiple processors, all that stuff you have
  506. to worry about today. But nevertheless, understanding
  507.  
  508. 00:13:11.360 --> 00:13:16.210
  509. when you’re using a higher-level language
  510. what the compiler is producing under the covers
  511.  
  512. 00:13:16.210 --> 00:13:20.800
  513. is really very helpful to understanding what’s
  514. going on.
  515.  
  516. 00:13:20.800 --> 00:13:26.120
  517. I worked at that job and partway through the
  518. year I decided to apply to graduate school
  519.  
  520. 00:13:26.120 --> 00:13:31.970
  521. because it just seemed like it was time. I
  522. was learning a tremendous amount, but as I
  523.  
  524. 00:13:31.970 --> 00:13:37.490
  525. said, I was pretty much self-taught. I thought,
  526. “Well, I probably could learn a lot more
  527.  
  528. 00:13:37.490 --> 00:13:45.140
  529. if I went to graduate school. I’d learn
  530. faster.” I applied to Harvard and Stanford.
  531.  
  532. 00:13:45.140 --> 00:13:50.420
  533. It never occurred to me to apply to MIT. And
  534. I went to Stanford because I wanted to get
  535.  
  536. 00:13:50.420 --> 00:13:55.780
  537. back to the Bay Area. I’d been in Boston
  538. for a couple years and my family was in San
  539.  
  540. 00:13:55.780 --> 00:14:03.460
  541. Francisco, so in 1963 I went to Stanford.
  542. They didn’t have a computer science major
  543.  
  544. 00:14:03.460 --> 00:14:11.860
  545. then. They had a program. It was between,
  546. I guess, math and EE. It was some sort of
  547.  
  548. 00:14:11.860 --> 00:14:15.100
  549. joint thing.
  550.  
  551. 00:14:15.100 --> 00:14:21.050
  552. I went there without any financial support.
  553. I didn’t even know there was financial support.
  554.  
  555. 00:14:21.050 --> 00:14:23.980
  556. I wasn’t really worried about it anyway
  557. because I’d been saving all my money so
  558.  
  559. 00:14:23.980 --> 00:14:32.360
  560. I had a lot of savings. But my recollection
  561. is that on the day I arrived I met John McCarthy
  562.  
  563. 00:14:32.360 --> 00:14:36.640
  564. . I walked up the steps with him, and I asked
  565. him whether he could support me and he said
  566.  
  567. 00:14:36.640 --> 00:14:42.310
  568. yes. It’s highly unlikely that this is what
  569. actually happened, so I always think this
  570.  
  571. 00:14:42.310 --> 00:14:48.149
  572. is an example of how memory is not all that
  573. reliable. I think, in retrospect, they probably
  574.  
  575. 00:14:48.149 --> 00:14:52.700
  576. expected me to be in AI because I had been
  577. doing this work on the language translation
  578.  
  579. 00:14:52.700 --> 00:14:56.310
  580. project even though I knew nothing about AI
  581. at the time.
  582.  
  583. 00:14:56.310 --> 00:15:01.740
  584. They probably already thought I was going
  585. to be working with McCarthy. That’s my guess
  586.  
  587. 00:15:01.740 --> 00:15:09.300
  588. now. It was a very small faculty. I think
  589. besides John, there were only Forsythe and
  590.  
  591. 00:15:09.300 --> 00:15:16.490
  592. Gene Golub. There was a big project in numerical
  593. analysis. And Niklaus Wirth came, but he wasn’t
  594.  
  595. 00:15:16.490 --> 00:15:20.180
  596. there yet. So it was pretty small faculty.
  597. I don’t think there were all that many options
  598.  
  599. 00:15:20.180 --> 00:15:24.850
  600. about what you would be working on. There
  601. weren’t many of us in my class either. I
  602.  
  603. 00:15:24.850 --> 00:15:33.550
  604. think five maybe. I’m not sure. Raj Reddy
  605. was in my class.
  606.  
  607. 00:15:33.550 --> 00:15:41.459
  608. So I moved back to Stanford in the fall of
  609. 1963 and started working with John and taking
  610.  
  611. 00:15:41.459 --> 00:15:45.660
  612. classes. It was a good thing to do.
  613.  
  614. 00:15:45.660 --> 00:15:47.710
  615. What kind of classes were they?
  616.  
  617. 00:15:47.710 --> 00:15:53.160
  618. Whatever they offered. So I took a lot of
  619. classes with Dana Scott . He was at Stanford
  620.  
  621. 00:15:53.160 --> 00:16:00.890
  622. at the time and he was teaching classes in
  623. logic. I remember a class in compilers. I
  624.  
  625. 00:16:00.890 --> 00:16:07.990
  626. remember that we had to write some kind of
  627. little compiler-like thing. I don’t really
  628.  
  629. 00:16:07.990 --> 00:16:13.180
  630. remember what it was, but we used to take
  631. over the machine at night. It was a B5500
  632.  
  633. 00:16:13.180 --> 00:16:21.450
  634. I think. That way we could get fast turnaround,
  635. because it was still the days of batch processing,
  636.  
  637. 00:16:21.450 --> 00:16:26.209
  638. and if you couldn’t get hold of the machine,
  639. then you would have to submit your program
  640.  
  641. 00:16:26.209 --> 00:16:30.839
  642. and wait a day or so before you could get
  643. your results.
  644.  
  645. 00:16:30.839 --> 00:16:37.920
  646. Clearly interactive programming is a big improvement
  647. over batch processing, but one advantage of
  648.  
  649. 00:16:37.920 --> 00:16:42.690
  650. batch processing is that you have to think
  651. through your experiment very carefully before
  652.  
  653. 00:16:42.690 --> 00:16:46.810
  654. you submit it, otherwise you’re just wasting
  655. a whole day of time. Another advantage of
  656.  
  657. 00:16:46.810 --> 00:16:52.019
  658. batch processing is that you have to learn
  659. how to multiplex your time, because you can’t
  660.  
  661. 00:16:52.019 --> 00:16:57.630
  662. just sit there waiting. [laughs] I think both
  663. of those were actually very valuable skills
  664.  
  665. 00:16:57.630 --> 00:17:02.910
  666. that served me in good stead as time went
  667. by.
  668.  
  669. 00:17:02.910 --> 00:17:08.910
  670. I don’t know what else I took. There was
  671. certainly no course in operating systems.
  672.  
  673. 00:17:08.910 --> 00:17:12.780
  674. I refused to take the course in numerical
  675. analysis because I really didn’t like that
  676.  
  677. 00:17:12.780 --> 00:17:22.530
  678. stuff. So I don’t know - I took whatever,
  679. what people were taking, whatever it was they
  680.  
  681. 00:17:22.530 --> 00:17:31.660
  682. offered. I remember Jerry Feldman showed up
  683. maybe my third year. Probably Niklaus Wirth
  684.  
  685. 00:17:31.660 --> 00:17:41.730
  686. was teaching the compiler course. That might
  687. have been my second year. It’s hard to remember.
  688.  
  689. 00:17:41.730 --> 00:17:44.820
  690. Meanwhile I was working with John [McCarthy]
  691. and I was reading whatever papers were available
  692.  
  693. 00:17:44.820 --> 00:17:50.890
  694. and so forth. And I figured out, probably
  695. in my second year, that I would really rather
  696.  
  697. 00:17:50.890 --> 00:17:57.201
  698. be in systems. I think I liked that compiler
  699. course and I liked that way of thinking. But
  700.  
  701. 00:17:57.201 --> 00:18:06.540
  702. I decided to stick in AI and try to get my
  703. PhD out of the way as expeditiously as possible.
  704.  
  705. 00:18:06.540 --> 00:18:15.860
  706. I was very interested in what was then machine
  707. learning. I was really interested in trying
  708.  
  709. 00:18:15.860 --> 00:18:22.230
  710. to make machines do planning and stuff like
  711. that, but it was a very hard problem.
  712.  
  713. 00:18:22.230 --> 00:18:28.450
  714. As you know, that’s an area of AI that’s
  715. changed hugely since those days. Then it was
  716.  
  717. 00:18:28.450 --> 00:18:33.880
  718. this idea that the program would think like
  719. a person and you would try to mimic the way
  720.  
  721. 00:18:33.880 --> 00:18:39.030
  722. people thought about things. In fact, that
  723. was kind of what was going on in my PhD thesis
  724.  
  725. 00:18:39.030 --> 00:18:44.299
  726. – the Program to Play Chess Endgames. There
  727. I was thinking about what were the strategies
  728.  
  729. 00:18:44.299 --> 00:18:49.510
  730. I would use as a person playing that game,
  731. and then I built those strategies into my
  732.  
  733. 00:18:49.510 --> 00:18:54.980
  734. program. But it was limited what you could
  735. accomplish with that way of thinking about
  736.  
  737. 00:18:54.980 --> 00:18:58.910
  738. machine learning. Now that we’ve switched
  739. to the modern techniques, they seem to make
  740.  
  741. 00:18:58.910 --> 00:19:01.410
  742. a lot more progress.
  743.  
  744. 00:19:01.410 --> 00:19:13.410
  745. Anyway, I did my PhD working with John McCarthy.
  746. And when I was in my final year, I started
  747.  
  748. 00:19:13.410 --> 00:19:21.750
  749. looking around for a job, but nobody gave
  750. me any guidance. John was not a person who
  751.  
  752. 00:19:21.750 --> 00:19:28.590
  753. would have done that anyway and I didn’t
  754. really understand any sort of application
  755.  
  756. 00:19:28.590 --> 00:19:38.200
  757. process. So I didn’t apply to any schools.
  758. I sort of waited for people to come to me,
  759.  
  760. 00:19:38.200 --> 00:19:42.640
  761. which in a way was what was going on with
  762. others - I mean Raj Reddy and so forth, because
  763.  
  764. 00:19:42.640 --> 00:19:47.650
  765. it was the old boys’ network in full play
  766. at that time.
  767.  
  768. 00:19:47.650 --> 00:19:53.400
  769. So what I had offers to do… I must have
  770. applied to somewhere, because I don’t think
  771.  
  772. 00:19:53.400 --> 00:19:59.100
  773. these just came out of the blue, but I had
  774. an offer at Hayward State – that was because
  775.  
  776. 00:19:59.100 --> 00:20:03.850
  777. Harry Huskey who was running the department
  778. there knew me. I had an offer at SRI – that
  779.  
  780. 00:20:03.850 --> 00:20:08.470
  781. was because… I can’t remember his name
  782. right now, but the person running SRI labs
  783.  
  784. 00:20:08.470 --> 00:20:16.100
  785. knew me. Then I had an offer from Mitre where
  786. they knew me, right? [laughs] And I knew that
  787.  
  788. 00:20:16.100 --> 00:20:20.010
  789. the job at Hayward State would be a very bad
  790. idea, because it was a heavy teaching load
  791.  
  792. 00:20:20.010 --> 00:20:24.260
  793. with very little research, and that didn’t
  794. seem like a good idea. And I wanted to move
  795.  
  796. 00:20:24.260 --> 00:20:29.720
  797. back to the Boston area. I actually came and
  798. applied to MIT, and I think they would have
  799.  
  800. 00:20:29.720 --> 00:20:37.090
  801. offered me a job as a tech staff probably.
  802. Not a research associate. I’m not sure exactly.
  803.  
  804. 00:20:37.090 --> 00:20:39.260
  805. I decided that probably wasn’t a good idea.
  806.  
  807. 00:20:39.260 --> 00:20:46.410
  808. So I decided to go to Mitre. That was a good
  809. idea because I was also changing fields from
  810.  
  811. 00:20:46.410 --> 00:20:50.679
  812. AI to systems, and I didn’t know too much
  813. about systems. I think I’d had that one
  814.  
  815. 00:20:50.679 --> 00:20:58.290
  816. course in compilers plus my background in
  817. computer architecture such as it was. So I
  818.  
  819. 00:20:58.290 --> 00:21:04.560
  820. had a lot to learn. And so this is now the
  821. fall of 1968. I moved to the Boston area.
  822.  
  823. 00:21:04.560 --> 00:21:09.820
  824. By then I had met my husband. We weren’t
  825. married yet, but that seemed like a good thing
  826.  
  827. 00:21:09.820 --> 00:21:18.420
  828. to continue with, and so I moved back to the
  829. Boston area and took the job at Mitre.
  830.  
  831. 00:21:18.420 --> 00:21:29.429
  832. I started at Mitre in September of 1968, and
  833. the first project they handed me was a microprogramming
  834.  
  835. 00:21:29.429 --> 00:21:36.000
  836. project. In those days, microprogramming was
  837. considered to be an interesting research direction.
  838.  
  839. 00:21:36.000 --> 00:21:42.600
  840. The idea was that they would provide you with
  841. a read-only memory and a very simple, small
  842.  
  843. 00:21:42.600 --> 00:21:50.440
  844. instruction set, and then you could implement
  845. a more grandiose instruction set using the
  846.  
  847. 00:21:50.440 --> 00:22:02.840
  848. read-only memory and this very small instruction
  849. set. I had read the paper on the THE operating
  850.  
  851. 00:22:02.840 --> 00:22:08.690
  852. system and I was very intrigued with the notion
  853. of semaphores and I was interested in parallel
  854.  
  855. 00:22:08.690 --> 00:22:16.000
  856. computing, so I decided to put the project
  857. in that direction. I mean, why do a project
  858.  
  859. 00:22:16.000 --> 00:22:19.250
  860. like that if you’re just going to implement
  861. a standard instruction set? So I sort of moved
  862.  
  863. 00:22:19.250 --> 00:22:21.430
  864. it in that direction.
  865.  
  866. 00:22:21.430 --> 00:22:27.690
  867. I actually had a chance to meet [Edsger W.]
  868. Dijkstra. He came to Mitre. Maybe it was the
  869.  
  870. 00:22:27.690 --> 00:22:32.550
  871. spring of ’69. I’m not really sure. I
  872. met with him and we talked about semaphores,
  873.  
  874. 00:22:32.550 --> 00:22:43.340
  875. and I decided to implement them in the hardware.
  876. I had put into the hardware, using the microprogram,
  877.  
  878. 00:22:43.340 --> 00:22:47.150
  879. sort of a basis for parallel programming.
  880. It was a single processor, but this was a
  881.  
  882. 00:22:47.150 --> 00:22:52.870
  883. way of time-sharing. When that part of the
  884. project was finished, then the next part of
  885.  
  886. 00:22:52.870 --> 00:23:00.150
  887. the project was to use it for something. I
  888. built a little multiprogramming system on
  889.  
  890. 00:23:00.150 --> 00:23:06.419
  891. top of this hardware, taking advantage of
  892. what semaphores gave me and some of the other
  893.  
  894. 00:23:06.419 --> 00:23:10.830
  895. stuff that I’ve really forgotten about,
  896. how you control the interrupt system and stuff
  897.  
  898. 00:23:10.830 --> 00:23:11.830
  899. like that.
  900.  
  901. 00:23:11.830 --> 00:23:13.530
  902. So this was the Interdata 3…
  903.  
  904. 00:23:13.530 --> 00:23:16.090
  905. This would be Interdata 3. Or maybe it was
  906. the 4.
  907.  
  908. 00:23:16.090 --> 00:23:21.549
  909. Yeah. I think it was… Was it Interdata 3
  910. or 4? I’ve forgotten. I could look in my…
  911.  
  912. 00:23:21.549 --> 00:23:23.559
  913. you know. But anyway, it was…
  914.  
  915. 00:23:23.559 --> 00:23:26.620
  916. They were similar.
  917.  
  918. 00:23:26.620 --> 00:23:33.751
  919. Yeah. I probably finished the first part of
  920. that thing in the first year, and then in
  921.  
  922. 00:23:33.751 --> 00:23:39.500
  923. the second part of the project, which maybe
  924. started in the fall of 1969, by then I was
  925.  
  926. 00:23:39.500 --> 00:23:46.190
  927. working with one other person, somebody named
  928. Bob Curtis who was a tech staff at Mitre.
  929.  
  930. 00:23:46.190 --> 00:23:52.020
  931. Actually I don’t remember that Bob was involved.
  932. I’m not sure exactly when we started working
  933.  
  934. 00:23:52.020 --> 00:23:57.320
  935. together. Anyway, he was definitely involved
  936. in the early work on the Venus operating system.
  937.  
  938. 00:23:57.320 --> 00:24:02.240
  939. [chuckles] The little computer I developed
  940. was called “Venus” and then we developed
  941.  
  942. 00:24:02.240 --> 00:24:11.559
  943. the Venus operating system. I had also a couple
  944. of people working as programmers. I did most
  945.  
  946. 00:24:11.559 --> 00:24:20.270
  947. of the design and we figured out how to implement
  948. this thing. It was an interesting little system.
  949.  
  950. 00:24:20.270 --> 00:24:23.970
  951. It’s been a long time, I really haven’t
  952. thought about it much since then, but it got
  953.  
  954. 00:24:23.970 --> 00:24:29.820
  955. me into operating systems and I learned about
  956. what was going on, the kinds of abstractions
  957.  
  958. 00:24:29.820 --> 00:24:38.810
  959. that were being used in operating systems.
  960. Semaphores turned out to be handy. That was
  961.  
  962. 00:24:38.810 --> 00:24:44.510
  963. probably the second year at Mitre – ’69
  964. maybe into the fall of 1970.
  965.  
  966. 00:24:44.510 --> 00:24:51.789
  967. When that project was finished, Mitre asked
  968. me to look at programming methodology. That
  969.  
  970. 00:24:51.789 --> 00:24:57.620
  971. was a successful project. I’m not sure exactly
  972. what these dates are. I actually have some
  973.  
  974. 00:24:57.620 --> 00:25:05.760
  975. of the tech reports, so I can go back and
  976. figure this out.
  977.  
  978. 00:25:05.760 --> 00:25:13.150
  979. So that got me into programming methodology.
  980. Mitre, as you know, works for the government,
  981.  
  982. 00:25:13.150 --> 00:25:18.980
  983. and the government puts out request for proposals,
  984. and I wasn’t in a position yet where I was
  985.  
  986. 00:25:18.980 --> 00:25:25.179
  987. the person who would be answering those proposals.
  988. I was somebody that they were using as a person
  989.  
  990. 00:25:25.179 --> 00:25:30.669
  991. they could put in charge of a project once
  992. they’d brought it in. When I arrived this
  993.  
  994. 00:25:30.669 --> 00:25:35.390
  995. Interdata 3 project was there waiting for
  996. me to work on, and then after that was done,
  997.  
  998. 00:25:35.390 --> 00:25:44.470
  999. they’d already bid on the “software crisis”
  1000. request for proposals. And I was finishing
  1001.  
  1002. 00:25:44.470 --> 00:25:49.930
  1003. up this project, so they asked me to take
  1004. that on.
  1005.  
  1006. 00:25:49.930 --> 00:25:57.522
  1007. That was a marvelous opportunity for me because
  1008. it opened up a whole new area I didn’t know
  1009.  
  1010. 00:25:57.522 --> 00:26:03.640
  1011. anything about. I started reading the literature,
  1012. which was not vast, but there definitely was
  1013.  
  1014. 00:26:03.640 --> 00:26:12.570
  1015. some. The players were the sort of usual players
  1016. if you think about… I mean there was Tony
  1017.  
  1018. 00:26:12.570 --> 00:26:22.179
  1019. Hoare , Niklaus Wirth , Dijkstra , and other
  1020. people that you would recognize from those
  1021.  
  1022. 00:26:22.179 --> 00:26:26.110
  1023. days. I guess most of the conferences were
  1024. in Europe now that I think about it.
  1025.  
  1026. 00:26:26.110 --> 00:26:32.000
  1027. Did you go to the NATO program methodology
  1028. meeting or whatever it was, the famous one?
  1029.  
  1030. 00:26:32.000 --> 00:26:42.160
  1031. I did not, no. I didn’t go to many meetings
  1032. at this time. Later I was in Working Group
  1033.  
  1034. 00:26:42.160 --> 00:26:51.810
  1035. 2.3, 2.5, the methodology working group. But
  1036. I never found that kind of format useful for
  1037.  
  1038. 00:26:51.810 --> 00:27:00.100
  1039. me. I tend to be more “I work by myself.”
  1040. But I read proceedings from these meetings
  1041.  
  1042. 00:27:00.100 --> 00:27:10.799
  1043. and learned about what was going on, and started
  1044. thinking about methodology. As I say in my
  1045.  
  1046. 00:27:10.799 --> 00:27:16.090
  1047. Turing talks, as I was looking at various
  1048. people – Dave Parnas of course was another
  1049.  
  1050. 00:27:16.090 --> 00:27:22.360
  1051. big player – and I read all the papers I
  1052. could get my hands on and thought about their
  1053.  
  1054. 00:27:22.360 --> 00:27:29.740
  1055. proposals for methodology. At some point during
  1056. this process, I realized that I had invented
  1057.  
  1058. 00:27:29.740 --> 00:27:35.530
  1059. a methodology of my own while working on the
  1060. Venus system, not because I was thinking about
  1061.  
  1062. 00:27:35.530 --> 00:27:40.410
  1063. it but just because I wanted a way of organizing
  1064. that software that gave us a sensible way
  1065.  
  1066. 00:27:40.410 --> 00:27:44.020
  1067. of approaching the software development process.
  1068.  
  1069. 00:27:44.020 --> 00:27:50.600
  1070. The idea that I had in Venus was that… I
  1071. mean to understand the background at this
  1072.  
  1073. 00:27:50.600 --> 00:27:55.530
  1074. time, you have to understand that there was
  1075. that ALGOL school of programming which had
  1076.  
  1077. 00:27:55.530 --> 00:28:01.540
  1078. a good idea and a bad idea. The good idea
  1079. was that you had blocks, and inner block had
  1080.  
  1081. 00:28:01.540 --> 00:28:06.480
  1082. private data and the outer block couldn’t
  1083. access it. The bad idea was you had blocks
  1084.  
  1085. 00:28:06.480 --> 00:28:10.490
  1086. [laughs] and the inner block could freely
  1087. access all the stuff in the outer block, and
  1088.  
  1089. 00:28:10.490 --> 00:28:17.370
  1090. so there was a natural tendency to communicate
  1091. through global variables. That was not such
  1092.  
  1093. 00:28:17.370 --> 00:28:22.451
  1094. a great idea. Some of Parnas’ papers talked
  1095. a bit about why that was a bad idea, although
  1096.  
  1097. 00:28:22.451 --> 00:28:27.780
  1098. I would not say that in general it was understood
  1099. that this was a bad idea.
  1100.  
  1101. 00:28:27.780 --> 00:28:32.810
  1102. At any rate, somehow I understood this wasn’t
  1103. a great idea, and I think it has to do with
  1104.  
  1105. 00:28:32.810 --> 00:28:36.230
  1106. the fact that if you have lots of people working
  1107. on different pieces of the system and they
  1108.  
  1109. 00:28:36.230 --> 00:28:39.409
  1110. all can freely communicate through this set
  1111. of global variables, you’re going to have
  1112.  
  1113. 00:28:39.409 --> 00:28:44.760
  1114. a big mess on your hands. And maybe I saw
  1115. a mess like that in the Harvard stuff. I’m
  1116.  
  1117. 00:28:44.760 --> 00:28:49.650
  1118. really not sure where it came from. But I
  1119. decided we were not going to have shared global
  1120.  
  1121. 00:28:49.650 --> 00:28:55.169
  1122. variables in developing the Venus system.
  1123. Instead we were just going to break up the
  1124.  
  1125. 00:28:55.169 --> 00:29:02.299
  1126. global variable space into what I called “partitions,”
  1127. and each partition would be in the charge
  1128.  
  1129. 00:29:02.299 --> 00:29:07.910
  1130. of a particular program module, and that module
  1131. would be the only place you could access that
  1132.  
  1133. 00:29:07.910 --> 00:29:13.970
  1134. data. Since other parts of the program had
  1135. to use it, that module would provide procedures
  1136.  
  1137. 00:29:13.970 --> 00:29:19.251
  1138. that that other parts of the program could
  1139. call. That’s the methodology we used and
  1140.  
  1141. 00:29:19.251 --> 00:29:21.490
  1142. it worked out extremely well.
  1143.  
  1144. 00:29:21.490 --> 00:29:24.780
  1145. Another thing that was going on in Venus,
  1146. which I usually don’t talk about in my Turing
  1147.  
  1148. 00:29:24.780 --> 00:29:31.230
  1149. talk, is that we were also thinking of the
  1150. question of “How do you organize a parallel
  1151.  
  1152. 00:29:31.230 --> 00:29:37.710
  1153. program like an operating system? And how
  1154. in particular do you control the devices,
  1155.  
  1156. 00:29:37.710 --> 00:29:43.549
  1157. the shared resources? How do you communicate
  1158. among the threads that are doing the concurrent
  1159.  
  1160. 00:29:43.549 --> 00:29:50.900
  1161. processing?” And I was kind of using abstract
  1162. data types already. I was thinking in terms
  1163.  
  1164. 00:29:50.900 --> 00:29:57.919
  1165. of the way you do it is the thread makes use
  1166. of the shared resource, which is actually
  1167.  
  1168. 00:29:57.919 --> 00:30:03.200
  1169. an object with a bunch of operations, and
  1170. you call that object and it has some hidden
  1171.  
  1172. 00:30:03.200 --> 00:30:08.240
  1173. resources which it uses to sort of… it’s
  1174. being shared by all the threads and that’s
  1175.  
  1176. 00:30:08.240 --> 00:30:10.850
  1177. how the control actually happens.
  1178.  
  1179. 00:30:10.850 --> 00:30:16.210
  1180. Although I didn’t pull that out in the first
  1181. paper I wrote on programming methodology.
  1182.  
  1183. 00:30:16.210 --> 00:30:23.140
  1184. I wasn’t even really thinking about it until
  1185. the SOSP History Day where I gave a talk about
  1186.  
  1187. 00:30:23.140 --> 00:30:30.390
  1188. the history of program structure in operating
  1189. systems and I looked at the THE system again,
  1190.  
  1191. 00:30:30.390 --> 00:30:37.890
  1192. I looked at the Venus system, and then there
  1193. was that Schroeder and Nelson, or Nelson and
  1194.  
  1195. 00:30:37.890 --> 00:30:45.440
  1196. Birrell - the paper about the two ways of
  1197. organizing a parallel program, one where you
  1198.  
  1199. 00:30:45.440 --> 00:30:51.159
  1200. have queues and one where you send messages.
  1201. I was looking at some of those methodology
  1202.  
  1203. 00:30:51.159 --> 00:30:56.720
  1204. papers and I realized that Venus was actually
  1205. one of the ones in the mix there and that
  1206.  
  1207. 00:30:56.720 --> 00:31:02.289
  1208. there were two structures – one of the shared
  1209. resources where threads just call operations
  1210.  
  1211. 00:31:02.289 --> 00:31:06.400
  1212. and everything is taken care of under the
  1213. covers, and this other structure which is
  1214.  
  1215. 00:31:06.400 --> 00:31:12.300
  1216. you provide a… it’s sort of a CSP-like
  1217. structure where you have your thread and it’s
  1218.  
  1219. 00:31:12.300 --> 00:31:19.620
  1220. got a bunch of methods that are being called
  1221. remotely. It’s a different model of computation.
  1222.  
  1223. 00:31:19.620 --> 00:31:24.159
  1224. So Venus had both those things. It was on
  1225. the shared resource, you just call its operations.
  1226.  
  1227. 00:31:24.159 --> 00:31:29.060
  1228. It kind of follows naturally from this idea
  1229. of partitions and just calling operations.
  1230.  
  1231. 00:31:29.060 --> 00:31:36.500
  1232. Okay. So I was thinking about methodology
  1233. and I realized I had a methodology, so I wrote
  1234.  
  1235. 00:31:36.500 --> 00:31:41.880
  1236. a paper on it and that went into the Fall
  1237. Joint I think it was in 19-… I think it
  1238.  
  1239. 00:31:41.880 --> 00:31:47.941
  1240. was probably published in ’71 or ’72.
  1241. But meanwhile I also had written [a] paper
  1242.  
  1243. 00:31:47.941 --> 00:32:02.090
  1244. on Venus, and I submitted that to SOSP. It
  1245. was the third SOSP. And it was accepted.
  1246.  
  1247. 00:32:02.090 --> 00:32:07.909
  1248. By the way, that was the first writing experience
  1249. I ever had where I had somebody reading my
  1250.  
  1251. 00:32:07.909 --> 00:32:14.440
  1252. paper and giving me criticism about it. Because
  1253. John [McCarthy] didn’t do that. I had never
  1254.  
  1255. 00:32:14.440 --> 00:32:18.659
  1256. had that experience. I never had an advisor
  1257. as a graduate student who was working with
  1258.  
  1259. 00:32:18.659 --> 00:32:22.520
  1260. me, telling me, “Oh, this doesn’t make
  1261. sense. Reorganize that,” and so forth. It
  1262.  
  1263. 00:32:22.520 --> 00:32:28.620
  1264. was very useful. That was my boss, Judy Clapp.
  1265. She’d been a tech staff at Mitre even earlier
  1266.  
  1267. 00:32:28.620 --> 00:32:34.500
  1268. than me, and has very interesting stories
  1269. to tell. She was serving that role and it
  1270.  
  1271. 00:32:34.500 --> 00:32:36.190
  1272. was very valuable.
  1273.  
  1274. 00:32:36.190 --> 00:32:42.710
  1275. Anyway, the paper on Venus was accepted. SOSP
  1276. as you know is the top systems conference.
  1277.  
  1278. 00:32:42.710 --> 00:32:47.070
  1279. It was even in those days, even though it
  1280. was only the third one, because it was the
  1281.  
  1282. 00:32:47.070 --> 00:32:54.370
  1283. only act in town. Jerry Saltzer was the…
  1284. I was one of the prize papers. They’ve always
  1285.  
  1286. 00:32:54.370 --> 00:33:01.370
  1287. had this tradition of the top few papers,
  1288. the award papers, and they go into… they
  1289.  
  1290. 00:33:01.370 --> 00:33:04.559
  1291. used to go into the Communications. Now they
  1292. go into TOCS.
  1293.  
  1294. 00:33:04.559 --> 00:33:12.261
  1295. So Jerry was the chair of my session, and
  1296. Corby was there, Professor Corbató . And
  1297.  
  1298. 00:33:12.261 --> 00:33:17.539
  1299. I’m not sure who else was there from MIT.
  1300. Probably other people from the Multics group.
  1301.  
  1302. 00:33:17.539 --> 00:33:27.020
  1303. And after my talk I was invited to apply to
  1304. MIT. So I think I talked to Jerry. He encouraged
  1305.  
  1306. 00:33:27.020 --> 00:33:34.610
  1307. me to apply, so I did. I also applied to Berkeley,
  1308. and I could have probably gone to Berkeley,
  1309.  
  1310. 00:33:34.610 --> 00:33:39.409
  1311. but my husband was not willing to move. We
  1312. were married by then and he worked for Raytheon
  1313.  
  1314. 00:33:39.409 --> 00:33:43.140
  1315. and it didn’t look like it was easy for
  1316. him. Certainly not in the Berkeley area. He
  1317.  
  1318. 00:33:43.140 --> 00:33:49.330
  1319. might have been able to do something down
  1320. in the peninsula. So I moved to MIT in the
  1321.  
  1322. 00:33:49.330 --> 00:34:02.970
  1323. fall of 1972. And at the same time, Mike Schroeder
  1324. was hired, so they hired two people in systems.
  1325.  
  1326. 00:34:02.970 --> 00:34:16.020
  1327. I think it was Title IX that sort of opened
  1328. up things for women. My understanding of what
  1329.  
  1330. 00:34:16.020 --> 00:34:22.619
  1331. happened was the landscape had changed. All
  1332. of a sudden there was more pressure on universities
  1333.  
  1334. 00:34:22.619 --> 00:34:27.830
  1335. to hire women. I don’t think all universities
  1336. were paying much attention to this, but MIT
  1337.  
  1338. 00:34:27.830 --> 00:34:32.530
  1339. was paying attention. I think it was coming
  1340. from Jerry Wiesner, who was the president
  1341.  
  1342. 00:34:32.530 --> 00:34:37.849
  1343. of MIT, because this kind of stuff has to
  1344. come from the top. Jerry was actually interested
  1345.  
  1346. 00:34:37.849 --> 00:34:42.859
  1347. in increasing the number of women. The head
  1348. of the EE department – it wasn’t EECS
  1349.  
  1350. 00:34:42.859 --> 00:34:48.450
  1351. yet, it was just EE – was Louis Smullin,
  1352. and I think Louis was interested in doing
  1353.  
  1354. 00:34:48.450 --> 00:34:52.440
  1355. this. Then Bob Fano was the head of computer
  1356. science, and Bob was definitely interested
  1357.  
  1358. 00:34:52.440 --> 00:35:00.619
  1359. in doing this. They were looking for a woman
  1360. and there I was. So it was a mutually beneficial
  1361.  
  1362. 00:35:00.619 --> 00:35:07.740
  1363. exchange. As soon as I got the offer, I knew
  1364. I was going to leave Mitre. It was just something
  1365.  
  1366. 00:35:07.740 --> 00:35:12.200
  1367. I guess I’d always thought would be fun
  1368. to do, and I decided I was going to do it.
  1369.  
  1370. 00:35:12.200 --> 00:35:18.990
  1371. So I got to MIT. There were only 10 women
  1372. on the faculty out of a faculty of a thousand.
  1373.  
  1374. 00:35:18.990 --> 00:35:23.460
  1375. As you know, since you went to MIT, the number
  1376. of women in the undergraduate population was
  1377.  
  1378. 00:35:23.460 --> 00:35:31.950
  1379. very, very small. My husband is class of 1960
  1380. and there were 16 women in his class. I mean
  1381.  
  1382. 00:35:31.950 --> 00:35:38.900
  1383. so small, it’s really, you know… MIT always
  1384. admitted women, but they never had very many,
  1385.  
  1386. 00:35:38.900 --> 00:35:42.800
  1387. partly because they had no housing for them
  1388. and so they didn’t know what to do with
  1389.  
  1390. 00:35:42.800 --> 00:35:51.030
  1391. them. That changed when… I forget the name
  1392. of the woman who gave money for a dormitory
  1393.  
  1394. 00:35:51.030 --> 00:35:56.660
  1395. for women , and as soon as they had more space,
  1396. they started to let more women in. That was
  1397.  
  1398. 00:35:56.660 --> 00:36:00.560
  1399. in the ’70s or maybe the late ’60s. I’m
  1400. not sure exactly when.
  1401.  
  1402. 00:36:00.560 --> 00:36:01.560
  1403. ’60s.
  1404.  
  1405. 00:36:01.560 --> 00:36:13.720
  1406. It was the ’60s? Yeah. So I went to MIT
  1407. in the fall of 1972 and that was a wonderful
  1408.  
  1409. 00:36:13.720 --> 00:36:21.450
  1410. move for me. The glory of working as a university
  1411. professor is that you get to do whatever you
  1412.  
  1413. 00:36:21.450 --> 00:36:27.521
  1414. want, right? You go to a place like MIT, you
  1415. have certain responsibilities. MIT is very
  1416.  
  1417. 00:36:27.521 --> 00:36:34.890
  1418. focused on teaching and quality teaching,
  1419. and everybody teaches two courses a year,
  1420.  
  1421. 00:36:34.890 --> 00:36:40.310
  1422. and that takes time and you got to pay attention
  1423. to that. But as far as research is concerned,
  1424.  
  1425. 00:36:40.310 --> 00:36:42.940
  1426. you figure out what you’re researching on.
  1427.  
  1428. 00:36:42.940 --> 00:36:46.750
  1429. Of course there’s a downside to this too.
  1430. First of all, you better have the ideas. You
  1431.  
  1432. 00:36:46.750 --> 00:36:50.140
  1433. have to figure out what you’re going to
  1434. do. You can do it, but you have to figure
  1435.  
  1436. 00:36:50.140 --> 00:36:53.580
  1437. out what it is and then you have to raise
  1438. money. But raising money was pretty easy in
  1439.  
  1440. 00:36:53.580 --> 00:36:59.560
  1441. those days because those were the days when
  1442. DARPA was supporting computer science research
  1443.  
  1444. 00:36:59.560 --> 00:37:05.480
  1445. and it was mostly putting its money into a
  1446. few institutions. I don’t remember whether
  1447.  
  1448. 00:37:05.480 --> 00:37:11.470
  1449. it was Project MAC still or Lab for Computer
  1450. Science, but we used to submit one proposal
  1451.  
  1452. 00:37:11.470 --> 00:37:16.930
  1453. for the whole lab and I just had to write
  1454. a couple of pages in that proposal to get
  1455.  
  1456. 00:37:16.930 --> 00:37:23.420
  1457. money. I also wrote NSF proposals just to
  1458. have sort of another source of money and to
  1459.  
  1460. 00:37:23.420 --> 00:37:29.089
  1461. practice how to do that. But compared to the
  1462. situation today, it was a lot easier to fund
  1463.  
  1464. 00:37:29.089 --> 00:37:31.010
  1465. your research then.
  1466.  
  1467. 00:37:31.010 --> 00:37:42.460
  1468. So I came to MIT. The first course I taught
  1469. was what is currently 6.004. So it’s a computer
  1470.  
  1471. 00:37:42.460 --> 00:37:49.421
  1472. architecture course. This was a weird assignment
  1473. for me because I had no EE background, and
  1474.  
  1475. 00:37:49.421 --> 00:37:53.890
  1476. I was actually in an EE department. It wasn’t
  1477. EECS yet. I don’t remember when it became
  1478.  
  1479. 00:37:53.890 --> 00:38:03.850
  1480. EECS. Probably a few a years later. That was
  1481. a bit of a scramble. Jack Dennis had a graduate
  1482.  
  1483. 00:38:03.850 --> 00:38:09.830
  1484. student, Clem Leung, who was also a TA for
  1485. the class, and he helped me. You know, I was
  1486.  
  1487. 00:38:09.830 --> 00:38:15.200
  1488. keeping sort of one week ahead of the students,
  1489. learning stuff about circuits and so forth,
  1490.  
  1491. 00:38:15.200 --> 00:38:20.270
  1492. which really I had no background in. And I
  1493. definitely had students who were not happy
  1494.  
  1495. 00:38:20.270 --> 00:38:25.990
  1496. to see me. I didn’t feel that I got discrimination
  1497. from the faculty, but I did feel that the
  1498.  
  1499. 00:38:25.990 --> 00:38:31.130
  1500. students… there was a few students in the
  1501. class that were… they’d try to trip me
  1502.  
  1503. 00:38:31.130 --> 00:38:36.740
  1504. up. They’d try to ask me a question I couldn’t
  1505. answer. Of course I was at a kind of vulnerable
  1506.  
  1507. 00:38:36.740 --> 00:38:42.580
  1508. position, teaching a course in an area I didn’t
  1509. know. So that was a little bit of a baptism
  1510.  
  1511. 00:38:42.580 --> 00:38:49.150
  1512. by fire, but I learned how to… I was one
  1513. week ahead of them, and I learned how to say,
  1514.  
  1515. 00:38:49.150 --> 00:38:54.580
  1516. “I’ll talk about that at another time.”
  1517. [laughs] Meanwhile I started getting the research…
  1518.  
  1519. 00:38:54.580 --> 00:39:02.050
  1520. Oh, the other problem was I was in Project
  1521. MAC or LCS, and they decided I was an AI person
  1522.  
  1523. 00:39:02.050 --> 00:39:08.150
  1524. and they put me on the AI floor. I think they
  1525. wanted me to work in AI. But meanwhile I was
  1526.  
  1527. 00:39:08.150 --> 00:39:15.270
  1528. working programming methodology. Jack Dennis
  1529. in the spring of 1963 helped me move my office
  1530.  
  1531. 00:39:15.270 --> 00:39:21.770
  1532. back down to the systems floor, which was
  1533. a much more congenial place, and that helped
  1534.  
  1535. 00:39:21.770 --> 00:39:26.089
  1536. a lot. So Jack was very helpful.
  1537.  
  1538. 00:39:26.089 --> 00:39:32.040
  1539. So meanwhile in research, I’m sitting there
  1540. thinking about programming methodology, and
  1541.  
  1542. 00:39:32.040 --> 00:39:39.950
  1543. I was really interested in programming methodology.
  1544. I thought it was a very important field. And
  1545.  
  1546. 00:39:39.950 --> 00:39:47.490
  1547. what I had noticed was that although the papers
  1548. were very compelling when you read them and
  1549.  
  1550. 00:39:47.490 --> 00:39:51.380
  1551. they always had an example and you would follow
  1552. the example and you’d say, “Oh yes, that’s
  1553.  
  1554. 00:39:51.380 --> 00:39:55.240
  1555. very convincing. This is the right way to
  1556. do things”… And I’m thinking specifically
  1557.  
  1558. 00:39:55.240 --> 00:40:01.340
  1559. about Parnas’ papers because his were about
  1560. how to structure programming. If you think
  1561.  
  1562. 00:40:01.340 --> 00:40:05.710
  1563. about the papers at the time, there were papers
  1564. on “Here’s how you design software.”
  1565.  
  1566. 00:40:05.710 --> 00:40:11.450
  1567. So Niklaus Wirth wrote about top-down programming
  1568. and Dijkstra had that wonderful letter to
  1569.  
  1570. 00:40:11.450 --> 00:40:16.500
  1571. the Communications of the ACM on “Go To
  1572. Statement Considered Harmful,” and really
  1573.  
  1574. 00:40:16.500 --> 00:40:21.849
  1575. the gist of that paper, if you think behind
  1576. the scenes of that paper, it was really about
  1577.  
  1578. 00:40:21.849 --> 00:40:27.010
  1579. Dijkstra’s message, which was “We should
  1580. be reasoning about the correctness of code.”
  1581.  
  1582. 00:40:27.010 --> 00:40:32.040
  1583. The goto was bad because it made it harder
  1584. to do that reasoning, but the idea that programming
  1585.  
  1586. 00:40:32.040 --> 00:40:38.530
  1587. is an intellectually difficult problem and
  1588. that we should approach it in a kind of mathematical
  1589.  
  1590. 00:40:38.530 --> 00:40:44.980
  1591. way, that was early days and that was a pretty
  1592. significant step forward to see that way of
  1593.  
  1594. 00:40:44.980 --> 00:40:46.220
  1595. thinking about things.
  1596.  
  1597. 00:40:46.220 --> 00:40:52.820
  1598. But Dave Parnas was writing about modularity,
  1599. and he was saying, “Here is how we should
  1600.  
  1601. 00:40:52.820 --> 00:40:57.829
  1602. think about modules.” He actually said,
  1603. “Programs are built of modules, but I don’t
  1604.  
  1605. 00:40:57.829 --> 00:41:04.140
  1606. know what they are.” And that was kind of
  1607. the state of the art at the time. But he had
  1608.  
  1609. 00:41:04.140 --> 00:41:08.230
  1610. the idea of specifications. He was saying,
  1611. “Whatever they are, we better describe their
  1612.  
  1613. 00:41:08.230 --> 00:41:14.030
  1614. connections completely.” So he meant “Whatever
  1615. their interface is, we better have a complete
  1616.  
  1617. 00:41:14.030 --> 00:41:15.030
  1618. description.”
  1619.  
  1620. 00:41:15.030 --> 00:41:21.080
  1621. I used to feel kind of jealous of the electrical
  1622. engineers because I thought, “At least they
  1623.  
  1624. 00:41:21.080 --> 00:41:26.800
  1625. have these components and they connect them
  1626. by wires, and that forces you to really focus
  1627.  
  1628. 00:41:26.800 --> 00:41:32.310
  1629. on what those wires are.” Whereas software
  1630. was so plastic that people used to design
  1631.  
  1632. 00:41:32.310 --> 00:41:36.160
  1633. without thinking much about those wires, and
  1634. so then they would end up with this huge mess
  1635.  
  1636. 00:41:36.160 --> 00:41:42.130
  1637. of interconnections between the pieces of
  1638. the program, and that was a big problem. That
  1639.  
  1640. 00:41:42.130 --> 00:41:46.000
  1641. was a problem I was looking at in Venus when
  1642. I said, “We’re going to have partitions,”
  1643.  
  1644. 00:41:46.000 --> 00:41:50.750
  1645. but it was just a problem in general. Global
  1646. variables were a big problem. Just the ability
  1647.  
  1648. 00:41:50.750 --> 00:41:54.650
  1649. that there was nothing forcing you to do things
  1650. in any particular way, so you could do whatever
  1651.  
  1652. 00:41:54.650 --> 00:41:56.660
  1653. you wanted.
  1654.  
  1655. 00:41:56.660 --> 00:42:01.470
  1656. So anyway, I was thinking about this. I was
  1657. thinking about the fact that even though I
  1658.  
  1659. 00:42:01.470 --> 00:42:04.920
  1660. would read Parnas’ paper and I was convinced
  1661. that people would read my paper and have the
  1662.  
  1663. 00:42:04.920 --> 00:42:09.700
  1664. same reaction, you would say, “Yes, that’s
  1665. a great idea,” but when you start to think
  1666.  
  1667. 00:42:09.700 --> 00:42:14.930
  1668. about “How do I apply it to my own stuff?”
  1669. everything fell apart, you just had no idea
  1670.  
  1671. 00:42:14.930 --> 00:42:16.160
  1672. how to apply it.
  1673.  
  1674. 00:42:16.160 --> 00:42:23.930
  1675. I was trying to think about “What can we
  1676. do to make things better?” and at some point,
  1677.  
  1678. 00:42:23.930 --> 00:42:33.070
  1679. and I really don’t know when, but probably
  1680. winter of 1963-64… I mean…
  1681.  
  1682. 00:42:33.070 --> 00:42:34.390
  1683. ’73.
  1684.  
  1685. 00:42:34.390 --> 00:42:41.820
  1686. …’72-73, [laughs] I got the idea of data
  1687. abstraction. And it was this marvelous idea.
  1688.  
  1689. 00:42:41.820 --> 00:42:47.089
  1690. It came out of nowhere. But once I got it,
  1691. I could see that this was really going to
  1692.  
  1693. 00:42:47.089 --> 00:42:52.950
  1694. work because programmers already knew about
  1695. abstract data types. I mean even if they weren’t
  1696.  
  1697. 00:42:52.950 --> 00:42:57.630
  1698. thinking about them, because they knew when
  1699. they used an array in their Fortran program
  1700.  
  1701. 00:42:57.630 --> 00:43:02.170
  1702. that this not something the hardware had,
  1703. this was something that you used through a
  1704.  
  1705. 00:43:02.170 --> 00:43:07.241
  1706. set of operations and under the covers there
  1707. was an implementation going on. Certainly
  1708.  
  1709. 00:43:07.241 --> 00:43:12.940
  1710. you knew this in spades if you were using
  1711. Lisp, which was what I wrote my thesis in,
  1712.  
  1713. 00:43:12.940 --> 00:43:16.150
  1714. because there you used lists and it was clear
  1715. there was an implementation underneath and
  1716.  
  1717. 00:43:16.150 --> 00:43:17.960
  1718. that they were abstract.
  1719.  
  1720. 00:43:17.960 --> 00:43:22.390
  1721. So I felt programmers could understand the
  1722. notion of data abstraction. They already understood
  1723.  
  1724. 00:43:22.390 --> 00:43:28.000
  1725. about procedure abstraction, and the data
  1726. abstraction was more powerful because a procedure…
  1727.  
  1728. 00:43:28.000 --> 00:43:32.330
  1729. Oh, by the way, they were sometimes implementing
  1730. a data abstraction with a procedure abstraction
  1731.  
  1732. 00:43:32.330 --> 00:43:36.810
  1733. by having a whole bunch of extra arguments
  1734. that controlled the different things the procedure
  1735.  
  1736. 00:43:36.810 --> 00:43:41.430
  1737. was going to do, but that was a mess also.
  1738. So I felt this was something that programmers
  1739.  
  1740. 00:43:41.430 --> 00:43:45.900
  1741. would feel an affinity to and something they
  1742. could understand.
  1743.  
  1744. 00:43:45.900 --> 00:43:50.450
  1745. And I think another thing that was important
  1746. about it was… So it was a bigger module,
  1747.  
  1748. 00:43:50.450 --> 00:43:54.050
  1749. it fit an idea of modularity – you needed
  1750. something bigger than a procedure in order
  1751.  
  1752. 00:43:54.050 --> 00:43:59.400
  1753. to really make progress – and it was also
  1754. an abstraction. And that was important too
  1755.  
  1756. 00:43:59.400 --> 00:44:06.430
  1757. because when you design, you need to think
  1758. abstractly, and having a thing that matches
  1759.  
  1760. 00:44:06.430 --> 00:44:11.119
  1761. the abstract thought, that helps you with
  1762. your design. So being able to think in terms
  1763.  
  1764. 00:44:11.119 --> 00:44:15.600
  1765. of “What data abstraction do I want for
  1766. this place? What procedure abstraction do
  1767.  
  1768. 00:44:15.600 --> 00:44:23.730
  1769. I want for there?” this is a design approach.
  1770. So it was also useful from that perspective.
  1771.  
  1772. 00:44:23.730 --> 00:44:29.450
  1773. I was lucky enough to have this wonderful
  1774. moment in which I had this idea, and as soon
  1775.  
  1776. 00:44:29.450 --> 00:44:37.250
  1777. as I had that idea, I knew that it was going
  1778. to go somewhere. So I started working on that
  1779.  
  1780. 00:44:37.250 --> 00:44:47.070
  1781. idea. And I started working jointly with Steve
  1782. Zilles. And this was definitely in the spring
  1783.  
  1784. 00:44:47.070 --> 00:44:50.810
  1785. of 1973.
  1786.  
  1787. 00:44:50.810 --> 00:44:57.230
  1788. Steve was a graduate student at MIT and he
  1789. is an employee of IBM. IBM was in the same
  1790.  
  1791. 00:44:57.230 --> 00:45:05.440
  1792. Tech Square building that the lab was in.
  1793. He was older. He was in his early thirties,
  1794.  
  1795. 00:45:05.440 --> 00:45:08.830
  1796. so he’d been working for IBM for a while
  1797. and then he went back to school, and he was
  1798.  
  1799. 00:45:08.830 --> 00:45:13.381
  1800. only I think going to school part-time because
  1801. he was still working for IBM. And he had had
  1802.  
  1803. 00:45:13.381 --> 00:45:20.250
  1804. some similar ideas, so Steve and I started
  1805. to work together. I think Jack Dennis organized
  1806.  
  1807. 00:45:20.250 --> 00:45:27.690
  1808. a little workshop in the spring of 1963, and
  1809. maybe that’s how I got connected to Steve.
  1810.  
  1811. 00:45:27.690 --> 00:45:33.210
  1812. I think Tony Hoare was there, but I could
  1813. be confused about this. I haven’t tried
  1814.  
  1815. 00:45:33.210 --> 00:45:39.280
  1816. to figure it out. But Jack was interested
  1817. in these ideas and he was encouraging me to
  1818.  
  1819. 00:45:39.280 --> 00:45:42.690
  1820. work on them.
  1821.  
  1822. 00:45:42.690 --> 00:45:47.000
  1823. Steve and I started working on this. And having
  1824. an idea and figuring out what this idea is
  1825.  
  1826. 00:45:47.000 --> 00:45:51.190
  1827. all about are two different things, so it
  1828. was just “Here’s a direction to go in.”
  1829.  
  1830. 00:45:51.190 --> 00:45:57.500
  1831. So we started trying to flesh it out, and
  1832. we knew that we probably were going to work
  1833.  
  1834. 00:45:57.500 --> 00:46:04.609
  1835. on programming language as a result because
  1836. you need to express an idea like that in a
  1837.  
  1838. 00:46:04.609 --> 00:46:11.930
  1839. programming language so that people have within
  1840. their grasp the necessary linguistic features
  1841.  
  1842. 00:46:11.930 --> 00:46:17.230
  1843. to make it all sort of hang together. We were
  1844. interested in “What would a programming
  1845.  
  1846. 00:46:17.230 --> 00:46:23.119
  1847. language be like? How could you have type
  1848. checking that would encompass this notion
  1849.  
  1850. 00:46:23.119 --> 00:46:29.650
  1851. of data abstraction?” And just the whole
  1852. thing was a big mystery, but we started working
  1853.  
  1854. 00:46:29.650 --> 00:46:30.900
  1855. on this.
  1856.  
  1857. 00:46:30.900 --> 00:46:38.550
  1858. Of course we read papers, and now I was moving
  1859. into programming languages from a background
  1860.  
  1861. 00:46:38.550 --> 00:46:43.880
  1862. where I knew Lisp and Fortran, and of course
  1863. I’d done reading on other stuff. Steve coming
  1864.  
  1865. 00:46:43.880 --> 00:46:49.390
  1866. from IBM, which was the big player in programming
  1867. at the time – they had Fortran, they had
  1868.  
  1869. 00:46:49.390 --> 00:46:56.490
  1870. PL/I, they had COBOL – so we covered a wide
  1871. range of programming languages between the
  1872.  
  1873. 00:46:56.490 --> 00:47:02.869
  1874. two of us and we read a bunch of papers. The
  1875. one that I found the most… Well, we read
  1876.  
  1877. 00:47:02.869 --> 00:47:10.200
  1878. the paper on Simula 67, and that didn’t
  1879. quite have data abstraction in it even though
  1880.  
  1881. 00:47:10.200 --> 00:47:16.170
  1882. it was about classes and subclasses, and you
  1883. could see how they could be data abstraction.
  1884.  
  1885. 00:47:16.170 --> 00:47:22.970
  1886. It had no encapsulation, which is a very critical
  1887. component if you want modularity, and they
  1888.  
  1889. 00:47:22.970 --> 00:47:29.310
  1890. were mostly interested in inheritance, which
  1891. we saw as a red herring, so we ignored that.
  1892.  
  1893. 00:47:29.310 --> 00:47:34.240
  1894. Jim Morris had a wonderful paper on “Protection
  1895. in programming languages” I think it was
  1896.  
  1897. 00:47:34.240 --> 00:47:41.400
  1898. called, where he was talking about modularity
  1899. and what are the rules that you have to follow
  1900.  
  1901. 00:47:41.400 --> 00:47:48.000
  1902. in order to get the benefits of modularity.
  1903. So the benefits of modularity are local reasoning…
  1904.  
  1905. 00:47:48.000 --> 00:47:56.920
  1906. That’s the most important. And Jim said,
  1907. “Well, a module has some state inside it
  1908.  
  1909. 00:47:56.920 --> 00:48:01.990
  1910. and then a bunch of code. The first rule is
  1911. that the code on the outside of the module
  1912.  
  1913. 00:48:01.990 --> 00:48:07.670
  1914. can’t modify that state. And this is clearly
  1915. essential, because if the code on the outside
  1916.  
  1917. 00:48:07.670 --> 00:48:11.780
  1918. could modify that state, then I’d never
  1919. be able to reason about the correctness of
  1920.  
  1921. 00:48:11.780 --> 00:48:18.750
  1922. that module because all the code in the program
  1923. would be suspect.” But then he said, “But
  1924.  
  1925. 00:48:18.750 --> 00:48:23.180
  1926. in addition you want modifiability, which
  1927. means that if I don’t like the way that
  1928.  
  1929. 00:48:23.180 --> 00:48:28.800
  1930. module’s implemented, I’d like to be able
  1931. to replace it with another piece of code implemented
  1932.  
  1933. 00:48:28.800 --> 00:48:34.290
  1934. in a different way. And so to get modifiability,
  1935. the code on the outside shouldn’t even look
  1936.  
  1937. 00:48:34.290 --> 00:48:40.540
  1938. at the state. It should only interact through
  1939. this abstract interface.”
  1940.  
  1941. 00:48:40.540 --> 00:48:46.820
  1942. So those are in fact the two key pieces of
  1943. modularity, although in those days and actually
  1944.  
  1945. 00:48:46.820 --> 00:48:52.230
  1946. even today, another very important component
  1947. about modularity is that it’s a management
  1948.  
  1949. 00:48:52.230 --> 00:48:57.240
  1950. tool, because it allows you to break up your
  1951. program into separate pieces. If they follow
  1952.  
  1953. 00:48:57.240 --> 00:49:01.200
  1954. these rules, then people can work on these
  1955. pieces independently. In those days, people
  1956.  
  1957. 00:49:01.200 --> 00:49:06.080
  1958. didn’t know what modules were, and there
  1959. were papers being written that would say things
  1960.  
  1961. 00:49:06.080 --> 00:49:10.510
  1962. like “A module must not be more than a thousand
  1963. lines of code.” I mean people really did
  1964.  
  1965. 00:49:10.510 --> 00:49:15.500
  1966. not understand the notion of abstraction,
  1967. the notion of encapsulation. They mostly only
  1968.  
  1969. 00:49:15.500 --> 00:49:20.609
  1970. understood that they needed a way of controlling
  1971. the program development process so that people
  1972.  
  1973. 00:49:20.609 --> 00:49:23.480
  1974. could be working on separate things.
  1975.  
  1976. 00:49:23.480 --> 00:49:30.200
  1977. Anyway, Jim laid out those two principles,
  1978. and Tony Hoare at the same time was writing
  1979.  
  1980. 00:49:30.200 --> 00:49:36.569
  1981. papers about… He already had the notion
  1982. of abstracting from a representation to an
  1983.  
  1984. 00:49:36.569 --> 00:49:42.510
  1985. abstract data type even though sort of they
  1986. were existing types rather than… So this
  1987.  
  1988. 00:49:42.510 --> 00:49:48.990
  1989. idea was coming up in very many different
  1990. places.
  1991.  
  1992. 00:49:48.990 --> 00:49:52.730
  1993. But Jim had no idea how to implement this.
  1994. So then after you say, “Well, these are
  1995.  
  1996. 00:49:52.730 --> 00:49:57.970
  1997. the rules,” the question is “Well, can
  1998. I enforce those? In particular, can I build
  1999.  
  2000. 00:49:57.970 --> 00:50:03.599
  2001. them into the programming language so that
  2002. the compiler can ensure that you get encapsulation?”
  2003.  
  2004. 00:50:03.599 --> 00:50:07.500
  2005. So that was what Steve and I were struggling
  2006. with. How would you implement this? How would
  2007.  
  2008. 00:50:07.500 --> 00:50:13.900
  2009. you make it work? Jim had a proposal which
  2010. was basically to use encryption. He talked
  2011.  
  2012. 00:50:13.900 --> 00:50:20.910
  2013. about “seal” and “unseal.” And that
  2014. would work. The idea is the module has a key.
  2015.  
  2016. 00:50:20.910 --> 00:50:27.470
  2017. It encrypts an object when it comes out, it
  2018. decrypts when it comes in. If somebody’s
  2019.  
  2020. 00:50:27.470 --> 00:50:33.010
  2021. been mucking around with it, you can tell.
  2022. That certainly works, but it’s not practical.
  2023.  
  2024. 00:50:33.010 --> 00:50:36.619
  2025. So we were looking for a… You know, “I
  2026. don’t want to do it that way. I want something
  2027.  
  2028. 00:50:36.619 --> 00:50:37.770
  2029. efficient.”
  2030.  
  2031. 00:50:37.770 --> 00:50:47.191
  2032. And by the summer of 1973, we had figured
  2033. out that it was possible to do this with a
  2034.  
  2035. 00:50:47.191 --> 00:50:53.650
  2036. compiler by having a notion of a linguistic
  2037. structure that implemented a data abstraction
  2038.  
  2039. 00:50:53.650 --> 00:50:59.440
  2040. and the compiler would just ensure the abstraction
  2041. barrier, and the code on the outside would
  2042.  
  2043. 00:50:59.440 --> 00:51:04.220
  2044. only be able to call the operations. It was
  2045. nevertheless just a sketch. I mean we didn’t
  2046.  
  2047. 00:51:04.220 --> 00:51:09.650
  2048. have a language. We just had a proposal for
  2049. a language. And in that paper, we talked about
  2050.  
  2051. 00:51:09.650 --> 00:51:18.040
  2052. some issues we didn’t know how to handle.
  2053. In particular, generics and polymorphism.
  2054.  
  2055. 00:51:18.040 --> 00:51:24.900
  2056. Polymorphism was neglected for years. I think
  2057. it’s relatively easy, when you’re just
  2058.  
  2059. 00:51:24.900 --> 00:51:30.200
  2060. doing procedures, to ignore the fact that
  2061. “I don’t want a sort routine that works
  2062.  
  2063. 00:51:30.200 --> 00:51:35.369
  2064. on an array of integers. I want a sort routine
  2065. that works in general.” But given the limited
  2066.  
  2067. 00:51:35.369 --> 00:51:39.359
  2068. range of data types that existed at the time,
  2069. you can kind of see why people weren’t thinking
  2070.  
  2071. 00:51:39.359 --> 00:51:45.470
  2072. about that. As soon as you go for data abstraction,
  2073. you can see that you need some mechanism to
  2074.  
  2075. 00:51:45.470 --> 00:51:53.599
  2076. allow you to define a data abstraction like
  2077. a list or a set or a map or something that
  2078.  
  2079. 00:51:53.599 --> 00:51:57.410
  2080. you just define it once and you don’t have
  2081. to keep re-implementing it every time you
  2082.  
  2083. 00:51:57.410 --> 00:52:02.260
  2084. have another type of element. And clearly
  2085. there was polymorphism in the implementation
  2086.  
  2087. 00:52:02.260 --> 00:52:09.460
  2088. of the built-in types. So arrays could have
  2089. floats or ints if you were working in Fortran.
  2090.  
  2091. 00:52:09.460 --> 00:52:14.480
  2092. So it was there. It just wasn’t sort of
  2093. pulled out as a mechanism that programmers
  2094.  
  2095. 00:52:14.480 --> 00:52:18.470
  2096. could get their hands on, and we could see
  2097. that was going to be an important component
  2098.  
  2099. 00:52:18.470 --> 00:52:19.680
  2100. of it.
  2101.  
  2102. 00:52:19.680 --> 00:52:28.210
  2103. We wrote this paper on abstract data types
  2104. and it was a big hit. I mean we submitted
  2105.  
  2106. 00:52:28.210 --> 00:52:33.740
  2107. it to the Conference on Very High Level Languages
  2108. – which I don’t know when it stopped,
  2109.  
  2110. 00:52:33.740 --> 00:52:44.260
  2111. it didn’t exist for very many years – and
  2112. it resonated with a lot of people. We finished
  2113.  
  2114. 00:52:44.260 --> 00:52:49.180
  2115. this paper in the summer of 1973.
  2116.  
  2117. 00:52:49.180 --> 00:52:56.920
  2118. Then in the fall of 1973, I started working
  2119. on what came to be called CLU. So here was
  2120.  
  2121. 00:52:56.920 --> 00:53:01.350
  2122. this proposal for a programming language with
  2123. just a few hints of what might be in it and
  2124.  
  2125. 00:53:01.350 --> 00:53:05.250
  2126. some statements about “It’d be nice if
  2127. it had polymorphism. It’d be nice if it
  2128.  
  2129. 00:53:05.250 --> 00:53:09.760
  2130. had exception handling.” Exception handling
  2131. was also… people were trying to figure out
  2132.  
  2133. 00:53:09.760 --> 00:53:14.099
  2134. what that meant in those days. That was another
  2135. area in programming languages that people
  2136.  
  2137. 00:53:14.099 --> 00:53:20.700
  2138. were thinking about but had no real idea of
  2139. what should be done. So the next step was
  2140.  
  2141. 00:53:20.700 --> 00:53:30.220
  2142. to sort of really get down to brass tacks
  2143. and figure out what all this stuff was.
  2144.  
  2145. 00:53:30.220 --> 00:53:36.890
  2146. In the fall of 1973, I picked up three graduate
  2147. students – Russ Atkinson, Larry Snyder…
  2148.  
  2149. 00:53:36.890 --> 00:53:47.260
  2150. or Alan Snyder, and Craig Schaffert – and
  2151. they along with me became the designers of
  2152.  
  2153. 00:53:47.260 --> 00:53:51.880
  2154. CLU. We used to have a weekly group meeting
  2155. where we would all get together and we’d
  2156.  
  2157. 00:53:51.880 --> 00:53:57.130
  2158. be working on some particular topic like “What
  2159. should the exception mechanism be like?”
  2160.  
  2161. 00:53:57.130 --> 00:54:01.150
  2162. or whatever was the topic of the week. We
  2163. wrote design notes. In those days, you didn’t
  2164.  
  2165. 00:54:01.150 --> 00:54:08.370
  2166. write them online. You wrote them. My assistant,
  2167. Ann Rubin, would type them up. We had a very
  2168.  
  2169. 00:54:08.370 --> 00:54:13.339
  2170. rigorous design process, and we had a group
  2171. meeting that was attended by quite a few more
  2172.  
  2173. 00:54:13.339 --> 00:54:20.530
  2174. people than just us. So Steve was coming,
  2175. Jack Dennis used to come. Other people. Students
  2176.  
  2177. 00:54:20.530 --> 00:54:25.971
  2178. of Jack’s. So we had a pretty big group
  2179. and we would just hammer out… Everything
  2180.  
  2181. 00:54:25.971 --> 00:54:31.780
  2182. we looked at we’d try to look at from all
  2183. possible directions and figure out “Of these
  2184.  
  2185. 00:54:31.780 --> 00:54:35.650
  2186. two approaches, what’s the benefits? What
  2187. are the disadvantages?”
  2188.  
  2189. 00:54:35.650 --> 00:54:42.599
  2190. We had a very rational design process, and
  2191. that’s how we got CLU together. And the
  2192.  
  2193. 00:54:42.599 --> 00:54:52.109
  2194. students implemented, and we implemented as
  2195. we went. We started off with a compiler written
  2196.  
  2197. 00:54:52.109 --> 00:54:58.770
  2198. in a language called MDL – M-D-L – which
  2199. was a Lisp variant, and a very small subset
  2200.  
  2201. 00:54:58.770 --> 00:55:05.430
  2202. of CLU, and then we bootstrapped. You know,
  2203. we used that to implement to CLU. And of course
  2204.  
  2205. 00:55:05.430 --> 00:55:12.000
  2206. CLU itself was a big test case for the methodology,
  2207. because a compiler’s a pretty big program,
  2208.  
  2209. 00:55:12.000 --> 00:55:16.750
  2210. and so if you can build a compiler, especially
  2211. when you’re working in sequential programming,
  2212.  
  2213. 00:55:16.750 --> 00:55:21.440
  2214. that’s a good test case. So it was very
  2215. useful for us to be implementing our own compiler
  2216.  
  2217. 00:55:21.440 --> 00:55:25.660
  2218. since it was forcing us to make sure that
  2219. the linguistic mechanisms we were providing
  2220.  
  2221. 00:55:25.660 --> 00:55:28.510
  2222. were powerful enough for the compiler.
  2223.  
  2224. 00:55:28.510 --> 00:55:39.740
  2225. So we’re implementing CLU, we’re designing
  2226. CLU. We’d figured out… We call these things
  2227.  
  2228. 00:55:39.740 --> 00:55:44.300
  2229. “clusters.” I think the word “cluster”
  2230. was even used in that paper with Steve. We
  2231.  
  2232. 00:55:44.300 --> 00:55:48.400
  2233. couldn’t think of a good name. Eventually
  2234. we just used CLU, C-L-U, the first three letters
  2235.  
  2236. 00:55:48.400 --> 00:56:01.109
  2237. of “cluster.” And I guess that… I’m
  2238. not going to talk about the actual features
  2239.  
  2240. 00:56:01.109 --> 00:56:07.800
  2241. of CLU, but I do want to talk about it in
  2242. more general terms.
  2243.  
  2244. 00:56:07.800 --> 00:56:15.510
  2245. CLU was way ahead of its time. It wasn’t
  2246. just that it had data abstraction and nobody
  2247.  
  2248. 00:56:15.510 --> 00:56:18.619
  2249. else had this. The only other project that
  2250. was going on at the time that was looking
  2251.  
  2252. 00:56:18.619 --> 00:56:22.950
  2253. at data abstraction was Bill Wulf and Mary
  2254. Shaw were working on a language called Alphard
  2255.  
  2256. 00:56:22.950 --> 00:56:27.329
  2257. at CMU. So they were also looking at data
  2258. abstraction. A big difference between them
  2259.  
  2260. 00:56:27.329 --> 00:56:36.030
  2261. and us was that I came from Lisp, I believed
  2262. in the heap. They were very much in the ALGOL
  2263.  
  2264. 00:56:36.030 --> 00:56:41.829
  2265. world or the… There were a lot of arguments
  2266. in those days about “Pointers are bad.”
  2267.  
  2268. 00:56:41.829 --> 00:56:47.040
  2269. So they wanted everything to be on the stack.
  2270. Of course you can avoid garbage collection,
  2271.  
  2272. 00:56:47.040 --> 00:56:51.780
  2273. but it made everything much more complicated
  2274. for them. So I think it slowed them down.
  2275.  
  2276. 00:56:51.780 --> 00:56:55.680
  2277. Whereas I was coming from the Lisp camp. I
  2278. believed in garbage collection, I believed
  2279.  
  2280. 00:56:55.680 --> 00:57:00.080
  2281. in the heap. I didn’t think pointers were
  2282. bad provided you could get your type checking
  2283.  
  2284. 00:57:00.080 --> 00:57:07.540
  2285. sorted out. I was however very in favor of
  2286. strong type checking, and as I say in my talk,
  2287.  
  2288. 00:57:07.540 --> 00:57:11.000
  2289. this is partly a reaction to Lisp, because
  2290. I found it so annoying that they didn’t
  2291.  
  2292. 00:57:11.000 --> 00:57:17.240
  2293. do static checking and you can save an awful
  2294. lot of time in the program development process
  2295.  
  2296. 00:57:17.240 --> 00:57:22.510
  2297. if you have a good compiler doing static analysis.
  2298.  
  2299. 00:57:22.510 --> 00:57:27.270
  2300. Lisp had another thing that influenced me
  2301. a lot, which was separate compilation. That
  2302.  
  2303. 00:57:27.270 --> 00:57:32.079
  2304. was also very important. Right from day one,
  2305. CLU was always separately compiled. In fact,
  2306.  
  2307. 00:57:32.079 --> 00:57:39.951
  2308. our idea was you would put into the program
  2309. library a description of the interface of
  2310.  
  2311. 00:57:39.951 --> 00:57:44.570
  2312. a module first, and then you could compile
  2313. code that used the module even though the
  2314.  
  2315. 00:57:44.570 --> 00:57:51.230
  2316. module wasn’t implemented yet. And if you
  2317. wanted to, you could provide a sort of simpleminded
  2318.  
  2319. 00:57:51.230 --> 00:57:55.430
  2320. simulation of the implementation as your first
  2321. implementation if you wanted to go further.
  2322.  
  2323. 00:57:55.430 --> 00:57:59.890
  2324. So we were carrying this notion of separate
  2325. compilation, - we were pushing it as far as
  2326.  
  2327. 00:57:59.890 --> 00:58:02.610
  2328. we thought we could.
  2329.  
  2330. 00:58:02.610 --> 00:58:10.350
  2331. CLU had data abstraction. We knew we needed
  2332. polymorphism. And polymorphism was a challenge
  2333.  
  2334. 00:58:10.350 --> 00:58:19.640
  2335. for us because of the fact that when you write
  2336. a data type or a procedure that’s parameterized
  2337.  
  2338. 00:58:19.640 --> 00:58:27.190
  2339. by some arbitrary type T, sometimes not every
  2340. arbitrary type is a legitimate parameter.
  2341.  
  2342. 00:58:27.190 --> 00:58:32.859
  2343. So if you’re talking about a sorted set
  2344. of T, then you have to have some way of comparing
  2345.  
  2346. 00:58:32.859 --> 00:58:39.380
  2347. the T elements. And not every type has an
  2348. ordering on it. And we didn’t know how to…
  2349.  
  2350. 00:58:39.380 --> 00:58:42.890
  2351. And we wanted to capture this statically.
  2352. We didn’t want this to be some sort of dynamic
  2353.  
  2354. 00:58:42.890 --> 00:58:46.859
  2355. thing where we discovered at runtime, “Oh,
  2356. the operation we need is missing.” We wanted
  2357.  
  2358. 00:58:46.859 --> 00:58:51.550
  2359. to ensure at compile time that there was such
  2360. an operation.
  2361.  
  2362. 00:58:51.550 --> 00:58:56.170
  2363. Finally we invented what we called “where
  2364. clauses,” where we would simply list the
  2365.  
  2366. 00:58:56.170 --> 00:59:00.619
  2367. set of operations with their signatures that
  2368. the type was required to have, and then the
  2369.  
  2370. 00:59:00.619 --> 00:59:06.640
  2371. compiler could check when it was compiling
  2372. a use that the parameter type being provided
  2373.  
  2374. 00:59:06.640 --> 00:59:12.650
  2375. had the operations that were required. Of
  2376. course we captured only syntax, not semantics.
  2377.  
  2378. 00:59:12.650 --> 00:59:19.290
  2379. You know, we said, “It has to have an operation
  2380. named less than…” With two Ts returning
  2381.  
  2382. 00:59:19.290 --> 00:59:23.340
  2383. a Boolean, we didn’t say it was an ordering
  2384. relation. So that would have been part of
  2385.  
  2386. 00:59:23.340 --> 00:59:27.891
  2387. its specification. You would have had to reason
  2388. about this outside. But that’s about as
  2389.  
  2390. 00:59:27.891 --> 00:59:33.742
  2391. far as you can go with a compiler, because
  2392. a compiler doesn’t reason. You know, it
  2393.  
  2394. 00:59:33.742 --> 00:59:40.089
  2395. can do simple parts of the reasoning but not
  2396. the full reasoning.
  2397.  
  2398. 00:59:40.089 --> 00:59:47.320
  2399. Interestingly there’s something called type
  2400. classes in Haskell and these are strongly
  2401.  
  2402. 00:59:47.320 --> 00:59:53.720
  2403. related to where clauses. They are pulling
  2404. the requirements for a polymorphic module,
  2405.  
  2406. 00:59:53.720 --> 00:59:59.500
  2407. saying, “Here’s a set of operations, here
  2408. are their signatures,” and then you can
  2409.  
  2410. 00:59:59.500 --> 01:00:04.460
  2411. put a specification with it. But CLU had these
  2412. in there as where clauses. So that was our
  2413.  
  2414. 01:00:04.460 --> 01:00:07.960
  2415. solution for polymorphism.
  2416.  
  2417. 01:00:07.960 --> 01:00:14.080
  2418. We had an exception handling mechanism. We
  2419. thought exceptions are very important, because
  2420.  
  2421. 01:00:14.080 --> 01:00:20.280
  2422. from programming methodology point of view,
  2423. you would like the specifications of your
  2424.  
  2425. 01:00:20.280 --> 01:00:26.349
  2426. operations to be complete if possible. Not
  2427. partial but complete. So covering the entire
  2428.  
  2429. 01:00:26.349 --> 01:00:32.450
  2430. range of possible inputs. Since if you ever
  2431. have “anything but true” as the precondition
  2432.  
  2433. 01:00:32.450 --> 01:00:37.260
  2434. for your call, there’s a potential source
  2435. of errors there because somebody using your
  2436.  
  2437. 01:00:37.260 --> 01:00:44.950
  2438. module forgets, whereas if it’s covering
  2439. all the bases, then you can be certain that
  2440.  
  2441. 01:00:44.950 --> 01:00:51.500
  2442. those errors are not possible. But when you
  2443. try to make a procedure total, then you have
  2444.  
  2445. 01:00:51.500 --> 01:00:59.420
  2446. this problem that you can’t return the same
  2447. way over the entire space of inputs. So you
  2448.  
  2449. 01:00:59.420 --> 01:01:05.390
  2450. need some way, we thought, of bringing this
  2451. to the attention of the caller.
  2452.  
  2453. 01:01:05.390 --> 01:01:12.220
  2454. The way that people manage this problem today
  2455. and even then when they don’t have an exception
  2456.  
  2457. 01:01:12.220 --> 01:01:19.300
  2458. mechanism or they think it’s too expensive
  2459. to use it, is they play a game. So they’ll
  2460.  
  2461. 01:01:19.300 --> 01:01:25.530
  2462. say, “Well, you return a value and a special
  2463. piece of this value tells you what’s going
  2464.  
  2465. 01:01:25.530 --> 01:01:34.680
  2466. on.” Like “I return a pointer to an object,
  2467. but if the pointer is null, this means something.”
  2468.  
  2469. 01:01:34.680 --> 01:01:37.710
  2470. And the problem is that’s very error prone.
  2471. “I’ll return an integer if the integer
  2472.  
  2473. 01:01:37.710 --> 01:01:42.940
  2474. is negative.” This has a special meaning
  2475. but people forget to test. In some sense,
  2476.  
  2477. 01:01:42.940 --> 01:01:49.280
  2478. it’s the same as having a partial spec.
  2479. It’s slightly better, but it’s also very
  2480.  
  2481. 01:01:49.280 --> 01:01:54.760
  2482. error prone. So we wanted a mechanism that
  2483. told the user, really push those results into
  2484.  
  2485. 01:01:54.760 --> 01:01:56.340
  2486. another part of your program.
  2487.  
  2488. 01:01:56.340 --> 01:02:03.440
  2489. This all seems so commonplace today because
  2490. this is how Java’s mechanism works, but
  2491.  
  2492. 01:02:03.440 --> 01:02:11.340
  2493. in those days, it didn’t exist. So we invented
  2494. that stuff. And we worried about a lot of
  2495.  
  2496. 01:02:11.340 --> 01:02:16.109
  2497. the problems with exception handling. One
  2498. of the problems with checked exceptions in
  2499.  
  2500. 01:02:16.109 --> 01:02:21.109
  2501. Java is that people don’t like to have to
  2502. write the code to handle exceptions that aren’t
  2503.  
  2504. 01:02:21.109 --> 01:02:26.560
  2505. going to happen in their program. “I just
  2506. checked that my index is in bounds, so why
  2507.  
  2508. 01:02:26.560 --> 01:02:33.420
  2509. do I have to write a catch clause when I call
  2510. the lookup? Because I know it’s not going
  2511.  
  2512. 01:02:33.420 --> 01:02:38.000
  2513. to happen.” So we handled that by turning
  2514. those into a special failure exception.
  2515.  
  2516. 01:02:38.000 --> 01:02:41.471
  2517. So CLU had an exception mechanism. That was
  2518. another large part of our design, working
  2519.  
  2520. 01:02:41.471 --> 01:02:44.079
  2521. out all the details of how that would work.
  2522.  
  2523. 01:02:44.079 --> 01:02:50.390
  2524. And then the third part of our design was
  2525. iterators. That was one we didn’t foresee
  2526.  
  2527. 01:02:50.390 --> 01:02:55.740
  2528. going into the project. The other two, I think
  2529. they were in that original paper, but iterators
  2530.  
  2531. 01:02:55.740 --> 01:03:08.680
  2532. was not something on my map. But we had come
  2533. to realize we needed an iteration mechanism
  2534.  
  2535. 01:03:08.680 --> 01:03:13.799
  2536. because many data abstractions are collections,
  2537. like sets and maps and stuff like that, and
  2538.  
  2539. 01:03:13.799 --> 01:03:17.460
  2540. when you collect, it’s usually because you
  2541. want to do something with the collection,
  2542.  
  2543. 01:03:17.460 --> 01:03:23.339
  2544. which is often iterating over it. Although
  2545. you can figure out ways of doing iterations
  2546.  
  2547. 01:03:23.339 --> 01:03:30.220
  2548. in the absence of a mechanism, it seemed more
  2549. elegant to have a mechanism. And as I have
  2550.  
  2551. 01:03:30.220 --> 01:03:34.849
  2552. told the story many times, we went to Carnegie
  2553. Mellon, we visited with Bill Wulf and Mary
  2554.  
  2555. 01:03:34.849 --> 01:03:39.770
  2556. Shaw and their group. They told us about something
  2557. called generators, which actually was coming
  2558.  
  2559. 01:03:39.770 --> 01:03:46.130
  2560. out of AI ideas. So we listened to this and
  2561. generators were kind of like what iterators
  2562.  
  2563. 01:03:46.130 --> 01:03:51.960
  2564. are in Java today. They were objects with
  2565. a bunch of operations to get the iteration
  2566.  
  2567. 01:03:51.960 --> 01:03:53.310
  2568. started and so forth.
  2569.  
  2570. 01:03:53.310 --> 01:03:58.130
  2571. So we could see this was a nice solution,
  2572. but we thought it was kind of inelegant and
  2573.  
  2574. 01:03:58.130 --> 01:04:03.450
  2575. overkill. And so on the plane going back to
  2576. Boston, my student Russ Atkinson invented
  2577.  
  2578. 01:04:03.450 --> 01:04:09.079
  2579. iterators, and iterators are tailored for
  2580. use with a for loop. You call the iterator
  2581.  
  2582. 01:04:09.079 --> 01:04:17.109
  2583. to start the loop. Every time it’s got a
  2584. new value to provide you, it uses a special
  2585.  
  2586. 01:04:17.109 --> 01:04:21.790
  2587. return instruction called yield. We then run
  2588. the loop body. At the end of the loop body,
  2589.  
  2590. 01:04:21.790 --> 01:04:26.380
  2591. we return back into the iterator exactly where
  2592. it yielded so it just continues in its control
  2593.  
  2594. 01:04:26.380 --> 01:04:30.849
  2595. flow. When it has nothing more to yield, it
  2596. returns, and that terminates the loop.
  2597.  
  2598. 01:04:30.849 --> 01:04:39.650
  2599. It’s a limited form of coroutine, because
  2600. you don’t have the ability to sort of keep
  2601.  
  2602. 01:04:39.650 --> 01:04:45.680
  2603. them running, multiple of them or so forth.
  2604. For example, you can’t run over two trees
  2605.  
  2606. 01:04:45.680 --> 01:04:52.650
  2607. and check for the same fringe using iterators.
  2608. They have to be nested. But we decided – and
  2609.  
  2610. 01:04:52.650 --> 01:04:57.470
  2611. this is kind of the 90% rule for programming
  2612. language design – most of the time, this
  2613.  
  2614. 01:04:57.470 --> 01:05:01.990
  2615. somewhat limited use of iterators was what
  2616. you wanted. So rather than have a more complicated
  2617.  
  2618. 01:05:01.990 --> 01:05:07.200
  2619. mechanism that got you further but wasn’t
  2620. as convenient to use in the normal case, we
  2621.  
  2622. 01:05:07.200 --> 01:05:11.089
  2623. would go for the simpler mechanism. And it
  2624. was nice too because it had a very efficient
  2625.  
  2626. 01:05:11.089 --> 01:05:17.309
  2627. implementation where we simply passed the
  2628. loop body as sort of a hidden routine to the
  2629.  
  2630. 01:05:17.309 --> 01:05:21.609
  2631. iterator, which called every time it yielded.
  2632. So very straightforward.
  2633.  
  2634. 01:05:21.609 --> 01:05:30.180
  2635. So that was CLU. And by 1978, we had a compiler
  2636. that was working well, we had a language,
  2637.  
  2638. 01:05:30.180 --> 01:05:34.600
  2639. we had a reference manual, we had users. It
  2640. was being used at over 200 sites at one point.
  2641.  
  2642. 01:05:34.600 --> 01:05:37.579
  2643. It was being used for building big software.
  2644.  
  2645. 01:05:37.579 --> 01:05:47.440
  2646. I should say that it was important to design
  2647. a language for several reasons. One was people
  2648.  
  2649. 01:05:47.440 --> 01:05:50.849
  2650. have to write programs in the language for
  2651. you to understand whether you have the right
  2652.  
  2653. 01:05:50.849 --> 01:05:55.690
  2654. mechanisms in place. Our users, if they didn’t
  2655. like something, they would complain and we
  2656.  
  2657. 01:05:55.690 --> 01:06:00.170
  2658. would think about whether our mechanisms were
  2659. powerful enough.
  2660.  
  2661. 01:06:00.170 --> 01:06:05.109
  2662. Another is performance matters. So you need
  2663. to think about “How expensive is it?”
  2664.  
  2665. 01:06:05.109 --> 01:06:12.260
  2666. For example, our exception mechanism, it only
  2667. cost about twice as much to signal an exception
  2668.  
  2669. 01:06:12.260 --> 01:06:18.230
  2670. as it did to do a normal return. If exception
  2671. mechanisms are expensive, which is unfortunately
  2672.  
  2673. 01:06:18.230 --> 01:06:23.210
  2674. the way things are in modern languages, people
  2675. don’t want to use them. Even though they
  2676.  
  2677. 01:06:23.210 --> 01:06:27.200
  2678. might be wrong. I mean it may be that the
  2679. exception case doesn’t happen very often,
  2680.  
  2681. 01:06:27.200 --> 01:06:31.510
  2682. and so if you look at the overall performance
  2683. of the program, the cost of the exception
  2684.  
  2685. 01:06:31.510 --> 01:06:35.790
  2686. doesn’t matter very much, maybe. But we
  2687. felt it was important to have an efficient
  2688.  
  2689. 01:06:35.790 --> 01:06:40.980
  2690. exception mechanism so that that barrier to
  2691. use would not exist.
  2692.  
  2693. 01:06:40.980 --> 01:06:47.549
  2694. Then you want a mathematical definition. You
  2695. want a real mathematical object that people
  2696.  
  2697. 01:06:47.549 --> 01:06:51.441
  2698. can understand the meaning of. So that was
  2699. another reason why it was important to do
  2700.  
  2701. 01:06:51.441 --> 01:06:56.971
  2702. programming languages. Then we wanted a language
  2703. because people think in terms of… Programmers
  2704.  
  2705. 01:06:56.971 --> 01:07:02.240
  2706. think in terms of programming languages, so
  2707. seeing those features just sets the stage
  2708.  
  2709. 01:07:02.240 --> 01:07:04.490
  2710. for figuring out what to do.
  2711.  
  2712. 01:07:04.490 --> 01:07:09.079
  2713. And by the way, once the features exist, now
  2714. you can start to simulate them in other languages
  2715.  
  2716. 01:07:09.079 --> 01:07:14.020
  2717. and people will still see it’s a data abstraction.
  2718. So for many years 6.001, our introductory
  2719.  
  2720. 01:07:14.020 --> 01:07:17.670
  2721. course that Gerry Sussman developed, they
  2722. were teaching data abstraction, but they were
  2723.  
  2724. 01:07:17.670 --> 01:07:24.720
  2725. using basically a record of pointers to (provide)
  2726. the methods of the data type. And after data
  2727.  
  2728. 01:07:24.720 --> 01:07:30.130
  2729. abstraction exists, you can kind of see that’s
  2730. the way to go. So that’s fine.
  2731.  
  2732. 01:07:30.130 --> 01:07:38.990
  2733. That’s really the story of CLU. And it got
  2734. to be 1977 or 1978 and CLU was pretty much
  2735.  
  2736. 01:07:38.990 --> 01:07:50.770
  2737. finished, and I started to think about what
  2738. to do next. At that time, I had already started
  2739.  
  2740. 01:07:50.770 --> 01:07:53.640
  2741. teaching 6.170.
  2742.  
  2743. 01:07:53.640 --> 01:07:56.650
  2744. Which is what?
  2745.  
  2746. 01:07:56.650 --> 01:08:04.950
  2747. 6.170 for many years was the second programming
  2748. course in our curriculum. And I was asked
  2749.  
  2750. 01:08:04.950 --> 01:08:10.020
  2751. to develop this course by Corby and other
  2752. people in the department who thought we needed
  2753.  
  2754. 01:08:10.020 --> 01:08:14.910
  2755. such a course. So our students would start
  2756. with 6.001, which was taught in Lisp, or Scheme
  2757.  
  2758. 01:08:14.910 --> 01:08:23.319
  2759. actually, and they learned how to build little
  2760. programs. And the idea in 6.170 was “Okay.
  2761.  
  2762. 01:08:23.319 --> 01:08:25.940
  2763. Now how do you build good, big programs?”
  2764.  
  2765. 01:08:25.940 --> 01:08:29.559
  2766. So I developed this course. It was all based
  2767. on… It was about programming methodology,
  2768.  
  2769. 01:08:29.559 --> 01:08:35.810
  2770. how do you do design, how do you use data
  2771. abstraction, how do you do modular design.
  2772.  
  2773. 01:08:35.810 --> 01:08:43.349
  2774. It was really in line with my interests, and
  2775. I taught it for about – let me think, ’77
  2776.  
  2777. 01:08:43.349 --> 01:08:50.500
  2778. – probably 20-25 years, something like that.
  2779. I to this day still get people telling me
  2780.  
  2781. 01:08:50.500 --> 01:08:55.739
  2782. how important it was for them, what an impact
  2783. it had on their career, because it really
  2784.  
  2785. 01:08:55.739 --> 01:09:03.109
  2786. did teach the students how to think about
  2787. modular design and how to organize a big project.
  2788.  
  2789. 01:09:03.109 --> 01:09:08.209
  2790. And we still teach it. It’s just morphed
  2791. into another course, which… It was too much
  2792.  
  2793. 01:09:08.209 --> 01:09:12.179
  2794. work for the students. This is an MIT problem
  2795. in general – courses are too much work for
  2796.  
  2797. 01:09:12.179 --> 01:09:17.889
  2798. the students. So they sort of tried to divide
  2799. it. I’m not sure this has been terribly
  2800.  
  2801. 01:09:17.889 --> 01:09:23.150
  2802. successful. I have a feeling these courses
  2803. tend to… more and more material accretes
  2804.  
  2805. 01:09:23.150 --> 01:09:25.730
  2806. in the course as you go by.
  2807.  
  2808. 01:09:25.730 --> 01:09:33.929
  2809. Anyway, so I was thinking about what to do
  2810. next. I could have continued working on programming
  2811.  
  2812. 01:09:33.929 --> 01:09:40.069
  2813. language stuff, but I didn’t feel like I
  2814. had any great ideas. I didn’t see another
  2815.  
  2816. 01:09:40.069 --> 01:09:45.309
  2817. abstraction mechanism. I didn’t see a way
  2818. where I would be able to make a big impact.
  2819.  
  2820. 01:09:45.309 --> 01:09:49.519
  2821. I mean CLU, this work had made a huge impact,
  2822. so I’m sort of looking for impact like that.
  2823.  
  2824. 01:09:49.519 --> 01:09:54.949
  2825. And iterators were really important too. But
  2826. parallel computing, I didn’t have any great
  2827.  
  2828. 01:09:54.949 --> 01:10:01.469
  2829. ideas about what to do about that. So I thought,
  2830. “Well, no.” [laughs]
  2831.  
  2832. 01:10:01.469 --> 01:10:09.900
  2833. I also thought about commercialization, but
  2834. I decided that… In these days maybe you
  2835.  
  2836. 01:10:09.900 --> 01:10:16.679
  2837. can commercialize by putting stuff out on
  2838. the web and people will start to pick it up
  2839.  
  2840. 01:10:16.679 --> 01:10:22.270
  2841. and maybe there will be users who contribute
  2842. to the implementation and so forth. I think
  2843.  
  2844. 01:10:22.270 --> 01:10:25.360
  2845. it’s still an awful lot of work. I think
  2846. the people who put it out there end up spending
  2847.  
  2848. 01:10:25.360 --> 01:10:30.969
  2849. most of their time focused on that. So it’s
  2850. not really research. It’s much more development.
  2851.  
  2852. 01:10:30.969 --> 01:10:37.389
  2853. So that didn’t seem like a very good direction
  2854. to go in.
  2855.  
  2856. 01:10:37.389 --> 01:10:43.289
  2857. I was looking around thinking about what to
  2858. do, and I started to think about the ARPANET.
  2859.  
  2860. 01:10:43.289 --> 01:10:51.429
  2861. And I really don’t know, I don’t remember
  2862. what it was that caused me to see this problem
  2863.  
  2864. 01:10:51.429 --> 01:10:56.249
  2865. lurking in the ARPANET. It wasn’t a problem
  2866. that I invented. Bob Kahn had been writing
  2867.  
  2868. 01:10:56.249 --> 01:11:03.780
  2869. papers about the ARPANET. So in those days
  2870. people did email, people did FTP, people did
  2871.  
  2872. 01:11:03.780 --> 01:11:08.459
  2873. remote login. That was kind of what you did
  2874. on the Internet, and I was using email already.
  2875.  
  2876. 01:11:08.459 --> 01:11:13.440
  2877. I mean people have told me email didn’t
  2878. exist so early, but it existed in the ’70s
  2879.  
  2880. 01:11:13.440 --> 01:11:21.280
  2881. because I was using it. But there was a dream
  2882. of writing distributed programs where they
  2883.  
  2884. 01:11:21.280 --> 01:11:24.809
  2885. would have components running on different
  2886. computers and they would communicate by sending
  2887.  
  2888. 01:11:24.809 --> 01:11:32.419
  2889. messages, and nobody knew how to do that.
  2890. So I thought, “Ah, this is a great problem,”
  2891.  
  2892. 01:11:32.419 --> 01:11:35.179
  2893. and so I jumped into distributed computing.
  2894.  
  2895. 01:11:35.179 --> 01:11:40.219
  2896. This was in the late ’70s. I just switched
  2897. directions. I didn’t switch totally because
  2898.  
  2899. 01:11:40.219 --> 01:11:46.190
  2900. I was still working on 6.170. I had been thinking
  2901. about “How do you reason about the correctness
  2902.  
  2903. 01:11:46.190 --> 01:11:52.280
  2904. of abstract data types? How do you write specifications
  2905. for abstract data types?” A lot of this
  2906.  
  2907. 01:11:52.280 --> 01:11:58.139
  2908. was being taught to the students in my course.
  2909. I was also…
  2910.  
  2911. 01:11:58.139 --> 01:12:08.619
  2912. If I could, I’m going to pause you for a
  2913. moment.
  2914.  
  2915. 01:12:08.619 --> 01:12:14.110
  2916. [Recording was paused for everyone to take
  2917. a break]
  2918.  
  2919. 01:12:14.110 --> 01:12:15.739
  2920. Okay. So where were…? [laughs]
  2921.  
  2922. 01:12:15.739 --> 01:12:19.610
  2923. [A lot of it was being tied to your students…]
  2924.  
  2925. 01:12:19.610 --> 01:12:25.000
  2926. In 6.170, yeah. And I was working with John
  2927. Guttag. I forget when John came to MIT. He
  2928.  
  2929. 01:12:25.000 --> 01:12:30.650
  2930. had done his thesis on specifications of abstract
  2931. data types. Steve Zilles had done a similar…
  2932.  
  2933. 01:12:30.650 --> 01:12:36.481
  2934. didn’t quite finish his thesis, but a similar
  2935. kind of research. So John and I were working
  2936.  
  2937. 01:12:36.481 --> 01:12:41.949
  2938. together. We started working together on 6.170.
  2939. We wrote a book. I was still interested in
  2940.  
  2941. 01:12:41.949 --> 01:12:45.530
  2942. the programming methodology stuff. Not so
  2943. much the programming language stuff, but the
  2944.  
  2945. 01:12:45.530 --> 01:12:53.519
  2946. programming methodology stuff. But I jumped
  2947. into research in distributed computing, and
  2948.  
  2949. 01:12:53.519 --> 01:13:07.570
  2950. I really stayed in that area after that, with
  2951. a few diversions into other stuff, and had
  2952.  
  2953. 01:13:07.570 --> 01:13:09.999
  2954. a good time.
  2955.  
  2956. 01:13:09.999 --> 01:13:15.739
  2957. I thought it was ironic in a way that I decided
  2958. to not look at concurrency when I was working
  2959.  
  2960. 01:13:15.739 --> 01:13:21.090
  2961. on CLU on the grounds that I had enough on
  2962. my plate and that would have just been a huge
  2963.  
  2964. 01:13:21.090 --> 01:13:28.139
  2965. distraction. When I got into distributed computing,
  2966. of course concurrency came right back, so
  2967.  
  2968. 01:13:28.139 --> 01:13:32.639
  2969. I’m thinking about concurrency again since
  2970. clearly you have all these computers and they’re
  2971.  
  2972. 01:13:32.639 --> 01:13:40.939
  2973. all working in parallel and so forth. In a
  2974. way, distributed computing is a great place
  2975.  
  2976. 01:13:40.939 --> 01:13:44.880
  2977. to think in terms of abstract data types because
  2978. you want to have different objects running
  2979.  
  2980. 01:13:44.880 --> 01:13:48.260
  2981. on different machines, they’re going to
  2982. communicate.
  2983.  
  2984. 01:13:48.260 --> 01:13:52.409
  2985. One of the things I was thinking about in
  2986. the early days of the first project, which
  2987.  
  2988. 01:13:52.409 --> 01:13:57.690
  2989. was the Argus project to develop a language
  2990. to implement these distributed programs, was
  2991.  
  2992. 01:13:57.690 --> 01:14:04.340
  2993. “What is the communication mechanism?”
  2994. I ended up strongly on the side of remote
  2995.  
  2996. 01:14:04.340 --> 01:14:12.159
  2997. procedure call. You know, that on my remote
  2998. machine I have an object, it provides operations,
  2999.  
  3000. 01:14:12.159 --> 01:14:20.110
  3001. and over here I call those operations. And
  3002. then under the cover, stuff is passing. Argus
  3003.  
  3004. 01:14:20.110 --> 01:14:24.650
  3005. was one language system, so we would have
  3006. been able to… If you’re running on one
  3007.  
  3008. 01:14:24.650 --> 01:14:28.119
  3009. machine and you have one language, you can
  3010. do a much more efficient remote procedure
  3011.  
  3012. 01:14:28.119 --> 01:14:33.230
  3013. call than you can do if you worry about heterogeneous
  3014. machines, different programming languages,
  3015.  
  3016. 01:14:33.230 --> 01:14:35.039
  3017. and so forth.
  3018.  
  3019. 01:14:35.039 --> 01:14:43.059
  3020. Anyway, I started working in distributed computing
  3021. and that was a long haul. In the ’80s and
  3022.  
  3023. 01:14:43.059 --> 01:14:52.019
  3024. the ’90s I had some great students. I’m
  3025. not sure what to talk about there. It’s…
  3026.  
  3027. 01:14:52.019 --> 01:15:02.000
  3028. Well, let’s see. Who influenced you? Were
  3029. you… How about Lampson ? Was he a… his
  3030.  
  3031. 01:15:02.000 --> 01:15:04.719
  3032. stuff at Xerox? Or…
  3033.  
  3034. 01:15:04.719 --> 01:15:12.719
  3035. Well, so I was definitely at this point going
  3036. to operating system conferences. Certainly
  3037.  
  3038. 01:15:12.719 --> 01:15:22.550
  3039. I… Another course I taught at MIT was 6.033,
  3040. the systems course. I taught that many times.
  3041.  
  3042. 01:15:22.550 --> 01:15:29.440
  3043. And so Multics and various operating systems,
  3044. all that stuff.
  3045.  
  3046. 01:15:29.440 --> 01:15:34.769
  3047. I wouldn’t say… You know, it’s hard
  3048. to answer. I wouldn’t say that Butler’s
  3049.  
  3050. 01:15:34.769 --> 01:15:46.360
  3051. work particularly influenced me. There was
  3052. a group in the ’70s of DARPA contractors
  3053.  
  3054. 01:15:46.360 --> 01:15:52.900
  3055. who got together a couple times a year to
  3056. talk about programming languages and programming
  3057.  
  3058. 01:15:52.900 --> 01:15:57.979
  3059. methodology. So Butler was in that group,
  3060. Bill Wulf and Mary Shaw were in that group,
  3061.  
  3062. 01:15:57.979 --> 01:16:05.939
  3063. I was in that group, Jim Horning, the Euclid
  3064. developers. So there, I used to go that meeting
  3065.  
  3066. 01:16:05.939 --> 01:16:12.070
  3067. every six months or so, and there was a lot
  3068. of exchange of ideas. You look at a language
  3069.  
  3070. 01:16:12.070 --> 01:16:19.760
  3071. like Euclid and you can see data abstraction,
  3072. specifications, all that stuff was going on.
  3073.  
  3074. 01:16:19.760 --> 01:16:24.340
  3075. But when I moved into… No, the thing that
  3076. influenced me was transactions.
  3077.  
  3078. 01:16:24.340 --> 01:16:25.340
  3079. Right.
  3080.  
  3081. 01:16:25.340 --> 01:16:27.679
  3082. Yeah, that’s right.
  3083.  
  3084. 01:16:27.679 --> 01:16:32.840
  3085. And that was coming from Jim Gray, from System
  3086. R, from the database community.
  3087.  
  3088. 01:16:32.840 --> 01:16:35.760
  3089. Right. And then Lampson and Sturgis with the
  3090. stable…
  3091.  
  3092. 01:16:35.760 --> 01:16:44.550
  3093. The stable storage , but that was really much
  3094. more a 6.033 topic than it was an Argus topic.
  3095.  
  3096. 01:16:44.550 --> 01:16:50.849
  3097. So what we did in Argus was we brought transactions
  3098. into the programming language. We were interested
  3099.  
  3100. 01:16:50.849 --> 01:16:59.199
  3101. in the point that when you make one of these
  3102. remote procedure calls, you can’t be sure
  3103.  
  3104. 01:16:59.199 --> 01:17:02.719
  3105. you’re going to get an answer because you’re
  3106. talking to a different machine and there could
  3107.  
  3108. 01:17:02.719 --> 01:17:08.619
  3109. be a reason why communication isn’t working,
  3110. and you will never know what that reason is
  3111.  
  3112. 01:17:08.619 --> 01:17:13.909
  3113. because you might just not have been waiting
  3114. long enough for the answer to come back or
  3115.  
  3116. 01:17:13.909 --> 01:17:19.630
  3117. it might really be down. Right? This is the
  3118. beauty and the horribleness of distributed
  3119.  
  3120. 01:17:19.630 --> 01:17:24.289
  3121. computing. I think it’s kind of neat myself,
  3122. that you just have to get in this mindset
  3123.  
  3124. 01:17:24.289 --> 01:17:29.730
  3125. where the lack of an answer tells you nothing,
  3126. right?
  3127.  
  3128. 01:17:29.730 --> 01:17:36.880
  3129. The problem is here I am on the calling side
  3130. and I don’t want to wait forever, so what
  3131.  
  3132. 01:17:36.880 --> 01:17:41.019
  3133. do I do? Well, what we thought you did was
  3134. you’re running a little subaction and you
  3135.  
  3136. 01:17:41.019 --> 01:17:47.030
  3137. abort it, and that means even if it happened
  3138. over there, it hasn’t really happened and
  3139.  
  3140. 01:17:47.030 --> 01:17:50.119
  3141. so you don’t have to worry about it. You
  3142. could try an alternative technique and so
  3143.  
  3144. 01:17:50.119 --> 01:17:51.119
  3145. forth.
  3146.  
  3147. 01:17:51.119 --> 01:17:56.210
  3148. That was a big piece of originality in Argus.
  3149. We ran the whole thing as transactions. So
  3150.  
  3151. 01:17:56.210 --> 01:18:02.249
  3152. we had objects that were instances of data
  3153. types. They ran on individual machines. And
  3154.  
  3155. 01:18:02.249 --> 01:18:06.449
  3156. then we ran computations as transactions,
  3157. and every time we made a remote call, we ran
  3158.  
  3159. 01:18:06.449 --> 01:18:13.960
  3160. it as a subaction. That was sort of the position
  3161. of Argus. I don’t think it was necessarily
  3162.  
  3163. 01:18:13.960 --> 01:18:20.780
  3164. a good idea because it was complicated and
  3165. expensive. I’m not sure I would do things
  3166.  
  3167. 01:18:20.780 --> 01:18:26.679
  3168. the same way were I to do it today. I would
  3169. probably use a much simpler model of computation.
  3170.  
  3171. 01:18:26.679 --> 01:18:30.400
  3172. One thing that’s interesting, a piece of
  3173. history about Argus though, is that X-Windows
  3174.  
  3175. 01:18:30.400 --> 01:18:36.489
  3176. came out of Argus. Bob Scheifler was working
  3177. for me. He was one of two staff members who
  3178.  
  3179. 01:18:36.489 --> 01:18:42.530
  3180. were big implementers for us. He’s a marvelous
  3181. implementer. We needed a way of debugging
  3182.  
  3183. 01:18:42.530 --> 01:18:48.900
  3184. distributed programs you’re running, and
  3185. he came up with X-Windows because what was
  3186.  
  3187. 01:18:48.900 --> 01:18:52.739
  3188. nice was you could have a window over here
  3189. watching that… we called them “guardians,”
  3190.  
  3191. 01:18:52.739 --> 01:18:56.709
  3192. these objects, and another one over here watching
  3193. this guardian. So it gave you a very nice
  3194.  
  3195. 01:18:56.709 --> 01:18:58.889
  3196. debugging environment.
  3197.  
  3198. 01:18:58.889 --> 01:19:10.969
  3199. Then Jerry Saltzer had been in charge of Project
  3200. Athena and Kerberos had come out of that.
  3201.  
  3202. 01:19:10.969 --> 01:19:16.590
  3203. That was a big hit because it was public domain,
  3204. and so Mike Dertouzos thought, “Well, let’s
  3205.  
  3206. 01:19:16.590 --> 01:19:21.619
  3207. try to make X into the public domain,” so
  3208. we formed the X Consortium. This was kind
  3209.  
  3210. 01:19:21.619 --> 01:19:28.469
  3211. of the start of windows being the way that
  3212. you managed your system in a distributed world.
  3213.  
  3214. 01:19:28.469 --> 01:19:32.429
  3215. It wasn’t the first windows. There was something
  3216. called W I think which preceded it. W, X – “X”
  3217.  
  3218. 01:19:32.429 --> 01:19:39.310
  3219. is after “W.” But it was just an interesting
  3220. little sidelight on what was going on. It
  3221.  
  3222. 01:19:39.310 --> 01:19:43.409
  3223. wasn’t my invention, it was Bob’s.
  3224.  
  3225. 01:19:43.409 --> 01:19:48.269
  3226. So we implemented Argus. I mean at this point,
  3227. we’re trying to make some sense out of “What
  3228.  
  3229. 01:19:48.269 --> 01:19:53.479
  3230. are distributed systems?” and there’s
  3231. a lot of work in the operating system community,
  3232.  
  3233. 01:19:53.479 --> 01:20:00.269
  3234. people are thinking about “Maybe I just
  3235. have a great big heap, and programs run and
  3236.  
  3237. 01:20:00.269 --> 01:20:05.630
  3238. they share these objects in the heap.” I’m
  3239. not sure that this work ever really went anywhere
  3240.  
  3241. 01:20:05.630 --> 01:20:11.329
  3242. in the sense of “People are building programs
  3243. using that,” because what happened was the
  3244.  
  3245. 01:20:11.329 --> 01:20:16.849
  3246. big RPC model came in. The idea was you build
  3247. your components, they communicate through
  3248.  
  3249. 01:20:16.849 --> 01:20:23.360
  3250. an interface that’s described in the library,
  3251. and software connects them together, so you
  3252.  
  3253. 01:20:23.360 --> 01:20:28.679
  3254. get heterogeneity. The performance is not
  3255. great, but that was the idea.
  3256.  
  3257. 01:20:28.679 --> 01:20:37.360
  3258. Anyway, I worked on Argus and then students
  3259. who were working for me at the time, we were
  3260.  
  3261. 01:20:37.360 --> 01:20:47.239
  3262. thinking about data abstraction and concurrency.
  3263. So Bill Weihl wrote a thesis on commutativity
  3264.  
  3265. 01:20:47.239 --> 01:20:51.780
  3266. and how you can use the specification of an
  3267. abstract data type to figure out how much
  3268.  
  3269. 01:20:51.780 --> 01:20:58.679
  3270. concurrency’s allowed. In a database at
  3271. that time, they used two-phase locking. That’s
  3272.  
  3273. 01:20:58.679 --> 01:21:03.719
  3274. a mechanism that has no understanding of any
  3275. meaning. It’s just a technique that you
  3276.  
  3277. 01:21:03.719 --> 01:21:08.599
  3278. can use that will guarantee serializability.
  3279. There was also optimistic concurrency control
  3280.  
  3281. 01:21:08.599 --> 01:21:14.150
  3282. – not used so much then, but used a lot
  3283. later. But Bill’s idea was “If I understand
  3284.  
  3285. 01:21:14.150 --> 01:21:18.159
  3286. the semantics of the operations, I can get
  3287. more concurrency than would be allowed by
  3288.  
  3289. 01:21:18.159 --> 01:21:22.389
  3290. these concurrency control mechanisms that
  3291. don’t understand the semantics.” So that
  3292.  
  3293. 01:21:22.389 --> 01:21:27.329
  3294. was an early piece of work that came out of
  3295. that group.
  3296.  
  3297. 01:21:27.329 --> 01:21:32.869
  3298. Then another thing that happened in the ’80s
  3299. was we invented what’s essentially Paxos.
  3300.  
  3301. 01:21:32.869 --> 01:21:35.949
  3302. We invented something called “viewstamped
  3303. replication” – this was another one of
  3304.  
  3305. 01:21:35.949 --> 01:21:42.699
  3306. my students, Brian Oki – because we were
  3307. interested in reliability and availability.
  3308.  
  3309. 01:21:42.699 --> 01:21:49.769
  3310. I mean I thought of distributed computing
  3311. as being both a blessing and a curse. If your
  3312.  
  3313. 01:21:49.769 --> 01:21:56.670
  3314. machine went down in a non-distributed system,
  3315. you can’t do anything until it comes up.
  3316.  
  3317. 01:21:56.670 --> 01:22:01.789
  3318. With a distributed system, you could have
  3319. stuff someplace else so maybe you could continue
  3320.  
  3321. 01:22:01.789 --> 01:22:02.789
  3322. working.
  3323.  
  3324. 01:22:02.789 --> 01:22:06.530
  3325. On the other hand, if you have stuff someplace
  3326. else and you don’t have a way of controlling
  3327.  
  3328. 01:22:06.530 --> 01:22:10.919
  3329. things, then there’s more than one failure
  3330. that can cause you to stop working, so what
  3331.  
  3332. 01:22:10.919 --> 01:22:18.119
  3333. do you do about that? We came up with a replication
  3334. technique to ensure that everything worked
  3335.  
  3336. 01:22:18.119 --> 01:22:26.110
  3337. properly, and as long as f out of 2f + 1 nodes
  3338. were working… So yeah.
  3339.  
  3340. 01:22:26.110 --> 01:22:32.899
  3341. Okay. So why don’t you tell us about the
  3342. Liskov substitution principle?
  3343.  
  3344. 01:22:32.899 --> 01:22:40.610
  3345. That was an interesting thing that happened
  3346. in the ’80s. At the same time that I was
  3347.  
  3348. 01:22:40.610 --> 01:22:50.670
  3349. developing CLU and Bill and Mary were working
  3350. on Alphard, Alan Kay and Adele Goldberg were
  3351.  
  3352. 01:22:50.670 --> 01:23:00.360
  3353. working on Smalltalk. On the west coast. Although
  3354. it may seem a little strange these days, in
  3355.  
  3356. 01:23:00.360 --> 01:23:04.929
  3357. those days it was a long way from the east
  3358. coast to the west coast, and of course we
  3359.  
  3360. 01:23:04.929 --> 01:23:11.219
  3361. had no conference calls in those days too.
  3362. That whole business about object-oriented
  3363.  
  3364. 01:23:11.219 --> 01:23:15.210
  3365. programming was developing on the west coast
  3366. and on the east coast we were mostly working
  3367.  
  3368. 01:23:15.210 --> 01:23:21.459
  3369. on data abstraction, and the two worlds were
  3370. kind of separated. So I knew the name, but
  3371.  
  3372. 01:23:21.459 --> 01:23:28.749
  3373. we didn’t run into each other at conferences
  3374. and there wasn’t much crosstalk going on.
  3375.  
  3376. 01:23:28.749 --> 01:23:34.969
  3377. In the 1980s, I was asked to give a keynote
  3378. at OOPSLA , which I think it was maybe the
  3379.  
  3380. 01:23:34.969 --> 01:23:41.659
  3381. second OOPSLA. It hadn’t been in existence
  3382. very long. So I decided that this was a good
  3383.  
  3384. 01:23:41.659 --> 01:23:46.719
  3385. opportunity to learn about what was going
  3386. on in object-oriented languages. So I started
  3387.  
  3388. 01:23:46.719 --> 01:23:53.679
  3389. reading all the papers and I discovered that
  3390. hierarchy was being used for two different
  3391.  
  3392. 01:23:53.679 --> 01:23:59.349
  3393. purposes. One was simply inheritance. So I
  3394. have a class, it implements something, I can
  3395.  
  3396. 01:23:59.349 --> 01:24:06.429
  3397. build a subclass, I can borrow all that implementation,
  3398. change it however I want, add a few extra
  3399.  
  3400. 01:24:06.429 --> 01:24:11.269
  3401. methods, change the representation. Whatever
  3402. I want to do, I just sort of borrow the code
  3403.  
  3404. 01:24:11.269 --> 01:24:13.580
  3405. and keep working on it.
  3406.  
  3407. 01:24:13.580 --> 01:24:19.579
  3408. The other way it was being used was for type
  3409. hierarchy. So the idea was that the superclass
  3410.  
  3411. 01:24:19.579 --> 01:24:26.749
  3412. would define a supertype, and then a subclass
  3413. would extend this to become a subtype. I thought
  3414.  
  3415. 01:24:26.749 --> 01:24:32.420
  3416. this idea of type hierarchy was very interesting,
  3417. but I also felt that they didn’t understand
  3418.  
  3419. 01:24:32.420 --> 01:24:37.919
  3420. it very well. I remember reading papers in
  3421. which it was clear they were very confused
  3422.  
  3423. 01:24:37.919 --> 01:24:42.249
  3424. about it, because one in particular that I
  3425. remember said that a stack and a queue were
  3426.  
  3427. 01:24:42.249 --> 01:24:49.860
  3428. both subtypes of one another. This is clearly
  3429. not true because if you wrote a program that
  3430.  
  3431. 01:24:49.860 --> 01:24:53.979
  3432. expected a stack and you got a queue instead,
  3433. you would be very surprised by its behavior.
  3434.  
  3435. 01:24:53.979 --> 01:24:58.749
  3436. The difference between LIFO and FIFO is a
  3437. big deal.
  3438.  
  3439. 01:24:58.749 --> 01:25:04.900
  3440. This led me to start thinking about “What
  3441. does it really mean to have a supertype and
  3442.  
  3443. 01:25:04.900 --> 01:25:11.579
  3444. subtype?” And I came up with a rule, an
  3445. informal rule which I presented in my keynote
  3446.  
  3447. 01:25:11.579 --> 01:25:19.469
  3448. at OOPSLA which simply said that a subtype
  3449. should behave like a supertype as far as you
  3450.  
  3451. 01:25:19.469 --> 01:25:24.449
  3452. can tell by using the supertype methods. So
  3453. it wasn’t that it couldn’t behave differently.
  3454.  
  3455. 01:25:24.449 --> 01:25:29.860
  3456. It’s just that as long as you limited your
  3457. interaction with its objects to the supertype
  3458.  
  3459. 01:25:29.860 --> 01:25:35.159
  3460. methods, you would get the behavior you expected.
  3461.  
  3462. 01:25:35.159 --> 01:25:40.309
  3463. This was an informal definition just given
  3464. based on intuition. It’s intuitively right
  3465.  
  3466. 01:25:40.309 --> 01:25:44.800
  3467. in some sense. You can see how you understand
  3468. the supertype, you write some code in terms
  3469.  
  3470. 01:25:44.800 --> 01:25:49.140
  3471. of the supertype, whatever object you get
  3472. should behave that way you expect. Otherwise
  3473.  
  3474. 01:25:49.140 --> 01:25:53.550
  3475. how can you do this independent reasoning
  3476. about behavior?
  3477.  
  3478. 01:25:53.550 --> 01:26:00.739
  3479. Later on Jeannette Wing, who actually had
  3480. been my master’s student I think and then
  3481.  
  3482. 01:26:00.739 --> 01:26:05.479
  3483. John Guttag’s PhD student, approached me
  3484. and said, “Why don’t we try to figure
  3485.  
  3486. 01:26:05.479 --> 01:26:09.610
  3487. out precisely what this means?” So we worked
  3488. together on this in some papers that got published
  3489.  
  3490. 01:26:09.610 --> 01:26:11.500
  3491. a bit later.
  3492.  
  3493. 01:26:11.500 --> 01:26:17.959
  3494. Meanwhile I was working on distributed computing,
  3495. I was particularly interested in viewstamped
  3496.  
  3497. 01:26:17.959 --> 01:26:22.781
  3498. replication and some of the other work that
  3499. was going on in my group at the time, and
  3500.  
  3501. 01:26:22.781 --> 01:26:27.500
  3502. I wasn’t really thinking about this until
  3503. sometime in the ’90s when I got an email
  3504.  
  3505. 01:26:27.500 --> 01:26:32.330
  3506. from someone who said, “Can you tell me
  3507. if this is the correct meaning of the Liskov
  3508.  
  3509. 01:26:32.330 --> 01:26:38.619
  3510. substitution principle?” So that was the
  3511. first time I had any idea [laughs] that there
  3512.  
  3513. 01:26:38.619 --> 01:26:44.289
  3514. was such a thing, that this name had developed.
  3515. Technically it’s called “behavioral subtyping.”
  3516.  
  3517. 01:26:44.289 --> 01:26:49.689
  3518. You know, it says subtypes behave like supertypes.
  3519. So I just thought that was very amusing. I
  3520.  
  3521. 01:26:49.689 --> 01:26:54.519
  3522. discovered there were lots and lots of people
  3523. on the Internet having arguments about what
  3524.  
  3525. 01:26:54.519 --> 01:26:59.380
  3526. the Liskov substitution principle meant. So
  3527. it was nice to have something that had an
  3528.  
  3529. 01:26:59.380 --> 01:27:04.280
  3530. impact like that. I would say you put data
  3531. abstraction together with type hierarchy and
  3532.  
  3533. 01:27:04.280 --> 01:27:09.269
  3534. now you have sort of modern object-oriented
  3535. programming.
  3536.  
  3537. 01:27:09.269 --> 01:27:17.530
  3538. But that was a little deviation from the work
  3539. I was doing, which was all distributed computing.
  3540.  
  3541. 01:27:17.530 --> 01:27:25.849
  3542. I worked on distributed computing through
  3543. the ’80s and ’90s. And it’s kind of
  3544.  
  3545. 01:27:25.849 --> 01:27:31.840
  3546. hard to remember all the different projects
  3547. that were going on. Sometime in the fairly
  3548.  
  3549. 01:27:31.840 --> 01:27:39.139
  3550. early ’90s I started working on the Thor
  3551. project, which in some sense was the opposite
  3552.  
  3553. 01:27:39.139 --> 01:27:48.110
  3554. of Argus. So Argus was a project in which
  3555. the objects were the components of the distributed
  3556.  
  3557. 01:27:48.110 --> 01:27:57.139
  3558. system. Thor was a project in which you had
  3559. a client-server model, the objects were stored
  3560.  
  3561. 01:27:57.139 --> 01:28:02.130
  3562. in the servers, and the clients interacted
  3563. with one another only through their use of
  3564.  
  3565. 01:28:02.130 --> 01:28:03.130
  3566. the objects.
  3567.  
  3568. 01:28:03.130 --> 01:28:08.209
  3569. So it was much more of a database view of
  3570. the world than Argus was. And we were still
  3571.  
  3572. 01:28:08.209 --> 01:28:12.590
  3573. running transactions, but now these were transactions…
  3574. they weren’t distributed transactions as
  3575.  
  3576. 01:28:12.590 --> 01:28:20.090
  3577. in Argus. They were one-machine transactions
  3578. where a client would run against the objects
  3579.  
  3580. 01:28:20.090 --> 01:28:23.829
  3581. at the servers and at the end either commit
  3582. or abort, and that would cause the global
  3583.  
  3584. 01:28:23.829 --> 01:28:31.219
  3585. state to change. And I think that might be
  3586. more productive way of building applications.
  3587.  
  3588. 01:28:31.219 --> 01:28:37.630
  3589. That was truly an object-oriented system as
  3590. opposed to a database system. We used a very
  3591.  
  3592. 01:28:37.630 --> 01:28:42.630
  3593. interesting form of optimistic concurrency
  3594. control and we did a lot of work on cache
  3595.  
  3596. 01:28:42.630 --> 01:28:51.530
  3597. management and other techniques that made
  3598. the system perform well.
  3599.  
  3600. 01:28:51.530 --> 01:29:01.840
  3601. As you know, performance is greatly overrated
  3602. in the minds of computer scientists. On the
  3603.  
  3604. 01:29:01.840 --> 01:29:05.800
  3605. other hand, performance matters a lot when
  3606. you’re building a platform that you would
  3607.  
  3608. 01:29:05.800 --> 01:29:09.849
  3609. like to people to build applications on top
  3610. of. So it matters a lot in an operating system.
  3611.  
  3612. 01:29:09.849 --> 01:29:14.840
  3613. It would matter a lot in a system like Thor
  3614. or Argus because you would expect to build
  3615.  
  3616. 01:29:14.840 --> 01:29:19.949
  3617. on top, and any problem with the performance
  3618. that exists at the level of the implementation
  3619.  
  3620. 01:29:19.949 --> 01:29:29.309
  3621. of the platform will be multiplied when you
  3622. get to the top level.
  3623.  
  3624. 01:29:29.309 --> 01:29:37.249
  3625. In the ’90s, in addition to the work on
  3626. Thor, my group did two other things that I
  3627.  
  3628. 01:29:37.249 --> 01:29:43.960
  3629. thought were notable. The first was Byzantine
  3630. fault tolerance and the other one was decentralized
  3631.  
  3632. 01:29:43.960 --> 01:29:50.599
  3633. information flow control. The first one…
  3634. I’m not sure exactly the order these happened.
  3635.  
  3636. 01:29:50.599 --> 01:29:56.349
  3637. They’re probably simultaneous. The first
  3638. one happened with my student Miguel Castro.
  3639.  
  3640. 01:29:56.349 --> 01:30:06.989
  3641. What happened was I saw a request for proposal
  3642. from DARPA talking about malicious intruders
  3643.  
  3644. 01:30:06.989 --> 01:30:12.959
  3645. on the Internet and what can we do to counteract
  3646. their impact. And I gave this to Miguel. I
  3647.  
  3648. 01:30:12.959 --> 01:30:16.030
  3649. said, “Think about this. See if you can
  3650. think of something interesting we might propose
  3651.  
  3652. 01:30:16.030 --> 01:30:22.139
  3653. to do.” And he thought, “Well, maybe we
  3654. should look at this question of replication
  3655.  
  3656. 01:30:22.139 --> 01:30:28.570
  3657. in the presence of Byzantine attacks,” and
  3658. this ultimately turned into that work on Byzantine
  3659.  
  3660. 01:30:28.570 --> 01:30:29.769
  3661. fault tolerance.
  3662.  
  3663. 01:30:29.769 --> 01:30:34.039
  3664. It wasn’t that people hadn’t worked on
  3665. it before, but they had been mostly theoreticians,
  3666.  
  3667. 01:30:34.039 --> 01:30:39.979
  3668. and so they weren’t thinking about a practical
  3669. technique, one that would have a low cost
  3670.  
  3671. 01:30:39.979 --> 01:30:44.159
  3672. or as low cost as you could manage, and it
  3673. would really be able to be used in practice.
  3674.  
  3675. 01:30:44.159 --> 01:30:46.699
  3676. So we should say what “Byzantine” means.
  3677.  
  3678. 01:30:46.699 --> 01:30:52.610
  3679. Oh. “Byzantine” means arbitrary failures.
  3680. The work I did in the ’80s on viewstamped
  3681.  
  3682. 01:30:52.610 --> 01:30:58.499
  3683. replication, otherwise known as Paxos, assumed
  3684. benign failures where a computer was either
  3685.  
  3686. 01:30:58.499 --> 01:31:05.899
  3687. running or it wasn’t. You know, a message
  3688. either arrived or it didn’t. It wasn’t
  3689.  
  3690. 01:31:05.899 --> 01:31:12.479
  3691. garbled in some way. The computer either failed
  3692. by crashing or it was running correctly. You
  3693.  
  3694. 01:31:12.479 --> 01:31:18.360
  3695. know, the message arrived intact or it didn’t
  3696. come at all. Or maybe it arrived and it wasn’t
  3697.  
  3698. 01:31:18.360 --> 01:31:21.709
  3699. intact, but you recognized it right away and
  3700. you could throw it away.
  3701.  
  3702. 01:31:21.709 --> 01:31:26.949
  3703. With Byzantine failures, the computer keeps
  3704. running. It’s not running properly anymore,
  3705.  
  3706. 01:31:26.949 --> 01:31:31.820
  3707. but it’s running nevertheless. Of course
  3708. mostly this will happen and you’ll be able
  3709.  
  3710. 01:31:31.820 --> 01:31:35.679
  3711. to know that it’s not running properly,
  3712. because it will be doing weird things, but
  3713.  
  3714. 01:31:35.679 --> 01:31:40.719
  3715. a real Byzantine failure is one where it continues
  3716. to run and it looks like it’s okay. And
  3717.  
  3718. 01:31:40.719 --> 01:31:45.179
  3719. there were examples of this happening. For
  3720. example, you’re probably aware of the stuff
  3721.  
  3722. 01:31:45.179 --> 01:31:50.929
  3723. that was going on in the networking community
  3724. where a little flip of a bit in a message
  3725.  
  3726. 01:31:50.929 --> 01:31:56.689
  3727. caused all sorts of problems to develop in
  3728. routing and so forth of the message.
  3729.  
  3730. 01:31:56.689 --> 01:32:03.059
  3731. In the case of Byzantine failures in running
  3732. a computer, these were mostly the result of
  3733.  
  3734. 01:32:03.059 --> 01:32:09.440
  3735. attacks. And it’s interesting, when I first
  3736. started working in the Internet in the ’80s,
  3737.  
  3738. 01:32:09.440 --> 01:32:16.289
  3739. we were just a group of pals. Everybody was
  3740. a friend. It started off as a group of universities
  3741.  
  3742. 01:32:16.289 --> 01:32:23.369
  3743. connected by the ARPANET, and we didn’t
  3744. really worry about attacks because nobody
  3745.  
  3746. 01:32:23.369 --> 01:32:27.780
  3747. was interested in doing attacks. We were just
  3748. interested in “How do you make things work?”
  3749.  
  3750. 01:32:27.780 --> 01:32:34.550
  3751. As we moved into the ’90s, this was increasingly
  3752. not a valid assumption. Once the World Wide
  3753.  
  3754. 01:32:34.550 --> 01:32:35.610
  3755. Web came along…
  3756.  
  3757. 01:32:35.610 --> 01:32:41.869
  3758. And I should say right now that, like everybody
  3759. else I know in the sort of mainstream computer
  3760.  
  3761. 01:32:41.869 --> 01:32:47.340
  3762. science community, I didn’t see it coming.
  3763. I had no idea that we were going to move from
  3764.  
  3765. 01:32:47.340 --> 01:32:52.949
  3766. these computers that my pals were using to
  3767. something where the whole world started to
  3768.  
  3769. 01:32:52.949 --> 01:32:55.919
  3770. use it. That was an amazing transformation.
  3771.  
  3772. 01:32:55.919 --> 01:33:01.159
  3773. Anyway, as it became this thing that the whole
  3774. wide world was using, then the problem of
  3775.  
  3776. 01:33:01.159 --> 01:33:07.669
  3777. bad actors who would try to launch attacks
  3778. on people’s computers for purposes we know
  3779.  
  3780. 01:33:07.669 --> 01:33:12.959
  3781. today of really bad stuff, like encrypting
  3782. your files and then demanding blackmail money
  3783.  
  3784. 01:33:12.959 --> 01:33:15.630
  3785. to give you the key and stuff like that.
  3786.  
  3787. 01:33:15.630 --> 01:33:19.729
  3788. So in the ’90s, we were in a transitional
  3789. period where we began to think that maybe
  3790.  
  3791. 01:33:19.729 --> 01:33:27.360
  3792. these attacks actually mattered. So the question
  3793. of how to do a replication technique that
  3794.  
  3795. 01:33:27.360 --> 01:33:34.809
  3796. would handle Byzantine attacks where one of
  3797. the replicas was in fact behaving maliciously
  3798.  
  3799. 01:33:34.809 --> 01:33:40.070
  3800. and would appear to be behaving properly but
  3801. was actually not behaving properly. For example
  3802.  
  3803. 01:33:40.070 --> 01:33:45.070
  3804. you’d say, “Run this operation for me,”
  3805. and it would come back and say, “Okay, and
  3806.  
  3807. 01:33:45.070 --> 01:33:49.499
  3808. here’s your answer,” but in reality it
  3809. had done something entirely different. That
  3810.  
  3811. 01:33:49.499 --> 01:33:52.300
  3812. was an example of a Byzantine attack [really
  3813. “failure”].
  3814.  
  3815. 01:33:52.300 --> 01:34:02.420
  3816. So Miguel and I worked on this problem, how
  3817. to do a practical protocol. For a benign failure
  3818.  
  3819. 01:34:02.420 --> 01:34:11.369
  3820. you need 2f + 1 replicas. So to handle one
  3821. bad replica, you need 3. For Byzantine you
  3822.  
  3823. 01:34:11.369 --> 01:34:18.480
  3824. need 3f + 1. So you would need four. And you
  3825. also need a more complicated protocol. And
  3826.  
  3827. 01:34:18.480 --> 01:34:22.159
  3828. I’m convinced that one of the reasons we
  3829. were able to figure out how to do this was
  3830.  
  3831. 01:34:22.159 --> 01:34:28.000
  3832. because we had done viewstamped replication
  3833. in my group earlier, and looking back at what
  3834.  
  3835. 01:34:28.000 --> 01:34:33.939
  3836. happened, I see Byzantine fault tolerance
  3837. as being viewstamped replication extended
  3838.  
  3839. 01:34:33.939 --> 01:34:42.189
  3840. a little bit. It has an extra phase in the
  3841. protocol, it has an extra replica, but it’s
  3842.  
  3843. 01:34:42.189 --> 01:34:46.209
  3844. quite closely related. So I think it helped
  3845. Miguel and me when we were trying to figure
  3846.  
  3847. 01:34:46.209 --> 01:34:51.159
  3848. out how to make this work that we had that
  3849. background to depend on.
  3850.  
  3851. 01:34:51.159 --> 01:34:55.989
  3852. The other major deviation was decentralized
  3853. information flow control. This was work I
  3854.  
  3855. 01:34:55.989 --> 01:35:04.719
  3856. did with my student Andrew Myers. For security
  3857. in systems, there had always been two different
  3858.  
  3859. 01:35:04.719 --> 01:35:12.179
  3860. approaches. Access control, which controlled
  3861. what a program could access or what a user
  3862.  
  3863. 01:35:12.179 --> 01:35:15.989
  3864. was allowed to access, but once something
  3865. could be accessed, you could do anything you
  3866.  
  3867. 01:35:15.989 --> 01:35:20.849
  3868. wanted to with it. Information flow control
  3869. didn’t control access. It controlled what
  3870.  
  3871. 01:35:20.849 --> 01:35:26.219
  3872. could happen with the information after the
  3873. fact. So if you were entitled to read secret
  3874.  
  3875. 01:35:26.219 --> 01:35:30.739
  3876. files – and this came out of this kind of
  3877. work in the military – then you would not
  3878.  
  3879. 01:35:30.739 --> 01:35:35.780
  3880. be allowed to expose that information except
  3881. to something where secret information could
  3882.  
  3883. 01:35:35.780 --> 01:35:40.639
  3884. go. So it wasn’t the control of what you
  3885. looked at that mattered, it was the control
  3886.  
  3887. 01:35:40.639 --> 01:35:42.539
  3888. of what you did with it.
  3889.  
  3890. 01:35:42.539 --> 01:35:48.239
  3891. These systems had always been based on a centralized
  3892. notion of who was in control of things. There
  3893.  
  3894. 01:35:48.239 --> 01:35:52.790
  3895. was Top Secret, there was Secret, there was
  3896. Confidential. Somebody was classifying everything
  3897.  
  3898. 01:35:52.790 --> 01:35:58.829
  3899. and then the system just followed the rules
  3900. based on those sort of centralized notions.
  3901.  
  3902. 01:35:58.829 --> 01:36:04.709
  3903. What I did with Andrew was to decentralize
  3904. this so that individual users could put labels
  3905.  
  3906. 01:36:04.709 --> 01:36:09.879
  3907. on their data based on their own desires for
  3908. the control and then make the whole thing
  3909.  
  3910. 01:36:09.879 --> 01:36:14.280
  3911. work in the same way, controlling the access.
  3912. And that’s led to quite a bit of work in
  3913.  
  3914. 01:36:14.280 --> 01:36:20.150
  3915. programming languages and operating systems
  3916. after the fact. We worked on Thor and we worked
  3917.  
  3918. 01:36:20.150 --> 01:36:25.979
  3919. on these two interesting directions, and we
  3920. did some programming language work too, especially
  3921.  
  3922. 01:36:25.979 --> 01:36:30.780
  3923. with Andrew who was a programming language
  3924. person working in my group.
  3925.  
  3926. 01:36:30.780 --> 01:36:36.419
  3927. That took us through the end of the ’90s.
  3928. Then I took a couple years off and worked
  3929.  
  3930. 01:36:36.419 --> 01:36:42.090
  3931. for a startup just to see what it was like.
  3932. This was a startup called SightPath that was
  3933.  
  3934. 01:36:42.090 --> 01:36:47.780
  3935. fairly soon after I joined bought by Cisco,
  3936. and I ended up working there for two years.
  3937.  
  3938. 01:36:47.780 --> 01:36:56.539
  3939. I would say working in a company was not my
  3940. cup of tea, so I returned to MIT and I became
  3941.  
  3942. 01:36:56.539 --> 01:37:06.699
  3943. head of the computer science part of our department.
  3944. I continued working on distributed computing,
  3945.  
  3946. 01:37:06.699 --> 01:37:11.469
  3947. developed a system called Aeolus, which was
  3948. a decentralized information flow control system
  3949.  
  3950. 01:37:11.469 --> 01:37:17.880
  3951. with a programming language component. Then
  3952. I started working in the administration at
  3953.  
  3954. 01:37:17.880 --> 01:37:25.010
  3955. MIT. I was Associate Provost for Faculty Equity.
  3956. So that was what was happening in the 2000s.
  3957.  
  3958. 01:37:25.010 --> 01:37:31.749
  3959. Then I decided to retire, and I retired a
  3960. couple years ago. But in 2012 I sort of stopped
  3961.  
  3962. 01:37:31.749 --> 01:37:35.090
  3963. working in distributed computing and since
  3964. then I’ve been working in programming languages
  3965.  
  3966. 01:37:35.090 --> 01:37:41.789
  3967. and multicore machines just to sort of continue
  3968. the… I like to move around and I decided
  3969.  
  3970. 01:37:41.789 --> 01:37:46.090
  3971. it was time to move around for a while, so
  3972. I’ve been doing that.
  3973.  
  3974. 01:37:46.090 --> 01:37:49.039
  3975. So that’s sort of what I’ve done.
  3976.  
  3977. 01:37:49.039 --> 01:37:56.260
  3978. Let’s see. A couple things. When you were
  3979. doing the Provost thing, what was that and
  3980.  
  3981. 01:37:56.260 --> 01:37:57.989
  3982. how did it work out?
  3983.  
  3984. 01:37:57.989 --> 01:38:05.869
  3985. Well, when I was Associate Head for Computer
  3986. Science, I was in that position for three
  3987.  
  3988. 01:38:05.869 --> 01:38:12.880
  3989. years and I hired five women in three years
  3990. after a long period in which we had somehow
  3991.  
  3992. 01:38:12.880 --> 01:38:20.789
  3993. or other never been able to find women that
  3994. could be hired. And these women have all done
  3995.  
  3996. 01:38:20.789 --> 01:38:25.139
  3997. extremely well, so it wasn’t like I was
  3998. making compromises to hire them. I just managed
  3999.  
  4000. 01:38:25.139 --> 01:38:27.270
  4001. to find them where other people couldn’t
  4002. see them.
  4003.  
  4004. 01:38:27.270 --> 01:38:35.349
  4005. So the person who… It’s a long, complicated
  4006. story. But anyway, it was this kind of thing
  4007.  
  4008. 01:38:35.349 --> 01:38:43.099
  4009. – sort of trying to make sure that departments
  4010. all across the Institute were doing the right
  4011.  
  4012. 01:38:43.099 --> 01:38:48.280
  4013. thing as far as women and underrepresented
  4014. minorities were concerned. Mostly it had to
  4015.  
  4016. 01:38:48.280 --> 01:38:54.110
  4017. do with first of all you want the data. So
  4018. you want to know what’s happening. Then
  4019.  
  4020. 01:38:54.110 --> 01:38:58.559
  4021. you… There’s a lot of… You want to make
  4022. sure the search is carried out properly and
  4023.  
  4024. 01:38:58.559 --> 01:39:03.329
  4025. you want to make sure that department heads
  4026. understand certain basic things. Like for
  4027.  
  4028. 01:39:03.329 --> 01:39:08.179
  4029. example it’s their responsibility to make
  4030. sure that their junior faculty are not being
  4031.  
  4032. 01:39:08.179 --> 01:39:15.899
  4033. asked to do the wrong jobs. For example a
  4034. lot of people don’t understand that women
  4035.  
  4036. 01:39:15.899 --> 01:39:20.400
  4037. are much more willing to say yes to things
  4038. than men are. So if you say, “Would you
  4039.  
  4040. 01:39:20.400 --> 01:39:26.059
  4041. teach this lab course? And oh, by the way,
  4042. it’s really a hard job,” a young woman
  4043.  
  4044. 01:39:26.059 --> 01:39:29.500
  4045. assistant professor is much more likely to
  4046. say yes than a man is, so you have to sort
  4047.  
  4048. 01:39:29.500 --> 01:39:33.019
  4049. of take this kind of stuff into account. So
  4050. it was just that kind of stuff. Trying to
  4051.  
  4052. 01:39:33.019 --> 01:39:38.679
  4053. make the Institute better by making sure that
  4054. we were doing a good job of this.
  4055.  
  4056. 01:39:38.679 --> 01:39:41.719
  4057. And you think it’s made a difference?
  4058.  
  4059. 01:39:41.719 --> 01:39:45.469
  4060. I think that it helped when I was in the position.
  4061. I think this is the kind of stuff that you
  4062.  
  4063. 01:39:45.469 --> 01:39:50.249
  4064. have to pay attention to, it has to come from
  4065. top, and if you stop paying attention to it,
  4066.  
  4067. 01:39:50.249 --> 01:39:58.059
  4068. I think things will slide. So I haven’t…
  4069. I did my bit and now I’ve passed it on to
  4070.  
  4071. 01:39:58.059 --> 01:39:59.729
  4072. others.
  4073.  
  4074. 01:39:59.729 --> 01:40:01.829
  4075. So in general, how do you feel about MIT?
  4076.  
  4077. 01:40:01.829 --> 01:40:08.399
  4078. Oh, I absolutely love MIT. I think it’s
  4079. been a great place to work. I mean I would
  4080.  
  4081. 01:40:08.399 --> 01:40:13.979
  4082. say the lab is also a great place. MIT has
  4083. this peculiar sort of matrix organization
  4084.  
  4085. 01:40:13.979 --> 01:40:20.079
  4086. where there are departments and then we do
  4087. our research in a lab. So I’ve been in…
  4088.  
  4089. 01:40:20.079 --> 01:40:25.139
  4090. it was Project MAC, then it was Lab for Computer
  4091. Science, then we merged with the AI lab. Now
  4092.  
  4093. 01:40:25.139 --> 01:40:29.699
  4094. it’s CSAIL – Computer Science and AI Lab.
  4095.  
  4096. 01:40:29.699 --> 01:40:38.209
  4097. But MIT has been wonderful – the quality
  4098. of the students, the quality of the faculty,
  4099.  
  4100. 01:40:38.209 --> 01:40:45.169
  4101. the interest in doing research and really
  4102. understanding things from first principles.
  4103.  
  4104. 01:40:45.169 --> 01:40:50.749
  4105. I mean I find this is true even in our undergraduates.
  4106. They want to really understand things and
  4107.  
  4108. 01:40:50.749 --> 01:40:58.659
  4109. so it just makes a wonderful environment.
  4110. I also have found my colleagues very collaborative.
  4111.  
  4112. 01:40:58.659 --> 01:41:03.380
  4113. I love to come to work every day. It’s just
  4114. been great.
  4115.  
  4116. 01:41:03.380 --> 01:41:11.169
  4117. Let’s see. A couple of other things that
  4118. I wanted to make sure we covered. Tell us
  4119.  
  4120. 01:41:11.169 --> 01:41:17.560
  4121. a little bit about the Turing itself. When
  4122. did you hear you were getting the award? What’s
  4123.  
  4124. 01:41:17.560 --> 01:41:20.469
  4125. it been like?
  4126.  
  4127. 01:41:20.469 --> 01:41:26.159
  4128. I received the award… It’s the 2008 Turing
  4129. Award. I received it in 2009. This has been
  4130.  
  4131. 01:41:26.159 --> 01:41:33.489
  4132. a mystery to me why they have this offset
  4133. in years. It’s something historical.
  4134.  
  4135. 01:41:33.489 --> 01:41:38.610
  4136. I learned about it because I got a phone call
  4137. from Brian Randell. He was the head of the
  4138.  
  4139. 01:41:38.610 --> 01:41:43.629
  4140. Turing committee that year and I knew him
  4141. from the old times. He was another one of
  4142.  
  4143. 01:41:43.629 --> 01:41:49.800
  4144. the people doing work in programming methodology
  4145. in the days when I was in that field. That
  4146.  
  4147. 01:41:49.800 --> 01:41:54.530
  4148. was a huge surprise. He says to me, I picked
  4149. up the phone, “This is Brian Randell.”
  4150.  
  4151. 01:41:54.530 --> 01:42:01.039
  4152. I hadn’t seen him in years. He said, “You
  4153. better sit down.” [laughs] So that was great.
  4154.  
  4155. 01:42:01.039 --> 01:42:05.670
  4156. It’s wonderful to receive the Turing Award
  4157. because it’s such a validation of what you
  4158.  
  4159. 01:42:05.670 --> 01:42:16.010
  4160. did. And what was interesting for me was that,
  4161. because of the way I have moved around, I
  4162.  
  4163. 01:42:16.010 --> 01:42:21.200
  4164. had stopped working in data abstraction, programming
  4165. languages, methodology. I’d been just working
  4166.  
  4167. 01:42:21.200 --> 01:42:28.169
  4168. in distributed computing and I wasn’t even
  4169. thinking about that stuff. So I got the award
  4170.  
  4171. 01:42:28.169 --> 01:42:33.929
  4172. and it caused me to go back and think about
  4173. what things were like in the old days.
  4174.  
  4175. 01:42:33.929 --> 01:42:37.300
  4176. The first surprise was that I discovered my
  4177. students didn’t really know there was a
  4178.  
  4179. 01:42:37.300 --> 01:42:43.729
  4180. life before data abstraction. And they actually
  4181. didn’t even know some of these old papers.
  4182.  
  4183. 01:42:43.729 --> 01:42:49.849
  4184. I was pretty surprised by that. So I went
  4185. back and I reread all those old papers. It
  4186.  
  4187. 01:42:49.849 --> 01:42:56.159
  4188. was very interesting to look back. And these
  4189. are extremely good papers too. It’s really
  4190.  
  4191. 01:42:56.159 --> 01:43:01.409
  4192. a part of our history that should not be forgotten.
  4193.  
  4194. 01:43:01.409 --> 01:43:07.010
  4195. As I like to tell people, when I got the award,
  4196. there’s a lot of buzz on the Internet, and
  4197.  
  4198. 01:43:07.010 --> 01:43:12.949
  4199. my husband was online every day looking at
  4200. what the stuff was. And of course not everything
  4201.  
  4202. 01:43:12.949 --> 01:43:18.149
  4203. you see out there is nice. In fact, [laughs]
  4204. many things are not so nice. So there’s
  4205.  
  4206. 01:43:18.149 --> 01:43:21.969
  4207. nice things, there’s not so nice things.
  4208. But anyway, one thing he found out there one
  4209.  
  4210. 01:43:21.969 --> 01:43:28.159
  4211. day was a quote that was roughly “What did
  4212. she get the award for? Everybody knows this
  4213.  
  4214. 01:43:28.159 --> 01:43:35.689
  4215. anyway.” And I just thought that was the
  4216. most amazing compliment, though I don’t
  4217.  
  4218. 01:43:35.689 --> 01:43:42.900
  4219. think it was intended that way. But to realize
  4220. that these early ideas, not just mine but
  4221.  
  4222. 01:43:42.900 --> 01:43:47.930
  4223. of course all the work that had gone on in
  4224. those early years to understand data abstraction
  4225.  
  4226. 01:43:47.930 --> 01:43:51.079
  4227. and specifications and programming language
  4228. and so forth, to understand that they had
  4229.  
  4230. 01:43:51.079 --> 01:43:57.690
  4231. moved so into the mainstream that everybody
  4232. knew them and they were the basis of how you
  4233.  
  4234. 01:43:57.690 --> 01:44:01.349
  4235. wrote programs, I mean that was just a remarkable
  4236. thing to understand.
  4237.  
  4238. 01:44:01.349 --> 01:44:08.289
  4239. Do you want to say a little about Java, which
  4240. certainly shows a lot of toolmarks from your…
  4241.  
  4242. 01:44:08.289 --> 01:44:16.249
  4243. Well, so Java, I was very glad to see Java
  4244. come along because it was the first mainstream
  4245.  
  4246. 01:44:16.249 --> 01:44:22.920
  4247. programming language that really had these
  4248. ideas in it. It really did have data abstraction
  4249.  
  4250. 01:44:22.920 --> 01:44:29.820
  4251. and object-oriented programming. There really
  4252. was a notion that superclasses ought to be
  4253.  
  4254. 01:44:29.820 --> 01:44:35.129
  4255. supertypes, the notion of interfaces define
  4256. a kind of behavior. They enforce the Liskov
  4257.  
  4258. 01:44:35.129 --> 01:44:42.419
  4259. substitution principle in the sense that a
  4260. subtype, a subclass has to provide the methods
  4261.  
  4262. 01:44:42.419 --> 01:44:47.389
  4263. with the right signatures the superclass has.
  4264.  
  4265. 01:44:47.389 --> 01:44:53.519
  4266. I would have done it differently had it been
  4267. me, and Andrew and I, Andrew Myers and I did
  4268.  
  4269. 01:44:53.519 --> 01:44:59.070
  4270. try to convince them to put polymorphism into
  4271. the language. When it first came out, it wasn’t
  4272.  
  4273. 01:44:59.070 --> 01:45:03.249
  4274. there. Of course when you design a language
  4275. like this, you have to decide what’s important
  4276.  
  4277. 01:45:03.249 --> 01:45:08.550
  4278. to concentrate on, what you’re going to
  4279. leave for later. So it’s not that this is
  4280.  
  4281. 01:45:08.550 --> 01:45:16.369
  4282. necessarily the wrong thing. It’s just not
  4283. what I would have done. I think that it sort
  4284.  
  4285. 01:45:16.369 --> 01:45:20.400
  4286. of opened the doors for this to become…
  4287. In a way, the reason it is mainstream is because
  4288.  
  4289. 01:45:20.400 --> 01:45:26.510
  4290. it’s there now in the languages that people
  4291. use on a day-to-day basis.
  4292.  
  4293. 01:45:26.510 --> 01:45:34.599
  4294. And it’s moved into C++ in C++’s kind
  4295. of form. I wish people would enforce encapsulation
  4296.  
  4297. 01:45:34.599 --> 01:45:43.389
  4298. better. I think they do a better job in C#.
  4299. Sometimes you have to violate encapsulation,
  4300.  
  4301. 01:45:43.389 --> 01:45:47.261
  4302. like when you’re building a platform, like
  4303. a debugging platform. But it’s better if
  4304.  
  4305. 01:45:47.261 --> 01:45:52.300
  4306. you could limit that to people who are entitled
  4307. to do it rather than having it be something
  4308.  
  4309. 01:45:52.300 --> 01:45:54.399
  4310. any old programmer can do.
  4311.  
  4312. 01:45:54.399 --> 01:46:00.579
  4313. You know, there was a lot of stuff, sort of
  4314. wisdom in the old days that people maybe lost.
  4315.  
  4316. 01:46:00.579 --> 01:46:07.039
  4317. So one thing we learned was that reading code
  4318. mattered much more than writing code, because
  4319.  
  4320. 01:46:07.039 --> 01:46:14.249
  4321. code is written once but read many times,
  4322. first by the author, then by others. There
  4323.  
  4324. 01:46:14.249 --> 01:46:19.489
  4325. was another one I was going to tell you about.
  4326. Well, it will come to me. Anyway, I feel like
  4327.  
  4328. 01:46:19.489 --> 01:46:26.269
  4329. some of these lessons from the past have been
  4330. forgotten, and maybe it’s just as well because
  4331.  
  4332. 01:46:26.269 --> 01:46:28.869
  4333. it means we’ve made progress.
  4334.  
  4335. 01:46:28.869 --> 01:46:39.239
  4336. Well, another thing that we should talk about
  4337. to get on tape is the people that you’ve
  4338.  
  4339. 01:46:39.239 --> 01:46:45.649
  4340. learned from and that have influenced you.
  4341.  
  4342. 01:46:45.649 --> 01:46:59.169
  4343. Well, I worked with John McCarthy. I would
  4344. not say that John was a very hands-on advisor,
  4345.  
  4346. 01:46:59.169 --> 01:47:08.090
  4347. but I also felt that John was a fair-minded
  4348. person and I certainly never felt any sort
  4349.  
  4350. 01:47:08.090 --> 01:47:14.419
  4351. of negative “You’re a woman, you can’t
  4352. do it” or stuff like that. So he was good
  4353.  
  4354. 01:47:14.419 --> 01:47:20.950
  4355. and he handed me my thesis topic when I couldn’t
  4356. make progress on machine learning, this “Program
  4357.  
  4358. 01:47:20.950 --> 01:47:25.519
  4359. to Play Chess Endgames,” which he thought
  4360. I would be good to work on because I didn’t
  4361.  
  4362. 01:47:25.519 --> 01:47:31.110
  4363. play chess. And he wanted me to approach it
  4364. from the point of view of “I’m just somebody
  4365.  
  4366. 01:47:31.110 --> 01:47:35.070
  4367. learning and I see what the books are saying
  4368. and I think about that from a heuristic point
  4369.  
  4370. 01:47:35.070 --> 01:47:40.710
  4371. of view,” which turned out to be quite effective.
  4372.  
  4373. 01:47:40.710 --> 01:47:47.840
  4374. I think that Niklaus Wirth was also important.
  4375. I knew him as a student. He tried to convince
  4376.  
  4377. 01:47:47.840 --> 01:47:54.199
  4378. me to switch into programming languages and
  4379. compilers, and he was right that it was really
  4380.  
  4381. 01:47:54.199 --> 01:47:59.211
  4382. much more my field. I didn’t do it because
  4383. I felt I would get finished with the PhD faster
  4384.  
  4385. 01:47:59.211 --> 01:48:05.539
  4386. by sticking with AI, which I think was also
  4387. correct.
  4388.  
  4389. 01:48:05.539 --> 01:48:09.729
  4390. Of course I’ve learned a lot from lots of
  4391. people whose papers I’ve read and whom I’ve
  4392.  
  4393. 01:48:09.729 --> 01:48:19.110
  4394. talked to, technically. I mean Jerry Saltzer,
  4395. all those years I was teaching 6.033 which
  4396.  
  4397. 01:48:19.110 --> 01:48:26.239
  4398. was his course, our systems course, and his
  4399. way of thinking about systems. Corby, another
  4400.  
  4401. 01:48:26.239 --> 01:48:31.790
  4402. one. Bob Fano, another one. Bob Fano is a
  4403. wonderful person. He’s the one who hired
  4404.  
  4405. 01:48:31.790 --> 01:48:39.610
  4406. me. He told me that I was an engineer. I hadn’t
  4407. actually realized that, and he was so right.
  4408.  
  4409. 01:48:39.610 --> 01:48:45.190
  4410. [laughs] I think I didn’t know what an engineer
  4411. was. And then Jack Dennis was a big help.
  4412.  
  4413. 01:48:45.190 --> 01:48:50.219
  4414. Jack was the one who got me off of the AI
  4415. floor down onto the systems floor and in general
  4416.  
  4417. 01:48:50.219 --> 01:48:55.979
  4418. was just encouraging and helpful, especially
  4419. in those early years when I was finding my
  4420.  
  4421. 01:48:55.979 --> 01:49:05.379
  4422. way. So I would say those are the people that
  4423. I think back on and I feel were helpful.
  4424.  
  4425. 01:49:05.379 --> 01:49:19.669
  4426. And let’s see. Oh yeah. So how has this
  4427. experience been for your family?
  4428.  
  4429. 01:49:19.669 --> 01:49:28.459
  4430. Well, I do have a family, so I did get married.
  4431. So you can have a career and a family. That
  4432.  
  4433. 01:49:28.459 --> 01:49:38.489
  4434. is a message I always try to convey to young
  4435. women. I have a son. I have a granddaughter.
  4436.  
  4437. 01:49:38.489 --> 01:49:45.760
  4438. I had my son before I was tenured. I felt
  4439. that “I’ll figure out a way to make this
  4440.  
  4441. 01:49:45.760 --> 01:49:50.269
  4442. work.” I think that in fact is a very good
  4443. way to run your life. Rather than to think
  4444.  
  4445. 01:49:50.269 --> 01:49:54.130
  4446. through all the things that might go wrong
  4447. and worry about it in advance, you just figure
  4448.  
  4449. 01:49:54.130 --> 01:50:01.669
  4450. you’ll make it work somehow. I don’t know.
  4451. My son’s a computer scientist. [laughs]
  4452.  
  4453. 01:50:01.669 --> 01:50:06.030
  4454. Though he’s more on the theoretical side
  4455. than I am.
  4456.  
  4457. 01:50:06.030 --> 01:50:07.579
  4458. He’s a professor, right?
  4459.  
  4460. 01:50:07.579 --> 01:50:11.860
  4461. No, he’s not. He was at William and Mary
  4462. for a while but now he works for Mitre and
  4463.  
  4464. 01:50:11.860 --> 01:50:14.399
  4465. he does security research.
  4466.  
  4467. 01:50:14.399 --> 01:50:15.399
  4468. Cool.
  4469.  
  4470. 01:50:15.399 --> 01:50:24.649
  4471. Yeah, great. And my husband has been very
  4472. supportive and helpful. I don’t think I
  4473.  
  4474. 01:50:24.649 --> 01:50:31.610
  4475. could do it without… You need a helpful
  4476. spouse. So I think it’s… I don’t know
  4477.  
  4478. 01:50:31.610 --> 01:50:39.420
  4479. how it’s been for my family, but I do have
  4480. a family and it’s all worked out okay.
  4481.  
  4482. 01:50:39.420 --> 01:50:46.800
  4483. Well, let’s see. You’ve won a lot of other
  4484. awards.
  4485.  
  4486. 01:50:46.800 --> 01:50:52.449
  4487. Yeah. Well, I won the von Neumann Medal from
  4488. the IEEE actually a few years before I got
  4489.  
  4490. 01:50:52.449 --> 01:50:58.090
  4491. the Turing, and I’ve also got some honorary…
  4492. You know, I’ve got… Yeah. I think there’s
  4493.  
  4494. 01:50:58.090 --> 01:51:01.499
  4495. sort of a tendency once you get one award,
  4496. sort of more come along.
  4497.  
  4498. 01:51:01.499 --> 01:51:04.590
  4499. You’ve got a honorary degree from ETH.
  4500.  
  4501. 01:51:04.590 --> 01:51:12.349
  4502. I do. Yes. That was the first honorary degree
  4503. I got. So ETH as you know is one of the top
  4504.  
  4505. 01:51:12.349 --> 01:51:21.949
  4506. schools in Europe and a good science and technology
  4507. school, so yeah.
  4508.  
  4509. 01:51:21.949 --> 01:51:26.619
  4510. And the other thing about the Turing Award
  4511. is you get called on to do a lot of travel.
  4512.  
  4513. 01:51:26.619 --> 01:51:31.820
  4514. So in the couple, two or three years afterwards,
  4515. I traveled and traveled and traveled all over
  4516.  
  4517. 01:51:31.820 --> 01:51:38.099
  4518. the world. And it still happens, though not
  4519. as much as it did. So that’s been a lot
  4520.  
  4521. 01:51:38.099 --> 01:51:42.820
  4522. of fun. And my husband has come along with
  4523. me, so we’ve been able to experience that
  4524.  
  4525. 01:51:42.820 --> 01:51:43.820
  4526. together.
  4527.  
  4528. 01:51:43.820 --> 01:51:49.530
  4529. So where are notable places that you went?
  4530.  
  4531. 01:51:49.530 --> 01:51:58.219
  4532. China. India. I was thinking… So we’ve
  4533. been to the Far East several times. Of course
  4534.  
  4535. 01:51:58.219 --> 01:52:02.590
  4536. we’ve been to Europe in many places. The
  4537. only place I haven’t been that I would really
  4538.  
  4539. 01:52:02.590 --> 01:52:10.539
  4540. like to go is Africa. But yeah, it just seemed
  4541. like there was a time there when there was
  4542.  
  4543. 01:52:10.539 --> 01:52:15.639
  4544. so much travel. I think that is partly, when
  4545. you get the Turing Award, you expect that
  4546.  
  4547. 01:52:15.639 --> 01:52:21.300
  4548. this is going to happen and really you need
  4549. to do that travel. It’s sort of part of
  4550.  
  4551. 01:52:21.300 --> 01:52:25.119
  4552. what’s involved. Yeah.
  4553.  
  4554. 01:52:25.119 --> 01:52:31.239
  4555. Well, are there other things that we didn’t
  4556. cover that we should have?
  4557.  
  4558. 01:52:31.239 --> 01:52:36.289
  4559. [laughs] It seems to me we’ve done a pretty
  4560. good job of covering things.
  4561.  
  4562. 01:52:36.289 --> 01:52:39.989
  4563. Well, then let’s… Thank you. Thank you
  4564. so much for your time.
  4565.  
  4566. 01:52:39.989 --> 01:52:43.089
  4567. And thank you for your time. It’s been fun.
  4568. Thanks.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement