Ground rules of computing

Most of this should be redundant to the computing professional. I hope it is obvious, regardless of religious, political or cultural affiliation. This is so often ignored by most of the materials you engage in when making decisions about computers; I thought I'd write it, if for nothing else than to provide myself of a written record of my current understanding, for future improvement.

Computers run within the laws of physics

This should not need to be re-iterated, but it often is a source of friction between me and the wider world. Because of this need to think within physics, which I am by no means an expert in, we immediately can throw away anything that is said to be free of cost into a container of nonsense and hype, designed to harm people.

  • Nothing is free
  • Scaling infinitely is not possible
  • Energy is our currency
  • Things covering long distances will take time

A need for grounding in statistics

I know that there are lies, damn lies, and publicly quoted statistics. Of course there is nothing wrong with statistics, usually criticism comes from would-be pedants who cannot differentiate the exception from the average or common cases. Outliers are not inconsequential, and you need to be mindful of them, but probably won't reflect averages.

  • Pay more attention to things that happen often
  • Record extreme, weird or edge cases, but dedicate time to main cases

Things should be reproducible

The infamous IT catchphrase "works for me" or "works on my machine" is not good enough. Sadly we all say this sometimes.

My last time was just last week. I've still not tracked down what the root cause was, but working with another engineer we did release a patch for the issue, which was confirmed on two machines and we understood. We likely were not taking control of enough of the environment to guarantee reproducibility.

The greater the number of confirmations in a reproducible environment, the greater the chance is that something will hold true for the same environment. Clean rooms such as VM's and containers, disk images have come some way towards improving this. Sadly it's not an area given enough attention.

This is especially important as part of the environment may not be within our control, or may be unknown to the observer. Only through time, education and iteration will we gain the depth of knowledge to exert full-control over that environment and give better advice, and guidance to make good decisions.

  • If things work differently for you, try to find out why
  • The more places a thing can be independently reproduced, the closer to certainty you can be
  • Always be open to learning more
  • Seek out tools rather than rituals to achieve repeat-ability

Anything non-pure compute flows through memory

As I write this, I hope the reader is aware of this, but recently I've encountered technical leadership which astounded me by not knowing this, or over-simplifying their model of computing to infer this was not true. In most cases this means RAM, CPU registers or cache memory.

While I will accept that there are oddities to some computing models allowing direct read and write without deliberate usage of RAM; I've yet to find a suitable explanation other than "There is memory used somewhere, which may or may not be RAM, but is used for the same purpose".

Memory is just a place that is generally able to be a source of truth which is faster, so we go there rather than waste time for general-case. Those in business may see this as trading high fixed-costs, for variable-costs.

Traditional storage is also sequential in access from punch-cards to CD, DVD & Blu-ray, and spinning-platter hard-drives. There is a thing called a seek cost, because something mechanical needs to move to a place.

Takeaways

  • Computers are not boxes of magic, they obey physics
    • Nothing is free
    • Scaling infinitely is not possible
    • Energy is our currency
    • Things covering long distances will take time
  • Statistics can help us understand and direct effort
    • Pay more attention to things that happen often
    • Record extreme, weird or edge cases, but dedicate time to main cases
  • Things should be reproducible
    • If things work differently for you, try to find out why
    • The more places a thing can be independently reproduced, the closer to certainty you can be
    • Always be open to learning more
    • Seek out tools rather than rituals to achieve repeat-ability
  • All roads to interesting things usually lead through memory