Вот в этой
https://www.youtube.com/watch?v=gLJrOTFw6J0 видеопрезентации (примерно с 50-ой минуты - до неё всё вроде как довольно тривиально) интересные и конкретные мысли про необходимость изменения подходов к программированию.
Основная мысль в том, что "двоичность" (читайте - "ветвление" в стиле if-then-else) очень сильно пропитала весь подход к программированию и, в частности, мешает тонко обрабатывать не до конца специфицированные варианты исполнения программы. Например, в простейшем случае классический assert либо фейлит, либо нет, но на "unknown" непонятно как реагировать. Автор предлагает интересный тип trit как замену/расширение bool, мечтает о quaternary операторе (как a ? b : c, только с тремя вариантами a ? b : c : d) ну и приходит к выводу, что функциональный подход с вычислением результатов работы программы, а не отметанием ненужных веток вычисления, более точно отражает троичную и вообще многозначную логику.
P.S. В SQL по крайней мере есть null (и это не особое значение самого типа, а просто флаг), как и в C#, в котором любой тип можно сделать nullable. В C++ уже пророс тип std::optional, который, говоря на C, примерно эквивалентен union { SomeType value; bool is_valid; } (или Maybe из Хаскеля). Автор упомянутого доклада (да и в целом функционально-ориентированные программисты) давно топят за некую унификацию передачи и результата, и кода ошибки - в итоге программы получатся более линейными что ли, а обработка исключительных ситуаций будет как бы в дополнение к основному вычислению, а не поперёк его. По-моему, правда, появления null'ов не особо относятся к аппаратным особенностям троичной логики.