"There is no greater assumption of infallibility in forbidding the propagation of error..."
– On Liberty, John Stuart Mill
There's a million-and-one ways to program today. But no matter what style or language one chooses, there's a feature that all of them have in common: errors.
Errors in programming are an interesting topic because not many people – especially people starting out – give them much thought. Embarrassingly, I was one of those people until a good few years into my coding career.
Errors are arguably one of the most important things to get right when writing software. Without good error catching, propagation, and recovery, software tends grow more fragile as it scales.
But what are errors for exactly? They're a standard way for a program to fail in a controlled fashion.
They do more than just handle failure though. They tell the person / people who make the software that something is wrong. They highlight the flaws in the system so that they can be focussed on and repaired.
While reading the book On "Liberty" by John Stuart Mill recently, I was struck by how interchangeable many of the concepts are with programming concepts.
The largest area of overlap is that speech and programming are both used to communicate logic and information through systems.
Another striking commonality is that speech, just like programming, can contain errors. Errors in this context are a metaphor for unpopular or politically incorrect ideas. The speech many people think would be better left unuttered.
Suppressing ideas is the same as swallowing errors! In programming, obfuscated errors are even more dangerous than visible errors.
It might look good on the surface, but hidden errors don't mean a more stable system. Actually it's less stable because the errors are still there. Now there's no way to know the magnitude of the problem.
A bad idea rarely thrives in the marketplace of ideas... okay, except for flat earth theory...
But even when bad ideas thrive, they won't thrive for long before the bad parts get cleaned up or replaced my means of thought and reason. The inability to do the work of replacing bad ideas means the fruits of that thought and reason never see the light of day.
Some ideas are bad; we should aim to avoid coming up with bad ideas as much as we can. However, bad ideas are also inevitable; we should have systems in place to surface them and recover even stronger.