컴퓨터 과학자로서의 삶

젊은 시절의 존 배커스​†​

존 워너 배커스(John Warner Backus)는 1924년 12월 3일에 미국 델라웨어주 윌밍턴Wilmington에서 태어났다. 그의 아버지는 본래 화학자로 듀폰DuPont에서 일하다가 제1차 세계대전이 발발하자 입대하여 군수품 장교로 복무했다. 회사에서는 그의 아버지가 제대하여 돌아올 때까지 자리를 유지해주겠다고 했으나 막상 전쟁이 끝나서 돌아오자 받아주지 않았다. 어쩔 수 없이 그의 아버지는 증권중개인으로 변신했는데 큰돈을 벌어 부자가 되었다. 그래서 배커스는 부유한 가정에서 자랐다. 하지만 그리 행복하지는 않았던 것으로 보인다. 그가 여덟 살일 때 어머니가 세상을 떠났고 후에 아버지는 재혼했는데, 양어머니는 알콜 중독에 빠지기도 했고 굉장히 신경질적이었다고 한다. 그는 고등학교를 졸업하자마자 독립해서 뉴욕에 자리 잡았다. 한 인터뷰에서 그는, 왜 뉴욕으로 갔는지에 관한 질문을 받자 이렇게 답했다.

모르겠어요. 가족에게서 벗어나기에 좋은 곳인 것 같았습니다.​2​

그는 고등학교 때 공부에 신경 쓰는 학생이 아니었다. 중간에 학교도 옮기고 어찌어찌하여 1942년에 고등학교를 졸업한 후에 버지니아 대학교에 입학하여 화학을 전공했으나 너무 결석이 잦아서 결국 1년도 안 되어 퇴학당했다. 그러자 바로 군대로 끌려갔고 방공부대에 배치되었다.

하지만 그는 군부대에서 실시한 적성 검사에서 아주 좋은 성적을 받은 덕분에 특별 교육과정에 선발되었고 피츠버그 대학교 공과대학으로 보내졌다. 나름 편안한 군 생활을 보내던 그에게 다시 위기가 찾아온 것은 벌지 대전투Battle of the Bulge가 시작되면서였다. 미군은 다시 파병할 군인을 추리기 시작했고 피츠버그 대학교에 배치되었던 군인도 예외가 아니었다. 하지만 다시 하늘이 도왔던지 마침 직전에 그는 해버퍼드Haverford 대학으로 보내질 인원을 선발하는 시험을 통과한 상태였다. 그래서 유럽의 전선이 아닌, 필라델피아 외곽에 위치한 의대 예과 대학교로 재배치되었다. 얼마 동안 교육을 받은 후, 그는 본과에 보내지기에 앞서 애틀랜타 시티에 있는 병원에서 실습을 시작했다.

거기에 있는 동안 나는 신경외과 병동에서 하루에 12시간씩 일했습니다. 그런데 거기에 있는 의사가 내 머리에서 커다란 혹을 발견했습니다. 알고 보니 뼈에 종양이 생긴 것이었습니다. 오랜 시간 동안 아주 천천히 커져 왔던 것인데 다행히도 바깥쪽으로 자랐다고 하더군요. “음, 제거해 버립시다”라고 의사가 말했습니다. 갑자기 졸지에 환자가 되었지요. 그래서 수술받아서 종양을 제거했고 환자가 되는 바람에 아무 일도 안 해도 되었습니다.​2​

종양이 제거된 자리에 철판을 붙인 그는 퇴원하고 나서 뉴욕에 있는 플라워 앤 피프스 애비뉴Flower and Fifth Avenue 병원으로 보내져 정식으로 의과 공부를 시작하게 되었다. 여전히 군인의 신분이었다. 그는 의사가 되어 볼 생각을 했지만 9개월 만에 포기했다. 너무 암기만 하는 것이 싫었기 때문이었다.​3​ 그는 1946년에 의병 제대honorable medical discharge하여 군 생활을 마쳤다.

뉴욕으로 돌아 온 그가 하고 싶었던 것은 하이파이 오디오 제작이었다. 그래서 그는 무선 기술자 교육 학교에 다녔는데 그곳에서 수학에 재미를 붙이게 되었다. 그는 컬럼비아 대학교 수학과에 등록했고 1949년에 학사 학위를, 1950년에 석사 학위를 받았다. 그리고 1950년 봄에 운명적으로 IBM 컴퓨팅 센터를 방문하게 된다.​‡​


얼떨결에 IBM에 입사한 그는 SSEC 프로그래머로 일하게 되는데 3년 동안 했던 프로젝트는 달의 궤도를 계산하는 일이었다.

나에게 떨어진 첫 번째 일은 달의 위치를 계산하는 프로그램이었습니다. SSEC의 공동 설계자 중 한 명인 로버트 시버가 그 일을 맡고 있었죠. 몹시 어려운 일이었습니다. 항이 1,000개는 족히 되는 푸리에 급수였습니다.​2​

그가 속한 팀이 개발한 프로그래밍 기법은 후에 NASA에서 아폴로 계획을 실행할 때 사용되었다.​4​

SSEC에 이어서 IBM은 701 모델을 만들었다. SSEC와는 달리 릴레이 없이 전자회로만 사용한 컴퓨터였다. 하지만 701은 SSEC와 마찬가지로 기계어를 사용해서 프로그래밍해야 했다. 지루한 일을 싫어했던 배커스는 부동소수점floating point 연산을 수학적인 기호로 표현하여 프로그래밍할 수 있게 도와주는 스피드 코딩Speedcoding이라는 보조 프로그램을 만들었다. 스피드 코딩을 통해 가능성을 엿본 배커스는 좀 더 욕심을 냈다. 그는 ‘고급 언어high order language‘를 개발하고 싶다고 당시 그의 상관이었던 커스버트 허드Cuthbert Hurd에게 말했다. 그 배경에는 당시 IBM이 개발 중이던 704 모델이 있었다.

IBM은 701 모델의 성능 향상을 위해서 자기 코어 메모리를 최초로 도입한 704 모델을 준비하고 있었다. 이때 배커스는 704 모델을 준비하는 회의에 참석하곤 했는데, 스피드 코딩을 개발하면서 아쉬웠던 점을 704 모델에 반영해 달라고 강력히 주문했다. 그것은 인덱스 레지스터index register와, 부동소수점 전용 회로였다.

사실 704에 인덱스 레지스터와 부동소수점 처리가 들어간 것은 나의 공이라고 할 수 있습니다. 왜냐하면 하드웨어 설계자들은 자기 드럼을 설계하는 일에만 정신이 팔려 있었거든요… 나는 계속 이걸 포함해야 한다고 제안했고 그들은 계속 그 망할 놈의 자기 드럼 이야기만 했습니다… 결국 그들의 관심을 끌어올 방법은 단 하나밖에 없다는 결론에 도달했습니다. 그래서 나 혼자서 한 시간 동안 낑낑대며 말도 안 되는 설계를 했습니다… 그런데 진 암달Gene Amdahl​§​이 지나가다가 그걸 보더니 이렇게 말하더군요. “오, 그렇게 할 필요가 없어요. 그냥 이렇게 하면 쉽게 할 수 있어요. 하드웨어를 거의 추가하지 않아도 됩니다.”​2​

원하던 기능이 포함되자 그는 704 모델을 위한 고급 언어를 만들고 싶어졌고, 그의 바람은 받아들여져서 그를 중심으로 팀이 꾸려졌다. 1955년 1월에 배커스는 반년 정도면 완성할 수 있으리라고 내다보았다. 하지만 어떤 문제를 해결하려고 하다 보면 예상치 못한 다른 문제들이 튀어나왔다. 첫 버전을 완성한 것은 1957년이 되어서였다. 완성된 고급 언어는 수치 연산에 초점을 맞추었고, 이 언어로 작성된 프로그램을 기계어 코드로 변환해주는 컴파일러도 함께 완성되었다. 수식을 기계어 코드로 변환해준다는 의미에서 이 언어에는 포트란(FORTRAN: FORmula TRANslator)이라는 이름이 붙었다. 첫 버전의 포트란 컴파일러는 약 3만 줄의 기계어 코드로 작성되었다.​¶​

IBM은 704 모델을 판매하거나 대여할 때, 포트란을 항상 끼워 넣었다. 첫 외부 사용자는 웨스팅하우스였다. 한 상자 분량의 펀치카드로 전달된 포트란을 써서 간단한 테스트 프로그램이 컴파일되었고 문제없이 수행되었다. 하지만 운이 좋았을 뿐이었다. 포트란 사용자가 늘어나면서 여기저기에서 오류가 보고되기 시작했고 이를 해결하여 어느 정도 안정된 프로그램을 만드는 데 6개월이 소요되었다.​2​

포트란은 큰 호응을 얻었다. 포트란을 쓰기 위해서 IBM 컴퓨터를 구매하는 기업이 많았다. 배커스는 기능을 추가해나갔고 포트란 2, 포트란 3, 포트란 4로 개선된 버전이 출시되었다. 포트란이 어디에 가장 크게 기여했는지에 관해 그는 이렇게 말했다.

많은 사람들이 말하기를, 프로그래머가 기계어 대신에 수식으로 프로그램을 작성할 수 있게 해 준 것이 포트란의 주요 기여라고 합니다. 사실은 그렇지 않습니다. 포트란이 정말로 했던 것은 순환문loop의 구조를 정형화mechanize한 것입니다.​2​


최초의 성공적인 고급 언어를 개발해낸 그가 알골ALGOL 언어 설계에 참여하게 된 것은 당연해 보인다. 미국과 유럽의 컴퓨터 전문가들이 모여 탄생시킨 알골 언어는 오늘날 우리가 사용하는 현대적인 고급 프로그래밍 언어의 출발점이라고 해도 과언이 아니다. 알골 언어는 여러 면에서 중요한 의미가 있지만 그중 하나는 프로그래밍 언어의 문법을 엄격하게 기술하는 방법인 BNF가 처음 도입되었다는 점이다. BNF를 만든 이가 존 배커스이다.

여러 회의가 있었는데 BNF 명세서를 만들어서 어느 회의에 참석했습니다. 짧은 문서였고 내가 직접 들고 들어갔습니다. 왜냐하면 내가 너무 늦었기 때문이었죠… 아무튼 회의에 들어가서 참석한 사람들에게 복사본을 나눠줬습니다. 하지만 아무도 관심을 보이지 않았습니다…. 피터 나우어Peter Naur​#​만 예외였습니다. 그는 자기가 맡은 작업을 할 때 BNF를 사용했고 그 과정에서 개선도 해주었습니다.​2​

BNF는 후에 나오는 프로그래밍 언어들에서 문법을 정의하는 데 사용되었고 컴파일러 제작에도 큰 도움을 주었다.


1963년에 IBM은 ‘펠로우Fellow‘라는 제도를 만들었다. 이는 대학의 ‘종신’ 교수와 비슷한 개념이다. 전문성이 뛰어나고 회사에 큰 업적을 남긴 이들을 특별하게 대우해주겠다는 취지였다. 펠로우가 되면 실적에 시달리지 않고 본인이 원하는 연구나 일을 할 수 있었다. ‘펠로우’ 제도의 첫 수혜자 중 한 명이 존 배커스였다.

펠로우로 선정된 해에 그는 미국 캘리포니아 대학교 버클리로부터 방문 교수가 되어달라는 요청을 받았다. 원하는 일은 뭐든지 할 수 있게 된 그는, 서부에 있는 IBM 산호세 연구소로 자리를 옮겼고 학교와 회사를 오가는 생활을 했다. 이 시기에 그는 함수형 프로그래밍 언어에 관심을 가지게 된다. 함수형 프로그래밍에 관심을 가지게 된 계기를 묻는 질문에 그는 이렇게 답했다.

답하기 어렵네요… 왜냐하면 그냥 포트란처럼 어렵지 않은 고급 언어를 만들어 보려고 시도했던 겁니다. 문제는 뭐였냐면, 함수형 프로그래밍이라는 개념 자체는 상당히 쉽지만 그걸 실제로 완전한 시스템으로 구현하려면 그 언어로 표현할 수 없는 온갖 이슈들을 다루어야 해서 아주 복잡하고 엉망이 되어 버린다는 거였죠.​2​

배커스는 FP라는 함수형 프로그래밍 언어를 만들었고 후에는 FL이라는 개선된 버전을 개발했지만 결국 연구 수준에서 머무르고 말았다.

배커스는 1991년에 은퇴한 후 2007년에 오레곤주의 애쉬랜드에 있는 자택에서 세상을 떠났다.

1 2 3 4 5