Biological Thinking vs. Synchronous / Sequential Thinking
2025-09-06
In the early 1970s/1980s, I was tinkering with CPUs and electronics, etc.
My prevailing feeling was "I wish I had 1,000s of these things", but, the devices were just too expensive to allow thinking that way. Instead we came up with ways to use only 1 CPU and to chop it up (time-slice) it so that we could run 1,000s of little programs on one CPU. This was coupled with the idea that all of programming should be based on a synchronous / sequential approach, mimicking how CPU chips worked internally.
Somewhere along the way, the idea of using 1,000s of CPUs was supplanted by the idea of using 1,000s of little programs on a single CPU. The synchronous/sequential approach went down the road of using shared memory for allowing little programs to talk to each other. This caused all sorts of problems, but each of those problems was incrementally solved in ad-hoc approaches. The software community spent lots of effort solving problems like "thread safety", despite the fact that those kinds of problems were instances of unnecessary accidental complexity caused by the anti-realistic notion that isolated units of software should implicitly share memory. We got away with this distortion of reality for decades because of co$t - we continued thinking that we couldn't afford to use more than one CPU per computer. On the other hand, some organizations, like Apple, made lots of money by decentralizing computing power and putting CPUs into printers ("Postscript").
Alan Kay talks about the fact that he was schooled in biological systems. He invented, or at least inspired the invention of, Smalltalk. Smalltalk simulates the use of isolated, independent "objects", patterned on isolated biological entities. Yet, Smalltalk is based on the synchronous / sequential model of memory-sharing-and-time-sharing units of software which creates strong coupling between units of software (using the shared callstack) and effectively violates the fundamental principles of isolation. So-called "message sending" in Smalltalk is more like blocking, synchronous function (“method”) calling rather than asynchronous message-passing between isolated units of software. The units of software - "objects" - are implicitly coupled by the blocking behaviour of method calling. If one were to push total isolation into Smalltalk, instances of "True" would be separate processes and instances of "False" would be totally separate processes. That kind of thinking would ripple through the whole class hierarchy and, I think, it would drastically change the class hierarchy.
See Also
Email: ptcomputingsimplicity@gmail.com
Substack: paultarvydas.substack.com
Videos: https://www.youtube.com/@programmingsimplicity2980
Discord: https://discord.gg/65YZUh6Jpq
Leanpub: [WIP] https://leanpub.com/u/paul-tarvydas
Twitter: @paul_tarvydas
Bluesky: @paultarvydas.bsky.social
Mastodon: @paultarvydas
(earlier) Blog: guitarvydas.github.io
References: https://guitarvydas.github.io/2024/01/06/References.html

