-
The single biggest problem in communication is the illusion that it has taken place.
—
-
Software is a gas. It expands to fill its container.
— Nathan Myhrvold's Law on bloat
-
Anything added dilutes everything else.
—
-
If you don't respect inherent complexity, you create accidental complexity.
—
-
Google has found that the most innovative workers — also the “happiest,” by its definition — are those who have a strong sense of mission about their work and who also feel that they have much personal autonomy.
— New York Times
-
The key in making great and growable systems is much more to design how its modules communicate rather than what their internal properties and behaviors should be.
—
-
If you believe "pragmatism" and "theory" are in opposition, you understand neither.
—
-
Beginner: "Threads are hard." Intermediate: "Don't fear multithreading." Expert: "Threads are hard."
—
-
Well, I'm an old-fashioned guy. And I also happen to believe in history. The lack of interest, the disdain for history is what makes computing not-quite-a-field.
—
-
This is why you spent all that time learning to program: you can fix things. You can make new and amazing things. Don't take that ability lightly.
—
-
Make it run, then make it right, then make it fast.
—
-
Controlling complexity is the essence of computer programming.
—
-
Any problem in computer science can be solved with another layer of indirection, but that usually will create another problem.
—
-
The effect of individual differences will far outweigh any effect of the programming language [on productivity].
—
-
Some people, when confronted with a reliability problem, think, “I know, I’ll build a distributed system.” Now they have n² problems.
—
-
The good thing about reinventing the wheel is that you can get a round one.
— reply to Dave Winer, about JSON vs. XML
-
Premature optimization is the root of all evil.
—
-
Fools ignore complexity. Pragmatists suffer it. Some can avoid it. Geniuses remove it.
—
-
The worst features [of a language] are the attractive nuisances, the features that are both useful and dangerous.
—
-
The building metaphor has outlived its usefulness. [...] Let us turn nature and study complexity in living things. [...] The secret is that it is grown, not built.
— No Silver Bullet
-
Beauty is more important in computing than anywhere else in technology because software is so complicated. Beauty is the ultimate defence against complexity.
—
-
When in doubt, use brute force.
—
-
Know your experiments, or your whole project will be an experiment.
—
-
Computers are like Old Testament gods; lots of rules and no mercy.
—
-
I think computer viruses should count as life. I think it says something about human nature that the only form of life we have created so far is purely destructive. We've created life in our own image.
—
-
...it is almost always incorrect to begin the decomposition of a system into modules on the basis of a flowchart. We propose instead that one begins with a list of difficult design decisions or design decisions which are likely to change. Each module is then designed to hide such a decision from the others
— On the Criteria To Be Used in Decomposing Systems into Modules
-
the art of programming is the art of organizing complexity, of mastering multitude and avoiding its bastard chaos as effectively as possible.
— "Notes on structured programming", 1970
-
As a matter of fact, the challenges of designing high-quality programs and of designing high-quality proofs are very similar, so similar that I am no longer able to distinguish between the two: I see no meaningful difference between programming methodology and mathematical methodology in general.
— "Why American Computing Science seems incurable", 1995
-
As a slow-witted human being I have a very small head and I had better learn to live with it and to respect my limitations and give them full credit, rather than try to ignore them, for the latter vain effort will be punished by failure.
— "Notes on structured programming", 1970
-
It always takes longer than you expect, even when you take into account Hofstadter’s Law.
— Hofstadter’s Law
-
Theory and practice sometimes clash. And when that happens, theory loses. Every single time.
—
-
Give me the judgment of balanced minds in preference to laws every time. Codes and manuals create patterned behavior. All patterned behavior tends to go unquestioned, gathering destructive momentum.
— Darwi Odrade, in Dune
-
The cost of adding a feature isn’t just the time it takes to code it. The cost also includes the addition of an obstacle to future expansion. … The trick is to pick the features that don’t fight each other.
—
-
Experts and specialists lead you quickly into chaos. They are a source of useless nit-picking, the ferocious quibble over a comma. The mentat-generalist, on the other hand, should bring to decision-making a healthy common sense.
— "The Mentat Handbook", in Dune
-
Don’t underestimate the power of survival of the fittest. And don’t ever make the mistake that you can design something better than what you get from ruthless massively parallel trial-and-error with a feedback cycle. That’s giving your intelligence much too much credit.
—
-
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.
— Computational Mail as Network Infrastructure for Computer-Supported Cooperative Work
-
Object/Relational Mapping is the Vietnam of Computer Science
—
-
It also helped that Bjarne was willing to put certain features in the language just to enable some of my idioms. He once refered to it as "just in time language design."
—
-
Mal nommer les choses, c'est ajouter au malheur du monde.
—
-
Programming languages teach you not to want what they cannot provide. You have to think in a language to write programs in it, and it's hard to want something you can't describe.
—
-
I would advise students to pay more attention to the fundamental ideas rather than the latest technology. The technology will be out-of-date before they graduate. Fundamental ideas never get out of date. However, what worries me about what I just said is that some people would think of Turing machines and Goedel's theorem as fundamentals. I think those things are fundamental but they are also nearly irrelevant. I think there are fundamental design principles, for example structured programming principles, the good ideas in "Object Oriented" programming, etc.
—
-
We should, however, give up on perfection. Some code will be slower than we want because we don't have time to optimize it, and some code will be uglier than we want because we have no choice but to optimize it.
—
-
When I am working on a problem I never think about beauty. I think only how to solve the problem. But when I have finished, if the solution is not beautiful, I know it is wrong.
—
-
Fools ignore complexity. Pragmatists suffer it. Some can avoid it. Geniuses remove it.
— Epigram in Programming #58, 1982
-
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. The first method is far more difficult.
— 1980 Turing Award Lecture
-
The unavoidable price of reliability is simplicity.
—