Every now and then, visionary people come along in the world who seem to be able to predict the future and create ambitious things from seemingly nothing. It’s not magic – rather, these people have a solid framework of the world that allows them to navigate it effectively. To understand this concept deeper, let’s use an analogy from computer science: software testing.
On the surface, testing may seem like tedious, repetitive work. This can indeed be true for performing the test steps themselves. However, the tricky part is knowing -what- to test for. In fact, it is one of the hardest parts of creating quality software, harder than writing code. Why? Because nearly all real-world software has an infinite number of states1 that it can be in, and discerning which of those states are important can be really tricky. And since it’s not realistic to test everything, we need to pick a few of the most important test cases, test those, and have reasonable confidence that the software will perform well.
Note that the key term here is “important.” You can test a thousand meaningless test cases, and be worse off than testing one critically important one. For example, if you’re building email/password login functionality, then the two most important test cases are 1) a valid email + password should log in and 2) an invalid email or password should show an error. Other test cases, eg. whether the system works with emails ending in .ca, .fr, .de, if it was already tested with .com, are meaningless from a technical perspective.
Writing code often focuses on a specific use case, a single path of execution, while testing focuses on a full understanding of every possible state. Developing this understanding is challenging, but it gives a much deeper insight than merely understanding a single flow of execution.2
The same idea applies to the physical world, and society in it. People’s imaginations about the future are analogous to test cases – each person has their own future “state” of the world that they want to see come true. Likewise, the what-actually-ended-up-happening is analogous to a specific flow of execution in a program. As an example, consider a vacant lot in a city – different people will have different ideas about what the future of that lot should be. A real estate entrepreneur might want to build a residential complex, while residents might want it turned into a park. A foreign dictator might even want the lot, along with the surrounding city and region, to become part of their country. A skeptical observer might think the lot will remain empty. All of these ideas are potential futures for the lot, and yet in a few years, one of them (or a combination of more) will eventually come true.3 In a sense, this is the "vector sum" of all the different directions, after they collided and interacted with each other.
In the example above, the imaginations of people are analogous to the possible future versions of the world, and the thing that actually gets built on the lot is a specific “flow of execution.”4 Just like in software, a deep understanding of the different potential futures and being able to discern which ones are likely to affect the physical reality is a valuable skill. It can mean the difference between being able to predict and navigate changes in the world, rather than simply reacting to them as they happen.
Programming isn’t the only area where this concept appears. It pops up in other areas of the world as well, only if you look close enough.