TITLE: Day 2 at SIGCSE: Another Keynote on Past and Present AUTHOR: Eugene Wallingford DATE: February 25, 2005 3:43 PM DESC: Can we ever regain the halcyon simplicity of Pascal? Or has computer science, and thus its teaching, changed? ----- BODY: This morning's keynote was given by last year's recipient of SIGCSE's award for outstanding contributions to CS education, Mordechai (Moti) Ben-Ari. Dr. Ben-Ari was scheduled to speak last year but illness prevented him from going to Norfolk. His talk was titled "The Concorde Doesn't Fly Anymore" and touched on a theme related to yesterday's talk, though I'm not certain he realized so. Dr. Ben-Ari gave us a little history lesson, taking us back to the time of the US moon landing. He asserted that this was the most impressive achievement in the history of technology and reminded us that the project depended on some impressive computing -- a program that was delivered six months in advance of the mission, which used only 2K of writable memory. Then he asked the audience to date some important "firsts" in computing history, such as the year the first e-mail was sent. I guessed 1973, but he gave 1971 as the right answer. (Not too bad a guess, if I do say so myself.) In the end, all of the firsts dated to the period 1970-1975 -- just after that moon landing. So much innovation in a such a short time span. Ben-Ari wondered, how much truly new have we done since then? In true SIGCSE fashion, he made good fun of Java, a language cobbled out of ideas discovered and explored in the '60s and '70s, among them Simula, Smalltalk, Pascal, and even C (whose contribution was "cryptic syntax"). The theme of the talk was "We in computing are not doing revolutionary stuff anymore, but that's okay." Engineering disciplines move beyond glitz as they mature. Valuable and essential engineering disciplines no longer break much new ground, but they have steady, sturdy curricula. He seemed to say that we in computing should accept that we have entered this stage of development and turn CS into a mature educational discipline. His chief example was mechanical engineering. He contrasted the volume of mathematics, science, and settled engineering theory and concepts required by the ME program at his university with the same requirements in the typical CS program. Seven math courses instead of four; five science courses instead of two; a dozen courses in engineering foundations instead of three or four in computing. Yet we in CS feel a need to appear "relevant", teaching new material and new concepts and new languages and new APIs. No one, he said, complains that mechanical engineering students learn about pulleys and inclined planes -- 300-year-old technology! -- in their early courses, but try to teach 30-year-old Pascal in a CS program and prepare for cries of outrage from students, parents, and industry. In this observation, he's right, of course. We taught Ada in our first-year courses for a few years in the late 1990s and faced a constant barrage of questions from parents and students as to why, and what good would it be to them and their offspring. But in the larger scheme of things, though, is he right? It seems that Dr. Ben-Ari harkens back to the good old days when we could teach simple little Pascal in our first course. He's not alone in this nostalgia here at SIGCSE... Pascal has a hold on the heartstrings of many CS educators. It was a landmark the history of CS education, when a single language captured the zeitgeist and technology of computing all at once, in a simple package that appealed to instructors looking for something better and to students who could wrap their heads around the ideas inside of Pascal and the constructs that made up Pascal in their early courses. A large part of Pascal's success as a teaching language lay in how well it supplanted languages such as Fortran (too limited) and PL/I (too big and complex) in the academic niche. I think PL/I is a good language to remember in this context. To me, Java is the PL/I of the late 1990s and early 2000s: a language that aspires to do much, a language well-suited to a large class of programs that need to be written in industry today, and a language that is probably too big and complex to serve all our needs as the first language our students see in computer science. But that was just the point of Kim Bruce's talk yesterday. It is our job to build the right layer of abstraction at which to teach introductory CS, and Java makes a reasonable base for doing this. At OOPSLA last year, Alan Kay encouraged us to aspire to more, but I think that he was as disturbed by the nature of CS instruction as with Java itself. If we could build an eToys-like system on top of Java, then Alan would likely be quite happy. (He would probably still drop in a barb by asking, "But why would you want to do that when so many better choices exist?" :-) In the Java world, many projects -- BlueJ, Bruce's ObjectDraw, JPT, Karel J. Robot, and many others -- are aimed in this direction. They may or may not succeed, but each offers an approach to focusing on the essential ideas while hiding the details of the industrial-strength language underneath. And Ben-Ari might be happy that Karel J. Robot's pedagogical lineage traces back to 1981 and the Era of Pascal! As I was writing the last few paragraphs, Robert Duvall sat down and reminded me that we live in a different world than the one Pascal entered. Many of our incoming students arrive on campus with deep experience playing with and hacking Linux. Many arrive with experience building web sites and writing configuration scripts. Some even come in with experience contributing to open-source software projects. What sort of major should we offer such students? They may not know all that they need to know about computer science to jump to upper-division courses, but surely "Hello, World" in Pascal or C or Java is not what they need -- or want. And as much as we wax poetic about university and ideas, the world is more complicated than that. What students want matters, at least as it determines the desire they have to learn what we have to teach them. Ben-Ari addressed this point in a fashion, asserting that we spend a lot of time trying to making CS easy, but that we should be trying to make it harder for some students, so they will be prepared to be good scientists and engineers. Perhaps so, but if we construct our programs in this way we may find that we aren't the ones educating tomorrow's software developers. The computing world really is a complex mixture of ideas and external forces these days. I do quibble with one claim made in the talk, in the realm of history. Ben-Ari said, or at least implied, that the computing sciences and the Internet were less of a disruption to the world than the introduction of the telegraph. While I do believe that there is great value in remembering that we are not a one-of-a-kind occurrence in the history of technology -- as the breathless hype of the Internet boom screamed -- I think that we lack proper perspective for judging the impact of computing just yet. Certainly the telegraph changed the time scale of communication by orders of magnitude, a change that the Internet only accelerates. But computing affects so many elements of human life. And, as Alan Kay is fond of pointing out, its potential is far greater as a communication medium than we can even appreciate at this point in our history. That's why Kay reminds us of an even earlier technological revolution: the printing press. That is the level of change to which we in computing should aspire, fundamentally redefining how we talk about and do almost everything we do. Ben-Ari's thesis resembles Kay's in its call for simplicity, but it differs in many other ways. Are we yet a mature a discipline? Depending on how we answer this question, the future of computer science -- and computer science education -- should take radically different paths. -----