In the fifth century BC, the four-corner theory, the Catuskoti, started emerging in India. The theory insists that there are four possibilities regarding any statement: it might be true (and true only), false (and false only), both true and false, or neither true nor false.
This view was long dismissed by Aristotelian traditions, which insist that there is only true and false, aka, the law of the excluded middle.
Aristotle is a grandee in his own right, but he does use simplifications that are possibly only circumstantially correct; even though it is also true that you can get surprisingly far already, just with those.
Cracks started showing up the Aristotelian 2-valued logic wall when in 1901 Bertrand Russell commenced his lengthy tribulations with what is now famously referred to as Russell’s paradox:
Does the set of all sets that do not contain themselves, contain itself?
Here you can find an implementation of the paradox in php:
In Aristotelian logic, every answer is wrong.
Of course, after Russell’s famous breakthrough, the situation became worse for 2-valued naivism.
The idea of summarily dismissing the real solution, i.e. multi-valued logic, completely came to a grinding halt after Alan Turing and Alonzo Church proved in 1936 that there is no valid yes-or-no answer possible to David Hilbert’s Entscheidungsproblem.
The only valid answer is the Catuskoti on steroids, which also implies that the vast majority of thinkable questions are indeed thinkable but undecidable.
Two-valued logical systems are inherently naive, simplistic, and often unusable. That is obviously one reason why we rather use Stephen Kleene’s 3-valued strong logic of indeterminacy in the SQL language: true, false, and null.
We are slowly but surely adopting more powerful instruments in software.
At best, it still takes decades to roll out a thing like 3-valued logic, and many programmers — undoubtedly including myself — are still not using the value null entirely correctly.
In our field, there is new hype that comes out every day — reactJS anybody? However, you can safely ignore all of it, unless it represents solutions that are deeply rooted in the real problems governing and limiting our computational axiomatizations.