My absolute favorite to kick off this list:
"There are only two hard things in Computer Science: cache invalidation and naming things."
later evolved to
"There are two hard things in Computer Science: cache invalidation, naming things, and off-by-one errors."
"A complex system that works is invariably found to have evolved from a simple system that worked. A complex system designed from scratch never works and cannot be patched up to make it work. You have to start over with a working simple system." (Gall's law)
"If you don't fail at least 90 percent of the time, you're not aiming high enough."
Programming Is About Code, But Programs Are About Data: All programs transform data, converting an input into an output. Start designing using transformations.
Writing more code than you need results in Ugly, Large and Slow code. Ugly: Leaves places for bugs to hide. Large: Ensures incomplete tests. Slow: Encourages the use of shortcuts and dirty tricks.
"The general tendency is to over-design the second system, using all the ideas and frills that were cautiously sidetracked on the first one." (Second-system syndrome)
Nathan's four Laws of Software:
- Software is a gas. Software always expands to fit whatever container it is stored in.
- Software grows until it becomes limited by Moore’s law. The growth of software is initially rapid, like gas expanding, but is inevitably limited by the rate of increase in hardware speed.
- Software growth makes Moore’s law possible. People buy new hardware because the software requires it.
- Software is limited only by human ambition and expectation. We will always find new algorithms, new applications, and new users.
"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."
“Unfortunately, most warning systems do not warn us that they can no longer warn us.”
"What is important is seldom urgent and what is urgent is seldom important.”