The other day I got a worried call from my mother-in-law. My wife usually calls her during her commute but that day she neither called or answered her phone.
Turns out my wife’s iPhone had crashed — the software had wedged and there was no way to reboot. The amusing, if you can call it that, fact was that her (employer-required) Windows PC had done the same thing the same day. For the PC, which also ignored any attempt to reboot, we took the battery out and back in, forcing a cold start.
We are rapidly turning our civilization into software. As we do that, and as we build smarter and smarter AIs to do more and more important tasks, it will be important simply to be sure the software we write simply works right and is reliable.
A key design feature that makes natural control systems reliable, as well as adaptive and robust and resilient, is the inclusion of lots of feedback. In the human brain, there is generally more feedback than forward signal along the major data pathways. By contrast, the standard model of sequential programming has no feedback at all; in the simplest and most common coding styles, all the operations are done by dead reckoning. Consider an html renderer such as is showing you this page. There are plenty of sites whose pages come up with overprinted regions in some browsers — because the renderer doesn’t look where it’s writing.
It’s possible to do better, of course. In control systems, where feedback is essential, you have tight control loops that check and set, check and set, hundreds or thousands of times a second. Porting some knowledge of feedback in control systems back into systems software (and the rest of our software) would make it more reliable, as well as adaptive and robust and resilient. And as we turn our civilization into software, that’ll be a very good thing.