컴퓨팅의 다음 반세기를 전망하며, 단순화, 비결정성의 수학적 취급, 형식적 방법, 그리고 ‘기호들이 일을 하게 하라’는 비전을 논하는 에츠허르 W. 다익스트라의 에세이.
앞으로의 50년
컴퓨팅의 앞으로 50년에 대해 글을 쓰겠다는 생각이 처음 떠올랐을 때, 나는 그것을 터무니없이 주제넘은 일이라 치부했다. 어느 정상적인 과학자가 그렇게 멀리 미래를 내다볼 수 있다고 감히 주장하겠는가? 그러나 곧 어떤 의미에서 그것이야말로 교육자들이 늘 하는 일임을 깨달았다. 강의를 설계할 때 우리는 무엇을 가르치고 무엇을 무시할지를 감히 결정하며, 이는 학생들의 이익을 위해서이다. 그들 중 다수는 지금으로부터 40~50년 후에도 여전히 활동하고 있을 것이다. 분명 컴퓨팅 과학의 다음 반세기에 대한 어떤 비전이 실제로 작동하고 있는 셈이다. 여기에 하나 덧붙이자면, 수정구슬이 너무 흐려 세부를 많이 보여주지 못하더라도 괜찮다는 것이다. 예컨대 35년 전만 해도, 프로그램 설계와 증명 설계가 얼마나 밀접히 합쳐지게 될지 전혀 짐작하지 못했다. 그런 세부적인 의미에서 내 삶은 놀라움으로 가득했다. 동시에 그 놀라움들은 내가 오래 전부터 기다려온 전개이기도 했다. 왜냐하면 어떤 수학이 될지는 몰랐지만, 프로그래밍이 어떤 형태로든 수학적 취급의 대상이 되어야 한다는 사실은 이미 알고 있었기 때문이다. 다시 말해, 해변에서 모래성을 쌓을 때 우리는 파도는 무시할 수 있지만 밀물과 썰물은 주시해야 한다.
다행히 과거로부터 배울 수 있는 몇 가지가 있다. 예컨대 사회가 진보를 흡수할 수 있는 속도에는 엄격한 한계가 있다는 사실인데, 이 사실 덕분에 장기 예측은 훨씬 쉬워진다. 이 10년대의 초반에 나는 ‘레지스터 윈도우’라는 위대한 발명에 대해 들었다. 내게 알려준 사람은 매우 젊었지만, 내게 그 발명은 너무도 익숙하게 들렸다. 30년 전의 Burroughs B5000을 기억하고 있었기 때문이다. 그러니 지금 당신이 밝고 건전한 아이디어를 갖고 있다면, 그것이 2025년쯤 새로운 것으로 칭송받으리라 기대해도 된다.
또 하나 과거로부터 배울 수 있는 것은 ‘컴퓨팅 과학은 사실 X일 뿐이다’ 같은 규정이 실패했다는 사실이다. 여기서 X에는 수치해석, 전기공학, 오토마타 이론, 대기행렬 이론, 람다 계산법, 이산수학, 증명이론 같은 당신이 선호하는 학문을 대입할 수 있다. 이것을 말하는 이유는, 요즘 구성적 유형 이론이나 범주론과 컴퓨팅 과학을 동일시하려는 경향이 있기 때문이다.
컴퓨팅의 핵심 도전은 그것을 엉망으로 만들지 않는 방법을 찾는 것이다. 어떤 이들이 그 도전은 모든 과학이 직면하는 것이라고 이의 제기한다면, 우리는 두 가지 반박을 해야 한다. 첫째, 기계는 너무 빠르고 기억 용량은 너무 커서, 우리는 혼란이 증식하고 퍼져나갈 수 있는 여지를 자릿수 단위로 더 많이 마주한다. 그 혼란의 전파와 확산은 부지불식간에 기계화되기 쉽다. 둘째, 우리가 상대하는 것은 인공물들이기 때문에, 통제되지 않은 모든 복잡성은 결국 우리 스스로 만든 것이다. 탓할 다른 누구도 없으니, 애초에 그런 복잡성을 들여오지 않는 법을 배우는 편이 낫다.
이와 관련해 실시간 인터럽트의 역사는 시사하는 바가 크다. 이는 50년대 후반의 발명으로, 외부 세계와의 통신이 완료되면 한 프로그램의 실행을 중단하고 다른 프로그램으로 넘어가도록 중앙처리장치의 실행을 가로챌 수 있게 해 주었다. 장점은, 비생산적인 대기로 낭비되는 많은 프로세서 시간을 들이지 않고도 외부 환경의 변화에 빠르게 반응하는 구현이 가능해졌다는 점이다. 단점은, 인터럽트가 언제 발생하여 중앙처리장치가 어느 계산에서 다른 계산으로 전환될지 예측할 수 없는 상황에서도 운영체제가 여러 계산의 올바른 수행을 보장해야 했다는 점이다. 이 예측 불가능성이 내포하는 비결정성은, 그것을 다루는 법을 모르는 운영체제 설계자들에게 끝없는 두통을 안겼다. 우리는 이 추가된 복잡성의 도전에 대해 두 가지 반응을 보았다.
한 가지 반응은 디버깅 수단을 강화하는 것이었고, IBM이 OS/360 설계에서 그렇게 했다. (이는 IBM이 60년대 전반에 도입한 360 시리즈 기계를 위해 설계하려 했던 운영체제다. IBM이 이 설계에서 겪은 문제는 1968년에 ‘소프트웨어 위기’로 알려진 세계적 현상의 인식을 촉진했다.) IBM은 사실상 중앙처리장치가 어느 인터럽트를 언제 수용했는지를 정확히 기록하는 특수 목적 모니터를 만들었다. 문제가 발생하면, 그 모니터를 제어기로 전환하여 의심스러운 이력을 강제로 재생함으로써 ‘실험’을 반복 가능하게 만들 수 있었다.
다른 반응은 에인트호번 공과대학(THE)에서 관찰할 수 있었다. 즉, 그러한 비결정적 프로그램들에 대해 실행 가능하고 안전하게 추론할 수 있는 조건을 규명하고, 이어서 그 조건이 하드웨어와 소프트웨어에 의해 충족되도록 하는 것이었다. 차이는 극명했다. 이는 지적 통제를 디버깅으로 대체할 수 없다는 사실을 다시금 보여주었다. OS/360은 그 후로도 영원히 난장판으로 남아 있었던 반면, THE에서 설계한 다중 프로그래밍 시스템은 너무나 견고해서 어떤 시스템 오동작도 터무니없는 하드웨어 유지보수 호출을 야기하지 않았다. 말할 필요도 없이, 이 전 과정은 내게 지울 수 없는 인상을 남겼다.
하나의 교훈은, 실시간 인터럽트는 단지 파도였을 뿐이고, 밀물과 썰물은 비결정성의 도입과 그것을 다루기 위한 수학적 기법의 발전이었다는 것이다. 더 넓은 교훈은 프로그램 정확성 문제에 대한 구성적 접근이며, 여기에 이제 시스템 성능 문제도 덧붙일 수 있다. 자원 공유 시스템을 얽히고설킨 할당 전략으로 설계하는 것은 너무나 쉬워서, 어떤 양의 대기행렬 이론을 적용하더라도 매우 불쾌한 성능상의 놀라움을 막지 못할 수 있다. 성능 예측 가능성을 자신의 책무에 포함하는 설계자는 대개 아예 대기행렬 이론을 필요로 하지 않는 설계를 내놓는 경향이 있다. 마지막으로, 그리고 이번에는 비교적 최근의 예로, 지연-비민감 회로 설계가 있다. 이는 클럭 기반 시스템에서의 모든 타이밍 난점을, 해결하기보다는 피하는 것이 더 나은 문제 범주에 위임한다. 교훈은 분명하다. 예방은 치료보다 낫다. 특히 병이 통제되지 않은 복잡성일 때는, 그것을 치유할 약은 존재하지 않기 때문이다.
위의 예들은 매우 일반적인 기회를 가리킨다. 대략적으로 말해, 최종 산출물과 설계 과정 모두가, 복잡성의 조합적 폭발이 스며드는 것을 막기에 충분한 이론을 반영하도록 하는 설계들이다. 이 기회가 매우 오랫동안 우리와 함께할 것이라고 추정할 이유는 많으며, 이는 컴퓨팅 과학의 미래에 대단히 좋은 소식이다. 역사 내내 간명화가 개별적 기지의 업적보다 장기적으로 훨씬 더 큰 과학적 영향을 끼쳐 왔기 때문이다.
간명화의 기회는 매우 고무적이다. 떠오르는 모든 예에서, 단순하고 우아한 시스템이 더 조작적으로 꾸며낸 장치들보다 설계하고 제대로 만들기가 더 쉽고 빠르며, 실행 시 더 효율적이고 훨씬 더 신뢰할 수 있기 때문이다. (‘소프트웨어 산업’이라는 표현이 그토록 오해를 불러일으킬 수 있는 이유 중 하나는 제조업과의 주된 유비가 성립하지 않기 때문이다. 소프트웨어에서는 종종 ‘제품’의 형편없는 품질이 그것을 만드는 데 드는 비용을 높이는 주범이다! 프로그래밍에서 버그를 애초에 들여오지 않는 것만큼 싼 일은 없다.) 세상이 이렇다 보니, 나는 또한 이러한 기회가 앞으로 수십 년 동안 우리 곁에 남아 있으리라 예상한다. 첫째, 단순성과 우아함은 성취하기 위해 힘든 노력과 규율이 필요하고, 이를 알아보는 데 교육이 필요하기 때문에 인기가 없다. 둘째, 정반대 방향으로 가는 노력에 대규모 투자가 이루어지고 있음을 본다. 회로 시뮬레이터, 프로토콜 검증기, 알고리즘 애니메이터, 하드웨어 설계자를 위한 그래픽 도구, 치밀한 버전 관리 시스템 같은 이른바 설계 지원 도구들을 생각해 보라. 이들은 힘을 암시함으로써 복잡성을 억제하기보다 오히려 부추긴다. 직업 생애의 상당 부분을 그런 노력에 바친 무리를 상대로, 그 노력의 대부분이 잘못 방향 잡았다는 제안을 우리가 친절하게 받아들일 것이라고 기대하기 어렵다. 그리고 그 노력을 자금 지원한 기관들로부터 더 호의적인 반응을 기대하기도 힘들다. 너무 많은 사람이 관여했고, 과거 경험상 충분히 많은 비용이 들었다면 그것은 자동으로 대성공으로 선언되기 때문이다. 셋째, 자동 계산이 그렇게 혼란스러워서는 안 된다는 비전은, 괴물 같은 것이 등장할 때마다 다시금 흐려진다. 그런 것들은 이후 컴퓨팅 공동체에 사실상의 표준으로 강제로 떠안겨진다. COBOL, FORTRAN, ADA, C++, 데스크톱 출판용 소프트웨어 등등, 무엇이든 이름을 대 보라.
요컨대, 간명화의 기회는 앞으로도 여러 해 동안 우리 곁에 남을 것이다. 그러니 우리의 제정신과 열정을 지키기 위해, 실무자들이 우리의 다음 성공적인 시범 프로젝트를 장난감 문제라고 조롱하며 내던질 때마다 성급함으로 괴로워하기보다는, 그 기회의 장구함을 반갑게 받아들이자. 그들은 그렇게 할 것이다. 바로 직전까지만 해도 자신들이 자신 있게 불가능하다고 예언했던 것을 당신이 성취했더라도 말이다.
이제 우리는 모두, 프로그래밍이 증명만큼이나 어렵고 또한 쉬우며, 절차를 프로그래밍하는 것이 정리를 증명하는 것에 대응한다면, 디지털 시스템을 설계하는 것은 수학적 이론을 구축하는 것에 대응한다는 사실을 안다. 과제들은 동형적이다. 또한 우리는, 실행적 관점에서 프로그램이 그저 추상적인 기호 조작자일 뿐일지라도, 설계자는 프로그램을 정교한 수식으로 간주하는 편이 낫다는 것도 안다. 그리고 정교한 수식을 설계하는 믿을 만한 유일한 방법은, 즉 기호 조작을 통한 도출뿐이라는 것도 안다. 우리는 기호들이 일을 하게 해야 한다. 그것이 규모를 키울 수 있는 유일하게 알려진 기법이기 때문이다. 컴퓨팅과 컴퓨팅 과학은 불가피하게 형식 수학의 훈련, 혹은 약어를 원한다면 VLSAL(논리의 매우 대규모 적용, Very Large Scale Application of Logic)의 훈련으로 드러난다.
프로그램 설계와 증명 설계 사이의 매우 긴밀한 연관성 때문에, 프로그램 설계의 어떤 진전도 일반 수학이 수행되는 방식에 직접적인 잠재적 영향을 준다. 컴파일러를 만들어 온 때부터, 컴퓨팅 과학자들은 해석되지 않은 수식들의 기계적 조작이라는 생각에 매우 익숙해져 왔다. 나는 그들이 계산, 즉 해석되지 않은 수식의 조작을 인간의 추론을 대체하는 대안으로 제시하려는 라이프니츠의 꿈을 더 한층 현실화하는 데 의미 있게 기여하리라 확신한다. 그러나 그 꿈을 현실로 바꾸려는 도전은 앞으로 최소한 다섯십 년은 우리를 바쁘게 할 것이다.
적절한 형식적, 표기적, 개념적 실천을 설계하는 것만으로도 아직 충족되지 않은 가공할 도전인 데다, 현재 전통은 거의 도움이 되지 않기에 도전은 더 크다. 예를 들어, 우리는 언어적 추론에서 형식적 조작으로의 전환을, 소통과 문서화의 대역폭을 좁히는 일로 이해할 수 있다는 것을 안다. 그런데 ‘사용 용이성’이라는 이름으로 컴퓨팅 공동체의 많은 노력이 바로 그 대역폭을 넓히는 데로 향해 있다. 또한 우리는 어떤 시스템을 사용할 수 있는 것은 그 속성에 대한 우리의 지식 덕분이라는 것, 그리고 이와 유사하게 이론을 구축할 때 선택하는 개념들에도 가능한 한 세심한 주의를 기울여야 한다는 것을 안다. 우리는, 우리 스스로 만든 복잡성에 짓눌리지 않으려면 그것을 또렷하고, 얽힘 없이, 단순하게 유지해야 함을 안다. 그러나 복잡성이 더 잘 팔리고, 시장은 반대 방향으로 끌어당긴다. 나는 여전히 850쪽이 넘는 ‘WordPerfect 5.0 사용법’ 책을 발견했던 일을 기억한다. 사실 이는 내가 가진 1951년판 게오르크 요스의 ‘이론 물리학’보다 12쪽 더 많았다! 이제 컴퓨팅 공동체를 인위적 복잡성의 창출과 보존을 위한 비밀 결사로 폭로할 때가 왔다. 그리고 소프트웨어 공학자들은 형식 기법을 언급하는 경우에만 그것들에 의심을 던지기 위해 언급한다. 요컨대, 우리는 컴퓨팅 공동체 전반으로부터 너무 많은 지지를 기대하지 말아야 한다. 수학 공동체로부터도 나는 그다지 많은 지지를 기대하지 않게 되었는데, 비형식성이 수학 길드의 상징이기 때문이다. 그 구성원들은 —형편없는 프로그래머들처럼— 자신들이 정확히 무엇을 하고 있는지 모른다는 데서 지적 흥분을 얻고, 인간 정신의 경이로움(특히 자신들의 정신)에 전율하길 더 좋아한다. 그들에게 라이프니츠의 꿈은 악몽이다. 요약하면, 우리는 스스로의 힘으로 나아가야 한다.
그러나 그것은 문제되지 않는다. 앞으로 50년 동안 수학은 효과적인 형식적 추론의 기술이자 과학으로 떠오를 것이며, 우리는 ‘어떻게 기호들이 일을 하게 할 것인가’를 배우는 데서 지적 흥분을 얻게 될 것이다.
Calculemus!
Edsger W.Dijkstra
교수·박사 Edsger W.Dijkstra
컴퓨터 과학과
텍사스 대학교 오스틴
Austin, TX 78712-1188
미국
전사: Javier Smaldone.
2007년 12월 10일(월) 개정.