Software failures are failures of understanding, and of imagination.
In a recent essay, Victor implored professional software developers to stop pouring their talent into tools for building apps like Snapchat and Uber. “The inconveniences of daily life are not the significant problems,” he wrote. Instead, they should focus on scientists and engineers—as he put it to me, “these people that are doing work that actually matters, and critically matters, and using really, really bad tools.” Exciting work of this sort, in particular a class of tools for “model-based design,” was already underway, he wrote, and had been for years, but most programmers knew nothing about it.
It’s an interesting read, especially from a Simondonian perspective. The first part is merely informative, and not so well informed, e.g., puredata has been around for 21 years now… But then it gets into the details of Temporal Logic of Actions and Esterel, urging programmers to become fluent in formal verification and set theory (but not Type theory?) There’s a lot of research on provable software outside of the corporations mentioned in the article. But the point is made, and the article brings a good introduction on the problem faced by the industry as more software comes, and with it, more bugs.
Now, I find it very telling that, again, a pattern shows up: the author makes pertinent assessments, then goes on to reduce the scope of analysis to finally deliver a one-way track to a seemingly solution across a large solution space. Here, the idea that human developers create bugs out of a lack of imagination, or more generally speaking out of not covering rare events. And the solution to come naturally: make programs make programs, following mathematical precision and provable software. Shiny, shiny! The only problem with that, you guessed it: complexity begs to differ.
The article presents organic evolution of code from a developer’s mind implementing some functionality to evolving it as needed, as one way of doing development, and opposes this approach, that I would call software craft, to another approach, more akin to actual software engineering, that would derive from mathematics, logics, and proof theory. Well, reality is not so simple. If it makes sense to have mathematical proof that avionics software is correct, and generate code from specifications, it is an absolute non-sense to generate a Web site this way, as it would be more complex to create the proof that actually code it on the one hand, and on the other hand – which is probably more important – one cannot conceive open-ended software that is provable: provable software is hard enough to work in a closed world, where the algorithms will be able to cover the full solution space and come up with optimal solutions. But as soon as the solution space becomes infinite, complexity will beat the machine.
I can hear some trans-humanists humming in the background. We have OpenCog, they say, AGPL software to create general artificial intelligence, and in no time, what you cannot conceive will be casually done by robots. I’m grateful we have OpenCog, and especially that its human developers chose the Affero GNU General Public License, proving that rare human skills are more valuable when they’re shared, like scientists used to share their work before profiteering gluttons captured intelligence into so-called Intellectual Property.
The fact remains that statistical analysis of the world won’t make it for “artificial intelligence” to do what humans do. Programs making programs can certainly solve a great number of problems in geometrical, analytical, or algebraical ways, but many problems remain completely out of such spaces. Reducing all the world’s problems to solvable problems has a control bias that effects in colonization, shunning, normalization of human behavior, rejection of diversity, etc., replacing natural evolution with algorithmic predation.
I wish long live to the software craftspeople, the live coders, the misfits who create non-utilitarian software, and explore the limits of the psyche hitting and bypassing the limits of the machines. For this is this excess of being that makes for evolution, and not the conformation to a dominant model of reality.