The main topic of this article is about how while hardware and software are different they are also the same and that while there are differences they are not as substantial as some may think.
This article shall eventually be aimed at anyone with an interest in computer technology, for now the work is very much a living draft form and will get updated as and when I have time to do so.
During my career I have encountered various professionals who are good at what they do but seem to think hardware and software are two separate and quite distinct concepts that require completely different and unique ways of thinking in regards to how things are designed and implemented.
As a Computer Scientist that has spent most of their career labelled as a Software Engineer of one sort or another this premise has grated on me somewhat for many years. A few times I have tried to explain in brief terms why hardware and software are not as dissimilar as some like to assert but in the main it seems to have fallen on deaf ears.
This has led me to write this article which is derived from a very simple premise that I was introduced to very early on in my education and career and was referred to at one point as the Turing Machine Principle. This can be summarised as anything that is computable can be expressed as a Turing Machine.
This basic premise is the foundation of the general purpose computers that modern society has come to rely on and in some cases perhaps take for granted. It is also illustrated by real world technologies such as hardware simulators/emulators, virtual machines, and containers.
The article is split into multiple sections with each section being aimed at different audiences but with some of those audiences overlapping. The intent is that everyone shall be able to start at the beginning, read only the sections that are applicable to them, and then meet up at the end with hopefully a better appreciation for how despite the apparent differences, that hardware and software can essentially be considered the same.