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.