CINDY A. COHN, ESQ.; SBN 145997 McGLASHAN & SARRAIL Professional Corporation 177 Bovet Road, Sixth Floor San Mateo, CA 94402 Tel: (415) 341-2585 Fax: (415) 341-1395 LEE TIEN, ESQ.; SBN 148216 1452 Curtis Street Berkeley, CA 94702 Tel: (510) 525-0817 Attorneys for Plaintiff Daniel J. Bernstein IN THE UNITED STATES DISTRICT COURT FOR THE NORTHERN DISTRICT OF CALIFORNIA DANIEL J. BERNSTEIN ) ) C 95-00582 MHP Plaintiff, ) ) DECLARATION OF v. ) HAROLD ABELSON ) ) UNITED STATES DEPARTMENT OF ) STATE et al., ) ) Defendants. ) ) ) I, HAROLD ABELSON, hereby declare: 1. I am Professor of Computer Science and Engineering at the Massachusetts Institute of Technology in Cambridge, Massachusetts. I give this declaration in my personal capacity and not on behalf of MIT. 2. I have been active in computer science at MIT since 1969, when I began as a graduate student. I joined the MIT Department of Electrical Engineering and Computer Science as a faculty member in 1977. 3. Since 1981, I have been charge of MIT's introductory computer science subject, "Structure and Interpretation of Computer Programs" (together with my colleague, Prof. Gerald Jay Sussman). This subject is taught at MIT each year to between 500 and 700 undergraduates. 4. Together with Gerald Jay Sussman and Julie Sussman, I am author of the textbook "Structure and Interpretation of Computer Programs," which is based on our MIT course. The first edition of this book was published by the MIT Press and the McGraw-Hill Book Company in 1985; the second edition will appear later this year. 5. Through the MIT course and the textbook, my work in computer science education has gained major visibility. Materials arising from our course are currently used at over 200 colleges and universities worldwide. 6. In recognition of my educational activities, I was named winner of 1995 Taylor L. Booth Award, given by the Institute of Electronic and Electrical Engineers (IEEE) Computer Society for outstanding contributions to computer science and engineering education. I was cited for continued contributions to the pedagogy and teaching of introductory computer science. 7. I comment from the perspective of someone who has been active in the teaching of university computer science. COMPUTER PROGRAMS ARE A MEDIUM OF EXPRESSION 8. The notion that computer programs are a medium of expression is widespread throughout computer science education. In particular, this notion is central to the approach to computer science used at MIT over the past fifteen years. The idea appears prominently in the preface to our textbook: Our design of this introductory computer-science subject reflects two major concerns. First, we want to establish the idea that a computer language is not just a way of getting a computer to perform operations but rather that it is a novel formal medium for expressing ideas about methodology. Thus, programs must be written for people to read, and only incidentally for machines to execute.... COMPUTER PROGRAMS EXPRESS IDEAS ABOUT METHODOLOGY 9. Just as ordinary mathematics and logic serve as a languages for expressing ideas about truth and falsehood (so-called "declarative knowledge"), computer programs serve as languages for expressing ideas about how to do things (so-called "imperative knowledge"). The following excerpt from a paper I wrote in 1990 expands on this point (from "Computation as a Framework for Engineering Education", in Research Directions in Computer Science: An MIT Perspective, Cambridge, MA: MIT Press, 1991): 10. "To illustrate the difference between declarative and imperative knowledge, consider the following definition of a square root: The square root of a number X is the number Y such that Y times Y equals X. This is declarative knowledge. It tells us something that is true about square roots. But it doesn't tell us how to find a square root. 11. "In contrast, consider the following ancient algorithm, attributed to Heron of Alexandria, for approximating square roots. To approximate the square root of a positive number X - Make a guess for the square root of X. - Compute an improved guess as the average of the guess and X divided by the guess. - Keep improving the guess until it is good enough. 12. "Heron's method doesn't say anything about what square roots are, but it does say how to approximate them. It is a piece of imperative "how to" knowledge. 13. "Computer Science is in the business of formalizing imperative knowledge -- developing formal notations and ways to reason and talk about methodology. Here is Heron's method formalized as a procedure in the notation of the Lisp computer language: (define (sqrt x) (define (good-enough? guess) (<(abs (- (square guess) x)) tolerance)) (define (improve guess) (average guess (/ x guess))) (define (try guess) (if (good-enough? guess) guess (try (improve guess)))) (try 1)) 14. "Certainly, if the only things we ever computed were square roots, then Computer Science would not be of much interest. Similarly, if all one ever did in geometry was surveying, then geometry would not be of much interest. In each case, the importance of having a formalism is that it provides a framework for controlling complexity, a way to think about ideas that are too involved to think about all at once. The important techniques in Computer Science are the techniques for coping with methodological complexity." EXPRESSIVE STYLE IS AN IMPORTANT ASPECT OF COMPUTER PROGRAMS 15. One indication that computer programs have major expressive elements is that teachers of programming regularly evaluate student programs on stylistic issues such as readability (by people) and appropriateness of choice of elements. This is analogous to the way that teachers of writing evaluate student essays on the style and quality of writing, not just on the meanings of the words. 16. The criteria used in evaluating "programming style" are often unrelated to the sequence of operations that would be carried out by a computer in executing the program. Two programs might evoke exactly the same process when executed by a computer, and yet be judged very differently, because they express the process in different ways. 17. As an example, the following excerpt from our textbook (2nd edition) discusses a technique called "mapping over a list": MAP is an important construct, not only because it captures a common pattern, but because it establishes a higher level of abstraction in dealing with lists. In the original definition of SCALE-LIST, the recursive structure of the program draws attention to the element-by-element processing of the list. Defining SCALE-LIST in terms of MAP suppresses that level of detail and emphasizes that scaling transforms a list of elements to a list of results. The difference between the two definitions is not that the computer is performing a different process (it isn't) but that we think about the process differently. I declare under penalty of perjury that the foregoing is true and correct. Dated:________________ _______________________________ HAROLD ABELSON