• Gerald Marvin Weinberg (1933-10-27 ~ 2018-08-07)

나는 프로그래밍 언어 설계의 설계자였다

몇 년 전에, 한 인터뷰에서 "컴퓨터 과학에 자신이 무엇을 가장 크게 공헌했다고 생각하십니까?"라는 질문을 받은 적이 있다(질문의 뉘앙스에서 컴퓨터 과학을 무척이나 대단하게 여기고 있음이 느껴졌다). "저는 컴퓨터 과학에 아무것도 공헌하지 않았어요." 라는 답이 가장 먼저 떠올랐지만(나는컴 퓨터 분야를 과학이라 여기지 않는다), 나도 모르게 이렇게 말했다. "프로그래밍 언어를 하나도 만들지 않은 것이 컴퓨터분야에 대한 나의 가장 큰 공헌입니다."

어디서 그런 대답이 나왔는지 알다가도 모를일이지만, 돌이켜 생각해보니 매우 비겁한 책임 회피성 발언이었다. 나는 이 책의 1판을 다시 검토하면서 당시에 내가 욕을 먹지 않으려 몸을 사렸음을 깨달았다. 프로그래머들이 흔히 쓰는 수법 즉, 한 단계 더 추상적인 얘기로 얼버무리는 방식으로 말이다. 내가 새로운 프로그래밍 언어를 만든 적이 없는 건 사실이지만, 프로그래밍 언어의 설계 원칙들을 만들어 내지 않았던가? 다시 말해서, 나는 프로그래밍 언어 설계의 설계자였다.

설계 원칙을 만들었을 뿐이므로 나는 책임은 지지 않은 채 경기장 밖에 안아 훈수를 둘 수 있었다. 이제는 고백하겠다. 나는 최초의 어셈블리어에도, FORTRAN에도, APL에도, COBOL에도, PL/1에도, Simula에도, IBM System/360 기계어와 작업제어 언어에도, Pascal에도, 프로그래밍 언어의 형식적 기술을 위한 비엔나 정의 언어(Vienna Definition Language, VDL)에도 훈수를 둔 사람 가운데 한 명이었다. FORTRAN 개발자들과 컴퓨터를 공유했고, FORTRAN의 오브젝트 코드를 비판했으며, FORTRAN이 결코 오래 가지 못할 거라고 잘못 예견했다. APL의 창시자 켄 아이버슨(Ken Iverson)이 공개 비판을 받고자 언어에 대한 자신의 생각을 최초로 밝히던 자리에도 있었다. 또, MetaCOBOL 프로젝트에도 참여했고, 스위스에서는 Pascal의 아버지 니클라우스 워스(Niklaus Wirth)와 함께 있었으며, IBM Vienna 연구소의 하인츠 제마넥(Heinz Zemanek)의 팀과도 함께 있었다. 고백이 이렇게 힘들 줄이야. 그런데 아직 끝이 아니다. 사실은 Algol(원래 버전은 물론이고 그 이후의 버전들까지), C, Smalltalk의 초기 버전에 대해서도 영향을 끼쳤다(별로 알려진 사실은 아니지만). 게다가 태어나지 못하도록 내가 일조를 했을지도 모르는 수십 개 언어들도 있다(내가 가장 자랑스럽게 생각하는 부분이다). 그중에는 마법(Magic)이라는 이름의 언어가 적어도 세 개는 있었다.

내가 1970년에 동유럽을 방문했을 때, 사람들이 나를 프로그래밍 언어의 왕이라고 부르는 것을 듣고 충격을 받았다(내 자신의 정체성을 의심하게 될 정도로). 그래서 요즘에는 그간의 죄를 회개하며 언어 설계에 대해 훈수 두는 일을 최대한 자제하고 있지만, 그리 쉽지가 않다. 그러면서 깨달은 것이 하나 있는데, 아마도 이것이 프로그래밍 심리학에서 가장 중요한 원칙이라는 생각이 든다.

모든 프로그래머는 메타언어 전문가다.

이것이 프로그래밍 언어 설계에 필요한 원칙이란 제목이 붙은 글에 내가 덧붙일 수 있는 유일한 내용이다.

– 프로그래밍 심리학. 12장에 보태는 글: 프로그래밍 언어 설계에 필요한 원칙. 444쪽.

훌륭한 책만 골라서 읽으세요

공부해야 할 책이 너무 많은 것 같더라도 걱정하지 말기 바란다. Jerry Weinberg의 충고를 따르면 된다. 한번은 그에게 출판되는 모든 책을 어떻게 따라가느냐고 물었더니, 이렇게 대답했다. "쉽지요. 훌륭한 책만 골라서 읽는 겁니다."

– 패턴을 활용한 리팩터링. 3장. 70쪽.

참고문헌

  • 프로그래밍 심리학 / 제럴드 M. 와인버그 저 / 인사이트(insight) / 신판 1쇄 발행 2014년 01월 02일
  • 패턴을 활용한 리팩터링 / 조슈아 케리에브스키 저 / 윤성준, 조상민 공역 / 인사이트(insight) / 신판 1쇄 발행 2011년 02월 09일 / 원제 : REFACTORING TO PATTERNS