기타 업적

EWD

다익스트라는 글을 잘 쓰는 사람으로도 유명하다. 네덜란드 태생이었던 그가 영어로 글을 잘 쓰기까지는 많은 노력이 필요했을 것이다. 실제로 그는 1950년대 후반에 처음 국제회의에 참석했을 때 영어를 잘 하지 못해서 힘들었다고 회상한 바가 있다.​2​

그가 글을 잘 쓰게 된 이유 중의 하나는 쉬지 않고 글을 썼기 때문이 아닐까 싶다. 그의 글쓰기 습관을 보여주는 것이 EWD라는 그의 원고 모음이다. EWD는 그의 이름 약자인데, 그는 개인적으로 기록을 남길 때마다 EWD 1, EWD 268과 같은 식으로 일련번호를 붙였다. 그는 거의 모든 EWD 원고들을 손글씨로 또박또박 적었다. 그의 마지막 EWD 원고는 1318번이며 세상을 떠나기 약 넉 달 전에 작성되었다.

그는 EWD 1000번에서 처음 EWD를 시작한 때를 다음과 같이 회상했다.

28년 전에 나는 EWD0을 작성했다.
뭐랄까.. 과학적인 큰 일거리가 비어 있던 시기였다. 박사 논문과 X1 컴퓨터를 위한 기본 소프트웨어를 끝낸 상황이었고, 아직 알골 60의 명세서가 완료되지 않아서 컴파일러 작업에 들어가지 못하고 있었다. 그래서 나는 온갖 상관 없는 일을 했다. 예를 들어 그해에 나는 (마침내!) 최단 경로 알고리듬과 최소 신장 트리 알고리듬에 관한 논문을 발표했다. 그리고 이것저것 들여다보기도 했는데 네다섯 개의 원고를 동시에 작성하고 있었다. 원고마다 페이지 번호가 붙어 있기는 했지만 두 번이나 페이지가 뒤섞이는 일을 겪고 나자 더 이상 그런 실수를 반복할 수는 없다고 다짐했다. 그래서 원고마다 EWD0, EWD1, EWD2, EWD3, EWD4와 같이 일련번호를 붙였다. 바로 그렇게 시작되었다.​6​

초기의 EWD는 그의 연구 관심과 결과물을 기록하는 용도였으나 노년기에는 과거에 대해 회상하는 원고도 간간이 있었다. EWD 1308을 보면 그가 어떻게 구조적 프로그래밍에 관한 원고(EWD 249)를 작성하게 되었는지에 대한 이야기가 나온다.

1968년에 나는 심한 우울증을 앓았다. 그 원인의 일부는 학과에서 비롯되었는데 학과 이름을 정보학과Informatics로 바꾸자는 나의 제안을 거부했고 내가 이끌었던 그룹을 해산시켰기 때문이었다. 또 한편으로는 내가 앞으로 무엇을 할지 주저하고 있기 때문이기도 했다. 그때 내 생각으로는 알골 관련 구현과 THE Multiprogramming System은 그저 재주가 있음을 보여주는 연습이었을 뿐이었고 이제는 진짜 문제를 해결해야 한다고 여겼다. 우울한 상태에서 몇 달 만에 나는 용기를 내어 (치유를 위한 목적으로) EWD 249 <구조적 프로그래밍에 관한 소고>를 작성했다. 그것은 내가 우울증에서 벗어나는 계기가 되었다.​4​

자체 안정화 시스템

미국 컴퓨터 학회ACM는 분산처리 분야에서 뛰어난 논문을 매년 한 편씩 선정하여 상을 수여해왔는데 2002년의 수상자는 다익스트라였다. 선정된 논문은 놀랍게도 그가 1974년에 발표했던 논문이었다. 무려 38년이나 된 논문이 새삼스럽게 부각된 것은 레슬리 램포트Leslie Lamport의 공이 크다. 램포트​¶¶​는 1983년에 열린 학술대회에서 다익스트라의 옛 논문을 거론하면서 ‘장애 허용 컴퓨팅fault tolerant computing‘ 분야의 시작을 알렸다고 높게 평가했다.

다익스트라의 1974년 논문은 자체 안정화self-stabilizing에 관한 내용을 담고 있다. 1.5 페이지 정도의 분량밖에 되지 않는 이 논문은, 분산 시스템에서 어떻게 해야 시스템 전체가 엉뚱한 상태로 빠지지 않을지에 관한 내용을 담고 있다.​##​

그는 임계 구역에 대한 고민을 더 확장하는 과정에서 이런 아이디어를 냈다. 그가 고민해왔던 동기화 문제는, 프로세스들이 시스템에 관한 정보를 모두 공유하며, 같은 시계clock에 의해 통제되는 환경을 가정했다. 하지만 여러 대의 컴퓨터가 느슨하게 연결되어 있고, 각 컴퓨터가 각자 독립적인 시계에 의해 통제되는 상황이라면 이야기가 달라진다. 임계 구역이란 결국 여러 프로세스가 공유하는 시스템 정보를 안전하게 다루기 위함인데, 느슨한 분산 시스템에서도 전체 시스템을 올바르게legitimate 유지하기 위한 정보가 안전하게 다루어져야 할 것이다. 그래서 그는 분산 시스템이 어떤 이상한 상태에 놓이더라도 유한한 시간이 지나면 다시 올바른 상태legimate state로 돌아올 수 있게 해 주는 알고리듬을 제안했다.

다익스트라는 수상 소식을 듣고 얼마 지나지 않아 세상을 떠났다. 미국 컴퓨터 학회는 그의 업적을 기려, 2003년부터 이 상의 명칭을 다익스트라 상Dijkstra Prize으로 부르고 있다.

정형 검증(Formal verification)

다익스트라의 프로그래머 경력은 사실 대단히 놀랍다. 그는 프로세서 명령어 구조를 설계해보았고, 그 명령어를 기반으로 기계어 프로그래밍을 작성했다. 그리고 고급 언어(알골) 설계에 참여했으며, 컴파일러까지 직접 개발해보았다. 그는 인터럽트 구조를 설계하고 구현했으며, 다중 처리를 위한 운영체제(THE)도 개발해보았다. 그의 위대한 점은 이런 실무적인 활동 속에서 문제를 발견하면 이를 이론적으로 정의한 후 답을 구했다는 점이다.

재능이 뛰어난 그였지만 프로그래밍 작업은 쉽지 않았던 듯싶다. 그래서 구조적 프로그래밍과 같은 프로그래밍 방법론을 제시하기도 했지만, 궁극적으로 그는 프로그램의 정확성을 위한 ‘우아한’ 방법을 원했다. 그는 프로그래밍에 ‘수학적 우아함’을 도입하고 싶었다.​9​

그는 가드 명령어Guarded Command Language라는 것​***​을 제안했고 최약 사전조건 계산weakest precondition calculus이라는 방법론을 통해서 소프트웨어 프로그램을 수학적으로 증명하기 위해 노력했다.​14​


  1. ​*​
    출처: https://en.wikipedia.org/wiki/Edsger_W._Dijkstra, CC BY-SA 3.0
  2. ​†​
    출처: https://www.dijkstrascry.com/
  3. ​‡​
    그의 이름을 네덜란드식으로 읽으면 에츠허르 데이크스트이다. 하지만 그가 인생의 절반 정도는 미국에서 보냈고 그곳에서는 영어 발음으로 이름을 불렀으므로 여기서는 미국식 발음으로 표기했다.
  4. ​§​
    EWD는 다익스트라가 자신이 작성한 원고들에게 붙인 이름이며, 1000은 1000번째 원고라는 표시이다.
  5. ​¶​
    1980년에 튜링상을 수상했다.
  6. ​#​
    1984년에 튜링상을 수상했다.
  7. ​**​
    프로그램과 프로세스는 다르다. 프로그램은 어떤 일을 하는 명령어들의 집합이며 보통의 경우 파일의 형태로 존재한다. 이 프로그램이 컴퓨터에서 실행되려면 메모리로 이동해야 하는데 이렇게 메모리 상에 존재하는 상황을 프로세스라고 볼 수 있겠다.
  8. ​††​
    55-56페이지
  9. ​‡‡​
    1956년에 뉴얼과 사이먼이 발표한 인공지능 프로그램이다.
  10. ​§§​
    존 매카시 편을 참조할 것.
  11. ​¶¶​
    2000년에 튜링상을 수상했다.
  12. ​##​
    아마도 지면 관계상 증명은 생략한 것 같은데, 독자에게 직접 증명을 해보라는 친절한 코멘트가 달려 있다.
  13. ​***​
    후에 토니 호어는 공리적 의미론에서 이 방법을 사용하기도 했다.

참고문헌

  1. 1.
    Dijkstra EW. The humble programmer. ACM Turing Award Lectures.:1972. doi:10.1145/1283920.1283927
  2. 2.
    Oral History Interview with Edsger W. Dijkstra. Charles Babbage Institute; 2001:24. https://hdl.handle.net/11299/107247
  3. 3.
    ACM. Edsger Wybe Dijkstra. A.M. Turing Award Laureate. Accessed July 26, 2022. https://amturing.acm.org/award_winners/dijkstra_1053701.cfm
  4. 4.
    Dijkstra E. What Led to “Notes on Structured Programming.” The Univ of Texas at Austin; 2001:12. https://www.cs.utexas.edu/users/EWD/ewd13xx/EWD1308.PDF
  5. 5.
    Dijkstra EW. Recursive Programming. Numer Math. Published online December 1960:312-318. doi:10.1007/bf01386232
  6. 6.
    Dijkstra E. Twenty-Eight Years. The Univ of Texas at Austin; 1987:9. https://www.cs.utexas.edu/users/EWD/ewd10xx/EWD1000.PDF
  7. 7.
    Dining philosophers problem. Wikipedia. Accessed July 26, 2022. https://en.wikipedia.org/wiki/Dining_philosophers_problem
  8. 8.
    Dijkstra EW. Letters to the editor: go to statement considered harmful. Commun ACM. Published online March 1968:147-148. doi:10.1145/362929.362947
  9. 9.
    Edsger W. Dijkstra on Dutch TV. YouTube. Published 2000. Accessed July 26, 2022. https://www.youtube.com/watch?v=RCCigccBzIU
  10. 10.
    Dijkstra E. Structured Programming. .; 1969:4. https://www.cs.utexas.edu/users/EWD/ewd02xx/EWD268.PDF
  11. 11.
    Dekker’s algorithm. Wikipedia. Accessed November 2, 2022. https://en.wikipedia.org/wiki/Dekker%27s_algorithm
  12. 12.
    Hoare CAR. Communicating Sequential Processes. Prentice Hall; 2015. http://www.usingcsp.com/cspbook.pdf
  13. 13.
    Dahl OJ, Dijkstra EW, Hoare CAR. Structured Programming. Academic Press; 1972.
  14. 14.
    Dijkstra EW. Guarded commands, nondeterminacy and formal derivation of programs. Commun ACM. Published online August 1975:453-457. doi:10.1145/360933.360975

1 2 3 4 5 6