1주일 정도에 걸쳐 읽었는데, 기대했던 것보다 유익했지만 생각보다 많이 어려웠다.
“이광근, 컴퓨터과학이 여는 세계"
컴퓨터, 컴퓨터과학과 관련된 핵심 아이디어들을 소개한 책이다. 사실 실용서라기 보다 개론과 원론 서적에 가까운데… 저자는 ‘컴퓨터 세계의 근본이 궁금할 때 누구나 펼쳐 볼 수 있는 과학 교양서적’ 혹은 ‘컴퓨터 전문가의 기본을 준비시켜주는 예과 입문서’로서 이 책을 썼다고 했지만, 기본 지식 없이 (혹은 다른 도움 없이) 책 그 자체로 수월하게 읽기는 꽤 어려운 내용들이 포함되어있다. 하지만 달리 말하면, 그 덕분에 다른 것들(개념이나 이론들)을 찾아보게 만드는 책이기도 하다.
다루고 있는 범위는 넓고 전체 분량에 비해 깊다. 일단 보편만능 기계로서의 ‘튜링기계’를 그와 관련된 증명들을 포함하여 자세히 설명한다. 이어서 부울이 이야기한 ‘그리고, 또는, 아닌’ 즉 부울식에 대한 이야기를 포함하고 있으며, 이것이 스위치로 어떻게 전이될 수 있는지, 그리고 그것이 컴퓨터에서 어떻게 실현되는지를 설명한다. (그리고, 이 과정에서 폰 노이만의 이야기가 등장한다.)
소프트웨어 영역에서는 그 핵심이라고 할 수 있는 여러 알고리즘과 복잡도에 대해 설명하고 있고, 프로그래밍 언어의 경우 기계적인 관점과 람다의 관점에서 이를 풀어내면서 마지막엔 데이터의 관점에서 확률추론 프로그래밍(probabilistic programming - 관찰된 데이터로부터 그 원인을 가늠하는 프로그램을 짜는 것, 즉 이 데이터로부터 명시한 인과관계를 거꾸로 거슬러 가능성 높은 원인을 어림잡아 추측하고자 하는 것)을 설명한다.
그 밖에도, 인간 지능이 컴퓨터를 통해 (혹은 컴퓨터와 협업하여) 어떻게 확장될 수 있는지 실 사례들을 제시하고 있고, 인코딩과 디코딩의 원리, 암호화와 복호화 기술에 대한 이론들도 간략히 덧붙이고 있다.
특히, 책 전반에 걸쳐 소개된 이론들 중 인상깊었던 것은 아래와 같다.
--------------------
첫번째는, (오늘 오전에 읽은 용의자 X의 헌신에도 잠깐 나왔던!) P ≠ NP 문제.
(아마도) P ≠ NP이라 추측하지만, 아직 수학적으로 증명되지 않았다. 여기서 P는 현실적인 비용으로 풀수 있는 문제들, 즉 다항(polynomial) 알고리즘이 있는 문제들을 의미하며 P클래스 문제라고 한다. NP는 운에 기대면 현실적인 비용으로 해결할수 있는 문제들(non-deterministic polynomial), 즉 현실적인 비용으로 풀수 있는지는 아직 모르는 문제들(알려진 알고리즘이 기하급수의 비용을 가진 것밖에는 없는 것들)을 의미하며 NP클래스 문제라고 한다. 다시 말해, P ≠ NP는 이 두 클래스의 문제를 명확하게 구분하는 (서로 다르다고 할 수 있는) 경계가 ‘있음’을 증명하는 문제다.
두번째는, 대학 시절 기호논리학에서 배웠던 러셀의 역설.
러셀의 역설은 다음과 같다. “나는 지금 거짓말을 하고 있다”라는 문장은 거짓과 참을 구분할 수 없다는 것이다. 이를 수학적으로 표현하면, “자기 자신을 포함하지 않는 집합들”이라고 할 수 있는데, 풀어보면 다음과 같다. S가 저 문장에 해당하는 집합이라면, 그런 S들로 구성된 집합은 S를 원소로 갖는가(포함하는가) 갖지 않는가(포함하지 않는가)의 문제가 된다. 이는 모순이다. 이러한 개념은 프로그래밍에서 '타입(type)'을 정의하는데 영향을 주었다.
세번째는, 구글의 검색 기술인 페이지 랭킹과 관련된 마르코프 체인.
서로 다른 웹 페이지 간의 이동과 방문 빈도를 사전에 계산(시뮬레이션)하는 방법을 돕는 수학적인 도구가 마르코프체인(markow chain)이다. 마르코프 연쇄반응식의 기본 조건은 '모든 상수가 음이 아니면서 각 변수 앞에 곱하는 상수의 합이 각각 1이어야 한다.'는 것이다. 예를 들어, 서울시에서 세종시로 5%가 이동하고 세종시에서 서울시로 약 15%가 매년 이동한다면, 각각 시의 내년 인구는 다음과 같이 계산할 수 있다.
내년 서울시인구 = 0.95 x 올해 서울시인구 + 0.15 x 올해 세종시인구
내년 세종시인구 = 0.05 x 올해 서울시인구 + 0.85 x 올해 세종시인구
그리고 실제 이 과정이 점화식 형태로 연쇄적으로 이루어지면 각각의 값은 특정한 값으로 ‘수렴’한다. 그리고, 이것을 웹 세계에 적용하면 약 33억(지금은 50억?) x 33억개의 점화식이 되는데, 이 수렴값들을 계산해 내는 것이 구글의 페이지 랭킹기술이다.
네번째는, 몇몇의 암호화 방법들.
서로가 사용하는 공통 비밀 키를 바탕으로 된 디피-헬만 열쇠교환(diffie-hellman key exchange) 암호화와 메시지의 원저자가 실제 그 사람인지를 확인할 수 있게 하는 RSA 암호방식, 그리고 데이터 복호화 없이 해당 데이터로 연산을 가능하게 하는 방법인 완전동형암호(fully homomorphic encryption)와 관련된 이야기들도 수업 중에 들었던 내용들이라 더 반가웠다.
--------------------
다만, 익숙하지 않은 용어를 강조한다거나 (연역, 귀납, 추론 등을 디덕, 앱덕, 인덕;; 으로 굳이 표기하고 있는데 굳이 왜 그래야 하는지 이해가 되지 않는다.) 완결되지 못한/혹은 매끄럽지 못한 문장을 사용하고 있는 부분, 그리고 여러 부분에서 중복된 문장이 나오고 있는 건 추후에 교정이 좀 되었으면 했다.
덧,
이 책이 먼저인지, 강의가 먼저인지 모르겠지만 찾다보니 실제 이 책의 내용으로 서울대 교양강좌가 이루어진 것 같은 링크가 있다.