Feeds:
Posts
Comments

Archive for the ‘Quotes’ Category


Should a programming language be small or large? A small programming language might take but a short time to learn. A large programming language may take a long, long time to learn, but then it is less hard to use, for we then have a lot of words at hand—or, I should say, at the tips of our tongues—to use at the drop of a hat. If we start with a small language, then in most cases we can not say much at the start. We must first define more words; then we can speak of the main thing that is on our mind.


… if you want to get far at all with a small language, you must first add to the small language to make a language that is more large.


… if I want to help other persons to write all sorts of programs, should I design a small programming language or a large one? I stand on this claim: I should not design a small language, and I should not design a large one. I need to design a language that can grow. I need to plan ways in which it might grow—but I need, too, to leave some choices so that other persons can make those choices at a later time.


… a main goal in designing a language should be to plan for growth. The language must start small, and the language must grow as the set of users grows.


… the key point is that in the bazaar style of building a program or designing a language or what you will, the plan can change in real time to meet the needs of those who work on it and use it.


Does this mean, then, that it is of no use to design? Not at all. But in stead of designing a thing, you need to design a way of doing. And this way of doing must make some choices now but leave other choices to a later time.


My point is that a good programmer in these times does not just write programs. A good programmer builds a working vocabulary. In other words, a good programmer does language design, though not from scratch, but by building on the frame of a base language.


… the sole way to win is to plan for growth with help from users.

Guy Lewis Steele Jr.

“Growing a Language”

Talk given at the 1998 ACM OOPSLA Conference

Video

Transcript

Read Full Post »


The Constitution on the United States is one of my favorite systems design. Think of it: millions and millions of mutually incompatible parts, running without completely breaking for more than 200 years. It’s pretty amazing, you can hold it in your hand. The reason you can hold it in your hand is they were wise enough to not put any laws in it. It’s not a law-based thing, it’s not a case-based thing, it’s a principle-based thing. It’s a kernel.

Alan Curtis Kay

“First Courses in Computing Should be Child’s Play”

Turing Award lecture, OOPSLA 2004

Video

Transcript

Read Full Post »


… the plain fact is that few languages make programming sufficiently cheaper or more reliable to justify the cost of producing and learning to use them.


… there is a desperate need for a powerful methodology to help us think about programs, and no conventional language even begins to meet that need. In fact, conventional languages create unnecessary confusion in the way we think about programs.


For twenty years programming languages have been steadily progressing toward their present condition of obesity …


Discussions about programming languages often resemble medieval debates about the number of angels that can dance on the head of a pin instead of exciting contests between fundamentally differing concepts.


… basic defects in the framework of conventional languages make their expressive weakness and their cancerous growth inevitable, …

John Warner Backus

“Can Programming Be Liberated from the von Neumann Style?”

1977 Turing Award Lecture

Read Full Post »


So, little progress was being made, but I think that whenever we say “computer science” or “software engineering,” and especially whenever we think we’re teaching it, the worst thing we could ever do is to pretend to the students that we know what it is, because the students are going to be the ones that are going to save us. So we should teach the students what I was taught when I was in graduate school in the ’60s, and that is: it isn’t done yet. It’s not even close to done. We have to understand what the actual scope of the computing is going to be, and you have to help us invent it


… people in general take great delight in complexity. It seems like… if you go to schools, it’s remarkable how much work they make the poor kids do, when if they taught the math better and differently, the kids would be doing much less work. But in fact, people delight in complexity and think that putting immense amounts of hard work in, even if there’s an easier way, is actually — there’s something morally good about it. And so I think for our field, one of the hardest things is the delight in complexity, … . I believe that most of this complexity is absolutely unnecessary, and I believe it can be proved that it’s unnecessary.


… the other thing I’ve noticed in talking with younger people and teaching a course, … and that is that it’s not so much that the juniors and seniors don’t know that much. They actually don’t know that much, for being close to graduating from college, but the thing that is distressing about them is that the things that they do know, they know very badly, because they know them in ways that are almost counterproductive for their thinking. So I think in a first course, you have a real chance to not just teach the one subject, but … you can actually touch on a lot of subjects. … I think math and science should always be taught together in the beginning. They came about that way. One is a language, one is a process. I think systems and computing should be taught together. I think the four of them should be taught together.


I think the same thing is true of computing. … right now, it’s thought of as, even by Stanford — with its mighty endowment — as basically vocational training for a job. It’s primarily thought of as teaching kids programming. It’s absolutely important to learn how to program, but computer science and software engineering are not the same as programming, any more than building Chartres cathedral is the same as bricklaying. You have to understand one to do the other, but they’re very different.


What we don’t want to imprint them on, for God’s sakes, is data structures and algorithms. That was a great idea in the ’50s, and we have to understand it and it’s still useful today for optimization and other sorts kinds of things, but it’s not the center of the field. It hasn’t been the center of the field for a long time, and what’s worse about it, it doesn’t scale. There’s very little systems aspect in the way the data structures and algorithms are taught. So I believe what we have to do is give the students a real taste of what the whole deal is, so they have to start thinking in systems ways, and thinking in mathematical ways, scientific ways, as we go along.

Alan Curtis Kay

“First Courses in Computing Should be Child’s Play”

Turing Award lecture, OOPSLA 2004

Video

Transcript

Read Full Post »


“… it is interesting … to look at what is actually being done in the world under the name of OOP [Object-Oriented Programming]. I’ve been shown some very strange-looking pieces of code over the years by various people, including people in universities, that they have said is OOP code, and written in an OOP language – and actually I made up the term object-oriented, and I can tell you I did not have C++ in mind.”


“… part of the message of OOP was, that, as complexity starts becoming more and more important, architecture is always going to dominate material …”


“If you take things like dog houses, they don’t scale by a factor of a hundred very well. If you take things like clocks, they don’t scale by a factor of a hundred very well. Take things like cells, they not only scale by a factor of a hundred, but by factors of a trillion, and the question is how do they do it, and how might we adopt this idea for building complex systems. … this is the simple one. This is the one by the way, that C++ has still not figured out … . There is no idea so simple and powerful that you can’t get zillions of people to misunderstand it.”


“I think our confusion with objects is the problem that in our Western culture, we have a language that has very hard nouns and verbs in it. Our process words stink. It’s much easier for us when we think of an object—and I have apologized profusely over the last twenty years for making up the term object-oriented, because as soon as it started to be misapplied, I realized that I should have used a much more process-oriented term for it.”


“… once you have encapsulated, in such a way that there is an interface between the inside and the outside, it is possible to make an object act like anything.”


“… I do not know of anybody yet, who has realized that, at the very least, every object should have a URL, because, what the heck are they if they aren’t these things, and I believe that every object on the Internet should have an IP [address], because that represents, much better, what the actual abstractions are … . So this is an early insight that objects basically are like servers. This notion of polymorphism, which used to be called generic procedures is a way of thinking about classes of these servers.”


“… how many people here still use a language that essentially forces you—and the development system forces you to develop outside of the language; compile and reload, and go, even if it’s fast, … . That cannot possibly be other than a dead end for building complex systems, where much of the building of complex systems is in part going to go into trying to understand what the possibilities for interoperability is with things that already exist.”


“… and if you think of what an object actually is, and if you think of what an object oriented pointer actually is, I think it should be pretty clear that any object-oriented language can internalize its own local pointers to any object in the world, regardless of where it was made. That’s the whole point of not being able to see inside. A semantic interoperability is possible almost immediately by simply taking that stance. This is gonna change, really everything. Things like JavaBeans and CORBA are not gonna suffice, because at some point one is gonna have to start really discovering what objects think they can do. This is going to lead to a universal interface language, which is not a programming language per se. It’s more like a prototyping language that allows an interchange of deep information about what objects think they can do. It allows objects to make experiments with other objects in a safe way to see how they respond to various messages. This is going to be a critical thing to automate in the next ten years.”

Alan Curtis Kay

“The Computer Revolution Hasn’t Happen Yet”, OOPSLA 1997

Video

Transcript

Read Full Post »

Older Posts »