Weinberg’s Second Law If carpenters made buildings the way programmers make programs, the first woodpecker to come along would destroy all of civilization. Unknown Author Computing science is no more about computers than astronomy is about telescopes. Edsger W. Dijkstra Wikipedia: Edsger W. Dijkstra I don’t need to waste my time with a computer just because I am a computer scientist. Edsger W. Dijkstra Wikipedia: Edsger W. Dijkstra It is practically impossible to teach good programming style to students that have had prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration. Edsger W. Dijkstra Wikipedia: Edsger W. Dijkstra The use of COBOL cripples the mind; its teaching should, therefore, be regarded as a criminal offense. Edsger W. Dijkstra Wikipedia: Edsger W. Dijkstra The purpose of computing is insight, not numbers. Richard Hamming Wikipedia: Richard Hamming An algorithm must be seen to be believed. Donald Knuth Wikipedia: Donald Knuth In fact what I would like to see is thousands of computer scientists let loose to do whatever they want. That’s what really advances the field. Donald Knuth Wikipedia: Donald Knuth People think that computer science is the art of geniuses but the actual reality is the opposite, just many people doing things that build on each other, like a wall of mini stones. Donald Knuth Wikipedia: Donald Knuth The hardest thing is to go to sleep at night, when there are so many urgent things needing to be done. A huge gap exists between what we know is possible with today’s machines and what we have so far been able to finish. Donald Knuth Wikipedia: Donald Knuth Epigram 2: Functions delay binding; data structures induce binding. Moral: Structure data late in the programming process. \nAlan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 3: Syntactic sugar causes cancer of the semicolon. \nAlan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 5: If a program manipulates a large amount of data, it does so in a small number of ways. \nAlan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 9: It is better to have 100 functions operate on one data structure than 10 functions on 10 data structures. \nAlan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 11: If you have a procedure with ten parameters, you probably missed some. \nAlan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 13: If two people write exactly the same program, each should be put into microcode and then they certainly won’t be the same. \nAlan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 14: In the long run every program becomes rococo — then rubble. \nAlan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 17: If a listener nods his head when you’re explaining your program, wake him up. \nAlan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 18: A program without a loop and a structured variable isn’t worth writing.\n Alan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 22: A good system can’t have a weak command language. \nAlan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 33: The eleventh commandment was “Thou Shalt Compute” or “Thou Shalt Not Compute” — I forget which. \nAlan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 57: It is easier to change the specification to fit the program than vice versa. \nAlan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 69: In a 5 year period we get one superb programming language. Only we can’t control when the 5 year period will be. \nAlan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 73: It is not a language’s weakness but its strengths that control the gradient of its change: Alas, a language never escapes its embryonic sac. \nAlan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 76: It is the user who should parameterize procedures, not their creators. \nAlan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 90: Computation has made the tree flower. \nAlan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 97: When a professor insists computer science is X but not Y, have compassion for his graduate students. \nAlan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 100: We will never run out of things to program as long as there is a single program around. \nAlan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 107: The debate rages on: is PL/I Bachtrian or Dromedary? \nAlan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 110: Editing is a rewording activity. \nAlan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 112: Computer Science is embarrassed by the computer. \nAlan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 We can only see a short distance ahead, but we can see plenty there that needs to be done. \nAlan Turing Wikipedia: Alan Turing — Mind, “Computing Machinery and Intelligence”, 1950 The cheapest, fastest, and most reliable components of a computer system are those that aren’t there. \nGorden Bell Wikipedia: Gorden Bell Einstein argued that there must be simplified explanations of nature, because God is not capricious or arbitrary. \nNo such faith comforts the software engineer. \nFred Brooks Wikipedia: Fred Brooks — No Silver Bullet, 1987 Representation is the essence of programming. \nFred Brooks Wikipedia: Fred Brooks — The Mythical Man-Month, p. 103, Addison Wesley Longman, 1995 Elegance is not a dispensable luxury but a quality that decides between success and failure. \nEdsger W. Dijkstra Wikipedia: Edsger W. Dijkstra For me, the first challenge for computing science is to discover how to maintain order in a finite, but very large, discrete universe that is intricately intertwined. \nAnd a second, but not less important challenge is how to mould what you have achieved in solving the first problem, into a teachable discipline: it does not suffice to hone your own intellect (that will join you in your grave), you must teach others how to hone theirs. \nThe more you concentrate on these two challenges, the clearer you will see that they are only two sides of the same coin: teaching yourself is discovering what is teachable.\n Edsger W. Dijkstra Wikipedia: Edsger W. Dijkstra — My Hopes of Computing Science, 1979, EWD709 If, ten years from now, when you are doing something quick and dirty, you suddenly visualize that I am looking over your shoulders and say to yourself, “Dijkstra would not have liked this,” that would be enough immortality for me. \\nEdsger W. Dijkstra Wikipedia: Edsger W. Dijkstra Lisp has jokingly been called “the most intelligent way to misuse a computer”. I think that description is a great compliment because it transmits the full flavor of liberation: it has assisted a number of our most gifted fellow humans in thinking previously impossible thoughts. \nEdsger W. Dijkstra Wikipedia: Edsger W. Dijkstra — Communications of the ACM, 15:10 Progress is possible only if we train ourselves to think about programs without thinking of them as pieces of executable code. \nEdsger W. Dijkstra Wikipedia: Edsger W. Dijkstra Simplicity is prerequisite for reliability. \nEdsger W. Dijkstra Wikipedia: Edsger W. Dijkstra — Selected Writings on Computing:A Personal Perspective, “How Do We Tell Truths That Might Hurt?”, 1975, EWD498 The competent programmer is fully aware of the strictly limited size of his own skull; therefore he approaches the programming task in full humility, and among other things he avoids clever tricks like the plague. \nEdsger W. Dijkstra Wikipedia: Edsger W. Dijkstra The lurking suspicion that something could be simplified is the world’s richest source of rewarding challenges. \nEdsger W. Dijkstra Wikipedia: Edsger W. Dijkstra The required techniques of effective reasoning are pretty formal, but as long as programming is done by people that don’t master them, the software crisis will remain with us and will be considered an incurable disease. \nAnd you know what incurable diseases do: they invite the quacks and charlatans in, who in this case take the form of Software Engineering gurus. \nEdsger W. Dijkstra Wikipedia: Edsger W. Dijkstra — Answers to questions from students of Software Engineering, Nov. 28, 2000, EWD1305 We are all shaped by the tools we use, in particular: the formalisms we use shape our thinking habits, for better or for worse, and that means that we have to be very careful in the choice of what we learn and teach, for unlearning is not really possible. \nEdsger W. Dijkstra Wikipedia: Edsger W. Dijkstra — Answers to questions from students of Software Engineering, Nov. 28, 2000, EWD1305 When we had no computers, we had no programming problem either. \nWhen we had a few computers, we had a mild programming problem. Confronted with machines a million times as powerful, we are faced with a gigantic programming problem.\n Edsger W. Dijkstra Wikipedia: Edsger W. Dijkstra — Visuals for BP’s Venture Research Conference, June 5, 1986, EWD963 Write a paper promising salvation, make it a ‘structured’ something or a ‘virtual’ something, or ‘abstract’, ‘distributed’ or ‘higher-order’ or ‘applicative’ and you can almost be certain of having started a new cult. \nEdsger W. Dijkstra Wikipedia: Edsger W. Dijkstra — My Hopes of Computing Science, 1979, EWD709 There is no programming language, no matter how structured, that will prevent programmers from writing bad programs. Lawrence Flon Wikipedia: Lawrence Flon If you don’t work on important problems, it’s not likely that you’ll do important work. Richard Hamming Wikipedia: Richard Hamming It is better to do the right problem the wrong way than the wrong problem the right way. Richard Hamming Wikipedia: Richard Hamming Premature optimization is the root of all evil in programming. C. A. R. Hoare Wikipedia: C. A. R. Hoare Some problems are better evaded than solved. C. A. R. Hoare Wikipedia: C. A. R. Hoare Software is not limited by physics, like buildings are. It is limited by imagination, by design, by organization. In short, it is limited by properties of people, not by properties of the world. Ralph Johnson Wikipedia: Ralph Johnson Simple things should be simple; complex things should be possible. Alan Kay Wikipedia: Alan Kay Knecht’s Law: software development is harder than you expect, even when you take into account Knecht’s Law. Joseph Knecht Wikipedia: Joseph Knecht [A corollary of Hofstadter’s law] A list is only as strong as its weakest link. Donald Knuth Wikipedia: Donald Knuth Always remember, however, that there’s usually a simpler and better way to do something than the first way that pops into your head. Donald Knuth Wikipedia: Donald Knuth — The TeXbook, 1984 I decry the current tendency to seek patents on algorithms. There are better ways to earn a living than to prevent other people from making use of one’s contributions to computer science. Donald Knuth Wikipedia: Donald Knuth Let us change our traditional attitude to the construction of programs. Instead of imagining that our main task is to instruct a computer what to do, let us concentrate rather on explaining to human beings what we want a computer to do. Donald Knuth Wikipedia: Donald Knuth The most important thing in the programming language is the name. A language will not succeed without a good name. I have recently invented a very good name and now I am looking for a suitable language. Donald Knuth Wikipedia: Donald Knuth We should forget about small efficiences, say, about 97% of the time. Premature optimization is the root of all evil. Donald Knuth Wikipedia: Donald Knuth C++ is history repeated as tragedy. Java is history repeated as farce. Scott McKay Wikipedia: Scott McKay Epigram 1: One man’s constant is another man’s variable. \nAlan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 7: It is easier to write an incorrect program than understand a correct one. \nAlan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 8: A programming language is low level when its programs require attention to the irrelevant. \nAlan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 10: Get into a rut early: Do the same process the same way. Accumulate idioms. Standardize. The only difference(!) between Shakespeare and you was the size of his idiom list — not the size of his vocabulary. \nAlan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 12: Recursion is the root of computation since it trades description for time. \nAlan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 15: Everything should be built top-down, except the first time. \nAlan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 16: Every program has (at least) two purposes: the one for which it was written, and another for which it wasn’t. \nAlan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 20: Wherever there is modularity there is the potential for misunderstanding: Hiding information implies a need to check communication. \nAlan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 21: Optimization hinders evolution. \nAlan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 23: To understand a program you must become both the machine and the program.\n Alan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 24: Perhaps if we wrote programs from childhood on, as adults we’d be able to read them.\n Alan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 25: One can only display complex information in the mind. Like seeing, movement or flow or alteration of view is more important than the static picture, no matter how lovely.\n Alan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 26: There will always be things we wish to say in our programs that in all known languages can only be said poorly. \nAlan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 27: Once you understand how to write a program get someone else to write it. \nAlan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 28: Around computers it is difficult to find the correct unit of time to measure progress. Some cathedrals took a century to complete. \nCan you imagine the grandeur and scope of a program that would take as long? \nAlan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 29: For systems, the analogue of a face-lift is to add to the control graph an edge that creates a cycle, not just an additional node.\n Alan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 34: The string is a stark data structure and everywhere it is passed there is much duplication of process. It is a perfect vehicle for hiding information.\n Alan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 35: Everyone can be taught to sculpt: Michelangelo would have had to be taught not to. So it is with great programmers.\n Alan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 36: The use of a program to prove the 4-color theorem will not change mathematics — it merely demonstrates that the theorem, a challenge for a century, is probably not important to mathematics. \nAlan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 38: Structured Programming supports the law of the excluded middle. \nAlan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 40: There are two ways to write error-free programs; only the third one works. \nAlan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 41: Some programming languages manage to absorb change, but withstand progress. \nAlan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 42: You can measure a programmer’s perspective by noting his attitude on the continuing vitality of FORTRAN. \nAlan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 44: Sometimes I think the only universal in the computing field is the fetch-execute cycle. \nAlan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 47: As Will Rogers would have said, “There is no such thing as a free variable.” \nAlan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 48: The best book on programming for the layman is “Alice in Wonderland”; but that’s because it’s the best book on anything for the layman. \nAlan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 51: Bringing computers into the home won’t change either one, but may revitalize the corner saloon. \nAlan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 53: So many good ideas are never heard from again once they embark in a voyage on the semantic gulf. \nAlan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 54: Beware of the Turing tar-pit in which everything is possible but nothing of interest is easy. \nAlan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 59: In English every word can be verbed. Would that it were so in our programming languages.\n Alan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 60: In seeking the unattainable, simplicity only gets in the way. \nAlan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 61: In programming, as in everything else, to be in error is to be reborn.\n Alan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 62: In computing, invariants are ephemeral. \nAlan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 64: Often it is the means that justify the ends: Goals advance technique and technique survives even when goal structures crumble.\n Alan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 66: Making something variable is easy. Controlling duration of constancy is the trick.\n Alan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 67: Think of all the psychic energy expended in seeking a fundamental distinction between “algorithm” and “program”.\n Alan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 68: If we believe in data structures, we must believe in independent (hence simultaneous) processing. For why else would we collect items within a structure? Why do we tolerate languages that give us the one without the other? \nAlan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 70: Over the centuries the Indians developed sign language for communicating phenomena of interest. Programmers from different tribes (FORTRAN, LISP, ALGOL, SNOBOL, etc.) could use one that doesn’t require them to carry a blackboard on their ponies. \nAlan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 71: Documentation is like term insurance: It satisfies because almost no one who subscribes to it depends on its benefits. \nAlan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 72: An adequate bootstrap is a contradiction in terms.\n Alan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 74: Is it possible that software is not like anything else, that it is meant to be discarded: that the whole point is to see it as a soap bubble? \nAlan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 75: Because of its vitality, the computing field is always in desperate need of new cliches: Banality soothes our nerves.\n Alan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 78: If your computer speaks English, it was probably made in Japan.\n Alan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 79: A year spent in artificial intelligence is enough to make one believe in God.\n Alan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 80: Prolonged contact with the computer turns mathematicians into clerks and vice versa.\n Alan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 82: We are on the verge: Today our program proved Fermat’s next-to-last theorem.\n Alan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 83: What is the difference between a Turing machine and the modern computer? It’s the same as that between Hillary’s ascent of Everest and the establishment of a Hilton hotel on its peak.\n Alan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 84: Motto for a research laboratory: What we work on today, others will first think of tomorrow. \nAlan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 85: Though the Chinese should adore APL, it’s FORTRAN they put their money on. \nAlan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 86: We kid ourselves if we think that the ratio of procedure to data in an active data-base system can be made arbitrarily small or even kept small.\n Alan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 87: We have the mini and the micro computer. In what semantic niche would the pico computer fall? \nAlan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 88: It is not the computer’s fault that Maxwell’s equations are not adequate to design the electric motor.\n Alan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 91: The computer reminds one of Lon Chaney — it is the machine of a thousand faces.\nAlan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 92: The computer is the ultimate polluter: its feces are indistinguishable from the food it produces. \nAlan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 93: When someone says “I want a programming language in which I need only say what I wish done,” give him a lollipop.\n Alan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 94: Interfaces keep things tidy, but don’t accelerate growth: Functions do.\n Alan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 95: Don’t have good ideas if you aren’t willing to be responsible for them.\n Alan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 96: Computers don’t introduce order anywhere as much as they expose opportunities.\n Alan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 98: In computing, the mean time to failure keeps getting shorter. \nAlan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 99: In man-machine symbiosis, it is man who must adjust: The machines can’t.\n Alan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 103: Purely applicative languages are poorly applicable.\n Alan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 105: You can’t communicate complexity, only an awareness of it. \nAlan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 106: It’s difficult to extract sense from strings, but they’re the only communication coin we can count on. \nAlan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 108: Whenever two programmers meet to criticize their programs, both are silent. \nAlan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 109: Think of it! With VLSI we can pack 100 ENIACS in 1 sq. cm. \nAlan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 111: Why did the Roman Empire collapse? What is Latin for office automation? \nAlan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 113: The only constructive theory connecting neuroscience and psychology will arise from the study of software. \nAlan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 114: Within a computer natural language is unnatural. \nAlan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 115: Most people find the concept of programming obvious, but the doing impossible.\n Alan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 119: Programming is an unnatural act. \nAlan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 120: Adapting old programs to fit new machines usually means adapting new machines to behave like old ones. \nAlan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 123 (on Epigrams): Epigrams parametrize auras. \nAlan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 124 (on Epigrams): Epigrams are macros, since they are executed at read time. \nAlan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 128 (on Epigrams): Epigrams are more like vitamins than protein. \nAlan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 130 (on Epigrams): The last epigram? Neither eat nor drink them, snuff epigrams. \nAlan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 We read Knuth so you don’t have to. \nTim Peters Wikipedia: Tim Peters A language that doesn’t have everything is actually easier to program in than some that do.\n Dennis M. Ritchie Wikipedia: Dennis M. Ritchie An unfamiliar computer from far away stands at the center of the exhibition hall. Some of the onlookers marvel at its unprecedented power; others gather in animated knots trying, but so far in vain, to make out its philosophy, its logic, and its architecture. \nThe central idea of the new device escapes them. The central idea of the universe escapes us. \n\nNo real computer, of course, ever springs full blown from the brow of Minerva. \nWe start with the elements and analyze how to achieve structure. For the universe we start with the structure and try to analyze it into elements. Computer science and basic physics mark two of the frontiers of the civilization of this age. One seeks to build complexity out of simplicity. \nThe other tries to unravel complexity into simplicity. No one, it has been said, is better at taking a puzzle apart than the person who put it together and no one is better at putting a puzzle together than the one who took it apart. \nCan it be that there is a little of the flavor of the physics enterprise of interest for computer science? And something of use for the unraveling of the universe to be learned from the philosophy of computer design? \nJohn Archibald Wheeler Wikipedia: John Archibald Wheeler \n— International Journal of Theoretical Physics, 21, “The Computer and the Universe”, p. 557, 1982 Troutman’s Laws of Computer Programming: \n\n Any running program is obsolete. \n Any planned program costs more and takes longer. \n Any useful program will have to be changed. \n Any useless program will have to be documented. \n The size of a program expands to fill all available memory. \n The value of a program is inversely proportional to the weight of output. \n The complexity of a program grows until it exceeds the capability of the maintainers. \n Information necessitating a change in design is always conveyed to the implementors after the code is written. \n Corollary: Given a simple choice between one obviously right way and one obviously wrong way, it is often wiser to choose the wrong way, so as to expedite subsequent revision. \n The more innocuous a modification appears, the more code it will require rewriting. \n If a test installation functions perfectly, all subsequent systems will malfunction. \n Not until a program has been in production for at least six months will the most harmful error be discovered. \n Interchangeable modules won’t. \n Any system that relies on computer reliability is unreliable. \n Any system that relies on human reliability is unreliable. \n Investment in reliability increases until it exceeds the probable cost of errors, or until someone insists on getting some useful work done. \n Adding manpower to a late software project makes it later. \n There’s always one more bug. \n\nUnknown Author Why has elegance found so little following? Elegance has the disadvantage that hard work is needed to achieve it and a good education to appreciate it. Edsger W. Dijkstra Wikipedia: Edsger W. Dijkstra Controlling complexity is the essence of computer programming. Brian W. Kernighan Wikipedia: Brian W. Kernighan No one has tried to make a thinking machine. The bottom line is that we really haven’t progressed too far toward a truly intelligent machine. We have collections of dumb specialists in small domains. The true majesty of general intelligence still awaits our attack. We’ve got to get back to the deepest questions of AI and general intelligence and quit wasting time on little projects that don’t contribute to the main goal. Marvin Minsky Wikipedia: Marvin Minsky — Hal’s Legacy, 1996 Anyone who considers arithmetic methods of producing random digits is, of course, in a state of sin. John Von Neumann Wikipedia: John Von Neumann Quoted by D. MacHale — Comic Sections, 1993 Epigram 4: Every program is a part of some other program and rarely fits. \nAlan J. Perlis Wikipedia: Alan J. Perlis \n— Epigrams on Programming, Sept., 1982 Epigram 6: Symmetry is a complexity-reducing concept (co-routines include subroutines); seek it everywhere. Alan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 30: In programming, everything we do is a special case of something more general — and often we know it too quickly. \nAlan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 32: Programmers are not to be measured by their ingenuity and their logic but by the completeness of their case analysis. \nAlan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 37: The most important computer is the one that rages in our skulls and ever seeks that satisfactory external emulator. The standarization of real computers would be a disaster — and so it probably won’t happen. \nAlan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 39: Re graphics: A picture is worth 10K words — but only those to describe the picture. Hardly any sets of 10K words can be adequately described with pictures. \nAlan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 43: In software systems, it is often the early bird that makes the worm.\nAlan J. Perlis Wikipedia: Alan J. Perlis \n— Epigrams on Programming, Sept., 1982 Epigram 45: The goal of computation is the emulation of our synthetic abilities, not the understanding of our analytic ones. \nAlan J. Perlis Wikipedia: Alan J. Perlis \n— Epigrams on Programming, Sept., 1982 Epigram 46: Like punning, programming is a play on words. Alan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 49: Giving up on assembly language was the apple in our Garden of Eden: Languages whose use squanders machine cycles are sinful. The LISP machine now permits LISP programmers to abandon bra and fig-leaf.\n Alan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 50: When we understand knowledge-based systems, it will be as before — except our fingertips will have been singed.\n Alan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 52: Systems have sub-systems and sub-systems have sub-systems and so on ad infinitum — which is why we’re always starting over.\n Alan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 55: A LISP programmer knows the value of everything, but the cost of nothing.\n Alan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 56: Software is under a constant tension. Being symbolic it is arbitrarily perfectible; but also it is arbitrarily changeable. \nAlan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 63: When we write programs that “learn”, it turns out that we do and they don’t. \nAlan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 65: Make no mistake about it: Computers process numbers — not symbols. We measure our understanding (and control) by the extent to which we can arithmetize an activity.\n Alan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 77: The cybernetic exchange between man, computer and algorithm is like a game of musical chairs: The frantic search for balance always leaves one of the three standing ill at ease. \nAlan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 81: In computing, turning the obvious into the useful is a living definition of the word “frustration”.\n Alan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 89: One does not learn computing by using a hand calculator, but one can forget arithmetic.\n Alan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 101: Dealing with failure is easy: Work hard to improve. Success is also easy to handle: You’ve solved the wrong problem. Work hard to improve.\n Alan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 102: One can’t proceed from the informal to the formal by formal means. \nAlan J. Perlis Wikipedia: Alan J. Perlis \n— Epigrams on Programming, Sept., 1982 Epigram 104: The proof of a system’s value is its existence. \nAlan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 118: If you can imagine a society in which the computer-robot is the only menial, you can imagine anything. \nAlan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 121 (on Epigrams): In seeking the unattainable, simplicity only gets in the way. \nAlan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 126 (on Epigrams): Epigrams retrieve deep semantics from a data base that is all procedure.\n Alan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 The data represent an abstraction of reality in the sense that certain properties and characteristics of the real objects are ignored because they are peripheral and irrelevant to the particular problem. An abstraction is thereby also a simplification of the facts. \nNiklaus Wirth Wikipedia: Niklaus Wirth \n— Algorithms + Data Structures = Programs, 1976 Epigram 19: A language that doesn’t affect the way you think about programming, is not worth knowing. \nAlan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 31: Simplicity does not precede complexity, but follows it. \nAlan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 58: Fools ignore complexity. Pragmatists suffer it. Some can avoid it. Geniuses remove it. \nAlan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 116: You think you know when you can learn, are more sure when you can write, even more when you can teach, but certain when you can program.\n Alan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 117: It goes against the grain of modern education to teach children to program. What fun is there in making plans, acquiring discipline in organizing thoughts, devoting attention to detail and learning to be self-critical? \nAlan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 122 (on Epigrams): Epigrams are interfaces across which appreciation and insight flow. \nAlan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 125 (on Epigrams): Epigrams crystallize incongruities. \nAlan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 127 (on Epigrams): Epigrams scorn detail and make a point: They are a superb high-level documentation. \nAlan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982 Epigram 129 (on Epigrams): Epigrams have extremely low entropy. \nAlan J. Perlis Wikipedia: Alan J. Perlis — Epigrams on Programming, Sept., 1982