Fifty-five years ago, we chose the wrong path. Small code that could run on small CPUs was recognized as a better path than large, probably single-threaded code. These elements of small code could be proven to be correct, unlike the large code programs that characterized mainframe-era programs. The software industry took a fork in the road, and led by the siren song of Intel CPUs, took the fork in the road of keeping the mainframe model of programming.
Nowhere was software hurt more by this than in building systems and IoT. These systems have a natural cadence based around independent actors for each mechanical subsystem, communicating in a service mesh. The lure of the large program you wrote last year being twice as fast next year due to Moore’s law, even without re-writing, was too enticing.
Somewhere around a decade ago, Moore’s Law hit the wall. We all pretend that it did not, based on renaming the old CPUs as “cores”, and packing a number of them on a chip. A well-threaded program can take advantage of all these cores. A few well known utilities programs do. If you look in the per-core performance on a laptop, it can look like a well-balanced threaded system. Too many of those CPUs are consumer apps, wastes of processing power on a control system, giving us the illusion of computational density. There is a better way.
