O death, where is thy sting? O grave, where is thy victory?
Those words ring with Shakespearian power. Hamlet ? King Lear ? Actually, the quote comes from the New Testament .
I image the Bible is the most-quoted book of all time. My parents would paraphrase a parable or cite a verse to make a point or correct our behavior. The nuns at St. Camillus did, too, and a sure way to curry favor with them was to quote chapter and verse. Even the most secular couples often use 1 Corinthians 13 in their weddings.
The world abounds in aphorisms that convey wisdom to the young, although that advice is usually ignored. Many aphorisms are by unknown authors: “A stitch in time saves nine” (although anyone who has repaired a sail knows that one stitch can actually save 9,000). “People who live in glass houses shouldn't throw stones.” And many witty people have contributed their own, like this gem from Mae West: “Lead me not into temptation; I can find the way myself.”
Pithy quotes and aphorisms can entertain and instruct. Often they do both.
Engineers can turn a clever phrase as well as Mae West. I've collected quips that relate, sometimes unintentionally, to development for many years. Here's some of the best:
Testing by itself does not improve software quality. Test results are an indicator of quality, but in and of themselves, they don't improve it. Trying to improve software quality by increasing the amount of testing is like trying to lose weight by weighing yourself more often. What you eat before you step onto the scale determines how much you will weigh, and the software development techniques you use determine how many errors testing will find. If you want to lose weight, don't buy a new scale; change your diet. If you want to improve your software, don't test more; develop better.
Programming can be fun, so can cryptography; however, they should not be combined.
–Charles Kreitzberg and Ben Shneiderman
The sooner you start to code, the longer the program will take.
Our developers never release code. Rather, it tends to escape, pillaging the countryside all around.
–The Enlightenment Project
Perl is the crystal meth of programming: it's so incredibly useful when you need to do a large amount of work in a small amount of time that you tend to overlook the fact that it's basically precipitating the implosion of your vital organs.
Programmers are the tools for converting caffeine into code.
If you lie to the compiler, it will get its revenge.
There are only two industries that refer to their customers as users.
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.
To iterate is human, to recurse divine.
–L. Peter Deutsch
Good judgment comes from experience, and experience comes from bad judgment.
There are two ways to write error-free programs; only the third works.
–Alan J. Perlis
When Leo Tolstoy wrote Anna Karenina, he could have been thinking about cubicles: “there are no conditions of life to which a man cannot get accustomed, especially if he sees them accepted by everyone around him.”
The real value of tests is not that they detect bugs in the code but that they detect inadequacies in the methods, concentration, and skills of those who design and produce the code.
The most important single aspect of software development is to be clear about what you are trying to build.
Most of you are familiar with the virtues of a programmer. There are three, of course: laziness, impatience, and hubris.
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.
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.
Any fool can use a computer. Many do.
Trying to outsmart a compiler defeats much of the purpose of using one
–Brian W. Kernighan and P. J. Plauger
UNIX is simple. It just takes a genius to understand its simplicity.
Putt's Law: Technology is dominated by two types of people–those who understand what they do not manage and those who manage what they do not understand.
An organization that treats its programmers as morons will soon have programmers that are willing and able to act like morons only.
Theoretically, software is the only component that can be perfect, and this should always be our starting point.
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live.
Documentation is a love letter that you write to your future self.
If you think good architecture is expensive, try bad architecture.
–Brian Foote and Joseph Yoder
Theory is when you know something, but it doesn't work. Practice is when something works, but you don't know why. Programmers combine theory and practice: nothing works and they don't know why.
If the code and the comments disagree, then both are probably wrong.
Those who want really reliable software will discover that they must find means of avoiding the majority of bugs to start with, and as a result, the programming process will become cheaper. If you want more effective programmers, you will discover that they should not waste their time debugging, they should not introduce the bugs to start with.
In theory there is no difference between theory and practice. In practice there is.
For a successful technology, honesty must take precedence over public relations for nature cannot be fooled.
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.
Hofstadter's Law: It always takes longer than you expect, even when you take into account Hofstadter's Law.
PHP is a minor evil perpetrated and created by incompetent amateurs, whereas Perl is a great and insidious evil, perpetrated by skilled but perverted professionals.
If you want a girlfriend, avoid working in the computer games industry like the plague. If you work seven days a week, 15 hours a day for almost two years, with barely enough time for a pint, you have no time whatsoever for relationships. Plus computer-games makers are regarded as being about as hip and cool as abattoir workers.
Your problem is another's solution; your solution will be his problem.
Embedded lines of code are growing 26% annually but developers are increasing by 8%.
–Venture Development Corporation
Productivity can decrease by as much as 25% when workers put in 60+ hour weeks for a prolonged time. And, turnover is nearly three times higher among workers who work extended hours. Absenteeism among companies with extended hours is more than twice the national average.
–Reworded from Circadian Technologies Shiftware Practices 2005 survey
There's a fine line between being on the leading edge and being in the lunatic fringe.
Two things are infinite: the universe and human stupidity; and I'm not sure about the universe.
Some people, when confronted with a problem, think I know, I'll use regular expressions. Now they have two problems.
The most amazing achievement of the computer software industry is its continuing cancellation of the steady and staggering gains made by the computer hardware industry.
One test is worth a thousand opinions.
If the lessons of history teach us anything it is that nobody learns the lessons that history teaches us.
The trouble with the world is that the stupid are cocksure and the intelligent are full of doubt.
Debugging is like alien abduction. Large blocks of time disappear, for which you have no explanation.
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.
If builders built buildings the way programmers wrote programs, then the first woodpecker that came along would destroy civilization.
Ugly programs are like ugly suspension bridges: they're much more liable to collapse than pretty ones, because the way humans (especially engineer-humans) perceive beauty is intimately related to our ability to process and understand complexity. A language that makes it hard to write elegant code makes it hard to write good code.
–Eric S. Raymond
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.
The most unsuccessful three years in the education of cost estimators appears to be fifth-grade arithmetic.
–Norman R. Augustine
No engineer looks at a television remote control without wondering what it would take to turn it into a stun gun. No engineer can take a shower without wondering if some sort of Teflon coating would make showering unnecessary. To the engineer, the world is a toy box full of suboptimized and feature-poor toys.
I love deadlines. I like the whooshing sound they make as they fly by.
In handling resources, strive to avoid disaster rather than to attain an optimum.
There are various reasons that software tends to be unwieldy, but a primary one is what I like to call “brittleness”. Software breaks before it bends, so it demands perfection in a universe that prefers statistics.
People tend to overestimate what can be done in one year and to underestimate what can be done in five or ten years.
Code generation, like drinking alcohol, is good in moderation.
Do you have favorites? Post them on embedded.com.
Jack Ganssle () is a lecturer and consultant specializing in embedded systems' development issues. For more information about Jack .