I am no Alan Jay Perlis, nor am I really worthy.
- Function parameters fornicate. If you have 7, they will quickly breed to 14.
- Any "new" idea which a person thinks about has a 98% chance of having been researched better and more deeply before 1980. Thus most new ideas aren't.
- Age rule for the young: If a concept is older than you and still is alive you must understand it. If it is in hibernation it may come back again. If there is no trace of it - some bozo is about to reinvent it.
- Dynamic typing is a special case of Static typing.
- Beware the scourge of boolean blindness.
- Prefer persistence over ephemerality.
- The program which can be formally reasoned about is usually the shortest, the correct and the fastest.
- "We will fix it later" - later never occurs.
- Project success is inversely proportional to project size.
- Code not written sometimes has emergent behaviour in the system. Either by not having bugs or by executing invisible code infinitely fast in zero seconds.
- Your portfolio of closed source projects doesn't exist.
- Version control or doom.
- Around the year 1999 the number of programmers increased 100-fold. The skill level didn't.
- Program state is contagious. Avoid like the plague.
- Business logic is a logic. Inconsistent logic?
- 0.01: The factor of human beings who can program
- 0.001: The factor of human beings who can program concurrently
- 0.0001: The factor of human beings who can program distributively
- If your benchmark shows your code an order of magnitude faster than the established way, you are correct. For the wrong problem.
- Debugging systems top-down is like peeling the onion inside-out.
- A disk travelling on the back of army ants has excellent throughput but miserable latency. So has many Node.js systems.
- Beware of the arithmetic mean. It is a statistic, and usually a lie.
- Often, speed comes with a sacrifice of flexibility on the altar of complexity.
- Sometimes correctness trumps speed. Sometimes it is the other way around.
- Optimal may be exponentially more expensive to compute than the 99th percentile approximation.
- The programmer is more important than the programming language
- Programming languages without formal semantics is akin to a dumping ground. The pearls are few and far between.
- The brain is more important than the optimizing compiler
- The tools necessary for programs of a million lines of code are different than those for 1000 lines.
- Specializing in old tools contains the danger of ending as an extinct dinosaur.
- Like introduction of 'null', Object Oriented Programming is a grave mistake.
- The string is heaven because it can encode anything. The string is hell because it can encode anything.
- Idempotence is your key to network programming.
- Protocol design is your key to network programming.
- Sun RPC is usually not the solution. Corollary: HTTP requests neither.
- Your protocol must have static parts for structure and dynamic parts for extension.
- Only trust systems you have control over and where you can change the behaviour.
- If a non-programmer specifies a distributed system, they always violate the CAP theorem.
- In a distributed system, the important part is the messages. What happens inside a given node is uninteresting. Especially what programming language it is written in.
- A distributed system can have more failure scenarios than you can handle. Trying is doom.
- The internet has a failure rate floor. If your system has a failure rate underneath it, you are error-free to the customer.
- If your system is doing a million $100 requests a year. A failure rate of 10 requests per year is not worth fixing.
- If your system employs FIFO queues, latency can build up. Bufferbloat is not only in TCP.
- Beware the system overload situation. It is easier to reject requests than handle them. You need back-pressure to inform.
