May the source be with you, but remember the KISS principle ;-)

Contents Bulletin Scripting in shell and Perl Network troubleshooting History Humor

Language Design and Programming Quotes

News Recommended Books Recommended Links Skeptic Quotations SE quotes Random IT-related quotes Truth and Lie quotes
Programmers and programming Mastering Complexity or Not Object-Orientation C C++ Unix IT” and “Software Engineering”
Comparisons Lisp Coroutines Tools Software Fashion Assembler-related Humor C Humor
Software Engineering Education Slackerism Quotes History Random Findings Humor Etc


Computer languages are half technology, half religion. So many quotes about languages are somewhat reminiscent quotes about religion ;-). The quotes listed below were compiled from several sources.

The major were:

Top updates

Softpanorama Switchboard
Softpanorama Search


Old News ;-)

Donald Knuth - Wikiquote

The Art of Computer Programming (1968-2011)[edit]

Computer Programming as an Art (1974)[edit]

1974 Turing Award Lecture[1], Communications of the ACM 17 (12), (December 1974), pp. 667–673

[May 11, 2014] Random findings

History lesson

Our earth is degenerate these latter days. There are signs that the world is speedily coming to an end. Bribery and corruption are common. --Inscription, 4800 year-old tablet (quoted in Isaac Asimov's Book of Facts)

The primary purpose of the DATA statement is to give names to constants; instead of referring to pi as 3.141592653589793 at every appearance, the variable PI can be given that value with a DATA statement and used instead of the longer form of the constant. This also simplifies modifying the program, should the value of pi change. -- FORTRAN manual for Xerox Computers


Bill Joy Quotes

Random findings

"Walking on water and developing software from a specification are easy if both are frozen." - Edward V Berard

Time is an excellent teacher; but eventually it kills all its students.

- Anonymous

I, myself, have had many failures and I've learned that if you are not failing a lot, you are probably not being as creative as you could be -you aren't stretching your imagination.

- J. Backus

Genius is 1 percent inspiration and 99 percent perspiration. As a result, genius is often a talented person who has simply done all of his homework.

- T. Edison

Any intelligent fool can make things bigger, more complex, and more violent. It takes a touch of genius - and a lot of courage - to move in the opposite direction.

- A. Einstein

The structure of a system reflects the structure of the organization that built it.

- R. Fairley

Any sufficiently advanced bug is indistiguishable from a feature.

- R. Kulawiec

Fools ignore complexity; pragmatists suffer it; experts avoid it; geniuses remove it.

- A. Perlis

Selected topics

Programmers and programming

See also SE quotes

Language Design

Most papers in computer science describe how their author learned what someone else already knew.

- Peter Landin (This is a paraphrase. I'd appreciate it if anyone can tell me the exact quote.)

"The only way to learn a new programming language is by writing programs in it."

- Kernighan and Ritchie

A common mistake people make when trying to design something completely foolproof is to underestimate the ingenuity of complete fools.

- D. Adams

I will contend that conceptual integrity is the most important consideration in system design. It is better to have a system omit certain anomalous features and improvements, but to reflect one set of design ideas, than to have one that contains many good but independent and uncoordinated ideas.

For a given level of function, however, that system is best in which one can specify things with the most simplicity and straightforwardness. Simplicity is not enough. Mooers's TRAC language and Algol 68 achieve simplicity as measured by the number of distinct elementary concepts. They are not, however, straightforward. The expression of the things one wants to do often requires involuted and unexpected combinations of the basic facilities. It is not enough to learn the elements and rules of combination; one must also learn the idiomatic usage, a whole lore of how the elements are combined in practice. Simplicity and straighforwardness proceed from conceptual integrity. Every part must reflect the same philosophies and the same balancing of desiderata. Every part must even use the same techniques in syntax and analogous notions in semantics. Ease of use, then, dictates unity of design, conceptual integrity.

Frederick P. Brooks, Jr.: The Mythical Man-Month. Addison-Wesley, Reading MA, 1995 (anniversary ed.)

Greenspun's Tenth Rule of Programming: “Any sufficiently complicated C or Fortran program contains an ad-hoc, informally-specified bug-ridden slow implementation of half of Common Lisp.”

Philip Greenspun but where?

Simplicity of the language is not what matters, but simplicity of use.

Richard A. O'Keefe in squeak-dev mailing list, April 2003

Software development methodologies evolved under this regime [figure it out, code it up, compile it, run it, throw it away] along with a mythical belief in master planning. Such beliefs were rooted in an elementary-school-level fiction that great masterpieces were planned, or arose as a by-product of physicists shovelling menial and rote coding tasks to their inferiors in the computing department. Master planning feeds off the desire for order, a desire born of our fear of failure, our fear of death.

Richard P. Gabriel and Ron Goldman: Mob Software: The Erotic Life of Code

To me, development consists of two processes that feed each other. First, you figure out what you want the computer to do. Then, you instruct the computer to do it. Trying to write those instructions inevitably changes what you want the computer to do and so it goes.

In this model, coding isn't the poor handmaiden of design or analysis. Coding is where your fuzzy, comfortable ideas awaken in the harsh domain of reality. It is where you learn what your computer can do. If you stop coding, you stop learning.

We aren't always good at guessing where responsibilities should go. Coding is where our design guesses are tested. Being prepared to be flexible about making design changes during coding results in programs that get better and better over time. Insisting that early design ideas be carried through is short sighted.

Kent Beck: Smalltalk Best Practice Patterns. Prentice Hall, NJ 1997

Planning is a necessary evil. It is a response to risk: the more dangerous an undertaking, the more important it is to plan ahead. Powerful tools decrease risk, and so decrease the need for planning. The design of your program can then benefit from what is probably the most useful source of information available: the experience of implementing it.

The spirit of Lisp hacking can be expressed in two sentences. Programming should be fun. Programs should be beautiful.

Paul Graham: ANSI Common Lisp

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.

Hal Abelson and Gerald Jay Sussman with Julie Sussman prefacing SICP

The most difficult work of programmers, and also the most rewarding, is not writing programs but rather designing abstractions.

Peter Van Roy and Seif Haridi: Concepts, Techniques, and Models of Computer Programming

A programming language is low level when its programs require attention to the irrelevant.

Alan J. Perlis: Epigrams in Programming

languages shape the way we think, or don't.

Erik Naggum in comp.lang.lisp, January 2000

Besides a mathematical inclination, an exceptionally good mastery of one's native tongue is the most vital asset of a competent programmer.

Edsger W. Dijkstra: How do we tell truths that might hurt? (EWD 498)

Ordinarily technology changes fast. But programming languages are different: programming languages are not just technology, but what programmers think in. They're half technology and half religion. And so the median language, meaning whatever language the median programmer uses, moves as slow as an iceberg.

Paul Graham: Beating the Averages

languages are ecologies. Language features are not a priori good or bad. Rather, language features are good or bad in context, based on how well they interact with other language features.

What do I consider is most important for an abstract language to support efficiently? My time. Time is the only true, non-renewable commodity. I eschew languages like C because they often waste enormous amounts of my time trying to develop and debug programs, and justify it on the basis of micro-differences in speed that have just never ended up mattering to me. I regard C as appropriate for use as an assembly language, but it doesn't provide enough high-level services for me. When I'm old and grey and look back on my life, I want to have done a lot of interesting things, not just have done a few interesting things but “boy were they fast”.

I want my ideas to lead my technology and my tools, not to have my technology and tools leading my ideas.

Kent Pitman Answers on Lisp and Much More, Slashdot 2002(?)

The computers are never large enough or fast enough. Each breakthrough in hardware technology leads to more massive programming enterprises, new organizational principles, and an enrichment of abstract models. Every reader should ask himself periodically “Toward what end, toward what end?” — but do not ask it too often lest you pass up the fun of programming for the constipation of bittersweet philosophy.

Alan J. Perlis forewording SICP

See also SE quotes

Mastering Complexity

It is time to unmask the computing community as a Secret Society for the Creation and Preservation of Artificial Complexity.

Edsger W. Dijkstra: The next forty years (EWD 1051)

Software quality has almost nothing to do with algorithmic elegance, compactness, or speed — in fact, those attributes do more harm to quality than good.

The objective is to make things as clear as possible to the designer and to yourself, and excessive formality can destroy clarity just as easily as modest formality can enhance it.

[The Spec] Be literal in your interpretation and smile when the designer accuses you of semantic nit-picking.

In programming, it's often the bugs in the specification that kill you.

Don't squeeze the code. Don't squeeze the code. DON'T SQUEEZE THE CODE.

Like so much in testing, the act of getting the information on which to base tests can be more effective at catching and exterminating bugs than the tests that result from that information. Insisting on getting transaction flows or the equivalent is sometimes a gentle way of convincing inept design groups that they don't know what they're doing. These are harsh words, but let's face it: superb code and unit testing will be useless if the overall design is poor. And how can there be a rational, effective design if no one on the design team can walk you through the more important transactions, step by step and alternative by alternative. I'm sure that mine is a biased sample, but every system I've ever seen that was in serious trouble had no transaction flows documented, nor had the designers provided anything that approximated that kind of functional representation; however, it's certainly possible to have a bad design even with transaction flows.

Boris Beizer: Software Testing Techniques 2E. Van Nostrand Reinhold, New York 1990

Paradox: by not considering the future of your code, you make your code much more likely to be adaptable in the future.

Kent Beck: Test-Driven Development. Addison-Wesley, Boston 2002

The complexity of software is an essential property, not an accidental one. Hence descriptions of a software entity that abstract away its complexity often abstract away its essence.

Frederick P. Brooks, Jr.: No Silver Bullet — Essence and Accident in Software Engineering. In: The Mythical Man-Month (anniversary ed.) Addison-Wesley, Reading MA, 1995


The use of anthropomorphic terminology when dealing with computing systems is a symptom of professional immaturity.

Edsger W. Dijkstra: How do we tell truths that might hurt? (EWD 498)

OO is like the Bible in that which scripture is to be interpreted metaphorically, and which is to be interpreted literally, is entirely a function of the religious agenda of the commentator. My own advice is to keep in mind that the stuff of computer programs is nothing but metaphor.

Thant Tessman in comp.object, August 2003

The object-oriented model makes it easy to build up programs by accretion. What this often means, in practice, is that it provides a structured way to write spaghetti code. This is not necessarily bad, but it is not entirely good either.

A lot of the code in the real worl is spaghetti code, and this is probably not going to change soon. For programs that would have ended up as spaghetti anyway, the object-oriented model is good: they will at least be structured spaghetti. But for programs that might otherwise have avoided this fate, object-oriented abstractions could be more dangerous than useful.

Paul Graham: ANSI Common Lisp

Bricks are just too limited, and the circumstances where they make sense are too constrained to serve as a model for building something as diverse and unpredictable as a city. And further, the city itself is not the end goal, because the city must also –in the best case– be a humane structure for human activity, which requires a second set of levels of complexity and concerns. Using this metaphor to talk about future computing systems, it's fair to say that OO addresses concerns at the level of bricks.

Despite the early clear understanding of the nature of software development by OO pioneers, the current caretakers of the ideas have reverted to the incumbent philosophy of perfect planning, grand design, and omniscience inherited from Babbage's theology.

Richard P. Gabriel: Objects have failed. OOPSLA 2002

See also Object-Oriented Cult: A Slightly Skeptical View on the Object-Oriented Programming


The C language (invented by Bell Labs — the people who were supposed to be building products with five 9's of reliability – 99.999%) then taught two entire generations of programmers to ignore buffer overflows, and nearly every other exceptional condition, as well. A famous paper in the Communications of the ACM found that nearly every Unix command (all written in C) could be made to fail (sometimes in spectacular ways) if given random characters (“line noise”) as input. And this after Unix became the de facto standard for workstations and had been in extensive commercial use for at least 10 years. The lauded “Microsoft programming tests” of the 1980's were designed to weed out anyone who was careful enough to check for buffer overflows, because they obviously didn't understand and appreciate the intricacies of the C language.

I'm sorry to be politically incorrect, but for the ACM to then laud “C” and its inventors as a major advance in computer science has to rank right up there with Chamberlain's appeasement of Hitler.

Henry Baker : “Buffer Overflow” security problems

Now I want to argue that worse-is-better is better. C is a programming language designed for writing Unix, and it was designed using the New Jersey approach. C is therefore a language for which it is easy to write a decent compiler, and it requires the programmer to write text that is easy for the compiler to interpret. Some have called C a fancy assembly language. Both early Unix and C compilers had simple structures, are easy to port, require few machine resources to run, and provide about 50%–80% of what you want from an operating system and programming language.

Half the computers that exist at any point are worse than median (smaller or slower). Unix and C work fine on them. The worse-is-better philosophy means that implementation simplicity has highest priority, which means Unix and C are easy to port on such machines. Therefore, one expects that if the 50% functionality Unix and C support is satisfactory, they will start to appear everywhere. And they have, haven't they?

Richard P. Gabriel: Lisp - Good News, Bad News, How to Win Big

See also C Humor, SE quotes


C++ is like teenage sex:

allegedly a toilet graffito at the Technion CS department in Haifa, Israel, 1993-11-08 [ornate PS version]

When your hammer is C++, everything begins to look like a thumb.

Steve Haflich in, December 1994

Being really good at C++ is like being really good at using rocks to sharpen sticks.

Thant Tessman in comp.lang.scheme, December 1996

(Of course SML does have its weaknesses, but by comparison, a discussion of C++'s strengths and flaws always sounds like an argument about whether one should face north or east when one is sacrificing one's goat to the rain god.)

Thant Tessman in comp.lang.scheme, April 1997

the effort that has gone into extending and 'refining' C++ (and to its creation in the first place) must be largely attributed to the unwillingness of its advocates to give up the effort they've already put into learning and using it (and C before it). Strangely, this is simultaneously despite and because of the fact that C++ is not one of the easier languages to learn.

Thant Tessman in comp.lang.c++.moderated, July 2000

As for C++ – well, it reminds me of the Soviet-era labor joke: “They pretend to pay us, and we pretend to work.” C++ pretends to provide an object-oriented data model, C++ programmers pretend to respect it, and everyone pretends that the code will work. The actual data model of C++ is exactly that of C, a single two-dimensional array of bits, eight by four billion, and all the syntactic sugar of C++ fundamentally cannot mask the gaping holes in its object model left by the cast operator and unconstrained address arithmetic.

Guy L. Steele: Objects have not failed. OOPSLA 2002

See also C++ Humor, SE quotes


Unix and C are the ultimate computer viruses.

Richard P. Gabriel: Lisp - Good News, Bad News, How to Win Big

The most irritating part of Unix IMHO is not the design of the kernel (yeah, yeah it's a monolithic spaghetti ball) or the functionality of system calls (yeah, yeah, no PCLSRing) or the unrecoverability of kernel panics, or whatever else is associated with the kernel and driver implementations. What's really irritating about the Unix design is all the institutionalized crufty software still floating around after thirty years of development, redesign, and redevelopment. Unix hackers have long spent time hacking on the hardware support, improving process scheduling, memory management, and the like, but they still live with an interface that feels just like 2.9BSD on a PDP-11/40, with some frills. It's disgusting. Everything from the init process on upwards is institutionalized, designed just like it was on the good old minicomputers.

(I'm not degrading the Unix (or UN*X as it were) of that era, nor the machines it ran on, many of which I'm enamored of and wish I could own. I'm criticizing the stubborness of an operating system that dates from that era and appears to be little changed from it.)

James A. Crippen in comp.lang.scheme, April 2000

“The wonderful thing about Unix standards is that there are so many to choose from.” You may be totally bewildered about the multitude of various standards that exist. Rest assured that nowhere in this manual will you encounter an attempt to spell it all out for you; you could not read and internalise such a twisted account without bleeding from the nose and ears.

Olin Shivers (supplementing Andrew S. Tanenbaum): Scsh Reference Manual

Yes, dear?
No, I wasn't complaining....
Yes, I understand unix is the waveofthefuture....
Yes, unix is the equivalent of a programmer/sysadmin Full Employment Act....
No, lusers will never understand unix, so I'll always have a job if I learn it....
Yes, unix is free (and worth every cent)....
No, no two unix installations are alike, so there's plenty of job security for everyone....
No, nothing ever gets fixed in unix so there's more job security....

Joe Bednorz: Gawd I miss VMS in e.mail to Richard Levitte, March 1996

See also Admin Humor, SE quotes


Perl's gluing ability goes beyond computation, to people. To the poor and have-nots. It unites people in the computing field who are not endowed with fancy engaging brains. It is the sanctuary of dunces. The expressions of those thoughtless. The godsend for brainless coders. The means and banner of sys admins. The lingua franca of trial-and-error hackers. The song and dance of stultified engineers.

I'm also a Perler. Share a secret with me: When you are cornered by mathematicians or the like, who are about to speak lamba or something we don't understand, what do you do? Of course, flip out the little Swiss Army Knives in our pockets, and splutter #%$@ syntaxes that is equally abstruse, and we feel safe and secure. Fuck geniuses in this world. Leave Perlers along. Larry Wall for President. The three principal virtues of . . .

I think comrade glauber is incorrect. First of all, he got our mantra wrong. It is: The three characteristics of Perl programers: mundaneness, sloppiness, and fatuousness. Secondly, our language is not evolved to support no fucking real life no shit. Our language, is designed to be a fuckup from the very beginning. Designed, to fuck up those computer scientists. Fuck up their teachings. Fuck up their students. Fuck up their language. Fuck up their correctness. Fuck up their fucking theoretical theories. Remember, P is for Practical.

Xah Lee in comp.lang.lisp, December 2000

Perl did some things well: It transcended implementation differences by staring them in the eye and fighting it out, not by giving up, whining that something isn't standard and portable, etc. It gave the bad standards and their nonsensical implementation differences the finger and wrote its own standard. For the kinds of tasks Perl does well, it is downright impressively portable. You need the ever expanding Perl book, but not the tens or hundreds of shelf-feet of manuals that you used to have to deal with. Perl has created its own operating system interface precisely by being an incredibly ugly implementation, and I'll give Larry Wall this, but not much else: He did fully understand the value of uniform external behavior of a tool and he was willing to pay the price to get it. There is no excuse for the language he created in order to do this, however.

Erik Naggum in comp.lang.lisp, November 2000

the perl programmer who veers off the road into the forest will get out of his car and cut down each and every tree that blocks his progress, then drive a few meters and repeat the whole process. whether he gets where he wanted to go or not is immaterial — a perl programmer will happily keep moving forward and look busy.

it's not that perl programmers are idiots, it's that the language rewards idiotic behavior in a way that no other language or tool has ever done,

Erik Naggum in comp.lang.lisp, March 2000

What really pisses me off with Perl is that people work so hard doing so terribly little while they think they have worked very little doing something really nifty. Fools!

Erik Naggum in comp.lang.lisp, October 2000

See also Perl-related Humor, SE quotes, The Value of Simplicity and KISS principle

IT” and “Software Engineering”

Software Engineering is Programming when you can't.

We must give industry not what it wants, but what it needs.

Edsger W. Dijkstra quoted in the program (10M .pdf) of his birthday symposium, Austin TX, 2000

Another series of [philosopher's] stones in the form of “programming tools” is produced under the banner of “software engineering”, which, as time went by, has sought to replace intellectual discipline by management discipline to the extent that it has now accepted as its charter “How to program if you cannot”.

Edsger W. Dijkstra: The threats to computer science (EWD 898)

In a cruel twist of history, however, American society has chosen precisely the 20th Century to become more and more a-mathematical (...), and we have reached the paradoxical state that, of all so-called developed nations, the USA is the most dependent on programmed computers and intellectually the worst equipped to be so. The suggestion that the programming problem could be amenable to mathematical treatment is, if heard at all, instantaneously rejected as being totally unrealistic. As a result, Program Design is prevented from becoming a subdiscipline of Computing Science. (...) And in the mean time, programming methodology –renamed “software engineering”– has become the happy hunting-ground for the gurus and the quacks.

Edsger W. Dijkstra: Why American Computing Science seems incurable (EWD 1165)

The problems of business administration in general and data base management in particular are much too difficult for people that think in IBMerese, compounded with sloppy English.

Edsger W. Dijkstra: How do we tell truths that might hurt? (EWD 498)

Robert and I both knew Lisp well, and we couldn't see any reason not to trust our instincts and go with Lisp. We knew that everyone else was writing their software in C++ or Perl. But we also knew that that didn't mean anything. If you chose technology that way, you'd be running Windows.

During the years we worked on Viaweb I read a lot of job descriptions. A new competitor seemed to emerge out of the woodwork every month or so. The first thing I would do, after checking to see if they had a live online demo, was look at their job listings. After a couple years of this I could tell which companies to worry about and which not to. The more of an IT flavor the job descriptions had, the less dangerous the company was. The safest kind were the ones that wanted Oracle experience. You never had to worry about those. You were also safe if they said they wanted C++ or Java developers. If they wanted Perl or Python programmers, that would be a bit frightening — that's starting to sound like a company where the technical side, at least, is run by real hackers. If I had ever seen a job posting looking for Lisp hackers, I would have been really worried.

Paul Graham: Beating the Averages

While we were doing Viaweb, we took a good deal of heat from pseudo-technical people like VCs and industry analysts for not using a database — and for using cheap Intel boxes as servers, running FreeBSD. But when we were getting bought by Yahoo, we found that they also just stored everything in files — and all their servers were also cheap Intel boxes running FreeBSD.

(During the Bubble, Oracle used to run ads saying that Yahoo used Oracle software. I found this hard to believe, so I asked around. It turned out the Yahoo accounting department used Oracle.)

Paul Graham on database-backed web applications

Technology is part of the answer, not part of the question. Don't make choices only to then try to figure out how to twist the problem in such a way so as to fit your choice. This will often result in your solution being more convoluted than my previous sentence.

Curtis Poe: Finding Technology Solutions, Perl Monks 2001-07-23

Those who use databases usually do so because they master no data structures of their own.

A few years from now, programming will have been revolutionized and lots and lots of work will be done by software that writes itself. This will requrie massive talent and intelligence and thinking outside the box and what have you, but for the time being, programming is a “consumer” job, “assembly line” coding is the norm, and what little exciting stuff is being performed is not going to make it compared to the mass-marketed crap sold by those who think they can surf on the previous half-century's worth of inventions forever. This will change, however, and those who know Common Lisp will be relieved of reinventing it, like the rest are doing, even in the “tools” world, badly.

Erik Naggum in comp.lang.lisp, June 2001

there is no aspect of database management that is not characterized by lack of foundation knowledge and riddled with confusion (...) As long as the industry neither requires, nor rewards knowledge of fundamentals, why should we expect anything else?

Fabian Pascal Responds, On Denormalization and Repeating Groups

See also The Value of Simplicity and KISS principle, SE quotes, Skeptic Quotations,

Copyright Information


VMS is like a Soviet railroad train. It's basically industrial-strength, but when you look at it closely, everything's a little more shabby than you might like. It gets the job done, but there's no grace to it.

The Mac operating system is like the monorail at Disney World. It's kind of spectacular and fun, but it doesn't go much of anywhere. Still, the kids like it.

Unix is like the maritime transit system in an impoverished country. The ferryboats are dangerous as hell, offer no protection from the weather and leak like sieves. Every monsoon season a couple of them capsize and drown all the passengers, but people still line up for them and crowd aboard.

MS-DOS is like the US rail system. It's there, but people just ignore it and find other ways of getting where they want to go.

Posted by Paul A. Vixie to rec.humor in March 1991

You're posting to a Scheme group. Around here, arguing that Java is better than C++ is like arguing that grasshoppers taste better than tree bark.

Thant Tessman in comp.lang.scheme, June 2000

[On the recommendation to “initialize every variable as soon as it comes into scope”]
This is one of the totally mindless rules which in practice leads to bad code. I am sick of seeing C code which initialises variables to values that never get used; that is lying to the reader, and lying to the reader is never good idea. Variables should only ever be initialised when you have a value that you intend to use that you can initialise them with.

Richard A. O'Keefe in squeak-dev mailing list, September 2003

If someone didn't understand their code and its likely uses well enough to write brief useful comments, why should I imagine that they understood it well enough to write code that works?

Richard A. O'Keefe in squeak-dev mailing list, June 2003

Realistically, the practice of putting untested code into systems is common, and so are system failures. The excuse I've most often heard for putting in untested code is that there wasn't enough time or money left to do the testing. If there wasn't enough time and money to test the routine, then there wasn't enough time and money to create it in the first place. What you think is code, before it has been properly tested, is not code, but the mere promise of code — not a program, but a perverse parody of a program. If you put such junk into a system, its bugs will show, and because there hasn't been a rigorous unit test, you'll have a difficult time finding the bugs. As Hannah Cowley said, “Vanity, like murder, will out.” For it's vanity to think that untested code has no bugs, and murder to put such code in. It is better to leave out untested code altogether than to put it in. Code that doesn't exist can't corrupt good code. A function that hasn't been implemented is known not to work. An untested function may or may not work itself (probably not), but it can make other things fail that would otherwise work. In case I haven't made myself clear, leaving untested code in a system is stupid, shortsighted, and irresponsible.

GIGO (“Garbage-in equals garbage-out”) is no explanation for anything except our failure to test the system's tolerance for bad data. Garbage shouldn't get in — not in the first place or in the last place. Every system must contend with a bewildering array of internal and external garbage, and if you don't think the world is hostile, how do you plan to cope with alpha particles?

But to be really diabolical takes organization, structure, discipline, and method. Taking random potshots and waiting for inspiration with which to victimize the programmer won't do the job. Syntax testing is a primary tool of dirty testing, and method beats sadism every time.

A good threat is worth a thousand tests.

Boris Beizer: Software Testing Techniques 2E. Van Nostrand Reinhold, New York 1990

Tests are the Programmer's Stone, transmuting fear into boredom.

Kent Beck: Test-Driven Development. Addison-Wesley, Boston 2002

Finally, the idioms of a language are useful as a sociological exercise (“How do the natives of this linguistic terrain cook up a Web script?”), but it's dangerous to glean too much from them. Idioms are fundamentally human, therefore bearing all the perils of faulty, incomplete and sometimes even outlandish human understanding.

Shriram Krishnamurthi: Programming Languages: Application and Interpretation

Yes, as a name, xnor generalises well to the n-ary case: I'm confused completely independent of the number of arguments passed to the function.

Olin Shivers in the SRFI-33 discussion archive

The main idea here is that in the end the programmers want to program in a very high level language, and the machine should be as configurable as possible towards helping the best conceived environment run as fast as possible. A secondary idea is that it is hard to design when you have your optimization hat on, and thus, if you want to make progress with interactive language design, you want to be able to start using your latest and greatest ideas with as little special optimization as possible.

These are not goals that Intel and Motorola understood, anymore than they understood anything important about SW in general. The current caching schemes are rudimentary to say the least. The more interesting architectures today are the graphics accelerators — they don't do anything particularly new, but they at least have some notion of what they are supposed to do (and also what they don't have to do when Moore's Law makes it easy to have multiple processors).

Alan Kay in squeak-dev mailing list, March 2003

In fact, flow charting is more preached than practiced. I have never seen an experienced programmer who routinely made detailed flow charts before beginning to write programs. Where organization standards require flow charts, these are almost invariably done after the fact. Many shops proudly use machine programs to generate this “indispensable design tool” from the completed code. I think this universal experience is not an embarassing and deplorable departure from good practice, to be acknowledged only with a nervous laugh. Instead it is the application of good judgment, and it teaches us something about the utility of flow charts.

Frederick P. Brooks, Jr.: The Mythical Man-Month. Addison-Wesley, Reading MA, 1995 (anniversary ed.)

A favorite subject for Ph.D. dissertations in software engineering is graphical, or visual, programming, the application of computer graphics to software design. Sometimes the promise of such an approach is postulated from the analogy with VLSI chip design, where computer graphics plays so fruitful a role. Sometimes the approach is justified by considering flow charts as the ideal programming design medium, and providing powerful facilities for constructing them.

Nothing even convincing, much less exciting, has yet emerged from such efforts. I am persuaded that nothing will.

In the first place, as I have argued elsewhere, the flow chart is a very poor abstraction of software structure, Indeed, it is best viewed as Burkes, von Neumann, and Goldstine's attempt to provide a desperately needed high-level control language for their proposed computer. In the pitiful, multipage, connection-boxed form to which the flow chart has today been elaborated, it has proved to be essentially useless as a design tool — programmers draw flow charts after, not before, writing the programs they describe.

Whereas the difference between poor conceptual designs and great ones may lie in the soundness of design method, the difference between good designs and great ones surely does not. Great designs come from great designers. Software construction is a creative process. Sound methodology can empower and liberate the creative mind, it cannot enflame or inspire the drudge.

Frederick P. Brooks, Jr.: No Silver Bullet — Essence and Accident in Software Engineering. In: The Mythical Man-Month (anniversary ed.) Addison-Wesley, Reading MA, 1995

Flowcharts have been falling out of favor for over a decade, and before another decade passes they'll be regarded as curious, archaic relics of a bygone programming era. Indeed, flowcharts are rarely used today; they're created mainly to satisfy obsolete documentation specifications.

I think that if you were to gather statistics over one big project or many small projects (that used the same paper), then the weight of the listings would correlate as well to the bug rate and test efforts as do lines of code. Yet, “lines of code” sounds reasonable and scientific, and “listing weight” seems to be an outrageous put-on. Who's putting whom on? The fact is, that it makes exactly as much sense (or nonsense) to say “This is a 230-gram program” as it does to say “This is a 500-line program.”

“Logic” is one of the most often used words in programmers' vocabularies but one of their least used techniques.

The barrier to reusable software has never been technical — it's been financial and managerial. Reusable software doesn't get built if no one is willing to pay the price. New languages and programming techniques won't do it — they never have. It takes bucks and guts.

Boris Beizer: Software Testing Techniques 2E. Van Nostrand Reinhold, New York 1990

I have been told that one of the reasons for the longevity of the Roman bridges is that their designers had to stand under them when they were first used. It may be time to put a similar discipline into the software field.

Henry Baker : “Buffer Overflow” security problems

We have gotten OK at building cathedrals — only we are building the same dozen or so over and over again.

The effect of ownership imperatives has caused there to be no body of software as literature. It is as if all writers had their own private companies and only people in the Melville company could read Moby-Dick and only those in Hemingway's could read The Sun Also Rises.

Richard P. Gabriel and Ron Goldman: Mob Software: The Erotic Life of Code

(I have found that the worst possible thing you could do wrong in this world is to give people something that is more powerful than they are prepared to understand. Back when I believed that SGML was a brilliant idea, I did not understand that the people who were the intended users were completely unable to understand it, and that only those who were stupid enough not to realize it in time, would continue to work with it, and so they sat there with their excellent document production system with a clever markup system and thought it had to be useful for something grander, and now we have XML, a non-solution to a non-problem so brilliant that m4 no longer seems like a prank. We really need Gary Larson- style cartoons on the history of computer science.)

Erik Naggum in comp.lang.lisp, January 2004

HTML represents the worst of two worlds. We could have taken a formatting language and added hypertext anchors so that users had beautifully designed documents on their desktops. We could have developed a powerful document structure language so that browsers could automatically do intelligent things with Web documents. What we have got with HTML is ugly documents without formatting or structural information.

Philip Greenspun : We Have Chosen Shame and Will Get War

Some of the patterns books I have read stress the language-independence of the patterns. This turns out to mean “hey, we need it for Java too!”

Richard A. O'Keefe in squeak-dev mailing list, November 2002

It's hard to make things fool-proof because fools are so ingenious. I remember someone telling me about a statistics package they had written which would only let you do meaningful regressions. Instead of being glad to have errors caught before it was too late, their users had discovered that they could save data to a file and load it back in as if it was completely new data, thereby tricking the program into accepting calculations which made no sense.

Richard A. O'Keefe in squeak-dev mailing list, December 2002

You are crazy, but that's not important. The only thing that matters is whether or not you do anything. Do anything, and you matter.

Olin Shivers in comp.lang.scheme, April 2000

If people are sane, if the world keeps moving forward, if we intellectuals keep fulfilling our duty of education, then good things will spread, and happiness will rain on earth.

Xah Lee in comp.lang.lisp, July 2000


Lisp Quotes

"Programs must be written for people to read, and only incidentally for machines to execute."

- Abelson & Sussman, SICP, preface to the first edition

"That language is an instrument of human reason, and not merely a medium for the expression of thought, is a truth generally admitted."

- George Boole, quoted in Iverson's Turing Award Lecture

"the greatest single programming language ever designed"

- Alan Kay, on Lisp

"One of the most important and fascinating of all computer languages is Lisp (standing for "List Processing"), which was invented by John McCarthy around the time Algol was invented."

- Douglas Hofstadter, Godel, Escher, Bach

"Lisp is a programmable programming language."

- John Foderaro, CACM, September 1991

"One can even conjecture that Lisp owes its survival specifically to the fact that its programs are lists, which everyone, including me, has regarded as a disadvantage."

- John McCarthy, "Early History of Lisp"

"Lisp isn't a language, it's a building material."

- Alan Kay

"Greenspun's Tenth Rule of Programming: any sufficiently complicated C or Fortran program contains an ad hoc informally-specified bug-ridden slow implementation of half of Common Lisp."

- Philip Greenspun

"Including Common Lisp."

- Robert Morris

"Some may say Ruby is a bad rip-off of Lisp or Smalltalk, and I admit that. But it is nicer to ordinary people."

- Matz, LL2

"We were not out to win over the Lisp programmers; we were after the C++ programmers. We managed to drag a lot of them about halfway to Lisp."

- Guy Steele, Java spec co-author

"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."

- Edsger Dijkstra, CACM, 15:10

"Lisp is a programmer amplifier."

- Martin Rodgers (first said by Chuck Moore about Forth)

"Lisp ... made me aware that software could be close to executable mathematics."

- L. Peter Deutsch

"I object to doing things that computers can do."

- Olin Shivers

"Common Lisp, a happy amalgam of the features of previous Lisps"

- Winston & Horn, Lisp

"Imprisoned in every fat man a thin man is wildly signaling to be let out."

- Cyril Connolly

"Common Lisp is politics, not art."

- Scott Fahlman

"Lisp doesn't look any deader than usual to me."

- David Thornley, reply to a question older than most languages

"If I had a nickel for every time I've written "for (i = 0; i < N; i++)" in C I'd be a millionaire."

- Mike Vanier

"SQL, Lisp, and Haskell are the only programming languages that I've seen where one spends more time thinking than typing."

- Philip Greenspun

"Language designers are not intellectuals. They're not as interested in thinking as you might hope. They just want to get a language done and start using it."

- Dave Moon

"A man, a plan, a canoe, pasta, heros, rajahs, a coloratura, maps, snipe, percale, macaroni, a gag, a banana bag, a tan, a tag, a banana bag again (or a camel), a crepe, pins, Spam, a rut, a Rolo, cash, a jar, sore hats, a peon, a canal-- Panama!"

- Guy Steele, CLTL2

"The continuation that obeys only obvious stack semantics, O grasshopper, is not the true continuation."

- Guy Steele

"I have heard more than one LISP advocate state such subjective comments as, "LISP is the most powerful and elegant programming language in the world" and expect such comments to be taken as objective truth. I have never heard a Java, C++, C, Perl, or Python advocate make the same claim about their own language of choice."

- A guy on Slashdot. What theory fits this data?

"Although my own previous enthusiasm has been for syntactically rich languages, like the Algol family, I now see clearly and concretely the force of Minsky's 1970 Turing Lecture, in which he argued that Lisp's uniformity of structure and power of self reference gave the programmer capabilities whose content was well worth the sacrifice of visual form."

- Robert Floyd, Turing Award Lecture, 1979

"The key to performance is elegance, not battalions of special cases."

- Jon Bentley and Doug McIlroy

"Don't worry about what anybody else is going to do. The best way to predict the future is to invent it."

- Alan Kay

"I suppose I should learn Lisp, but it seems so foreign."

- Paul Graham, Nov 1983

Random Findings


Quotations are indexed alphabetically by their author. For authors with multiple quotations, the quotations are alphabetized by the first word in the quotations.


Programs must be written for people to read, and only incidentally for machines to execute.

- H. Abelson and G. Sussman (in "The Structure and Interpretation of Computer Programs)

A common mistake people make when trying to design something completely foolproof is to underestimate the ingenuity of complete fools.

- D. Adams

Good teaching is more a giving of the right questions than a giving of the right answers.

- J. Albers

They know enough who know how to learn

- J. Adams

Don't worry about people stealing your ideas. If your ideas are any good, you'll have to ram them down people's throats.

- H. Aiken

Eighty percent of success is showing up.

- W. Allen

If you're not failing every now and again, it's a sign you're not doing anything very innovative.

- W. Allen

More is different.

- P. Anderson (attacking the reductionist hypothesis in science, by concluding that quantitatively larger systems can be qualitatively different)

Today, most software exists, not to solve a problem, but to interface with other software.

- I. O. Angell

All programmers are playwrights and all computers are lousy actors.

- Anonymous

Any programming problem can be solved by adding a level of indirection. (also see "Any performance problem..." by M. Haertel).

- Anonymous

At the source of every error which is blamed on the computer, you will find at least two human errors, one of which is the error of blaming it on the computer.

- Anonymous

Debugging is anticipated with distaste, performed with reluctance, and bragged about forever.

- Anonymous

If I had eight hours to chop down a tree, I would spend 6 hours sharpening an axe.

- Anonymous

If you understand what you're doing, you're not learning anything.

- Anonymous

In theory, there is no difference between theory and practice, but not in practice.

- Anonymous

Measure twice, cut once.

- Anonymous

One day a mother comes home from work and asks her son, "What did you do today?" The son replied, "I taught our dog how to play the piano." The mother, incredulous, asked, "Our dog can play the piano?", to which the son laughed and replied, "Of course not mom. I said that I taught him; I didn't say that he learned how."

- Anonymous

Programming languages should be designed not by piling feature on top of feature, but by removing the weaknesses and restrictions that make additional features appear necessary.

- Anonymous, Revised Report on the Algorithmic Language Scheme

Programs for sale: Fast, Reliable, Cheap: choose two.

- Anonymous

Ready, fire, aim (the fast approach to software development).
Ready, aim, aim, aim, aim ... (the slow approach to software development).

- Anonymous

Real programmers don't comment their code. If it was hard to write, it should be hard to understand.

- Anonymous

The best is the enemy of the good.

- Voltaire ("Dramatic Art" in _Philosophical Dictionary, 1764)

The huge printing presses of a major Chicago newspaper began malfunctioning on the Saturday before Christmas, putting all the revenue for advertising that was to appear in the Sunday paper in jeopardy. None of the technicians could track down the problem. Finally, a frantic call was made to the retired printer who had worked with these presses for over 40 years. "We'll pay anything; just come in and fix them," he was told.

When he arrived, he walked around for a few minutes, surveying the presses; then he approached one of the control panels and opened it. He removed a dime from his pocket, turned a screw 1/4 of a turn, and said, "The presses will now work correctly." After being profusely thanked, he was told to submit a bill for his work.

The bill arrived a few days later, for $10,000.00! Not wanting to pay such a huge amount for so little work, the printer was told to please itemize his charges, with the hope that he would reduce the amount once he had to identify his services. The revised bill arrived: $1.00 for turning the screw; $9,999.00 for knowing which screw to turn.

Commentary: most debugging problems are fixed easily; identifying the location of the problem is hard.

- Anonymous

The sooner you get behind in your work, the more time you have to catch up.

- Anonymous

There are only 10 different kinds of people in the world: those who know binary and those who don't.

- Anonymous

Think (design) globally; act (code) locally.

- Anonymous

Time is an excellent teacher; but eventually it kills all its students.

- Anonymous

Weeks of programming can save you hours of planning.

- Anonymous

Why do we never have time to do it right, but always have time to do it over?

- Anonymous

By viewing the old we learn the new.

- Anonymous Chinese Proverb

Give me a fish and I eat for a day. Teach me to fish and I eat for a lifetime.

- Anonymous Chinese Proverb

He who asks is a fool for five minutes; he who does not ask remains a fool forever.

- Anonymous Chinese Proverb

I hear and I forget; I see and I remember; I do and I understand.

- Anonymous Chinese Proverb

Tell me and I forget. Show me and I remember. Involve me and I understand.

- Anonymous Chinese Proverb

The first step towards wisdom is calling things by their right names.

- Anonymous Chinese Proverb

The person who says it cannot be done should not interrupt the person doing it.

- Anonymous Chinese Proverb

He who is ashamed of asking is ashamed of learning.

- Anonymous Danish Proverb

No matter how far down the wrong road you have gone, turn back now.

- Anonymous Turkish Proverb

We are what we repeatedly do. Excellence, then, is not an act, but a habit.

- Aristotle

The most exciting phrase to hear in science -the one that heralds new discoveries- is not "Eureka!" but "That's funny...".

- I. Asimov

The Analytical Engine weaves Algebraical patterns just as the Jacquard loom weaves flowers and leaves.

- A. Augusta, Countess of Lovelace, on Babbage's Analytical Engine


I, myself, have had many failures and I've learned that if you are not failing a lot, you are probably not being as creative as you could be -you aren't stretching your imagination.

- J. Backus

I can only think that the book is read because it deals with the difficulties of schooling, which do not change. Please note: the difficulties, not the problems. Problems are solved or disappear with the revolving times. Difficulities remain. It will always be difficult to teach well, to learn accurately; to read, write, and count readily and competently; to acquire a sense of history and start one's education or anothers.

- J. Barzun ("Begin Here", pp 14),

The American university is built on two false premises: that all teachers must add to the existing stock of knowledge by research, and that all self-respecting institutions fulfill this role only by employing productive scholars...Of course, the teacher must keep reading and thinking abreast of his time, but this does not mean that he must write and publish. The confusion hides a further absurd assumption, which is that when a man writes a scholarly book that reaches a dozen specialists he adds immeasurably to the world's knowledge; whereas if he imparts his thoughts and his reading to one hundred and fifty students every year, he is wasting his time and leaving the world in darkness. One is tempted to ask what blinkered pedant ever launched the notion that students in coming to college seceded from the human race and may therefore be safely left out when knowledge is being broadcast.

- J. Barzun ("Teacher in America"),

The sole justification of teaching, of the school itself, is that the student comes out of it able to do something he could not do before. I say do and not know, because knowledge that doesn't lead to doing something new or doing something better is not knowledge at all.

- J. Barzun ("Begin Here", pp 112),

The truth is, when all is said and done, one does not teach a subject, one teaches a student how to learn it. Teaching may look like administering a dose, but even a dose must be worked on by the body if it is to cure. Each individual must cure his or her own ignorance.

- J. Barzun ("Begin Here", pp 35),

Optimism is an occupational hazard of programming: testing is the treatment.

- K. Beck

The cheapest, fastest, and most reliable components of a computer system are those that aren't there.

- G. Bell

The key to performance is elegance, not batallions of special cases.

- J. Bently & D. McIlroy

Walking on water and developing software from a specification are easy if both are frozen.

- E. Berard

More than the act of testing, the act of designing tests is one of the best bug preventers known. The thinking that must be done to create a useful test can discover and eliminate bugs before they are coded - indeed, test-design thinking can discover and eliminate bugs at every stage in the creation of software, from conception to specification, to design, coding and the rest.

- B. Bezier

There is a division in the student population between those who go to college to learn and those who go to college to earn a diploma.

- J. Blau (letter to the editor, Chronicle of Higher Education, May 24, 2002)

Opposites are not contradictory but complementary.

- N. Bohr

That language is an instrument of human reason, and not merely a medium for the expression of thought, is a truth generally admitted.

- G. Boole

The greatest obstacle to discovery is not ignorance, but the illusion of knowledge.

- D. Boorstin

The most likely way for the world to be destroyed, most experts agree, is by accident. That's where we come in; we're computer professionals. We cause accidents.

- N. Borenstein

Simplicity and flexibility will trump optimization and power in a world where connectivity is the key.

- A. Bosworth (paraphrased by David Bank in Breaking Windows, page 203)

It is important that students bring a certain ragamuffin, barefoot irreverance to their studies; they are not here to worship what is known, but to question it.

- J. Bronowski

Good judgment comes from experience; experience comes from bad judgment.

- F. Brooks

Plan to throw one away; you will anyhow.

- F. Brooks ("The Mythical Man-Month", Chapter 11)

If you plan to throw one away, you will throw away two.

- C. Zerouni

Scientists build to learn; Engineers learn to build.

- F. Brooks

The programmer, like the poet, works only slightly removed from pure thought-stuff. He builds castles in the air, from air, creating by exertion of the imagination. Few media of creation are so flexible, so easy to polish and rework, so readily capable of realizing grand conceptual structures. Yet the program construct, unlike the poet's words, is real in the sense that it moves and works, producing visible outputs separate from the construct itself. It prints results, draws pictures, produces sounds, moves arms. The magic of myth and legend has come true in our time. One types the correct incantation on a keyboard, and a display screen comes to life, showing things that never were nor could be. ... The computer resembles the magic of legend in this respect, too. If one character, one pause, of the incantation is not strictly in proper form, the magic doesn't work. Human beings are not accustomed to being perfect, an few areas of human activity demand it. Adjusting to the requirement for perfection is, I think, the most difficult part of learning to program.

- F. Brooks ("The Mythical Man Month", pages 7-8)

Successful software always gets changed.

- F. Brooks

They may forget what you said, but they will never forget how you made them feel.

- C. Buchner

...and then it occurred to me that a computer is a stupid machine with the ability to do incredibly smart things, while computer programmers are smart people with the ability to do incredibly stupid things. They are, in short, a perfect match.

- B. Bryson

Learning how to learn is life's most important skill.

- T. Buzan


The sooner you start to code, the longer the program will take.

- R. Carlson

We think too much about effective methods of teaching and not enough about effective methods of learning. No matter how good teaching may be, each student must take the responsibility for his own education.

- J. Carolus S.J.

Any sufficiently advanced technology is indistinguishable from magic.

- A. Clarke

We don't have time to stop for gas, we're already late.

- M. Cleron (Commenting on how Software Projects are often Run)

Whenever there is a hard job to be done I assign it to a lazy man; he is sure to find an easy way of doing it.

- W. Chrysler

The real technology -behind all our other technologies- is language. It actually creates the world our consciousness lives in.

- A. Codrescu

Never hesitate to ask a lesser person.

- Confucius

The value of a prototype is in the education it gives you, not in the code itself.

- A. Cooper (in "The Inmates are Running the Asylum")

When the words are fuzzy, the programmers reflexively retreat to the most precise method of articulation available: source code. Although there is nothing more precise than code, there is also nothing more permanent or resistant to change. So the situation frequently crops up where nomenclature confusion drives programmers to begin coding prematurely, and that code becomes the de facto design, regardless of its appropriateness or correctness.

- A. Cooper (in "The Inmates are Running the Asylum")

Doing more things faster is no substitute for doing the right things.

- S. R. Covey

The generation of random numbers is too important to be left to chance.

- R. Coveyou

If you don't think carefully, you might believe that programming is just typing statements in a programming language.

- W. Cunningham


Who dares to teach must never cease to learn.

- J.C. Dana

Every now and then go away, have a little relaxation, for when you come back to your work your judgment will be surer. Go some distance away because then the work appears smaller and more of it can be taken in at a glance and a lack of harmony and proportion is more readily seen.

- L. Da Vinci

If you cannot describe what you are doing as a process, you don't know what you're doing.

- W. E. Deming

Question authority; but, raise your hand first.

- A. Dershowitz

One can think effectively only when one is willing to endure suspense and to undergo the trouble of searching.

- J. Dewey

Besides a mathematical inclination, an exceptionally good mastery of one's native tongue is the most vital asset of a competent programmer.

- E. Dijkstra

Object-oriented programming is an exceptionally bad idea which could only have originated in California

- E. Dijkstra (note: OOP originated in Norway, quite near Holland -Dijkstra's home)

The tools we use have a profound (and devious!) influence on our thinking habits, and, therefore, on our thinking abilities.

- E. Dijkstra

Testing can show the presence of errors, but not their absence.

- E. Dijkstra

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.

- E. Dijkstra (in "The Humble Programmer", his 1972 Turing Award Lecture)

Text is linear; it is black and white; it doesn't zoom around the page in 3-D; it isn't intelligent by itself; in fact, in terms of immediate reaction it is quite boring. I can't imagine a single preliterate was ever wowed at the first sight of text, and yet text has been the basis of arguably the most fundamental intellectual transformation of the human species. It and its subforms, such as algebra, have made science education for all a plausible goal.

- A.diSessa ("Changing Minds: Computers, Learning, and Literacy", MIT Press, 2000; page 112)

There is nothing so useless as doing efficiently that which should not be done at all.

- P. Drucker

The first step in fixing a broken program is getting it to fail repeatably (on the simplest example possible).

- T. Duff


Genius is 1 percent inspiration and 99 percent perspiration. As a result, genius is often a talented person who has simply done all of his homework.

- T. Edison

Any intelligent fool can make things bigger, more complex, and more violent. It takes a touch of genius - and a lot of courage - to move in the opposite direction.

- A. Einstein

Everything should be made as simple as possible, but not simpler.

- A. Einstein

Example isn't another way to teach. It is the only way to teach.

- A. Einstein

If you can't explain it simply, you don't understand it well enough.

- A. Einstein

Imagination is more important than knowledge.

- A. Einstein

Out of clutter, find simplicity. From discord, find harmony. In the middle of difficulty, lies opportunity.

- A. Einstein

Reinventing the wheel is a process.

- R. Elisha

To arrive at the simple is difficult.

- R. Elisha

Shall I tell you the secret of the true scholar? It is this: every man I meet is my master in some point, and in that I learn of him.

- R.W. Emerson

The proof of a high education is the ability to speak about complex matters as simply as possible.

- R.W. Emerson


The structure of a system reflects the structure of the organization that built it.

- R. Fairley

In those days [batch processing] programmers never even documented their programs, because it was assumed that nobody else would ever use them. Now, however, time-sharing had made exchanging software trivial: you just stored one copy in the public repository and therby effectively gave it to the world. Immediately people began to document their programs and to think of them as being usable by others. They started to build on each other's work.

- R. Fano (in Waldrop, "The Dream Machine", pp. 232)

Thus, writing a clever piece of code that works is one thing; designing something that can support a long-lasting business is quite another. Commercial software design and production is, or should be, a rigorous, capital-intensive activity. Software products should be based on a broad, deep structure that can support much more than whatever the product contains at any given time. In addition to code that works, you need documentation, help functions, error handling, multi-platform support, and multiple languages. You also need an underlying architecture that allows you to add and change features, purchase and integrated external software components, and allows other software vendors to make their products talk to yours, add customized widgets to it, embed your product inside something larger of their own. A good architecture, one that will carry you for a decade's worth of unpredictable technology and marked changes, take months to develop. But if you skip this step, as Netscape did, you have made a truly Faustian bargain.

The problem with this [building just what you need, instead of planning ahead] is that these systems start getting ferociously complicated. It comes time to fix a mistake, add a feature, replace something and you discover that everything is connected to everything else in ways you can't even begin to understand. Because you're doing something more ambitious than the initial academic prototype, it's big enough that you need to partition it across a team. The members of the team need to have a clear idea of how their work relates to everyone else's, and they need to be able to communicate to the testers whose job it is to find errors. Otherwise [in other words], you give the patient a kidney transplant and his heart suddenly fails; then you give him a heart drug, but that makes his lungs collapse. You don't know why, and you're screwed.

And then the future comes, and you're really screwed. Later releases of the product inevitably are more complex, because they must continue to support previous version while adding new capabilities. You discover that the original developers have quit or been promoted or have forgotten what they did, and it's time to keep up with the competition by adding new features, supporting more platforms, translating into Japanese, and so forth. The engineering team has to quadruple in size. You start discovering things like three different groups need to change the same piece of code, and each set of changes causes problems for the others, and nobody else can test their work until that piece of code is stable, so a hundred people twiddle their thumbs for a week. Or you want to use an existing function for some new purpose, but you can't isolate it from everything else, so you have to write it all over again. This not only means that you have the extra time and cost of writing and maintaining twice as much code, but you probably have to ensure that the two versions work exactly alike, which they almost certainly won't.

With each successive release, these problems get worse. By the time you're on your fifth release, the decision to do your first product the quick and dirty way has probably cost you ten times what it originally saved. A program like Microsoft's Windows 98 is tens of millions of lines of code. Nobody can keep that much complexity in their head or hope to manage it effectively. So you need an architecture that says to everyone, "Here's how this thing works, and to do your part, you need to understand only these five things, and don't you dare touch anything else."

- C. Ferguson (High Stakes, No Prisoners; Times Business Press, page 107-109)

What I cannot create I do not understand.

- R. Feynman

There does not now, nor will there ever exist, a programming language in which it is the least bit hard to write bad programs.

- L. Flon

An engineer can do for a nickel what any damn fool can do for a dollar.

- H. Ford

Any fool can write code that a computer can understand. Good programmers write code that humans can understand.

- R. Fowler, "Refactoring: Improving the Design of Existing Code"

Awaken people's curiosity. It is enough to open minds, do not overload them. Put there just a spark.

- A. France

Simplicity is the soul of efficiency.

- A. Freeman (in The Eye of Osiris)

When I am working on a problem, I never think about beauty. I think only of how to solve the problem. But when I have finished, if the solution is not beautiful, I know it is wrong.

- B. Fuller

The biggest difference between time and space is that you can't reuse time.

- M. Furst


All truths are easy to understand once they are discovered; the point is to discover them.

- G. Galilie

A complex system that works in invariably found to have evolved from a simple system that worked.

- J. Gall

An excellent plumber is infinitely more admirable than an incompetent philosopher. The society that scorns excellence in plumbing because plumbing is a humble activity and tolerates shoddiness in philosophy because it is exalted activity will have neither good plumbing or good philosophy. Neither its pipes or its theories will hold water.

- J. Gardner

640K [of main memory] ought to be enough for anybody.

- W. Gates (Founder and CEO Microsoft), 1981 - disclaimed

A great lathe operator commands several times the wage of an average lathe operator, but a great writer of software code is worth 10,000 times the price of an average software writer.

- W. Gates

The best way to prepare [to be a programmer] is to write programs, and to study great programs that other people have written. In my case, I went to the garbage cans at the Computer Science Center and fished out listings of their operating systems.

- W. Gates

It is not knowledge, but the act of learning, not possession, but the act of getting there which generates the greatest satisfaction.

- F. Gauss

Beauty is more important in computing than anywhere else in technology because software is so complicated. Beauty is the ultimate defense against complexity. ... The geniuses of the computer field, on the the other hand, are the people with the keenest aesthetic senses, the ones who are capable of creating beauty. Beauty is decisive at every level: the most important interfaces, the most important programming languages, the winning algorithms are the beautiful ones.

- D. Gelernter ("Machine Beauty", Basic Books, 1998)

Good programmers know what's beautiful and bad ones don't.

- D. Gelernter ("Machine Beauty", Basic Books, 1998)

Object-oriented programming as it emerged in Simula 67 allows software structure to be based on real-world structures, and gives programmers a powerful way to simplify the design and construction of complex programs.

- D. Gelernter ("Machine Beauty", Basic Books, 1998)

Vague and nebulous is the beginning of all things, but not their end.

- K. Gibran

Indirection is the right direction.

- A. Glew

Never put off until run time what can be done at compile time.

- A. Glew

A really good language should be both clean and dirty: cleanly designed, with a small core of well understood and highly orthogonal operators, but dirty in the sense that it lets hacker have their way with it....A real hacker's language will always have a slightly raffish character.

- P. Graham (in "Hackers and Painters" pg. 204)

Fixing fresh bugs is easier than fixing old ones. It's usaully fairly quick to find a bug in code you just wrote. When it turns up you often know what's wrong before you even look at the source, because you were already worrying about it subconsciously. Fixing a bug in something you wrote six months aga (the average case if you release once a year) is a lot more work. And since you don't understand the code as well, you're more likely to fix it in an ugly way, or even introduce more bugs.

When you catch bugs early, you also get fewer compound bugs. Compound bugs are two separate bugs that interact: you trip going downstairs, and when you reach for the handrail it come off in your hand. In software this kind of bug is the hardest to find, and also tends to have the worst consequences. The traditional "break everything and then filter out the bugs" approach inherently yields a lot of compound bugs. And software released in a series of small chances inherently tends not to. The floors are constantly being swept clean of any loose objects that might later get stuck to something.

- P. Graham (in "Hackers and Painters" pg. 65-66)

Great software, likewise, requires a fanatical devotion to beauty. If you look inside good software, you find that parts that no one is ever supposed to see are beautiful too. When it comes to code I behave in a way that would make me eligible for prescription drugs if I approached everyday life the same way. It drives me crazy to see code that's badly indented, or that uses ugly variable names.

- P. Graham (in "Hackers and Painters" pg. 29)

The difference between design and research seems to be a question of the good versus the new. Design doesn't have to be new, but it has to be good. Research doesn't have to be good, but it has to be new. I think these two paths converge at the top: the best design surpasses its predecessors by using new ideas, and the best research solves problems that are not only new, but worth solving. So ultimately design and research are aiming for the same destination, just approaching it from different directions.

- P. Graham (in "Hackers and Painters" footnote 9, pg. 224)

The way to make programs easy to read is not to stuff them with comments... A good programming language ought to be better for explaining software than English. You should only need comments when there is some kind of kludge you need to warn readers about, just as on a road there are only arrows on parts with unexpectedly sharp curves.

- P. Graham (in "Hackers and Painters" footnote 9, pg. 224)

You should figure our programs as you're writing them, just as writers and painters and achitects do. Realizing this [programming as sketching] has real implications for software design. It means that a programming language should, above all, be malleable. A programming language is for thinking of programs, not for expressing programs you've already thought of. It should be a pencil, not pen.
Remember too that languages are not primarily a form for finished programs, but someting that programs have to be developed in.
A good programming language should, like oil paint, make it easy to change your mind.
Paintings usually begin with a sketch. Gradually the deails get filled in. But it is not merely a process of filling in. Sometimes the original plans turn out to be mistaken. Countless paintings, when you look at them in x-rays, turn out to have limbs that have been moved or facial features that have been readjusted.
So the test of a language is not simply how clean the finished program looks in it, but how clean the path to the finished program was.
What made oil paint so exciting, when it first became popular in the fifteenth century, was that you could make the finished work from the prototype. You could make a preliminary drawing if you wanted to, but you weren't held to it; you cuold work out all the details, and even make major changes as you finished the painting. You can do this with software too. A prototype doesn't have to be just a model; you can refine it into the finished's good for morale.
Building something by gradually refining a prototype is good for morale because it keeps you engaged. In software, my rule is: always have working code. If you're writing something you'll be able to test in an hour, you have the prospect of an immediate reward to motivate you.

- P. Graham (in "Hackers and Painters" pg. 22, 27, 218, 219, 220, 221)

Any sufficiently complicated C or Fortran program contains an ad hoc informally specified bug-ridden slow implementation of half of Lisp.

- P. Greenspun

UNIX was not designed to stop people from doing stupid things, because that would also stop them from doing clever things.

- D. Gwyn


Any performance problem can be solved by removing a level of indirection. (also see "Any programming problem..." by Anonymous).

- M. Haertel

The tendency to err that programmers have been noticed to share with other human beings has often been treated as though it were an awkwardness attendant upon programing's adolescence, which like acne would disappear with the craft's coming of age. It has proved otherwise.

- M. Halpern

The purpose of computing is insight, not numbers.

- R. Hamming

The speed of a non-working program is irrelevant.

- S. Heller (in "Efficient C/C++ Programming")

Beauty is the first test: there is no permanent place in this world for ugly mathematics.

- G.H. Hardy (in "A Mathematician's Apology")

Refactoring provides enough energy to a system for it to relax into a new and more comfortable state, a new local minimum. The effect of refactoring commonality is to tame the complexity of your system.

- K. Henney (in Minimalism: The Imperial Clothing Crisis)

A process cannot be understood by stopping it. Understanding must move with the flow of the process, must join and flow with it.

- F. Herbert (The First Law of Mentat in "Dune")

It's [programming] the only job I can think of where I get to be both an engineer and an artist. There's an incredible, rigorous, technical element to it, which I like because you have to do very precise thinking. On the other hand, it has a wildly creative side where the boundaries of imagination are the only real limitation.

- A. Hertzfeld (original Mac programmer)

The road to wisdom? Well it plain and simple to express: Err and err and err again, but less and less and less.

- P. Hien

I was eventually persuaded of the need to design programming notations so as to maximize the number of errors which cannot be made, or if made, can be reliably detected at compile time.

- C.A.R. Hoare

In the development of the understanding of complex phenomena, the most powerful tool available to the human intellect is abstraction. Abstraction arises from the recognition of similarities between certain objects, situations, or processes in the real world and the decision to concentrate on these similarities and to ignore, for the time being, their differences.

- C.A.R. Hoare

Inside every well-written large program is a well-written small program.

- C.A.R. Hoare

Premature optimization is the root of all evil in programming.

- C.A.R. Hoare

The unavoidable price of reliability is simplicity.

- C.A.R. Hoare

There are two ways of constructing a software design. One way is to make it so simple that there are obviously no deficiencies. And the other way is to make it so complicated that there are no obvious deficiencies.

- C.A.R. Hoare

The problem is never how to get new, innovative thoughts into your mind, but how to get old ones out!

- D. Hock (founder of VISA)

The ability to simplify means to eliminate the unnecessary so that the necessary may speak.

- H. Hofmann

A ship in port is safe, but that is not what ships are built for. I want all the youngsters to sail out to sea and be good ships.

- G. Hopper

It is easier to ask for forgiveness than it is to get permission.

- G. Hopper

Computer Science is the only discipline in which we view adding a new wing to a building as being maintenance.

- J. Horning

To treat programming scientifically, it must be possible to specify the required properties of programs precisely. Formality is certainly not an end in itself. The importance of formal specifications must ultimately rest in their utility -in whether or not they are used to improve the quality of software or to reduce the cost of producing and maintaining software.

- J. Horning

One purpose of CRC cards [a design tool] is to fail early, to fail often, and to fail inexpensively. It is a lot cheaper to tear up a bunch of cards that it would be to reorganize a large amount of source code.

- C. Horstmann (in Object-Oriented Design with Java)

We [teachers] make the road, others will make the journey.

- V. Hugo



Rules of Optimization:
Rule 1: Don't do it.
Rule 2 (for experts only): Don't do it yet.

- M. A. Jackson

In the practical use of our intellect, forgetting is as important as remembering.

- W. James

The fastest algorithm can frequently be replaced by one that is almost as fast and much easier to understand.

- D. Jones

To teach is to learn twice.

- J. Joubert

We don't manage our time as well as we manage our space. There's an overhead of starting and an overhead of stopping a project because you kind of lose your momentum. And you've got to bracket and put aside all the things you're already doing. So you need reasonably large blocks of uninterrupted time if you're going to be successful at doing some of these things. That's why hackers tend to stay up late.

If you stay up late and you have another hour of work to do, you can just stay up another hour later without running into a wall and having to stop. Whereas it might take three or four hours if you start over, you might finish if you just work that extra hour. If you're a morning person, the day always intrudes a fixed amount of time in the future. So it's much less efficient. Which is why I think computer people tend to be night people -because a machine doesn't get sleepy.

- B. Joy

Mistakes are the portals of discovery.

- J. Joyce


90% of code written today is getting around other people's mistakes.

- A. Kay

Computers are to computing as instruments are to music. Software is the score whose interpretations amplifies our reach and lifts our spirits. Leonardo da Vinci called music the shaping of the invisible, and his phrase is even more apt as a description of software.

- A. Kay

[In a programming language] Simple things should be simple and complex things should be possible.

- A. Kay

The best way to predict the future is to invent it.

- A. Kay

Until real software engineering is developed, the next best practice is to develop with a dynamic system that has extreme late binding in all aspects.

- A. Kay

Should array indices start at 0 or 1? My compromise of 0.5 was rejected without, I thought, proper consideration.

- S. Kelly-Bootle

The study of law is something new and unfamiliar to most of you -unlike any other schooling you have gone through before. Here we use the Socratic method: I call on you; I ask you a question; you answer it. Why don't I just give you a lecture? Because through my questions you learn to teach yourselves. By this method of questioning-answering, questioning-answering, we seek to develop in you the ability to analyze that vast complex of facts that constitutes the relationships of members within a given society. Now, you may think, at times, that you have reached a correct and final answer. I assure you, this is a delusion on your part. You will never reach a final, correct, and ultimate answer. In my classroom, there is always another question; there is always a question to follow your answer. Yes, you are on a treadmill. My little questions spin the tumblers of your brain. You are on an operating table; my little questions are fingers probing your mind. We do brain surgery here. You teach yourselves law and I train your minds. You come in here with a skull full of mush, and you leave thinking like a lawyer.

- Professor Kingsfield (addressing 1st year Harvard Law Students in "The Paper Chase")

Act in haste and repent at leisure; code too soon and debug forever.

- R. Kennington

Controlling complexity is the essence of computer programming.

- B. Kernighan

Everyone knows that debugging is twice as hard as writing a program in the first place. So if you are as clever as you can be when you write it, how will you ever debug it?

- B. Kernighan

The only way to learn a new programming language is by writing programs in it.

- B. Kernighan & D. Ritchie

Computers are good at following instructions, but not at reading your mind.

- D. Knuth (Tex, pg 9)

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.

- D. Knuth

We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil.

- D. Knuth

When I speak about computer programming as an art, I am thinking primarily of it as an art form, in an aesthetic sense. The chief goal of my work as an educator and author is to help people learn how to write beautiful programs...My feeling is that when we prepare a program, the experience can be just like composing poetry or music...Some programs are elegant, some are exquisite, some are sparkling. My claim is that it is possible to write grand programs, noble programs, truly magnificent ones! programming is an art, because it applies accumulated knowledge to the world, because it requires skill and ingenuity, and especially because it produces objects of beauty. Programmers who subconsciously view themselves as artists will enjoy what they do and will do it better.

- D. Knuth (Computer Programming as an Art. Turing Award Speech 1974)

When certain concepts of TeX are introduced informally, general rules will be stated; afterwards you will find that the rules aren't strictly true. In general, the later chapters contain more reliable information than the earlier ones do. The author feels that this technique of deliberate lying will actually make it easier for you to learn the ideas. Once you understand a simple but false rule, it will not be hard to supplement that rule with its exceptions.

- D. Knuth (Tex, pg vi)

If we really understand the problem, the answer will come out of it, because the answer is not separate from the problem.

- J. Krishnamurti

Any sufficiently advanced bug is indistiguishable from a feature.

- R. Kulawiec


There is a race between the increasing complexity of the systems we build and our ability to develop intellectual tools for understanding their complexity. If the race is won by our tools, then systems will eventually become easier to use and more reliable. If not, they will continue to become harder to use and less reliable for all but a relatively small set of common tasks. Given ho hard thinking is, if those intellectual tools are to succeed, they will have to substitute calculation for thought.

- L. Lamport

We think only through the medium of words. Languages are true analytical methods. Algebra, which is adapted to its purpose in every species of expression, in the most simple, most exact, and best manner possible, is at the same time a language and an analytical method. The art of reasoning is nothing more than a language well arranged.

- A. Lavoisier

Learning is never done without errors and defeat.

- V. Lenin

If you want truly to understand something, try to change it.

- K. Lewin

...fielding statistics made sense only as numbers, not as language. Language, not numbers, is what interested him [Bill James, a baseball writer]. Words, and the meaning they were designed to convey. "When the numbers acquire the significance of the language," he later wrote, "they acquire the power to do all the things which language can do: to become fiction and drama an poetry."

- M. Lewis (in Moneyball: The Art of Winning an Unfair Game, page 67)

Complexity is a sign of technical immaturity. Simplicity of use is the real sign of a well design product whether it is an ATM or a Patriot missile.

- D. Ling


In the beginning we must simplify the subject, thus unavoidably falsifying it, and later we must sophisticate away the falsely simple beginning.

- M. Maimonides

Development is maintenance.

- B. Marick

A teacher's job is to take a bunch of live wires and see that they are well-grounded.

- D. Martin

If our designs are failing due to the constant rain of changing requirements, it is our designs that are at fault. We must somehow find a way to make our designs resilient to such changes and protect them from rotting.

- R. Martin

If the only tool you have is a hammer, you tend to see every problem as a nail.

- A. Maslow

It's OK to figure out murder mysteries, but you shouldn't need to figure out code. You should be able to read it.

- S. McConnell

Good code is its own best documentation. As you're about to add a comment, ask yourself, "How can I improve the code so that this comment isn't needed?" Improve the code and then document it to make it even clearer.

- S. McConnell

Formal methods will never have a significant impact until they can be used by people that don't understand them.

- T. Melham

Programming is similar to a game of golf. The point is not getting the ball in the hole but how many strokes it takes.

- H. Mills

The only way for errors to occur in a program is by being put there by the author. No other mechanisms are known. Programs can't acquire bugs by sitting around with other buggy programs. Right practice aims at preventing insertion of errors and, failing that, removing them before testing or any other running of the program.

- H. Mills

Making the simple complicated is commonplace; making the complicated simple, awesomely simple, that's creativity.

- C. Mingus

A computer is like a violin. You can imagine a novice trying first a phonograph and then a violin. The latter, he says, sounds terrible. That is the argument we have heard from our humanists and most of our computer scientists. Computer programs are good, they say, for particular purposes, but they aren't flexible. Neither is a violin, or a typewriter, until you learn how to use it.

- M. Minsky (in "Why Programming Is a Good Medium for Expressing Poorly-Understood and Sloppily-Formulated Ideas")

Language designers are not intellectuals. They're not as interested in thinking as you might hope. They just want to get a language done and start using it.

- D. Moon

He who hasn't hacked assembly langauge as a youth has no heart. He who does so as an adult has no brain.

- J Moore

Computer science is to biology what calculus is to physics. It's the natural mathematical technique that best maps the character of the subject.

- H. Morowitz

A little inaccuracy sometimes saves tons of explanation.

- H.H. Munro


You have to honor failure, because failure is just the negative space around success.

- R. Nelson (in Wired 06/2004 page 166)

In mathematics you don't understand things. You just get used to them.

- J. von Neumann

Millions for compilers, but hardly a penny for understanding human programming language use. Now, programming languages are obviously symmetrical, the computer on one side, the human on the other. In an appropriate science of computer languages, one would expect that half the effort would be on the computer side, understanding how to translate the languages into executable form, and half on the human side, understanding how to design languages that are easy or productive to use. Yet, we do not even have an enumeration of all the psychologicial functions programing languages serve for the user. Of course, there is lots of programming language design, but it comes from computer scientists. And though technical papers on languages contain main appeals to ease of use and learning, they patently contain almost no psychologicial evidence nor any appeal to psychological science.

- A. Newell and S. Card


There is no reason anyone would want a computer in their home.

- K. Olsen (Founder and President, Digital Equipment Corporation), 1977


As a rule, software systems do not work well until they have been used, and have failed repeatedly, in real applications.

- D. Parnas

A programming language is like a natural, human language in that it favors certain methaphors, images, and ways of thinking.

- S. Papert (in "Mindstorms: Children, Computers, and Powerfule Ideas", 1980)

If I had more time, I would have written a shorter letter.

- B. Pascal

Chance favors the prepared mind.

- L. Pasteur

A class, in Java, is where we teach objects how to behave.

- R. Pattis

Code should run as fast as necessary, but no faster; something important is always traded away to increase speed.

- R. Pattis

If you cannot grok the overall structure of a program while taking a shower [e.g., with no external memory aids], you are not ready to code it.

- R. Pattis

Programming languages, like pizzas, come in only two sizes; too big and too small.

- R. Pattis

The discipline of programming is most like sorcery. Both use precise language to instruct inanimate objects to do our bidding. Small mistakes in programs or spells can lead to completely unforseen behavior: e.g., see the story, "The Sorcerer's Apprentice". Neither study is easy: "...her [Galinda's] early appetite for sorcery had waned once she'd heard what a grind it was to learn spells and, worse, to understand them." from the book "Wicked" by G. Maguire.

- R. Pattis

The purpose of brakes on a car is to allow you to go fast. Although the gas pedal makes you go fast, the brake pedal allows you to drive safely while going fast. The purpose of a strict compiler (one that performs type checking, uninitialized variable checking, reachability analysis, etc.) is to allow you to program fast. Programmers -like all humans- have limited intellects: when they focus on one aspect of a program, they must ignore other ones. Focusing on the right aspect at the right time is critical. By carefully ignoring those aspects that the compiler can check, you can focus on more important ones. Some programmers think that such an approach is reckless; they believe that you must pay close attention to everything at once. They are right -for them; but I'm just not that smart, so I must use my tools more effectively.

- R. Pattis

The structure of a software system provides the ecology in which code is born, matures, and dies. A well-designed habitat allows for the successful evolution of all the components needed in a software system.

- R. Pattis

The three most important aspects of debugging and real estate are the same: Location, Location, and Location.

- R. Pattis

There is a famous rule in performance optimization called the 90/10 rule: 90% of a program's execution time is spent in only 10% of its code. The standard inference from this rule is that programmers should find that 10% of the code and optimize it, because that's the only code where improvements make a difference in the overall system performance. But a second inference is just as important: programmers can deoptimize the other 90% of the code (in order to make it easier to use, maintain, etc.), because deterioration (of performance) of that code won't make much of a diffence in the overall system performance.

- R. Pattis

When debugging, novices insert corrective code; experts remove defective code.

- R. Pattis

When teaching a rapidly changing technology, perspective is more important than content.

- R. Pattis

When building a complex system, having crackerjack programmers (who can make any design work, even a bad one) can be a liability. The result, after lots of effort, is a working system that cannot be easily maintained or upgraded. Good -but not great- programmers would fail early, causing a realization that the system must be redesigned, and then reimplemented. The extra cost is paid once, early in the system's cycle (when it is cheap), instead of repeatedly paid late in the system's cycle (when it is more expensive).

- R. Pattis

Don't tell people how to do things. Tell them what to do and let them surprise you with their results.

- G. Patton

The best way to get a good idea is to get a lot of ideas.

- L. Pauling

A good programming language is a conceptual universe for thinking about programming.

- A. Perlis

Fools ignore complexity; pragmatists suffer it; experts avoid it; geniuses remove it.

- A. Perlis

I think it is inevitable that people program poorly. Training will not substantially help matters. We have to learn to live with it.

- A. Perlis

I think that it's extraordinarily important that we in computer science keep fun in computing. When it started out, it was an awful lot of fun. Of course, the paying customers got shafted every now and then, and after a while we began to take their complaints seriously. We began to feel as if we really were responsible for the successful, error-free perfect use of these machines. I don't think we are. I think we're responsible for stretching them, setting them off in new directions, and keeping fun in the house. I hope the field of computer science never loses its sense of fun.

- A. Perlis

It goes against the grain of modern education to teach students to program. What fun is there to making plans, acquiring discipline, organizing thoughts, devoting attention to detail, and learning to be self critical.

- A. Perlis

It is easier to write an incorrect program than understand a correct one.

- A. Perlis

Optimization hinders evolution.

- A. Perlis

Simplicity does not precede complexity, but follows it.

- A. Perlis

There are two ways to write error-free programs, but only the third one works.

- A. Perlis

To understand a program, you must become both the machine and the program.

- A. Perlis

You think you KNOW when you learn, are more sure when you can write, even more when you can teach, but certain when you can program.

- A. Perlis

I am always doing that which I cannot do, in order that I may learn how to do it.

- P. Picasso

Computers are useless. They only give you answers.

- P. Picasso

Fancy algorithms are slow when N is small, and N is usually small.

- R. Pike

Fancy optimizers have fancy bugs.

- R. Pike

The mind is not a vessel to be filled, but a fire to be ignited.

- Plutarch (See W.B. Yeats: Education...)

Computers in the future may weigh no more than 1.5 tons.

- Popular Science (1959)

Knowledge of a subject means knowledge of the language of that subject, which includes not only what its words mean, but far more important, how its words mean. As one learns the language of a subject, one is also learning what the subject is. It cannot be said often enough that what we call a subject consists mostly, if not entirely, of its language. If you eliminate all the words of a subject, you have eliminated the subject. Biology is not plants and animals. It is language about plants and animals. History is not events. It is language describing and interpreting events. Astronomy is not planets and stars. It is a way of talking about planets and stars.

- N. Postman

Gates has always understood Moore's Law better than anyone else in the industry. If you can make something run at all, get it out there -it may be slow and clunky, but hardware improvements will bail you out. If you wait until it's running perfectly on the hardware already in the field, it will be obsolete before it's released. This philosophy built Microsoft and is the main reason Microsoft won the war IBM declared back in the OS/2 days.

- J. Pournelle (Dr. Dobbs Journal, Feb. 2004, pp. 89)

The voyage of discovery is not in seeking new landscapes but in having new eyes.

- M. Proust

I really hate this darn machine;
I wish that they would sell it.
It won't do what I want it to,
but only what I tell it.

- Programmer's Lament



Computer Science is the first engineering discipline in which the complexity of the objects created is limited solely by the skill of the creator, and not by the strength of raw materials.

- B. Reid

All of us had been trained by Kelly Johnson [designer of the Lockheed SR-71] and believed fanatically in his insistence that an airplane that looked beautiful would fly the same way.

- B. Rich (in "Skunk Works")

In time of profound change, the learners inherit the earth, while the learned find themselves beautifully equipped to deal with a world that no longer exists.

- A. Rogers

God is in the details.

- M. van der Rohe

Less is more.

- M. van der Rohe

Don't you hate code that's not properly indented? Making it [indenting] part of the syntax guarantees that all code is properly indented.

- G. van Rossum

The highest reward for a person's toil is not what they get for it, but what they become by it.

- J. Ruskin

Language serves not only to express thought but to make possible thoughts which could not exist without it.

- B. Russell


A designer knows he's achieved perfection not when there is nothing left to add, but when there is nothing left to take away.

- A. de Saint-Exupery

If you want to build a ship, don't drum up the men to gather wood, divide the work and give orders. Instead, teach them to yearn for the vast and endless sea.

- A. de Saint-Exupery

Questions are the important thing, answers are less important. Learning to ask a good question is the heart of intelligence. Learning the answer---well, answers are for students. Questions are for thinkers.

- R. Schank (in "The Connosseur's Guide to the Mind")

There is one very good reason to learn programming, but it has nothing to do with preparing for high-tech carerrs or with making sure one is computer literate in order to avoid being cynically manipulated by the computers of the future. The real value of learning to program can only be understood if we look at learning to program as an exercise of the intellect, as a kind of modern-day Latin that we learn to sharpen our minds.

- R. Schank (in "The Cognitive Computer)

Always do the hard part first. If the hard part is impossible, why waste time on the easy part? Once the hard part is done, you're home free.

Always do the easy part first. What you think at first is the easy part often turns out to be the hard part. Once the easy part is done, you can concentrate all your efforts on the hard part.

- A. Schapira

Microsoft knows that reliable software is not cost effective. According to studies, 90% to 95% of all bugs are harmless. They're never discovered by users, and they don't affect performance. It's much cheaper to release buggy software and fix the 5% to 10% of bugs people find and complain about.

- B. Schneier

If the code and the comments disagree, then both are probably wrong.

- N. Schryer

Always to see the general in the particular is the very foundation of genius.

- A. Schopenhauer

Data is not information, Information is not knowledge, Knowledge is not understanding, Understanding is not wisdom.

- Gary Schubert (extending Cliff Stoll in "Silicon Snake Oil")

Any intelligent fool can make things bigger and more complex. It takes a touch of genius -and a lot of courage- to move in the opposite direction

- E.F. Schumacher

And simple truth miscalled simplicity,

- W. Shakespeare (Sonnet 66)

I'd rather write programs to write programs than write programs.

- D. Sites

I cannot teach anybody anything, I can only make them think.

- Socrates

One must learn by doing the thing; for though you think you know it, you have no certainty, until you try.

- Sophocles

Computers do not solve problems -computers carry out solutions, specified by people, to problems.

- D. D. Spencer

Being forced to write comments actually improves code, because it is easier to fix a crock than to explain it.

- G. Steele

Don't get suckered in by the comments -they can be terribly misleading: Debug only the code.

- D. Storer

Design and programming are human activities; forget that and all is lost.

- B. Stroustrup

It is my firm belief that all successful languages are grown and not merely designed from first principles

- B. Stroustrup (in The Desing and Evolution of C++)

There are only two kinds of programming languages: those people always bitch about and those nobody uses.

- B. Stroustrup

I have learned throughout my life as a composer chiefly through my mistakes and pursuits of false assumptions, not my exposure to founts of wisdom and knowledge.

- I. Stravinsky

Omit needless words. Vigorous writing is concise. A sentence should contain no unnecessary words, a paragraph no unnecessary sentences, for the same reason that a drawing should have no unnecessary lines and a machine no unnecessary parts.

- W Strunk Jr (in The Elements of Style)

Rewrite and revise. Do not be afraid to seize what you have and cut it to ribbons ... Good writing means good revising.

- W Strunk Jr (in The Elements of Style)

In engineering, as in other creative arts, we must learn to do analysis to support our efforts in synthesis. One cannot build a beautiful and functional bridge without a knowledge of steel and dirt, and a considerable mathematical technique for using this knowledge to compute the properties of structures. Similarly, one cannot build a beautiful computer system without a deep understanding of how to "previsualize" the process generated by the code one writes.

- G. Sussman

It is a bad plan that admits of no modification.

- P. Syrus


A programming language is a system of notation for describing computations. A useful programming language must therefore be suited for both description(i.e., for human writers and readers of programs) and for computation (i.e., for efficient implementation on computers). But human beings and computers are so different that it is difficult to find notational devices that are well suited to the capabilities of both.

- R. Tennant (Principles of Programming Languages, Prentice Hall, 1981)

The function of genius is not to give new answers, but to pose new questions which time and mediocrity can resolve.

- H. Trevor-Howard

It is better to have an approximate answer to the right question than an exact answer to the wrong one.

- J. Tukey

We shall do a much better programming job, provided we approach the task with a full appreciation of its tremendous difficulty, provided that we respect the intrinsic limitations of the human mind and approach the task as very humble programmers.

- A. Turing


He [John von Neumann] had the invaluable faculty of being able to take the most difficult problem and separate it into its components, whereupon everything looked brlliantly simple.

- S. Ulam (Bull. of American Mathematical Society, May 1958)


It's easy to cry "bug" when the truth is that you've got a complex system and sometimes it takes a while to get all the components to co-exist peacefully.

- D. Vargas


The mediocre teacher tells. The good teacher explains. The superior teacher demonstrates. The great teacher inspires.

- W. A. Ward

I think there is a world market for maybe five computers.

- T. J. Watson (Founder and Chairman, IBM), 1943

If you want to increase your success rate, double your failure rate.

- T. J. Watson

The computer programmer ... is a creator of universes for which he alone is the lawgiver ... universes of virtually unlimited complexity can be created in the form of computer programs. Moreover ... systems so formulated and elaborated act out their programmed scripts. They compliantly obey their laws and vividly exhibit their obedient behavior. No playwright, no stage director, no emperor, however powerful, has ever exercised such absolute authority to arrange a stage or a field of battle and to command such unswervingly dutiful actors or troops.

- J. Weizenbaum (Computer Power and Human Reason, page 115)

The best writing is rewriting.

- E. B. White

By relieving the brain of all unnecessary work, a good notation sets it free to concentrate on more advanced problems, and in effect increases the mental power of the race.

- A. N. Whitehead

It is a profoundly erroneous truism, repeated by all the copybooks, and by eminent people when they are making speeches, that we should cultivate the habit of thinking what we are doing. The precise opposite is the case. Civilization advances by extending the number of operations which we can perform without thinking about them. Operations of thought are like cavalry charges in a battle -they are strictly limited in number, they require fresh horses, and must only be made at decisive moments.

- A. N. Whitehead (in "An Introduction to Mathematics")

As soon as we started programming, we found out to our surprise that it wasn't as easy to get programs right as we had thought. Debugging had to be discovered. I can remember the exact instant when I realized that a large part of my life from then on was going to be spent in finding mistakes in my own programs.

- M. Wilkes

Furious activity is no substitute for understanding.

- H. H. Williams

From a programmer's point of view, the user is a peripheral that types when you issue a read request.

- P. Williams

He knows the course forwards and backwards. He teaches it backwards

- S. Willoughby (commenting on Garrett Birkhoff's freshman calculus course at Harvard
in "The Other End of the Log: Memoirs of an Education Rebel")

Don't ask what it means, but rather how it is used.

- L. Wittgenstein

Increasingly, people seem to misinterpret complexity as sophistication, which is baffling -the incomprehensible should cause suspicion rather than admiration. Possibly this trend results from a mistaken belief that using a somewhat mysterious device confers an aura of power on the user.

- N. Wirth

The limits of your language are the limits of your world.

- L. Wittgenstein

More bugs have been introduced into programs through premature optimization than any other cause, including pure stupidity. (sometimes quoted as, "More computing sins are committed in the name of efficiency (without necessarily achieving it) than for any other single reason -including blind stupidity.")

- W. Wulf



Education is not the filling of a pail, but the lighting of a fire.

- W.B. Yeats (See Plutarch: The mind...)


Technical skill is mastery of complexity, while creativity is mastery of simplicity.

- E. C. Zeeman

Who is wise? He who learns from all it is said: "From all my teachers I gained understanding".

- B. Zoma (Psalms 119:99)

Recommended Links

Softpanorama hot topic of the month

Softpanorama Recommended

Collections of Related and Other Quotes

Juan Flores' collection of chistes

In Edsger's Words – a selection of Dijkstra quotes (in 10M .pdf)

Perlisisms — “Epigrams in Programming” by Alan J. Perlis

Quotes at the Programming Languages Weblog (indexed by author)

Quotes for Programmers at

Quotes on the Theory of Computing

AMK's Commonplace Book

The Unnamed One's quotes

Glenn Vanderburg's quotes

Matthias Felleisen's quotes

Mike DeMaria's quotes

Scott T. Gray's quotes

Paul Graham's quotes

Peter Norvig's quotes

MarkD's quotes


FAIR USE NOTICE This site contains copyrighted material the use of which has not always been specifically authorized by the copyright owner. We are making such material available in our efforts to advance understanding of environmental, political, human rights, economic, democracy, scientific, and social justice issues, etc. We believe this constitutes a 'fair use' of any such copyrighted material as provided for in section 107 of the US Copyright Law. In accordance with Title 17 U.S.C. Section 107, the material on this site is distributed without profit exclusivly for research and educational purposes.   If you wish to use copyrighted material from this site for purposes of your own that go beyond 'fair use', you must obtain permission from the copyright owner. 

ABUSE: IPs or network segments from which we detect a stream of probes might be blocked for no less then 90 days. Multiple types of probes increase this period.  


Groupthink : Two Party System as Polyarchy : Corruption of Regulators : Bureaucracies : Understanding Micromanagers and Control Freaks : Toxic Managers :   Harvard Mafia : Diplomatic Communication : Surviving a Bad Performance Review : Insufficient Retirement Funds as Immanent Problem of Neoliberal Regime : PseudoScience : Who Rules America : Neoliberalism  : The Iron Law of Oligarchy : Libertarian Philosophy


War and Peace : Skeptical Finance : John Kenneth Galbraith :Talleyrand : Oscar Wilde : Otto Von Bismarck : Keynes : George Carlin : Skeptics : Propaganda  : SE quotes : Language Design and Programming Quotes : Random IT-related quotesSomerset Maugham : Marcus Aurelius : Kurt Vonnegut : Eric Hoffer : Winston Churchill : Napoleon Bonaparte : Ambrose BierceBernard Shaw : Mark Twain Quotes


Vol 25, No.12 (December, 2013) Rational Fools vs. Efficient Crooks The efficient markets hypothesis : Political Skeptic Bulletin, 2013 : Unemployment Bulletin, 2010 :  Vol 23, No.10 (October, 2011) An observation about corporate security departments : Slightly Skeptical Euromaydan Chronicles, June 2014 : Greenspan legacy bulletin, 2008 : Vol 25, No.10 (October, 2013) Cryptolocker Trojan (Win32/Crilock.A) : Vol 25, No.08 (August, 2013) Cloud providers as intelligence collection hubs : Financial Humor Bulletin, 2010 : Inequality Bulletin, 2009 : Financial Humor Bulletin, 2008 : Copyleft Problems Bulletin, 2004 : Financial Humor Bulletin, 2011 : Energy Bulletin, 2010 : Malware Protection Bulletin, 2010 : Vol 26, No.1 (January, 2013) Object-Oriented Cult : Political Skeptic Bulletin, 2011 : Vol 23, No.11 (November, 2011) Softpanorama classification of sysadmin horror stories : Vol 25, No.05 (May, 2013) Corporate bullshit as a communication method  : Vol 25, No.06 (June, 2013) A Note on the Relationship of Brooks Law and Conway Law


Fifty glorious years (1950-2000): the triumph of the US computer engineering : Donald Knuth : TAoCP and its Influence of Computer Science : Richard Stallman : Linus Torvalds  : Larry Wall  : John K. Ousterhout : CTSS : Multix OS Unix History : Unix shell history : VI editor : History of pipes concept : Solaris : MS DOSProgramming Languages History : PL/1 : Simula 67 : C : History of GCC developmentScripting Languages : Perl history   : OS History : Mail : DNS : SSH : CPU Instruction Sets : SPARC systems 1987-2006 : Norton Commander : Norton Utilities : Norton Ghost : Frontpage history : Malware Defense History : GNU Screen : OSS early history

Classic books:

The Peter Principle : Parkinson Law : 1984 : The Mythical Man-MonthHow to Solve It by George Polya : The Art of Computer Programming : The Elements of Programming Style : The Unix Hater’s Handbook : The Jargon file : The True Believer : Programming Pearls : The Good Soldier Svejk : The Power Elite

Most popular humor pages:

Manifest of the Softpanorama IT Slacker Society : Ten Commandments of the IT Slackers Society : Computer Humor Collection : BSD Logo Story : The Cuckoo's Egg : IT Slang : C++ Humor : ARE YOU A BBS ADDICT? : The Perl Purity Test : Object oriented programmers of all nations : Financial Humor : Financial Humor Bulletin, 2008 : Financial Humor Bulletin, 2010 : The Most Comprehensive Collection of Editor-related Humor : Programming Language Humor : Goldman Sachs related humor : Greenspan humor : C Humor : Scripting Humor : Real Programmers Humor : Web Humor : GPL-related Humor : OFM Humor : Politically Incorrect Humor : IDS Humor : "Linux Sucks" Humor : Russian Musical Humor : Best Russian Programmer Humor : Microsoft plans to buy Catholic Church : Richard Stallman Related Humor : Admin Humor : Perl-related Humor : Linus Torvalds Related humor : PseudoScience Related Humor : Networking Humor : Shell Humor : Financial Humor Bulletin, 2011 : Financial Humor Bulletin, 2012 : Financial Humor Bulletin, 2013 : Java Humor : Software Engineering Humor : Sun Solaris Related Humor : Education Humor : IBM Humor : Assembler-related Humor : VIM Humor : Computer Viruses Humor : Bright tomorrow is rescheduled to a day after tomorrow : Classic Computer Humor

The Last but not Least

Copyright © 1996-2016 by Dr. Nikolai Bezroukov. was created as a service to the UN Sustainable Development Networking Programme (SDNP) in the author free time. This document is an industrial compilation designed and created exclusively for educational use and is distributed under the Softpanorama Content License.

The site uses AdSense so you need to be aware of Google privacy policy. You you do not want to be tracked by Google please disable Javascript for this site. This site is perfectly usable without Javascript.

Original materials copyright belong to respective owners. Quotes are made for educational purposes only in compliance with the fair use doctrine.

FAIR USE NOTICE This site contains copyrighted material the use of which has not always been specifically authorized by the copyright owner. We are making such material available to advance understanding of computer science, IT technology, economic, scientific, and social issues. We believe this constitutes a 'fair use' of any such copyrighted material as provided by section 107 of the US Copyright Law according to which such material can be distributed without profit exclusively for research and educational purposes.

This is a Spartan WHYFF (We Help You For Free) site written by people for whom English is not a native language. Grammar and spelling errors should be expected. The site contain some broken links as it develops like a living tree...

You can use PayPal to make a contribution, supporting development of this site and speed up access. In case is down you can use the at


The statements, views and opinions presented on this web page are those of the author (or referenced source) and are not endorsed by, nor do they necessarily reflect, the opinions of the author present and former employers, SDNP or any other organization the author may be associated with. We do not warrant the correctness of the information provided or its fitness for any purpose.

Created: November 1, 1996; Last modified: October 18, 2014