brunch

You can make anything
by writing

C.S.Lewis

by 홍플마 Mar 27. 2022

프로그래밍의 즐거움

회고록: 24시간을 30분으로 착각했던 몰입의 경험

우선 본 글과 관련된 에피소드 하나를 소개하며 글을 시작하고자 한다.

인생에서 한 번쯤 경험해본다면 정말 좋을, 멋진 몰입의 경험이며 추억 거리이다.


"어, 조금 아까 집에 가신다더니 다시 오셨네요. 뭐 놓고 가셨어요?"

"무슨 소리야? 어제 집에 가서 자고, 지금은 졸업식장에서 오는 길인데."

"예? 분명 조금 아까 나가시면서, 내일 졸업식 때 보자라고 하셨잖아요. 벌써 내일이 오늘이에요?"

"???"


시계를 보니 선배에게 내일의 졸업식 축하 인사를 한 이후로 30분 정도 지나있었다.

시계상으로는 단지 30분 정도만 지나 있었기에 난 선배의 말에 어리둥절해졌다.

하지만 이 이상한 대화가 만들어진 상황을 파악하는 데는 그리 오래 걸리지 않았다. 내가 30분이라고 느꼈던 그 시간은 실제로는 24시간 30분이었던 것이다. 그랬었다. 나는 뭔가에 엄청 몰입해 있었기에 시간의 흐름을 못 느꼈던 것이다. 도대체 어떤 일을 하느라 이렇게 몰입을 했던 것일까?




내 본업은 일반 소프트웨어 개발과는 거리가 있는 편이지만 난 취미로 프로그래밍 하기를 아주 좋아했었다. 하나의 프로그램을 완성해가는 동안은 온전히 그 일에 몰입되는 경우가 많아서이다. 그러니까 내게 있어서 프로그래밍의 즐거움이라는 말은 다른 말로 몰입의 즐거움이라고도 할 수 있겠다. 그런데 내가 이렇게 프로그래밍에 쉽게 몰입될 수 있었던 이유는 프로그래밍의 고유 속성과 내 성향이 잘 맞기 때문이다. 하나의 프로그램이 정확하게 잘 작동되기 위해서는 그 논리 구조가 명확해야 하고 또 정확하게 짜여야 하기 때문이다. 물리학을 전공한 나로서는 이러한 논리 구조에 아주 익숙해져 있다. 그동안의 내 삶을 돌이켜보면, 난 어떤 논리적인 사고를 통해 난제를 해결해나갈 때 가장 행복감을 느꼈던 것 같다. 이러한 난제 하나를 풀기 시작하면 난 꿈속에서 조차 계속 문제를 푸는 경우가 많았으며 실제로 많은 문제들을 꿈에서 풀기도 했다. 이 중에서 몇 가지는 자랑스럽게 생각해도 될만한 것들이 있는데, 기회가 되면 글로 정리하여 우리 가족의 추억담 문집 속에 담아 아들에게 선물해주고자 한다. 언젠가 아들이 이 글들을 읽어보게 되면 아버지라는 사람을 좀 더 이해할 수 있을 것이고, 또 어쩌면 나와 비슷한 길을 걷게 될 아들에게 조금이나마 도움이 될 수 있으리라 생각한다.


난 이번 글에서 자칭 세계 최고라고 자랑했던 소프트웨어 하나의 개발 과정을 소개하고자 한다. 이 소프트웨어의 개발은 어느 날 문득 떠오른 아이디어 하나로부터 시작되었는데, 처음엔 가벼운 심심풀이 정도로 생각했었으나 본격적으로 개발이 진행되면서부터는 여러 난제들을 계속해서 해결해야만 했기에 나의 온 정신을 집중시켜야되는 일이 되었다.  난 꿈속에서도 그 해결책을 찾으려 노력할 정도로 이 난제 풀이에 엄청 몰입했었는데, 결과적으로 이 소프트웨어의 개발은 내 인생의 대표적인 몰입 사례 중의 하나가 되었다. 도대체 어떤 소프트웨어일까? 때는 약 30여 년 전으로서 난 KAIST  물리학과에서 박사학위 과정에 있었다. 난 우연히 취미 삼아 이공계에서 사용할 수 있는 논문 작성용 그래픽 소프트웨어 하나를 개발하기 시작했는데, 당시에는 논문에 삽입할 중요한 그래프는 Rotring Pen을 이용하여 수작업으로 그려야만 하던 시절이기에, 내 그래픽 소프트웨어는 그 시도 자체만으로도 큰 의미가 있었다. 이 소프트웨어의 개발은 아주 소소하게 시작되었지만 나중에는 아주 완성도가 높아져 '대한민국 소프트웨어 공모대전'에서 입상까지 하게 된다. 개인이 더구나 비전문가가 취미 삼아 한 일 치고는 대단한 성과였다. 왜냐하면 이 공모대전은 대상작에게 대통령상이 수여되는 큰 규모의 행사였기에 수많은 업체들이 이 업계의 신데렐라를 꿈꾸며 최고의 작품들을 출품하며 경쟁을 하는 광장이었기 때문이다. 참고로 그 해의 대상은 삼성 SDS가 받았다. 그런 규모가 큰 대회에서 내가 입상을 할 수 있었던 이유는 내 프로그램의 유용성, 독창성, 완성도가 모두 좋았기 때문이라고 생각된다. 이 수상 기록은 인터넷 검색으로 찾아볼 수 있다. 워낙 오래되었고 한 개인의 작은 입상 결과라 찾기 어렵지 않을까 생각했었는데 다행히도 흔적이 남아 있었다. 구글에서 '대한민국 소프트웨어 공모대전 hgraph'를 찾으면 pdf 형태로 검색된다. 이 공모전에는 우연히 본 광고때문에 재미삼아 출품했었다. 돌이켜보니 내가 이 공모전 광고를 보지 않았더라면, 또 이 공모전에 한번 출품해볼까 하는 생각을 하지 못했더라면, 이 소프트웨어는 내 머릿속에서 깨끗이 지워졌을 것이고, 아마 이 글을 쓰는 것도 생각해내지 못했을 것이다. 왜냐하면 난 박사학위 취득 후 소프트웨어와는 전혀 무관한 업종에서 계속 일해왔기 때문이다. 이 공모전 시점도 졸업 후 수년이 지난 때이라 이때는 'hgraph'에 대한 기억이 거의 없었다.


이제 내가 개발한 소프트웨어가 'hgraph'라는 그래픽 프로그램이라는 것까지는 얘기했다. 그런데 왜 30여 년 전에 개발된 이 프로그램이 갑자기 소환된 것일까? 그 이유는 이렇다. 프로그래밍을 좋아했던 나로서는 아주 예전부터 취미로 인공지능 바둑 프로그램을 개발해야겠다는 계획을 갖고 있었다. 하지만 내 생업은 프로그램 개발과는 먼쪽이었기 때문에 이 계획은 은퇴 후로 미뤄둬야만 했었다. 그리고 드디어 그 시점이 왔다. 그런데 문제가 생겼다. 프로그래밍을 위해서는 Python이라는 코딩 언어를 새로 익혀야 했는데, 이 학습이 전혀 진도를 나가지 못하고 교재의 첫 부분에서 헤매고 있었다. 예전에는 새로운 코딩 언어를 익힐 때 하루 밤만 새우면 어느 정도 쓸 수 있었는데, 이제는 그 능력이 없어져 버린 것이다. 그래서 내 열정이 시들어 버렸거나 학습능력이 나빠져 새로운 것을 익히는 것은 불가능해진 탓이리라 생각하고 프로그래밍에 대한 생각은 완전히 접어버렸다. 진짜 완전히 잊고 있었다. 그러던 중 최근 카타고, 릴라라는 인공지능 바둑 프로그램들과 계속 대국을 하다 보니, (성능이 아닌) 기능을 좀 더 개선한 새로운 프로그램을 만들어보면 좋겠다는 생각을 하게 되었다. 그리고 때마침 '딥러닝과 바둑'이라는 책을 접하면서 다시금 바둑 프로그램 개발에 대한 의욕이 꿈틀대기 시작했다. 난 PC에 리눅스를 설치하고 파이썬 학습을 다시 시작했다. 이번에는 학습 방법을 바꿨다. 학습능력이 나빠졌다는 점을 감안하여 연습문제 하나를 10번 이상씩 풀어보며 진도를 나갔다. 그랬더니 드디어 Python이 조금씩 익숙해지기 시작했다. 그러면서 리눅스에서 사용하는 vi라는 에디터에 대한 손가락 감각도 살아나기 시작했다. vi는 마우스를 사용하지 않고 오로지 키보드의 자판만으로 문서 편집을 하는 에디터인데, 모든 알파벳과 특수 문자들이 다 고유의 기능들을 갖고 있어 이들을 조합하면 아주 파워풀한 작업을 할 수 있다. 특히 코딩 작업에 아주 안성맞춤이다. 다만 이 기능들을 익히는 것이 쉽지 않은데, 그럼에도 난 거의 키보드 위를 손가락들이 날아다니며 작업을 할 수 있을 정도로 vi에 익숙해져 있었다. 그래서인지 vi를 마지막으로 사용해 본 지 십수 년이 지났음에도 지금 그 감각이 다시 살아나, 머리에서 명령을 내리기도 전에 손가락이 먼저 움직이기 시작한 것이다. 이는 마치 자전거를 한번 배워 놓으면 몇십 년 후에라도 자전거를 탈 수 있는 것과 비슷한 이치라 할 수 있겠다. (소프트웨어 전문 개발자 중에는 vi 매니아들이 많다. 엄청 많은 양의 코딩을 하다 보면 마우스 작업을 하는 것은 정말 귀찮은 일이다.)


이렇게 프로그래밍에 다시 재미가 붙으면서, 예전에 내가 개발했던 유틸리티들이 현재의 리눅스 환경에서도 제대로 작동되는지가 궁금해졌다. 특히 'hgraph'가 무척 궁금했다. 그래서 'hgraph'를 설치하고 돌려보니 아니나 다를까 제대로 돌아가지 않았다. 'hgraph'는 4 종류의 코딩 언어와 LaTeX라는 논문 작성 프로그램을 사용하는데, 이 5가지 모두에서 문제가 발생했다. 난 처음엔 이 문제를 그냥 덮어버리기로 했다. 'hgraph'를 되살리는 것이 내게는 큰 의미가 없기 때문이었다. 하지만 잠이 오지 않았다. '왜 작동되지 않을까? 무엇이 문제일까?'가 머릿속에서 맴돌기 시작하니 잠을 잘 수가 없는 것이다. 난 결국은 며칠 밤을 새워가며 문제를 다 해결해냈다. 이로써 죽어버린 줄만 알았던 프로그래밍에 대한 내 열정이 아직도 생생하게 살아 있음을 알 수 있게 되었다. 그리고 이 감동이 살아 있는 이때, 이의 개발 과정을 글로써 정리해보고 싶어진 것이다.


'hgraph'의 개발 과정은 크게 3단계로 구분할 수 있다. 아주 간단한 그래프를 생성해주는 1단계, 절묘한 아이디어를 이용한 멋진 그래프가 만들어지는 2단계, 마지막으로는 모든 일반 사용자가 손쉽게 쓸 수 있도록 user-friendly 기능을 갖춘 3단계이다.


1단계에서는 내 논문 연구의 보조 수단으로 간단한 그래프를 그려보는 것으로 시작했다. 이 그래프는 단지 점과 선만 그려주는 수준이었는데 난 여기에 'hgraph'라는 이름을 붙여주었다. 맨 앞의 h는 Hong을 뜻한다. 난 당시에 학위 논문을 위해서 플라즈마들의 운동을 추적하는 새로운 방식의 시뮬레이션 프로그램을 개발하고 있었는데, 시간대별로 플라즈마들의 위치를 그래프로 그려볼 수 있다면 이 개발이 훨씬 효율적으로 진행될 수 있을 것 같았다. 그래서 이것을 할 수 있는 방법을 찾아본 결과, PostScript라는 언어를 쓰면 된다는 것을 알았다. 내가 갖고 있는 데이타들을 가공하여 PostScript 파일로 만들어주면 되는 것이었다. 그래서 난 기회가 되면 PostScript 언어를 학습해야겠다고 생각하고 있었는데, 이 언어의 교재를 처음 접했던 날은 지금도 생생하게 생각난다. 어느 날 저녁 식사 후 PostScrpt라는 것을 한번 알아볼 생각으로 도서관에서 빌려온 교재를 열었는데, 통상적인 프로그래밍 언어와는 완전히 다른 문법을 갖고 있었다. 그래서였는지 난 그 내용이 너무 재미있어서 정신없이 계속 읽다 보니 어느 사이엔가 새벽이 지나고 날이 밝아지고 있었다. 이렇게 1단계 hgraph는 시작이 되었다. 한편 이 단계에서 PostScript 파일을 만들기 위해서는 내 데이타를 가공하는 별도의 프로그램이 필요했는데 여기에 사용한 코딩 언어는 FORTRAN이었다. 내가 가장 잘 쓸 수 있는 언어가 FORTRAN 이었기 때문이다.


이제 1단계 hgraph는 완성되었다. 사실 1단계의 hgraph만으로도 내 논문 연구에 사용하는데는 아무 문제가 없었다. 그런데 선과 점 밖에 없는 hgraph가 너무 민숭민숭해보여 심심풀이 삼아 여기에 축 이름, 기호 문자, 그림 설명 등의 글자를 집어넣고 싶어졌다. 처음에는 PostScript의 기본 폰트들을 사용했는데 영 볼품이 없었다. 이때 기가 막힌 아이디어가 하나 떠올랐다. 이 아이디어가 'hgraph'의 핵심이다. 그것은 LaTeX라는 프로그램의 폰트를 이용하는 방법이었다. 이 프로그램은 이공계 특히 물리, 수학 분야 논문 출판 전용 프로그램으로서, 현재는 세계적으로 유명한 대부분의 저널들은 이 LaTeX를 이용하여 발행된다. 이 프로그램의 큰 장점은 수식의 작성이 용이하고 또 그 폰트가 아름답다는 점이다. 이 아이디어가 떠오른 이유는 LaTeX를 이용하여 만들어지는 파일의 최종 형태도 PostScript 였기 때문이다. 이것은 바로 '유레카' 같은 것이었다. 만약 내 아이디어가 성공한다면 세계 최고의 그래픽 유틸리티가 만들어지는 것이었다. 이제 문제는 점과 선 그리기 수준의 1단계 PostScript 파일에 LaTeX의 PostScript 파일을 어떻게 합칠 것인가가 되었다. 아마 이 분야의 전문가가 이 작업을 했다면 아주 손쉬운 일이었겠지만, 난 퀴즈 마니아처럼 내가 직접 이것을 해결하겠다는 생각으로 이 문제에 달라붙기 시작했다.


하지만 이 문제는 쉽게 풀리지 않았다. 독립된 두 개의 PostScript 파일을 합치는 것이 쉽지 않았기 때문이다. 그 이유에 대해서는 여기에서 일일이 설명하기 어렵다. 다만 두 파일을 합치고자 할 때 나타났던 현상은 얘기할 수 있다. 예를 들면 축 이름이 엉뚱한 곳에 위치하거나 폰트 사이즈가 이상하게 변형되어 프린트되는 현상들이 나타나는 것이었다. 이때부터 내 고난은 시작되었다. 내 머릿속에서는 이 문제가 상주하기 시작했고, 해결 아이디어가 떠오르면 어떻게든 그 아이디어를 빨리 확인해보고 싶어 연구실로 달려갔다. 물론 그 해결책이 엉터리였다는 것을 확인하는 것은 몇 초 걸리지도 않았다. 난 밥을 먹다가도 연구실로 갔고, 꿈속에서 문제를 풀다가도 연구실로 갔다. 심지어는 오랜만에 만난 친구들과 술 한잔 하다가도 연구실로 달려간 적이 있을 정도이다. 하지만 매번 실패였다. 이러다 보니 어쩌면 근본적으로 불가능한 문제에 내가 매달려있을지도 모른다는 생각이 들기도 했다. 하지만 머릿속에서 계속 맴도는 이 문제를 쫓아내 버릴 수는 없었다. 아무튼 이런 상태가 지속되던 어느 날 이 문제는 감쪽같이 해결되었다. 어떻게든 이 문제를 해결해내고야 말겠다는 내 끈기가 성공한 것이다. 이후로 조금 더 진행된 작업들이 있는데, 글자들을 90도 회전, -90도 회전시켜 삽입하는 작업이었다. 이것도 어렵긴 했지만 결국은 해결해내었다. 이런 노력 끝에 드디어 'hgraph'는 세계 최고의 폰트를 갖춘 그래픽 유틸리티로 변신했다. (최근에 간략하게 써치 해본 결과, 이 소프트웨어는 LaTeX 폰트 덕분에 여전히 세계 최고의 퀄리티를 갖고 있는 듯하다.)


이제 'hgraph'가 내가 원하는 수준까지 만들어졌기에 난 이 작업에서 손을 떼려고 했다. 내 본래의 논문 연구가 많이 지체되고 있었기 때문이다. 하지만 이게 쉬운 일이 아니었다. 'hgraph'의 사용자가 조금씩 늘기 시작한 것이 문제였다. 이 사용자들은 'hgraph'의 사용법이 까다로와서인지 툭하면 나보고 그래프를 그려 달라고 했다. 또한 요청하는 그래프의 형태도 아주 다양했다. 이런 상태가 지속되던 어느 날 난 'hgraph'를 모든 사용자가 쉽게 사용할 수 있는 형태로 개선하기로 결심했다. 3단계 'hgraph'의 개발이 시작되는 순간이었다.


3단계 'hgraph'는 내가 이성적으로 아주 냉정했다면 꼭 개발할 필요성은 없었다. 이제 난 내 본업에 전념해야만 되는 상황이었기 때문이다. 난 'hgraph'를 그냥 취미로 만들었던 것이고, 또 타인을 위해서가 아니라 나 자신을 위해서 만들었던 것일 뿐이다. 하지만 이번에도 프로그래밍에 대한 내 감성적인 애정이 승리를 해버렸다. 난 'hgraph'를 누구나 쉽게 사용할 수 있는 아주 간단한 형태의 user-friendly 버전을 하나 맛보기로 만들어봤는데, 이것이 문제였다. 이때 내가 사용한 코딩 언어는 C와 C-shell이라는 것이었는데 난 이 과정에서 C-shell의 아름다움에 완전히 매료되어 버렸다. 큰 어려움을 들이지 않고도 간단한 명령들 몇 개만으로 내가 원하는 작업을 수행해내는 C-shell은 매력 덩어리 그 자체였다. 아마 난 C-shell의 거의 모든 커맨드들을 일부러라도 다 사용해보는 방식으로 프로그램을 만들어간 듯하다. user-friendly가 우선인지 C-shell의 사용이 우선인지가 헷갈릴 정도였다. (한동안은 이런 자만심을 갖기도 했었다. '아마도 비전문가들 중에서 C-shell 만큼은 내가 대한민국에서 가장 잘 사용할 것이다.'라고.) 아무튼 최종적으로 만들어진 'hgraph'는 사용자가 원하는 graph의 형태를 다양하게 가정해보고 그것이 모두 가능하도록 완성되었다. 한 페이지에 수십 개의 그래프를 동시에 그릴 수도 있고, 여러 페이지로 나뉘어 작성됐던 그래프를 한 페이지로 묶을 수도 있고, 아주 복잡한 형태의 그래프도 그릴 수 있게 되었다. 드디어 내가 가정했던 모든 형태의 그래프를 다 그릴 수 있도록, 또 아주 user-friendly 하게 프로그램을 완성한 후에 난 이 일에서 손 뗄 수 있게 되었다. 진짜 더 이상은 할 것이 없다는 수준까지 만들어 놓은 후에야 난 'hgraph'에서 해방될 수 있었다. 그리고 내 박사 학위 취득과 더불어 'hgraph'는 더 이상 유지 관리가 되지 못하고 명맥이 끊겼다.


지난날을 돌이켜보면, 'hgraph' 개발 때문에 내 본래의 연구가 많이 지체되는 손해를 보기도 했다. 그렇다면 그 당시와 같은 상황이 내게 다시 벌어진다면 이번에는 어떻게 행동할까? 아마도 난 여전히 똑같이 행동할 것으로 생각된다. 프로그래밍에 집착한 요 며칠 사이의 내 행동을 보았을 때 이것은 아주 명확하다. 궁금하면 못 참는 내 본래의 성향은 어쩔 수 없는 듯하다. 한편 이 글의 서두에서 소개한 에피소드는 내가 'hgraph'의 3단계 버전을 완성시키는 순간이었는데, 수 많은 모듈로 이루어진 전체 코드를 통일성있게 다듬기하는 프로그래밍을 하던 것이었기에 일에 끊김이 없이 그냥 몰입이 되었던 것이다.


이제 본격적으로 바둑 프로그램을 개발하기 시작하면 숱하게 밤을 새우게 될 내 모습이 눈에 선하다. 내 노후는 전혀 심심하지 않을 듯 하다.


(2022년 3월 27일 작성)


<홍플마의 또다른 재미있는 글>

목걸이를  사지 말아야 할 이유



브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari