Tuesday, December 04, 2012

Some Epigrams


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.


Post a Comment

About Me

My Photo
Lambda-loving CS Geek. Likes metal music. Likes dogs. Likes cats. Does not like pictures of dogs and cats (unless they are lambdacats!)

Has an unhealthy coffee addiction. Calls himself the coffee zombie in the morning (BEEEEANS!)

Has a neverending curiosity gene. Likes intelligence.