UNIX is simple. But It just needs a genius to understand its simplicity.
Before software can be reusable, it first has to be usable.
Good judgment comes from experience, and experience comes from bad judgment.
Theory is when you know something, but it doesn’t work. Practice is when something works, but you don’t know why it works. Programmers combine theory and practice: Nothing works and they don’t know why.
It’s hard enough to find an error in your code when you’re looking for it; it’s even harder when you’ve assumed your code is error-free.
-Steve McConnell Code Complete
If builders built buildings the way programmers wrote programs, then the first woodpecker that came along would destroy civilization.
The Six Phases of a Project:
Search for the Guilty
Punishment of the Innocent
Praise for non-participants
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.
–Steve McConnell Code Complete
The trouble with the world is that the stupid are cocksure and the intelligent are full of doubt.
No matter how slick (efficient) the demo is in rehearsal, when you do it in front of a live audience the probability of a flawless presentation is inversely proportional to the number of people watching, raised to the power of the amount of money involved.
One of the main causes of the fall of the Roman Empire was that, lacking zero, they had no way to indicate successful termination of their C programs.
Fifty years of programming language research and we end up with C++?
–Richard A. O’Keefe
C programmers never die. They are just cast into void.
If debugging is the process of removing bugs, then programming must be the process of putting them in.
You can either have software quality or you can have pointer arithmetic, but you cannot have both at the same time.
There are two ways to write error-free programs; only the third works.
–Alan J. Perlis
Measuring programming progress by lines of code is like measuring aircraft building progress by weight.
The first 90% of the code accounts for the first 10% of the development time. The remaining 10% of the code accounts for the other 90% of the development time.
Programmers are in a race with the Universe to create bigger and better idiot-proof programs, while the Universe is trying to create bigger and better idiots. So far the Universe is winning.
As soon as we started programming, we found 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.
–Maurice Wilkes discovers debugging, 1949
I did say something along the lines of “C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do, it blows your whole leg off.”
It has been said that the great scientific disciplines are examples of giants standing on the shoulders of other giants. It has also been said that the software industry is an example of midgets standing on the toes of other midgets.
–Alan Cooper About Face
Computers are dumb and yet they give you answers.
If the code and the comments disagree, then both are probably wrong.
–attributed to Norm Schryer
Even if you’re on the right track, you’ll get run over if you just sit there.
Einstein argued that there must be simplified explanations of nature, because God is not capricious or arbitrary. No such faith comforts the software engineer .
–Fred Brooks, Jr.
As we said in the preface to the first edition, C “wears well as one’s experience with it grows.” With a decade more experience, we still feel that way.
–Brian Kernighan and Dennis Ritchie
Simplicity is prerequisite for reliability
I’ve finally learned what “upward compatible” means. It means we get to keep all our old mistakes.
–Dennie van Tassel
Rules of Optimization:
Rule 1: Don’t do it.
Rule 2 (for experts only): Don’t do it yet.
Most software today is very much like an Egyptian pyramid with millions of bricks piled on top of each other, with no structural integrity, but just done by brute force and thousands of slaves.
Every program has (at least) two purposes:
the one for which it was written,
and another for which it wasn’t.
–Alan J. Perlis
Technology is dominated by two types of people:
Those who understand what they do not manage.
Those who manage what they do not understand.
Copy and paste is a design error
Any code of your own that you haven’t looked at for six or more months might as well have been written by someone else.