字幕列表 影片播放 列印英文字幕 >> Sean: We have had a few questions in from our Computerphile viewers - our loyal viewers. There are some obvious joke ones, which we may get to at the end, but starting with: "How did you start programming? Where did you start?" >> BWK: It goes back a very long way. I think this would go back into the early 1960s, or something like that, and therefore memory is both dim and rosy. I think my first programming was probably [in] Fortran. I tried it when I was in, probably, my third year at university, so it was a long, long time ago, and I don't remember very much about it. One thing I do remember is: you read the book, you read the manual. This is McCracken's Fortran books, which are really, really good. And you read them and you think you understand it completely. And then you set finger to whatever, in this case key punch, and you say: "Wait a minute - what do I do? I don't know how to get started!" And I think that conceptual hump of 'how you get started' is still there for an awful lot of people. You sort of know the rules of the language but you don't know how to say anything. Once you're over that then it's easy and that's sort of true then for all subsequent languages. But that first step was hard. So I think my first language was Fortran; it was probably at university; and I also spent a summer working at what was, at the time, Imperial Oil, which is a branch of Esso, and so on, in Toronto, and I wrote COBOL there. I was probably the world's worst COBOL programmer. Indescribably bad. And I haven't actually written any COBOL since but those were the kind of early days. I think I didn't really learn to program properly until I went to Princeton as a graduate student and then I actually wrote Fortran programs that did something, and that was more useful. >> Sean: That was how you started programming. This kind of leads on nicely from that. What did you think of C when you first encountered it? >> BWK: Again it's one of those things where I don't remember and it was also special in that I kind of snuck up on it because I was in the environment where it was going on, I had written a little ... I had spent one summer at MIT when I was a graduate student. I was there as, in effect, a summer intern. And at that point I had written in a language called MAD, the Michigan Algorithm Decoder, which a lot of the CTSS system had been written in. It was really nice because it was so much cleaner and neater than Fortran. And then at the Labs I wrote a little bit of B, which was a precursor to C. B was kind of like a stripped-down version of BCPL, which was done by Martin Richards at Cambridge. And I never, I think I never wrote any BCPL, but I wrote a little bit of B and it was kind of neat and I liked it. And then when C came along, it was at that point a relatively easy transition into using it, and I pretty much have repressed all of the details but I wrote programs early on that were doing text processing, and although C's not the greatest language in the world for text processing, at the time it was a lot better than any of the alternatives that were available to me and I think period. And so I would I found it quite comfortable and actually enjoyed it at that point and stayed that way for many many years. >> Sean: Let's move on to the hardest challenge. So what has been the hardest challenge for you in your life as a computer scientist, which helps narrow it down somewhat. >> BWK: Yeah. Geez. I, I mean what are the problems in computing are: "How do you write programs that work" and then "How do you make it possible for other people to write programs that work?". And it's sort of those are the kinds of things I've been interested in all along. So I want to write my own programs and know that they work in some reasonable way. And that leads to, you know, building better languages, building better tools for helping programmers, and so on. So that's one aspect of it. And the other is how do you help other people write their programs too, because programming is hard to do, programs are hard to use sometimes, and so that leads to, let's call it the documentation side of life: writing books about programming. So that's roughly what I would say. Those are hard problems, they're not solved yet. I think most people have the same kinds of problems in various ways. And programming is different today than it was say 40-ish years ago, in the early days of UNIX. In the early days of UNIX you had a very self-contained environment. Things were relatively small because you didn't have much computing power to deal with. You didn't have any networking issues so you didn't have to worry about things far away not working or attacking you or anything like that. So life was simpler and in some ways it was more fun because you could build really interesting things -- not huge but interesting useful things fairly quickly, fairly small. Today a lot more programming is enormous collections of libraries that you have to .... basically what you're doing is gluing together things that other people wrote, and then you're going to Stack Overflow to see why they don't work. And then you're adding somebody else's random glue into your own glue. And it's in some ways not nearly as much fun, I think. >> Sean: Leading on from a question before about programming languages and how it was when you encountered C, which programming language is the best successor of C or the most influential? >> BWK: Those are different questions or they have different answers. "Best" is a loaded word so I'll probably ignore it but there's some obvious things that derive from C. First, C++, which has been enormously influential. It was done by Bjarne Stroustrup while he was at Bell Labs. Lots of people say that C++ is too big and too complicated, and etc., etc., but in fact it is a very powerful language and pretty much everything that's in there is in there for a really sound reason. It's not somebody doing random invention; it's actually people trying to solve real-world problems. And a lot of the programs that we take for granted today, that we just use, are C++ programs. If you use anything from Microsoft's Office suite, for example, those are C++ programs. You pick your favorite browsers, those are C++ programs. So C++ is in some ways, I would argue, one of the most important and influential derivatives and it's the first of the derivatives. Another is Java, which in some ways is a reaction to C++. Because C++ is big complicated, etc., and so Java was an attempt to simplify what was in C++, to make more of the decisions for the programmers, so that the programmer didn't have to make them himself or herself. It also took advantage of kind of ten years of hindsight, because Java came along the early 90s; C++ is the early 80s, so there's a decade of improvement both in our understanding of what we're doing, but also a decade of Moore's law, giving us, you know, an order of magnitude or so of resources to work. And therefore Java could use a virtual machine, which C++ was never able to do. So there's another example of a derivative of C which, very important, very influential, an awful lot of the services that you use at all of these big websites, are written in Java as opposed to C++. What is another one? I guess the obvious next one would be JavaScript, which takes the surface syntax of C, as many other languages do, but takes the surface syntax, makes some decisions differently -- still an interpreter for the most part -- but shares that C heritage in a lot of ways and then goes off on its own direction. And Javascript is, in terms of just lines of code being executed per day, probably dominates all the others. And then a tiny bit of self-serving, the AWK language that Al Aho and Peter Weinberger and I did, takes the surface syntax of C and then wraps it up in a different style. It's an interpreter but it looks like C with some variations to make it possible to do other interesting things. So at least those. Oh! and then [a] more modern one: 'Go', for example, a language that dates at this point from, I think, 2007, so it probably hit the streets in 2009. So, call it a decade old. And so Go in many ways looks like a modern C; some people call it 'C for the 21st century', and it has its own nice properties and so on. And one of the things that it retains that some of the other languages don't is more the minimalism that C had originally. So big spectrum of languages that came from C, inspired positively, negative reactions, whatever, but all from that single source.
A2 初級 Brian Kernighan 問答 - Computerphile (Brian Kernighan Q&A - Computerphile) 3 0 林宜悉 發佈於 2021 年 01 月 14 日 更多分享 分享 收藏 回報 影片單字