튜링과 윌크스

ACM이 미국의 학회임에도 불구하고 튜링상의 두 번째 수상자를 영국에서 찾은 점은 흥미롭다. 물론 모리스 윌크스는 분명히 초기 컴퓨터 시스템 개발의 주인공이었으며 그의 제안이 후대의 컴퓨터에 큰 영향을 미쳤다는 점에서 명백히 자격이 있다. 하지만 존 모클리나 프레스퍼 에커트도 그에 못지 않은, 오히려 더 결정적인 기여를 했고, 이론적인 면에서는 클로드 섀넌(Claude Shannon) 같은 출중한 인물이 있었음에도 미국 밖에서 수상자를 찾은 이유는 가늠하기 어렵다.

윌크스는 튜링과 같은 시대와 공간을 살았다는 점에서 차별성을 찾을 수 있다. 실제로 두 사람은 알고 지내던 사이였던 것으로 알려진다. 그는 한 인터뷰에서 이렇게 말했다.

나는 튜링을 좋아했습니다. 정말로 우리는 사이 좋게 지냈죠. 그는 명령을 내리듯 말하길 좋아했고 그런 점은 나에게 별로 호감을 주지 못했습니다만 그래도 우리는 잘 지냈습니다. 가끔 사람들은 내가 튜링하고 잘 지내지 못했다고 하는데 그건 사실이 아닙니다. 하지만 당시 나는 그와 엮이지 않으려고 아주 조심하기는 했습니다.​4​

튜링에 대한 그의 평가는 그리 후하지 않았다. 동시대에 살았던 사람이기도 하고 지향하는 바가 달라서일 수도 있겠다. 그가 보기에 튜링은 수학자였고 엔지니어는 아니었다.

튜링은 나와 동시대의 사람이죠. 그러니까 내가 그를 위대한 인물로 볼 필요는 없겠지요? 거 왜, 사람들은 동시대의 사람을 위인으로 생각하지 않잖아요. 그가 학부생이었던 시절의 모습은 선명하게 기억나지가 않습니다. 하지만 분명히 같은 수업을 들었고 우리는 둘 다 졸업시험에서 좋은 성적을 받았고 최우등상을 받았습니다… 그는 진짜 수학자였습니다. 하지만 수학만 좀 알았을 뿐 다른 것은 잘 몰랐죠. 그는 현실성 있게 일을 꾸미는 사람이 아니었습니다. 음… 그가 일에 끼어들면 아마도 잘 굴러가지 않을 겁니다.​4​

사실, 튜링는 윌크스를 좋아하지 않았다. 튜링은 장난스럽게 말하기를, 윌크스의 설계 아이디어들은 그의 것과 완전히 대조적이면서, 어려움을 해결하기 위해 머리를 쓰기보다는 더 많은 장비에 의존하는 미국식 전통을 훨씬 더 따르고 있다고 했다. 심지어는 윌크스가 딱정벌레처럼 생겼다고 말한 적도 있다.​14​

윌크스의 튜링상 수상 강연에는 튜링에 대해 언급한 부분이 있다. 이 대목을 보면 튜링이 타인을 그리 고려하지 않는 사람이라는 인상을 받을 수 있다. 아마도 그런 점이 윌크스에게는 껄끄러웠는지 모르겠다.

자동 프로그래밍(automatic programming)​¶¶​을 놓고 튜링과 논쟁을 벌였다면 그는 기계어를 선호하는 쪽에 섰을 겁니다. 맨체스터 대학교가 개발한 컴퓨터에서 그가 고안했던 프로그래밍 시스템은 아주 심하게 기괴했습니다. 머리 회전이 아주 빨랐던 그는 좀 덜 똑똑한 사람을 위해 배려할 필요를 못 느꼈습니다. 그가 이진수를 적을 때 지금의 정반대 방향으로 적었던 일이 기억나는군요. 즉, 가장 낮은 자리의 수를 왼쪽에 적는 거죠. 아마도 오실로스코프 화면에 펄스 신호가 지나가는 모양을 보고 그렇게 하기로 마음을 먹었던 것 같습니다. 문제는, 가끔 그가 십진수도 그렇게 적었다는 겁니다. 한번은 그가 강의에서 칠판 위에 십진수 곱셈을 적어가며 프로그램 검사하는 방법을 설명하고 있었습니다. 그런데 아무도 그의 설명을 따라가질 못했어요. 그리고 불현듯 알게 되었죠. 그가 십진수 숫자를 거꾸로 적어놓고 곱셈을 하고 있다는 걸요. 그가 장난기가 많아서 그랬거나 아니면 사람들 기를 죽이려고 그리 했다고는 생각지 않습니다. 그저 그는 그런 사소한 것이 사람들의 이해력에 영향을 줄 수 있다는 사실을 이해하지 못했던 겁니다.​1​

이렇게 보면 튜링상 수상 소식을 통보받은 순간, 윌크스의 표정이 어떠했을지 궁금하다. 튜링이 젊은 나이에 세상을 떠나지 않았다면 아마도 그는 다른 이름의 상을 받았을지 모르겠다. 마지막으로 윌크스와 튜링을 이어주는 기술 한 가지를 언급하고자 한다. 윌크스의 업적 중 하나가 프로그래밍 라이브러리임은 이미 앞에서 여러 번 설명했다. 프로그래밍 라이브러리의 핵심은 서브루틴이라는 개념이다. 서브루틴을 처음 구현한 휠러는 서브루틴을 호출할 때 특정 레지스터register(프로세서 내부의 저장공간)에 서브루틴 수행 후 되돌아올 주소를 저장해 놓는 방식을 선택했다. 서브루틴이 호출되면 서브루틴의 첫 코드는 이 특정 레지스터에 저장된 값을 읽어서 서브루틴의 맨 마지막에 그 주소로 돌아가는 코드를 삽입한다. 이는 매우 간단하면서 효과적인 방법이기는 하지만 이렇게 되면 재귀적 호출recursion이 불가능하다. 왜냐하면 서브루틴의 마지막 코드가 덮어쓰여져 버리기 때문이다. 이 문제는 후에 리스프LISP나 알골ALGOL에서 스택stack 개념이 도입되면서 해결된다.

그런데 놀랍게도 1945년에 튜링은 이 문제에 대한 해결책을 이미 제시한 것으로 밝혀졌다. 1945년에 튜링은 블레츨리 파크에서 돌아온 후 국립물리연구소(NPL)에서 ACE라는 저장형 프로그램 방식의 컴퓨터 개발에 관여했다. 이때 그는 서브루틴에 관해 언급했는데 여기에는 되돌아올 주소를 저장하기 위한 구조로 스택이라는 개념이 포함되어 있었다.​15​


  1. ​*​
    출처: https://en.wikipedia.org/wiki/Maurice_Wilkes, CC BY 2.0 UK
  2. ​†​
    출처: https://cacm.acm.org/magazines/2009/9/38898-an-interview-with-maurice-wilkes/fulltext
  3. ​‡​
    출처: https://en.wikipedia.org/wiki/EDSAC, CC-BY-2.0
  4. ​§​
    실제 최초의 전자식 컴퓨터로 간주되는 컴퓨터는 따로 있다.
  5. ​¶​
    후에 ENIAC은 저장형 프로그램 방식으로 개조되었다.
  6. ​#​
    폰 노이만은 ENIAC을 직접 프로그래밍하면서 병렬동작을 다루기가 어려움을 체감했다고 한다. 그래서 그가 제안한 구조에서 단일 주소 명령 코드를 채택했다.
  7. ​**​
    출처: https://en.wikipedia.org/wiki/Maurice_Wilkes, CC BY 2.0
  8. ​††​
    이는 당시 큰 반향을 일으켰던 워런 맥컬록(Warren McCulloch)의 아이디어를 존중한 것으로 보이지만, 한편으로는 특허 분쟁을 회피하기 위한 방법으로 해석할 수도 있겠다.
  9. ​‡‡​
    출처: https://en.wikipedia.org/wiki/Charles_Babbage, 퍼블릭 도메인
  10. ​§§​
    출처: https://en.wikipedia.org/wiki/Ada_Lovelace, 퍼블릭 도메인
  11. ​¶¶​
    Automatic programming은 고급 언어 프로그래밍을 의미하던 표현이었다.

참고문헌

  1. 1.
    Wilkes Maurice V. Computers then and now. ACM Turing Award Lectures.:1967. doi:10.1145/1283920.1283922
  2. 2.
    ACM. Maurice V. Wilkes. A.M. Turing Award Laureate. Accessed July 26, 2022. https://amturing.acm.org/award_winners/wilkes_1001395.cfm
  3. 3.
    Wilkes Maurice. An Oral History of British Science: Professor Maurice Wilkes Interviewed by Thomas Lean. The British Library Board; 2010:38.
  4. 4.
    Anderson David P, Wilkes Maurice. InterviewAn interview with Maurice Wilkes. Commun ACM. Published online September 2009:39-42. doi:10.1145/1562164.1562180
  5. 5.
    von Neumann J. First draft of a report on the EDVAC. IEEE Annals Hist Comput. Published online 1993:27-75. doi:10.1109/85.238389
  6. 6.
    Wilkes Maurice V, Wheeler David J, Gill Stanley, Corbató FJ. The Preparation of Programs for an Electronic Digital Computer. Physics Today. Published online August 1958:28-28. doi:10.1063/1.3062687
  7. 7.
    Wilkes MV. Microprogramming. Papers and discussions presented at the December 3-5, 1958, eastern joint computer conference: Modern computers: objectives, designs, applications on XX – AIEE-ACM-IRE ’58 (Eastern). Published online 1958. doi:10.1145/1458043.1458047
  8. 8.
    어스프레이 윌리엄. 존 폰 노이만 그리고 현대 컴퓨팅의 기원. 지식함지; 2015.
  9. 9.
    Wilkes MV. The EDSAC computer. Papers and discussions presented at the Dec 10-12, 1951, joint AIEE-IRE computer conference: Review of electronic digital computers on – AIEE-IRE ’51. Published online 1951. doi:10.1145/1434770.1434783
  10. 10.
    EDSAC. EDSAC – Wikipedia. Accessed July 26, 2022. https://en.wikipedia.org/wiki/EDSAC
  11. 11.
    Wheeler David. Oral History Interview by William Aspray. Charles Babbage Institute; 1987:27.
  12. 12.
    Richards Martin. University of Cambridge Computer Laboratory; 2013:2.
  13. 13.
    스웨이드 도런. 톱니바퀴 컴퓨터: 최초의 컴퓨터를 만들기 위한 찰스 배비지의 도전. 지식함지; 2016.
  14. 14.
    코플랜드 잭. 앨런 튜링: 컴퓨터와 정보 시대의 개척자. 지식함지; 2014.
  15. 15.
    Copeland B Jack. Alan Turing’s Automatic Computing Engine. Published online April 14, 2005. doi:10.1093/acprof:oso/9780198565932.001.0001

1 2 3 4 5 6 7 8