Would you agree to spend 5 to 10 more time and budget to write a software in exchange for the no bugs guarantee?
I have thinked a lot about this and my conclusion is that this requirement is foolish when you compare it to the cost/time drawback.
It’s conceivable to have a language or markup where you can specify on more detail what the code should do. This could then be checked automatically. Things are already going in that direction with things like non-nullable but I am pretty sure this could be taken much further.
I imagine an implementation of this is equivalent to writing code and tests with the same level of detail as one might today. Language features put constraints on the solution, but do not reduce the essential complexity of a problem.
Could you elaborate more on what you mean by "could be taken much further"?
I think a language could even more constrain expected behavior so the compiler can catch problems without having to write tests. With tests you have describe the design constraints in two places: the code and the tests. If we could reduce the number of tests and more information into the code it would be a big win. Or a language that can model distributed systems and their interactions. The problem is to still be flexible enough so it will be hard to find the right level. I am pretty sure we will see a lot of development in the next decades. Systems are becoming very complex. If you think an old COBOL codebase is hard to maintain, good luck with a legacy microservice architecture in a few years. And it seems to be getting worse.
Got it, thank you for that explanation. I completely agree that we can eliminate all kinds of erroneous behaviors with better type systems.
> good luck with a legacy microservice architecture in a few years. And it seems to be getting worse.
It is getting worse. The complexity of systems and their dependencies are growing faster than the discipline of seeking to reduce accidental complexity.