지지위지지 부지위부지 (知之爲知之 不知爲不知)

Knowing is admitting not knowing

우리는 아직 알 수 없는 것이 너무나도 많고, 해결해야 할 문제 또한 너무나도 많다. 단순히 다음 단어를 예측해 주는 통계 모델이 어떻게
인간처럼 대화할 수 있고 코드까지 생성해주는지, 엄밀한 검사를 거친 소프트웨어가 언제 어디서 결함을 일으킬지, 또 언제쯤 안전이 보장된
소프트웨어를 만들 수 있을지 우리는 알 수 없다.

알 수 없다는 것은 새로운 아이디어의 시발점이 된다. 결정 불가능성은 컴퓨터 과학의 근본적인 한계이자 동시에 무한한 가능성이다.
괴델의 이론과 튜링의 증명은 수학과 알고리즘의 결정 불가능성을 보였다. 인류사의 많은 부분에서 우리는 이와 같은 명확한 한계를 좋아하지 않았다.
프로메테우스의 영원한 징벌과 같이 우리가 올라설 수 있는 어깨를 내준 튜링, 괴델과 같은 거인들은 안타깝게도 계속되는 질타와 고통
속에 단명하였다. 그러나 그들의 업적은 거기서 그치지 않았고 현실 세계로 까지, 이어졌다. 양자 스펙트럴 갭 문제는 현실 세계의 매우 근본적인 것들조차 결정 불가능성을 가질 수 있음을 보였다. 하지만 이러한 한계는 지식을 제한하지 않았고 오히려 결정 불가능하다는
사실로부터 새로운 방식들을 제안하게 하여 우리는 알아야만 하며, 알아낼 것이라는 힐버트의 말을 창의력이란 단어로 도전하게 되었다.
소프트웨어 분석 또한 마찬가지이다. 튜링의 정지 문제는 소프트웨어의 대부분 행동 및 상태가 결정 불가능하다는 것을 보였다.
그러나 이러한 사실이 소프트웨어 분석을 제한하지 못했다. 오히려 더 많은 방법론을 제시하게 하였다. 요약 설명(Abstract Interpretation)을
이용하여 오탐을 포함한 분석을 할 수 있었고, 유전 알고리즘을 이용하여 빠른 속도로 최대한 많은 실행 경로를 탐색할 수 있었다. 최근에는 통계학을 접목하여 확률적인 분석을 할 수 있게 되었다.

알 수 없다는 것은 수많은 방법론을 낳고 인간의 무궁무진한 가능성을 자극한다. 아직 우리에게 완벽한 소프트웨어 분석을 할 수 있는 기술은 없다. 하지만 기술의 정확도는 매년 좋아지고 있고, 기업 차원에서 도움이 되고 실제로 사용하는 기술도 등장하고 있다. 우리는 수많은 답을 알 수 없는 문제에 직면하고 고민한다. 하지만 우리는 답을 찾을 것이다. 늘 그러하였듯이.

We have so many things that are still unknown to us and so many problems that need to be solved. How a mere statistical model predicting the next word can engage in conversations like humans and even generate code, when rigorously tested software will trigger flaws and when we might be able to create software that is truly secure – all these remain uncertain to us.

The notion of the unknown becomes the starting point for new ideas. Undecidability is both a fundamental limit and an infinite possibility in computer science. Gödel’s theorems and Turing’s proofs demonstrated the undecidability of mathematics and algorithms. In many aspects of human history, we haven’t been fond of such clear limits. Giants like Turing and Gödel, who provided us with shoulders to stand on like Prometheus, unfortunately faced ongoing criticism and suffering. However, their achievements didn’t stop there; they extended into the realm of the real world.

The quantum spectral gap problem even showed that fundamental aspects of the real world can exhibit undecidability. Yet, these limits haven’t constrained knowledge; rather, they’ve sparked new ways of thinking. Creativity has embraced the fact of undecidability, challenging us, as Hilbert put it, to know and find out. Software analysis follows the same path. Turing’s halting problem demonstrated that most behaviors and states of software are incomputable. However, this fact hasn’t restricted software analysis; instead, it has proposed more methodologies. Using abstract interpretation, analysis including overestimations became possible, and genetic algorithms allowed rapid exploration of numerous execution paths. Recently, the integration of statistics enabled probabilistic analysis.

The notion of the unknown births countless methodologies and stimulates boundless human potential. A technology that can perform perfect software analysis eludes us. Nevertheless, the accuracy of technology improves each year, and practical, helpful technologies are emerging on an enterprise level. We face numerous questions without answers, yet we will find solutions. As has always been the case.