The key to performance is elegance, not battalions of special cases.
— Jon Bentley and Doug McIlroy
The three virtues of a programmer: laziness, impatience, and hubris.
— Larry Wall
Dogmatism over minutiae is the purview of the intellectually weak.
— C++ FAQ
The unavoidable price of reliability is simplicity.
— Sir C.A.R. (Tony) Hoare (inventor of "Quicksort")
If you think it's simple, then you have misunderstood the problem.
— Bjarne Stroustrup
Software development processes exist to manage the bell curve of ability in developers.
— Ted Dziuba
I now have had my foggy crystal ball for quite a long time. Its predictions are invariably gloomy and usually
correct, but I am quite used to that and they won't keep me from giving you a few suggestions, even if it is merely
an exercise in futility whose only effect is to make you feel guilty.
— E. W.
Dijkstra
Not even vi uses vi key bindings for its command line.
— PdS
Knowledge is just opinion that you trust enough to act upon.
— Orson Scott Card
To keep large programs well structured, you either need superhuman will power, or proper language support for
interfaces.
— Greg Nelson
You think you know when you can learn, are more sure when you can write, even more when you can teach, but certain
when you can program.
— Alan Perlis
The moral of the story is that with a contrived example, you can prove anything.
— Joe Spolsky
Systems have sub-systems and sub-systems have sub-systems and so on ad infinitum-which is why we're always starting
over.
— Alan Perlis
The most important single aspect of software development is to be clear about what you are trying to build.
— Bjarne Stroustrup
Problems cannot be solved at the same level of awareness that created them.
— Einstein
Mediocre design provably wastes the world's resources, corrupts the environment, affects international
competitiveness. Design is important.
— Fred Brooks, The Design of Design
No amount of genius can overcome a preoccupation with detail.
— Levy's Eighth Law
But I will argue that knowing complete product requirements up front is a quite rare exception, not the norm.
— Fred Brooks, The Design of Design
Too many of today's real-time systems built with an RTOS are working by luck. Excess processing power may be masking
design and analysis sins or the worst-case just hasn't happened-yet.
— Michael Barr
It is far, far easier to make a correct program fast than it is to make a fast program correct.
— Herb Sutter
Trying to outsmart a compiler defeats much of the purpose of using one.
— Brian Kernighan & P.J. Plauger
How hard can it be? What can go wrong?
— Jack Crenshaw, http://www.embedded.com/columns/programmerstoolbox/196601281
Better a poor steam engine that runs, than a good one never finished.
— R. G. Le Tourneau
Never put off until tomorrow what you can put off forever.
— P.J. Plauger, http://www.embedded.com/columns/programmerstoolbox/213401635?pgno=2)
The software industry is in the same state of affairs that the pharmaceutical industry was in during the late
nineteenth century.
— Alan M. Davis
Great Designs Come from Great Designers: Not from Great Design Processes.
— Fred Brooks
Proof by analogy is fraud.
— Bjarne Stroustrup
One test result is worth one thousand expert opinions.
— Wernher Von Braun
Men and months are interchangeable commodities only when a task can be partitioned among many workers with no
communication among them.
— Fred Brooks
Predictability and great design are not friends.
— Fred Brooks, The Design of Design
Peel back the facade of rigorous methodology projects and ask why the project was successful, and the answer [is]
people.
— Jim Highsmith, Agile Software Development Ecosystems
Simplicity is a prerequisite for reliability.
— E. W. Dijkstra
A program is no place to put crib notes on language semantics.
— Stephen C. Dewhurst, C++ Common Knowledge: Essential Intermediate Programming
Consensus processes starve innovative design by eating the resource.
— Fred Brooks, The Design of Design
The cheapest, fastest and most reliable components of a computer system are those that aren't there.
— Gordon Bell
Missing requirements are the hardest requirements errors to correct.
— Robert L. Glass, The Facts and Fallacies of Software Engineering
90% of the functionality delivered now is better than 100% delivered never.
— Kernighan & Plauger
One of the things I hated most about agile is when management decides to "be" agile, only they don't want to change
anything.
— Daniel Markham, in Agile Ruined My Life
Of the differing pronunciations of Niklaus Wirth's surname it is said that Europeans call him by name but Americans
call him by value.
— laonianren, http://blogs.msdn.com/b/oldnewthing/archive/2011/03/23/10144592.aspx#comments
It seems that all too often the ability to write code and the ability to put a meaningful sentence together are
inversely correlated.
— Nigel Jones
As a rule of thumb the requirement for parallelism and concurrency within a piece of software should be discovered
and not introduced.
— Cameron Hughes
The Waterfall Model is wrong and harmful; we must outgrow it.
— Fred Brooks, The Design of Design
Since FORTRAN should virtually eliminate coding and debugging, it should be possible to solve problems for less than
half the cost that would be required without such a system.
— IBM54, at the release of FORTRAN
We can solve any problem by introducing an extra level of indirection.
— Butler Lampson (AKA "The Fundamental Theorem of Software Engineering", according to
Andrew Koenig)
Multitasking is the enemy of focus.
— Unknown, found http://www.betterprojects.net/2010/12/multitasking-is-enemy-of-focus.html
Organizational busy work tends to expand to fill the working day.
— Tom DeMarco's "slight variation" on Parkinson's Law
Product procedure...must securely protect the crown jewels, but, equally important, it must eschew building high
fences around the garbage cans.
— Fred Brooks, The Design of Design
Simplify Essential Complexity; Diminish Accidental Complexity
— Neal Ford, 97 Things Every Architect Should Know
A design style is defined by a set of microdecisions. A clear style reflects a consistent set. A clear style may not
be a good style; a muddled one never is.
— Fred Brooks, The Design of Design
GAD's Maxim #1: Network designs are based on Politics, Money, and The right way to do it — in that
order.
— Gary A. Donahue
If we knew what we were doing, it would not be called research, would it?
— Albert Einstein
For every expert there is an equal and opposite expert.
— Arthur C. Clark
Software work is the most complex that humanity has ever undertaken.
— Fred Brooks, The Mythical Man-Month
I've been told that I can be a perfectionist — but I'm working on that and expect that I can improve
myself.
— Forrest Shull
Better to be wrong while being right than to be right while missing the point...
— Michael S. Kaplan
Originality is no excuse for ignorance.
— Fred Brooks, The Design of Design
Design work doesn't just satisfy requirements, it elicits them.
— Fred Brooks, The Design of Design
There are 10 types of people in this world: those who understand binary and those who don't.
The primary purpose of software estimation is not to predict a project's outcome; it is to determine whether a
project's targets are realistic enough to allow the project to be controlled to meet them.
— Steve McConnell
Process improvement is most valuable in raising the floor of a community's practice.
— Fred Brooks, The Design of Design
Those missing components are also the most accurate (they never make mistakes), the most secure (they can't be
broken into), and the easiest to design, document, test and maintain. The importance of a simple design can't be
overemphasized.
— Jon Bentley
The central tension in the software process comes from the fact that we must go from an informally identified need
that exists in-the-world to a formal model that operates in-the-computer.
— Bruce Blum
Technical skill is mastery of complexity while creativity is mastery of simplicity.
— E.C. Zeeman
If you have unskilled people who work poorly together, no amount of process will save your projects.
— Jim Highsmith
Simple, clear purpose and principles give rise to complex, intelligent behavior.
Complex rules and regulations give rise to simple, stupid behavior.
— Dee Hock
Plans are nothing, Planning is everything.
— Gen. Dwight Eisenhower
There is a general principle here: If you're not willing to force a failure, you probably don't know what the actual
effects of a failure would be. You may think you know, but you don't.
— Andrew Koenig
Men of lofty genius when they are doing the least work are the most active.
— Leonardo da Vinci
People who are building applications are in fact building languages; fundamentally, programming has to do with
developing languages suitable for particular applications.
— Adin Falkoff
All of life is iterative. It goes back to the point I made earlier, which is you can't a priori know enough to even
ask the right questions.
— Grady Booch
Entrepreneurship boils down to the simple fact that a team of really smart people who can get things done are going
to get smart, useful things done.
— Joel Spolsky
Simple rules guide innovative, intelligent responses. Comprehensive rules guide rote, routine responses.
— Jim Highsmith
Software is hard.
— Donald Knuth, All
Questions Answered
What this means in practical terms is that we are never quite sure whether a real-time system will be satisfactory
until we have actually constructed it (and, sometimes, not even then).
— Bran Selic, Garth Gullekson, Paul T. Ward
If you find that your organization can't make the hard decisions that Scrum demands, then high-risk, uncertain
projects have very little probability of success in your organization.
— Jim Highsmith
Opportunistic reuse != product line development.
— Scott Gray
Everything outside a three-month window is the area of well-documented ignorance. (re PERT charts)
— Ken Orr
Architecture is a hypothesis about the future that holds that subsequent change will be confined to that part of the
design space encompassed by that architecture.
— Brian Foote & Joseph Yoder, The
Big Ball of Mud
Too many managers and executives try to reduce programming to a low-level assembly-line activity. That's
inefficient, wasteful, costly in the long run, and inhumane to programmers.
— Bjarne Stroustrup
Hofstadter's Law: It always takes longer than you expect, even when you take into account Hofstadter's Law.
A language that doesn't affect the way you think about programming is not worth knowing.
— Alan Perlis
Data is not information, information is not knowledge, knowledge is not understanding, understanding is not
wisdom.
— Clifford Stoll
It is hard to write even the smallest piece of code correctly.
— Joshua Bloch
Lightstone's Convolution Principle: The concurrent development of multiple features operating on intersecting
componentry will take longer to complete than the sum of the schedule estimations for each.
Alas, some will dismiss these arguments as matters of programming style, and developers enjoy arguing about style
issues almost as much as they enjoy arguing about which is the One True Editor. (As if there's any doubt. It's
Emacs.)
— Scott Meyers, Effective STL: 50 Specific Ways to Improve Your Use of the Standard
Template Library
Testing can be used to show the presence of errors, never their absence!
— Dijkstra
Never use brute force in fighting an exponential.
— Andrei Alexandrescu
"Early optimization is the root of all evils," Knuth said, but on the other hand, "belated pessimization is the leaf
of no good," according to Len Lattanzi.
— Andrei Alexandrescu
Focusing on skills, communications, and community allows the project to be more effective and more agile than
focusing on processes and plans.
— Alistair Cockburn
Inside every large problem, is a small problem-struggling to get out.
— Sir C.A.R. (Tony) Hoare (inventor of "Quicksort")
Organizations which design systems are constrained to produce designs which are copies of the communications
structure of these organizations.
— Melvin Conway (AKA Conway's Law, paraphrased as "If you have 4 groups working on a
compiler, you'll get a 4-pass compiler.")
We get things wrong before we get things right.
— Alistair Cockburn
Measure twice, optimize once.
— Herb Sutter
If you have a procedure with 10 parameters, you probably missed some.
— Alan Perlis
Process is not a substitute for skill.
— Jim Highsmith
A programming language is low level when its programs require attention to the irrelevant.
— Alan Perlis
If the success of their project depends entirely on shipping everything in their plan for the full project cycle,
that's a recipe for failure.
— J.D. Meier
Antipattern: Something must be done. This is something. Therefore we must do it!
A designer knows he has achieved perfection not when there is nothing left to add, but when there is nothing left to
take away.
— Antoine de Saint-Exupéry
A methodology's weight is a product of its size and ceremony.
— Jim Highsmith
Brian Kernighan's two rules for optimization:
1) Don't do it.
2) (For experts only) Don't do it yet.
When someone says, "I want a programming language in which I need only say what I wish done," give him a
lollipop.
— Alan Perlis
Remember, our concern is to protect against Murphy, not Machiavelli.
— Herb Sutter
If you are guided by the agile principles, you will avoid doing things just because they are prescribed and you will
look for opportunities to deliver useful functionality more quickly.
— Suzanne & James Robertson
Software product development isn't only nonlinear, it's discontinuous.
— Raymond Chen
Before you improve a process, you need to have one worth a name.
— Ivar Jacobson, Masterminds of Programming)
Even in a platform that doesn't pretend to be absolutely portable, you have to pay a high toll for the convenience
of a managed execution environment.
— Danny Kalev
Any attempt to formulate all possible requirements at the start of a project will fail and would cause considerable
delays.
— Pahl and Beitz, Engineering Design
Well, here's a news flash: Requirements change. Designs that cannot tolerate changing requirements are poor designs
to begin with.
— Robert Martin, Working Effectively with Legacy Code
People don't change their minds. They die, and are replaced by people with different opinions. — Arturo Albergati (if you don't know why I put this quote in the programming section, you either are sufficiently cynical or haven't worked for a large company)
Many jobs worth doing aren't worth doing right; a novelist is foolish to agonize over each word in a shopping list.
Brilliance is typically the act of an individual, but incredible stupidity can usually be traced to an organization.
A popular Western writer once confessed that when he was paid by the word, the heroes in his books took six bullets
to die. When programmers are paid by the line of code, how do you suppose the array X[l . . lOOO] is initialized to
zero? (Hint: programmers paid by the speedup initially produce very slow code, and programmers required to execute a
certain percentage of branches during testing have a lot of statements of the form if true then. . . 1)
— Jon Bentley, in Programming Pearls Communications of the ACM February 1986 Volume 29
Number 2
I would not give a fig for the simplicity on this side of complexity, but I would give my life for the simplicity on
the other side of complexity.
— Oliver Wendell Holmes
There is no one "root of all evil" in software development. Design is hard in many ways. People tend to
underestimate the intellectual and practical difficulties involved in building a significant system involving
software. It is not and will not be reduced to a simple mechanical "assembly line" process. Creativity, engineering
principles, and evolutionary change are needed to create a satisfactory large system.
— Bjarne Stroutrup (Masterminds of Programming)
There is an incredibly large spectrum of possible causes for program bugs, including simple typos, "thinkos," hidden
limitations of underlying abstractions, and outright bugs in abstractions or their implementation.
— Guido van Rossum
There are two kinds of software projects: those that fail, and those that turn into legacy horrors.
— Peter Weinberger (Masterminds of Programming)
The key to performance is elegance, not battalions of special cases.
— Jon Bentley and Doug McIlroy, found here
Some people, when confronted with a problem, think "I know, I'll use regular expressions." Now they have two
problems.
— Jamie Zawinski
SQL, Lisp, and Haskell are the only programming languages that I've seen where one spends more time thinking than
typing.
— Philip Greenspun
I object to doing things that computers can do.
— Olin Shivers
Lisp is worth learning for the profound enlightenment experience you will have when you finally get it; that
experience will make you a better programmer for the rest of your days, even if you never actually use Lisp itself a
lot.
— Eric Raymond, "How to Become a Hacker"
Programs must be written for people to read, and only incidentally for machines to execute.
— Abelson & Sussman, SICP, preface to the first edition
Despite the seemingly endless necessity for doing so, it's actually not possible to reverse-engineer intended
invariants from staring at thousands of lines of code (not in C, and not in Python code either).
— Tim Peters
It is a mistake to think that programmers wares are programs. Programmers have to produce trustworthy solutions and
present it in the form of cogent arguments. Programs source code is just the accompanying material to which these
arguments are to be applied to.
— E. Dijkstra
This does not mean that I fail to recognise that Lisp is still #1 for key algorithmic techniques such as recursion
and condescension. It just means that I have no idea how, or indeed if, Lisp handles exceptions.
— Verity
Stob
The first law of computer science: Every problem is solved by yet another indirection.
— Bjarne Stroustrup
All problems in computer science can be solved by another level of indirection, but that usually will create another problem. — David Wheeler, inventor of the subroutine
Object-oriented programming is an exceptionally bad idea which could only have originated in California.
— Edsger Dijkstra
There are only two kinds of languages: the ones people complain about and the ones nobody uses.
— Bjarne Stroustrup
Greenspun's 10th 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.
— Greenspun's Tenth
Rule
Despite the seemingly endless necessity for doing so, it's actually not possible to reverse-engineer intended
invariants from staring at thousands of lines of code (not in C, and not in Python code either).
— Tim Peters
It is a mistake to think that programmer's wares are programs. Programmers have to produce trustworthy solutions and
present it in the form of cogent arguments. Programs source code is just the accompanying material to which these
arguments are to be applied to.
— E. W. Dijkstra
If we knew what we were doing, it wouldn't be called research.
— Einstein
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.
— The FORTRAN manual for the Xerox Computers (This sounds too bad to be true. Can
anyone confirm this?)
The use of COBOL cripples the mind; its teaching should, therefore, be regarded as a criminal offense.
— E. W. Dijkstra
It is practically impossible to teach good programming style to students that [sic] have had prior expose to BASIC;
as potential programmers they are mentally mutilated beyond hope of regeneration.
— E. W. Dijkstra
Beware of bugs in the above code; I have only proved it correct, not tried it.
— Donald E. Knuth
Anyone who considers arithmetical methods of producing random digits is, of course, in a state of sin.
— Bruce Schneier in Applied Cryptography, p.39, quoting Knuth quoting John von Neumann
Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as
possible, you are, by definition, not smart enough to debug it.
— Brian W. Kernighan
Even the small children are used to questions like *Are you hungry?* It's very unlikely that they answer *Zero!*
Yet, they have no formal knowledge of booleans. ;)
— Petr Prikryl on comp.lang.python
Caveat hackor!
— Jon Bentley
A programming language is low level when its programs require attention to the irrelevant.
— Alan Perlis
Many jobs worth doing aren't worth doing right; a novelist is foolish to agonize over each word in a shopping
list.
— Jon Bentley in Programming Pearls Communications of the ACM February 1986 Volume 29
Number 2
You are not expected to understand this.
— A comment from the source of UNIX 6th Ed, unix/slp.c, line 438
Real Users never know what they want, but they always know when your program doesn't deliver it.
— Seen in ASR
That is not a mess on my desk. I am using a hashing algorithm to improve access time.
— Mark Tomory's .sig file, mt@carthage.edu
Intelligence: Finding an error in a Knuth text.
Stupidity: Cashing that $2.56 check you got.
— a Slashdot sig, Quoted by Edward
O'Connor
I am a design chauvinist. I believe that good design is magical and not to be lightly tinkered with. The difference
between a great design and a lousy one is in the meshing of the thousand details that either fit or don't, and the
spirit of the passionate intellect that has tied them together, or tried. That's why programming -- or buying
software -- on the basis of "lists of features" is a doomed and misguided effort. The features can be thrown
together, as in a garbage can, or carefully laid together and interwoven in elegant unification, as in APL, or the
Forth language, or the game of chess.
— Ted Nelson
Those who write software only for pay should go hurt some other field.
— Erik Naggum (gnu.misc.discuss)
Syntactic sugar causes cancer of the semicolon.
— Alan Perlis
It is easier to write an incorrect program than understand a correct one.
— Alan Perlis
Simplicity does not precede complexity, but follows it.
— Alan Perlis
There are two ways to write error-free programs; only the third one works.
— Alan Perlis
Fools ignore complexity. Pragmatists suffer it. Some can avoid it. Geniuses remove it.
— Alan Perlis
If I don't understand lisp, it would be wise to not bray about how lisp is stupid or otherwise criticize, because my
stupidity would be archived and open for all in the know to see.
— Xah (comp.lang.lisp)
Of the four project development variables - scope, cost, time and quality - quality isn't really a free variable.
The only possible values are "excellent" and "insanely excellent", depending on whether lives are at stake.
— Kent Beck
Programming languages should be designed not by piling feature on top of feature, but by removing the weaknesses and
restrictions that make the additional features appear necessary.
— Revised(5) Report on the Algorithmic Language Scheme
Premature optimization is the root of all evil.
— Donald E. Knuth, From Structured Programming with goto Statements
For every complex problem, there is a solution that is simple, neat, and wrong.
— H.L. Mencken
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
Indeed, when I design my killer language, the identifiers "foo" and "bar" will be reserved words, never used, and
not even mentioned in the reference manual. Any program using one will simply dump core without comment. Multitudes
will rejoice.
— Tim Peters
Arrrrgh, the braindamage! It's not unlike the massively non-brilliant decision to use the period in abbreviations as
well as a sentence terminator. Had these people no imagination at _all_?
— Erik Naggum (comp.lang.lisp)
There are two kinds of large software systems: those that evolved from small systems and those that don't
work.
— Seen on slashdot.org
I have a feeling that any simple problem can be made arbitrarily difficult by imposing a suitably heavy
administrative process around the development.
— Joe Armstrong (comp.lang.functional)
Very clever implementation techniques are required to implement this insanity correctly and usefully, not to mention
that code written with this feature used and abused east and west is exceptionally exciting to debug.
— Erik Naggum, commenting on Algol-style "call-by-name"
...but I'd rather not reinvent the wheel if I don't have to. On the other hand, if the currently instantiated
version of the wheel consists of a square rock covered with moss, I might as well just start fresh.
— Roy Smith (comp.lang.python)
Just getting something to work usually means writing reams of code fast, like a Stephen King novel, but making it
maintainable and high-quality code that really expresses the ideas well, is like writing poetry. Art is taking
away.
— Erik Naggum (comp.lang.lisp)
Counting lines is probably a good idea if you want to print it out and are short on paper, but I fail to see the
purpose otherwise.
— Erik Naggum (comp.lang.lisp)
We're already scrubbing the face of intuition with steel wool, setting it on fire, then putting it out with an
axe.
— Tim Peters, commenting on comparing recursive structures
Monte Carlo sampling is no way to understand code.
— Gordon McMillan (comp.lang.python)
Once you understand how to write a program get someone else to write it.
— Alan Perlis
I will not do it as a hack,
I will not do it on a Mac,
I will not do it for my friends,
I will not do it on weekends,
I will not write for Uncle Sam,
I won't do ADA, Sam-I-Am!
— Gregory Bond
Simple things should be simple and complex things should be possible.
— Alan Kay
It should be noted that no ethically-trained software engineer would ever consent to write a "DestroyBaghdad"
procedure. Basic professional ethics would instead require him to write a "DestroyCity" procedure, to which
"Baghdad" could be given as a parameter.
— Nathaniel S. Borenstein, uttered after the Gulf War but long before 9/11/01
It's hard to read through a book on the principles of magic without glancing at the cover periodically to make sure
it isn't a book on software design.
— Bruce Tognazzini
To keep large programs well structured, you either need superhuman will power, or proper language support for
interfaces.
— Greg Nelson
You think you know when you can learn, are more sure when you can write, even more when you can teach, but certain
when you can program.
— Alan Perlis
To a database person, every nail looks like a thumb. Or something like that.
— Jamie Zawinski
We are on the verge: Today our program proved Fermat's next-to-last theorem.
— Alan Perlis
There are only two kinds of languages: the ones people complain about and the ones nobody uses.
— Bjarne Stroustrup
Object-oriented programming is an exceptionally bad idea which could only have originated in California.
— Edsger Dijkstra