의도적 수련 2 – 프로그래머에게 적합한 의도적 수련

By | 2018년 12월 6일

<월간 마이크로소프트웨어> 2005년 4월호와 6월호에 실린 《함께 자라기》 김창준 저자님의 글입니다. 개발자들이 의도적 수련을 늘릴 수 있는 방법을 엿볼 수 있습니다.

‘의도전 수련1 – 고수, 무술과 프로그래밍에 대한 소고’ 보러 가기

——————————————————————————————————-

지난 기사에서 우리는 수련, 특히 의도적 수련이 무술의 고수가 되거나 혹은 프로그래밍의 고수, 나아가 거의 모든 것의 고수가 되는 비결임을 살펴보았다. 이번에는 약속한대로 프로그래머에게 적합한 의도적 수련에는 어떤 것이 있는지 알아본다.

 

 

프로그래머에게 적합한 의도적 수련

 

지난 기사에서는 의도적 수련에 대한 이야기로 끝을 맺었다. 기억을 되살리는 의미에서 다시 한 번 생각해 보고 넘어가자. 에릭슨은 훈련에 의해 기억력이 어느 정도 향상될 수 있을지를 실험했다. 일반적으로 기억력 실험에 많이 사용되는 것 중 하나로 숫자 범위(digit span)라는 게 있다. 일초에 한 자리씩 숫자를 줄 때 몇 개의 숫자를 올바른 순서로 기억할 수 있는가 하는 것이다. 통상 인간의 단기 기억에는 7자리 정도의 숫자가 들어갈 수 있다고 한다(전화번호의 자리수가 7자리인 이유이기도 하다). 8자리나 9자리만 되어도 사람들은 숫자를 기억하는 데에 큰 어려움을 겪는다. 직관적으로 생각하기에는 인간의 기억용량이라는 것은 정해진 한계가 있는 듯하다.

하지만 에릭슨에 따르면, 훈련을 하면 100자리 이상을 외울 수 있다고 한다. 처음 실험을 시작할 때, 피실험자 두 사람은 일반적인 숫자 범위를 갖고 있었다. 하지만 그 사람의 숫자 범위는 2시간 훈련에 한 자리씩 늘어났다. 주목할 만한 것은 그 두 사람은 특별한 기억법을 배운 적도 없고, 실험 중 어떤 식으로 기억을 하라고 가이드를 해주지도 않았으며, 그들이 그렇다고 뛰어난 지능의 소유자도 아니었다는 점이다. 도대체 뭐가 비결이었을까? 그 두 사람은 장거리 달리기 선수였는데, 달리기 기록을 많이 알고 있었다고 한다. 예컨대 3492라는 숫자 연속은 3분 49.2초의 기록과 연관해 기억했던 것이다.

좀 극단적인 예일지 모르겠으나 라잔 마하데반(Rajan Mahadevan)이라는 인도인은 1981년도에 기네스북에 도전하면서 파이(pi)를 31,811자리까지 외웠다고 한다. 이런 놀라운 사실을 그 사람의 타고난 재능만으로 돌리기는 어렵다는 것을 최근 연구 성과들이 보여주고 있다. 20세기 최고의 골프선수로 꼽히는 잭니클라우스는 다음과 같이 말한다. “아무도, 정말 아무도, 머리로 많이 생각하고 수많은 샷을 쳐보는 수련 없이 골프를 진정 잘하게 된 경우는 없습니다.” 또 반대로, 단순히 오랜 동안 경험을 했다고 해서 무조건 타고난 퍼포먼스를 갖게 되는 것은 아니라는 것 역시 최근 연구를 통해 드러나고 있다.

지인에게서 이런 이야기를 들은 적이 있다. 역사가 10년이 넘은 회사에 입사를 했다. 10년 이상 경험과 기술의 축적을 배우리라고 잔뜩 기대를 하고 들어왔지만, 곧 실망을 하게 되었다. 그가 느끼기에는 1년 경험이 열 번 반복된 것 같았기 때문이다. 필자가 보기에 자신의 경력이 N년이라고 했을 때 “당신은 N년 경험을 한 번 했습니까, 아니면 1년 경험을 N번 했습니까”만큼 무서운 질문이 없는 것 같다. 예를 들어 자바를 5년째 사용해 오고 있다면, 나는 자바 1년 경력을 5번 반복해 오고 있는 것은 아닌지 자문해 보자.

그렇다면 10년 경력을 정말 10년 경력의 가치가 있게 만들려면 어떻게 해야 하나? 니클라우스가 말하듯이 수련을 해야 한다. 얼마나 해야 하나? 많으면 많을수록 좋다(하지만 연구에 따르면 전문가들은 하루 4~5시간 이상을 수련에 투입하는 경우는 거의 없고, 수련 시간이 많아질수록 쉬는 시간과 자는 시간이 늘어났다. 그만큼 수련은 에너지 소모량이 크다).

에릭슨은 베를린에서 젊은 바이올리니스트와 피아니스트를 연구했다. 교수들에게 세계적 수준으로 될 학생들, 그리고 그렇게 대단하지는 않지만 전문가 수준으로 성장할 학생, 그리고 음악 선생이 될 학생 등으로 학생을 분류하도록 했다. 그 학생들을 조사한 결과, 최고 수준의 연주자들은 20살까지 1만 시간 이상의 수련을 했다. 이에 비해 세번째 그룹의 학생들은 5000시간에 그쳤고, 같은 나이의 아마추어 피아니스트들은 2000시간 정도에 달했다. 흥미로운 점은, 이 1만 시간이라는 양이 운동선수, 작가, 과학자 등의 다른 분야에서도 발견된다는 것이다.

잠깐 한 번 계산을 해보자. 내가 컴퓨터를 시작한 게 언제부터인가? 일주일에 대충 몇 시간이나 프로그래밍 수련을 했나? 예를 들어 프로그래밍 경력 10년에, 그동안 늘 일주일에 10시간씩 수련해 온(이 정도면 대단하지 않나?) 사람이라고 치자. 계산하면 약 5,000시간이 나온다. 연주자와 비교하자면(꼭 정확한 비교는 아니지만) 전문가 수준에 속한다. 세계수준은 아닐지언정. 좀 더 정확히 말하자면, 전문가의 싹이 보이는 음악아카데미학생과 비견할 만하다. ‘ 에이 이거밖에안돼?’라고 생각할지도 모르겠지만, 1만 시간은 엄청난 양이다.

 

고수 프로그래머 vs. 하수 프로그래머

고수 프로그래머와 하수 프로그래머 간에는 어떤 차이점이 있을까? 통상적으로 사람들은 고수와 하수 사이에는 무언가를 얼마나 잘 하느냐, 무언가에 대해 얼마나 많이 아느냐는 표면적 차이만 있다고 생각하기 쉽다. 예를 들어 고수 프로그래머가 작성하는 시간당 라인수가 더 많다는 것, 그리고 알고 있는 프로그래밍 언어 숫자가 많다는 것 등이다. 하지만 이보다 더 중요한 것은 그들이 정보를 어떤 식으로 처리하는지 그 과정과 전략에 차이가 있다는 것이다.

고수와 하수 프로그래머의 차이에 대해서 밝혀진 여러 가지 사실 중 몇 가지만 알아보자. 고수 프로그래머는 문제 해결 시 너비 우선 탐색을 하고 하수 프로그래머는 깊이 우선 탐색을 한다고 한다. 고수는 다양한 대안을 고려하면서 탑다운에 가깝게 진행하는 반면, 하수는 한 가지 결정을 하고 그쪽으로만 계속 갈 때까지 가보는 스타일이다. 너비 우선 탐색을 하면 더 나은 대안을 빨리 찾기 쉽고 터널 비전의 함정에 빠지는 확률을 낮출 수 있다. 이 전략은 문제 자체가 잘 정의되지 않은 경우(ill-defined) 훨씬 더 유용하다.

그렇다고 해서 고수가 순수한 탑다운으로 생각하느냐면 그것도 아니다. 특히 설계에 대해서는. 실제 실험에 의하면, 엘리베이터 컨트롤 시스템을 설계하도록 요청받은 전문 설계자들은 추상과 구상을 자유로이 오갔다. 왔다갔다했다는 것이다. 오히려 이런 식으로 고수준의 설계와 구체적인 해 사이를 자주 오가는 것이 딱 정해지지 않은 문제의 경우 전문 설계자들이 취하는 좋은 전략이라는 것이 밝혀졌다.

이와는 달리 고수와 하수 상관없이 공통적인 것도 있다. 프로그래머들은 고수와 하수 모두 ‘거꾸로 생각하기’ 전략을 주로 사용한다. 과학자들의 경우 전문가에 가까울수록 순방향 사고를 하고 초보자는 역방향 사고를 한다. 역방향 사고란 문제의 답에서부터 거슬러 내려오는 것을 말하고, 순방향 사고는 주어진 기초적 정보에서 시작해서 연역적 사고를 통해 결론에 도달하는 것이다. 실제로 화학문제를 푸는 학생에게 순방향 사고를 강요한 경우 오류가 훨씬 줄었다고 한다. 그렇다고 역방향 사고가 무조건 나쁜 것만도 아니다. 전문가라고 할지라도 자신이 전에 경험해 보지 못한 생소한 문제 상황을 만나면 역방향 사고로 접근하게 되며 이것은 나름대로 유용한 전략이다. 하지만 앞에서 말했듯이 프로그래머의 경우 이런 차이가 존재하질 않았다.

기억력은 어떨까? 고수 프로그래머는 프로그램 소스코드를 더 잘 기억한다. 이는 체스판에 대한 전문가와 비전문가의 기억력 차이와 유사하다. 흥미롭게도 스파게티 코드에 가까울수록 고수와 하수의 기억력 차이는 줄어든다. 실험에 따르면 실제로 한 번 이상 본 코드를 기억해내는 능력은 고수가 월등하다는 것, 그리고 고수는 코드를 보는 순서가 다르다는 것 등이 밝혀졌다.

같은 시간(예컨대 10초)이 주어졌을 경우 고수 프로그래머는 하수 프로그래머와 서로 다른 것을 본다. 예를 들어 OOP의 고수는 같은 코드를 보아도 짧은 시간 내에 주로 클래스들의 관계, 책임 등을 읽어내는 반면, 하수는 주로 어떤 컨트롤 구조가 사용되었는지에 주목했다. OOP 세상에서는 아무래도 고수의 코드 이해 능력이 더 뛰어날 수밖에 없는 것 같다.

이런 업무와 직접적 관련된 차이 외에도 다른 점이 있다. 찰스 보스크(Charles Bosk)라는 사회학자는 훌륭한 외과의사와 그렇지 못한 외과의사를 구분하는 방법에 대해 연구를 해오고 있다. 그가 찾은 답은 아주 간단한 질문을 몇 가지하는 것이다. “실수를 한 번이라도 한 적이 있습니까?” “만약 그렇다면 당신이 저지른 최악의 실수는?” 여기에 대해, “별로 없는 것 같은데요”라든가, “그런 적이 있기는 한데 그건 내 잘못은 아니었고 어쩌구…”라는 답을 하면 모두 최악의 레지던트였다. 반대로, “ 저는 늘 실수를 저질러요. 어제 또 엄청난 실수를 했는데, 그게 뭐냐면…” 식의 답변이 나오면 그들은 그야말로 최고의 의사들이었다. 그들은 자신이 한 것을 다시 한 번 생각해보고, 다르게 한다면 어떻게 해볼지를 상상해본다. 프로그래머 쪽에서도 상황은 크게 다르지 않다.

자신의 실수에 대해 생각해 보고 어떻게 했더라면 실수가 발생하지 않았을지 생각해 보는 것이 중요하다는 이야기다. 여기에서 더 나아간다면, 그런 가설체계를 실험해 보는 것이다. 예를 들어 지난 달에 회사에서 개발한 코드가 있다면 그 코드에서 어떤 점이 마음에 안 드는지를 생각해 본다. 그리고 어떻게 했더라면 그런 문제를 미리 피할 수 있었을지 생각해 보고, 가능하다면 직접 실험(예컨대 그 시스템을 다시 간략히 만들어 보는 것)을 해본다.

 

프로그래머의 의도적 수련

그렇다면 이런 고수 프로그래머가 빨리 되는 방법은 없을까? 있다. 지난 회에 밝혔듯이 지속적인 의도적 수련을 통해 고수되기는 가능하다. 코드 시각화하기, 같은 코드를 정해진 시간(예컨대 한 시간)동안 할 수 있는 데까지 매일 리팩토링 해보기, 같은 장난감 문제를 여러 번 풀기, 새로운 언어 배우기 등이 그러한 방법이다.

코드 시각화하기에 대해서는 부연 설명이 필요하겠다. 필자는 고등학생일 때 월요일 아침 조례 시간이면 친구와 함께 머리 속으로 바둑 두기를 했다. 물론 바둑판과 바둑알은 없다. 바둑판의 x, y 좌표를 정하고, 서로 그 좌표를 불러가면서 머리 속에서 바둑판의 상황을 유지해 가며 바둑을 두는 것이다. 코드 시각화에는 이와 유사한 면이 있다.

코드 시각화는 말 그대로 코드를 머리 속에서 떠올려 눈으로 보듯 만드는 것이다. 여기에는 두 가지 종류가 있는데, 하나는 이미 본 코드를 머리 속에서 떠올려 보는 것이고, 다른 하나는 새 코드를 머리 속에서 만드는 것이다. 후자를 하다 보면 전자도 함께 하는 효과가 있다. 필자는 간단한 문제 하나를 기억해 두었다가 만원 지하철을 타거나 할 때에 그 문제를 머리 속으로 푸는 수련을 한다. 머리 속에서 코딩을 하는 것이다. 특히 테스트 주도 개발(<테스트 주도 개발> 켄트 벡 저, 도서출판 인사이트)을 이용해서 테스트와 코드를 오가며 코딩한다. 글의 문두에서 이야기한 것과 같이 한 번에 얼마만큼의 코드를 기억하고 머리 속에서 다룰 수 있는가 하는 것도 수련을 통해 증진이 가능하다. 동시에 자신의 코드 구조가 바뀌는 효과도 있다. 즉, 한 번에 머리 속에 담고 조작하기 쉬운 구조로 코딩하는 습관(예컨대 단계적 추상화 등)이 생기는 것이다.

같은 장난감 문제를 여러 번 풀기에 대해서도 조금 부연설명을 하겠다. 필자는 폰노이만 공항이라는 세계 대학생 프로그래밍 경진대회 문제를 몇 년째 거듭해 풀어오고 있다(이 문제를 테스트 주도 개발로 푸는 내용의 기사가 마소 2002년 11월호에 실린 적이 있다). 풀 때마다 조금씩 다른 코드가 나오고 매번 무언가 배우게 된다.

예를 들어 마소 2003년 1월호 한국 정보 올림피아드 문제 분석에 실린 직사각형 4개의 합집합 면적 구하기 문제를 보자. 필자가 이 문제를 처음 풀었을 때는 4개뿐만 아니라 N개의 사각형, 나아가 다각형에 대해서도 재사용 가능한 코드가 나왔다. 그러고 나서 나중에 또 풀었을 때는 10줄 이내의 아주 간단한 답이 나왔다. 실행 시간에서도 별 문제가 되지 않는다. 기사에서 대략 4페이지에 걸쳐 복잡하게 문제를 풀어놓은 것과 대조적이다. 이 문제도 풀 때마다 뭔가 통찰을 얻는다.

이 외에도 정해진 시간 동안 X 만들기가 있다. 예를 들어 1시간만에 퐁이라는 게임을 개발하는 것을 며칠에 걸쳐 여러 번 반복해 본다든지 하는 것이다.

이런 의도적 수련의 공통점은 반복적이라는 것(전문가일수록 일주일 중 공휴일까지도 하루에 투입하는 의도적 수련의 양이 일정했다), 그리고 피드백을 거의 즉각적으로 받을 수 있다는 것, 나중에 오류 수정이 가능하다는 것, 실수에 대한 부담이 크지 않다는 것, 자신이 한 것에 대해 생각해볼 여유가 주어진다는 것 등이 있을 것이다. 필자 생각에는 전문가일수록 스스로 이런 의도적 수련을 계획, 설계해서 하는 것 같다. 자기만을 위한 특수훈련을 만들어 실험해 본다는 것은 참 즐거운 경험이 되기도 한다.

 

프로그래머의 직업적 특징

여기까지 읽었을 때 독자들의 반응은 다음 두 가지 사이의 스펙트럼에 위치하지 않을까 한다. “누가 수련이 좋은 줄 모르나? 시간이 나야 하지! 잘 시간도 부족한데 말이야”와 “그래 오늘부터 수련량을 늘려보자”. 전자의 반응에 가까운 독자들이 대다수이지 않을까 싶은데, 그 분들은 어떻게 하는 게 좋을까?

프로그래머는 음악연주가와 다른 점이 있다. 연주가는 평소 늘 수련을 하다가 일주일에 한 번, 혹은 한 달에 한 번 정도 공연을 한다. 하지만 (직업적) 프로그래머는 수련이라는 시간이 특별히 없고, 늘 공연을 하고 있는 셈이다. 그렇다면 우리가 물어야 할 질문은, 어떻게 일(work)을 하면서 동시에 수련(practice)할 수 있을까가 된다. 일도 되면서 수련도 되는, 생활수련의 방법은 없을까?

있다. 앞서 말했던 실험, 피드백, 실패 허용, 오류 수정 등이 핵심 키워드다. 뭔가 실험적인 것을 안심하고 시도해 볼 수 있어야 하며, 거기에서 의도적으로 피드백을 얻고, 그 피드백을 통해 자신의 오류를 수정해서 다음번에는 더 나은 시도를 할 수 있어야 한다.

워드 커닝엄이 웁슬라 2004에서 한 기조 연설이 우리에게 중대한 통찰을 던져줄 수 있다. 제목이 ‘발견 잘하기’(Receptive to Discovery) 정도 된다(워드 커닝엄은 필자가 마소 2003년 8월호에 인터뷰를 했는데, 이 인터뷰에서 워드 커닝엄은 고수가 되기 위한 훈련으로 ‘작지만 유용한 프로그램 매일 만들기’와 ‘큰 프로그램 읽기’ 등을 권했다).

감동적이다. 그의 수십년 경험을 관통하는 말들이다. 흥미로운 점은 다음의 과정은 그가 위키, CRC 카드, XP 등을 만든 과정이면서 동시에 그 대상을 사용하는 사람들이 겪는 과정이기도 하다는 것이다. 자기 생성적인 시스템이다. 각 단계에 나름대로 주석을 붙여 보았다.

◆ 알고 있는 것을 사용하라(Use what you know)

이미 갖고 있는 것에서 출발한다. 사실 우리는 이미 많은 것을 알고 있다.

◆ 작동하는 걸 느껴라(Feel it work)

‘Feel’이라는 단어를 쓴 것이 중요하다. 뭔가 시도했다면 그게 제대로 작동하는지 ‘느껴야’ 한다.

◆ 경험을 공유하라(Share the experience)

‘경험’을 공유하라. 일단 일차적 경험을 공유하는 것이 중요하다. 공유의 형태와 스케일은 여러 가지일 수 있다.

◆ 통찰을 기다려라(Wait for insight)

통찰을 얻게 되길 기다려라. 성급하게 재촉하거나 무심하게 내다 버리는 우를 범하지 말라.

◆ 리팩토링해서 포함시켜라(Refactor to include it)

통찰을 얻었다면 과거를 리팩토링해서 그 통찰을 포함시키도록 하라. “아, 그랬던 거군, 멋진걸!” 하는 통찰을 얻는 데에서 끝나는 경우가 많다. 귀중한 통찰을 얻었다면 그것을 다시 나의 과거에 투영, 리팩토링하라.

 

발견에 대해 수용적이 되는 다섯 단계는 하나하나가 생각해볼 여지가 있다. 이걸 잘하면 일하면서 수련하는 효과를 얻을 수 있을 것이다.

구체적인 예를 하나 들어보자. 뭔가를 하고 그것에 대한 피드백을 빨리 얻으려면 어떻게 하면 될까? 테스트를 자주 하면 어떨까? 아예 테스트를 5분 간격으로 하면? 그게 바로 테스트 주도 개발이다. 테스트 주도 개발을 하면 일하는 도중 수련을 하게 된다. 피드백뿐만이 아니다. 테스트가 있기 때문에 사람이 과감해진다. 여러 가지 실험을 해보게 된다. 뭔가 잘못 건드리면 테스트가 곧바로 알려줄 것이기 때문에 무서움이 없다. 테스트 주도 개발과 리팩토링을 짝을 이뤄 작업하다 보면 하루 중에 학습하는 것이 참 많다. 프로그래머가 나날이 퇴근을 하면서 “오늘은 또 이런 걸 깨달았군” 하면서 가슴 뿌듯하게 집으로 돌아가는 경우는 흔하지 않다. 하지만 이런 방법을 사용하면 매일 깨달음이 있고 매일 새롭다. 이것은 실제 경험이기도 하면서 주변 사람들을 관찰한 결과이기도 하다.

2주간 프로그래밍 교육을 한다. 처음 들어올 때에는 아예 코딩이 불가능하다. 2주 후에는 자신이 원하는 시뮬레이션 프로그램을 아주 훌륭한 OOP 모델로 작성한다. 이것은 실제로 필자가 진행하는 교육에서 종종 일어나는 일이다. 어떻게 이런 일이 가능할까? 의도적 수련을 압축적으로 경험하기 때문이다.

회사에서 이런 지원을 해주면 참으로 좋을 것 같다. 업무 중 의도적 수련의 효과도 함께 볼 수 있도록, 어느 정도 실패를 용인한다거나 과거 작업에 대해 반성할 시간을 준다거나 하는 것. 구글이나 3M처럼 업무 외 개인 프로젝트 시간을 20% 이상 주는 것도 한 가지 방법이 되겠다. 이 부분에 대해서는 필자도 할 말이 많다(관심있는 독자분은 스테판 톰크(Stephan Thomke)의 『Experimentation Matters』라는 책을 참고하시라). 학습하는 조직이 되기 위해서는 회사가 어떠해야 하는가. 이것은 또 다른 하나의 큰 주제로, 다음에 기회가 되면 이야기하도록 하겠다.

하지만 조직에서 수련의 여유를 주지 않는다고 조직 탓만 하다가는 그 피해가 고스란히 개인에게 돌아오게 된다. 자기의 발전은 일차적으로 개인이 책임져야 한다. 결국 자신의 게으름 때문에 조직 탓을 하는 자기 방어적 변명을 만들어 내지 말아야 한다.

 

수련의 의미

에릭슨은 의도적 수련은 그 자체로 즐거운 것은 아니라고 했다. 하지만 그 이후의 여러 연구에서 밝혀진 바에 따르면 의외로 전문가들일수록 수련을 즐긴다. 굳이 그 수련이 자신의 능력을 향상시켜 주건 아니건 큰 상관없이, 필자는 수련을 꾸준히 계속한다. 수련 자체에 의미를 두기 때문이다. 필자가 무술 수련을 하러 가는 날이면 종종 몇 시간 전부터 ‘갈까 말까’ 하는 망설임과 게으름에 시달린다. 그 유혹을 이겨내지 못하고 수련을 빠진 날이면 괜히 찜찜하고 기분이 편안하지 못하다. 하지만 용기를 내어 수련을 하러 간 날이면 꼭 “그래 역시 수련하러 오길 잘했어” 하는 만족감을 느끼게 된다. 특히 수련을 마치고 집으로 돌아올 때의 높은 충만감은 다른 활동에서 얻기가 힘들다. 필자는 무술 수련을 통해 얻는 신체의 건강이나 자기보호 기술같은 것보다 수련 자체에서 느끼는 안정감과 만족감을 더 중요하게 생각하고 있다. 전문가들일수록 일정 수준에 오른 이후에도 꾸준히 수련을 계속하며, 그 활동 자체에서 큰 즐거움을 얻는 것으로 알려져 있다. 고수가 되는 길은 오히려 ‘고수’보다 ‘길’에 대한 집착에서 나오는 것일지도 모르겠다.

우리가 평소 쓰는 말에 일신우일신이라는 말이 있다. 정확하게는 일일신우일신인데 원문을 인용하면 다음과 같다.

湯之盤銘 曰 苟日新 日日新 又日新

대학(『大學』)에 나오는 말이다. 『원본비지 대학집주』에서는 “탕의 반명에 갈오되 진실로 나래 새롭거든 나날 새로이 하고 또 날로 새로이 하라하며”라고 번역하고 있다. 가장 권위적인 영어 번역인 레게 번역에서는 다음과 같이 번역한다.

On the bathing tub of T’ang, the following words were engraved: “If you can one day renovate yourself, do so from day to day. Yea, let there be daily renovation.”

일일신 우일신은 수학적 귀납법을 생각나게 한다. 하루만 새로운 것을 갖고는 진실로 새롭다고 할 수 없다. 하루가 새롭고 또 다시 새로워야 진실로 하루가 새롭다고 할 수 있다.

마우스와 기타 컴퓨터 산업의 거의 대부분의 시조로 불리우는 더글라스 엥겔바트(Douglas Engelbart)는 일을 세 종류로 나눈다. A 클래스, B 클래스, C 클래스. A는 주어진 일을 잘 하는 것이다. B는 A를 개선하는 것이다. C는 B를 개선하는 것이다. C는 그야말로 ‘개선을 개선하는 것’이다. 필자는 사회의 성숙도를 볼 때 B와 C가 얼마나 존재하는가를 본다(개인도 ‘정신의 사회’라는 측면에서 역시 하나의 사회로 볼 수 있는데 마빈민스키가 쓴 동명의 책도 있다).

수련으로 치자면, 지금 주어진 업무를 잘하는 것이 A, 의도적 수련을 하는 것이 B, 그 의도적 수련에 대해 고민하고 수련 자체를 개선하는 것이 C가 되겠다. 일일신우일신은 B와 C를 말하고 있다. 우리는 종종 A를 잘하는 프로세스를 말한다. 하지만 진정 자문해야 할 것은 나의 프로세스 속에 B와 C가 내재되어 있는가 하는 점이다. 그것이 고수가 되는 유일한 길이다.

 

 

커피의 고수

다음 내용은 필자의 지우인 김승범 씨에게 부탁해서 얻은 글이다. 김승범씨는 프로그래머로 일하다가 지금은 대학에서 공부를 계속하고 있다. 그는 요즘 커피에 심취해 살고 있다고 하는데 요즘 커피 고수에게 무공을 전수받고 있다고 한다. 그 세계는 어떤지 궁금하지 않은가?

우리나라 커피계에는 세 분의 ‘고수’가 있다. 그 중 한 분은 80년대에 K대의 어느 골목에 B커피숍을 차렸다. 직접 로스팅하고 내린 커피로 강렬한 맛과 향을 전도하던 그는 현재 같은 이름으로 강릉에 커피숍을 차리고, 동시에 후학을 양성하고 있다. 지금의 K대 옆 B커피숍은 그 분의 제자인 C선생님이 점장으로 있다. 자칭 커피 매니아였던 P군은 B커피숍에서 진정한 커피의 세계를 접한 이후 매주 일요일마다 C점장님의 커피 강의를 통해 ‘드립 커피’를 배우고 있다.

 

<그림 1> 종이 필터를 사용한 드립 커피

 

가장 기본이 되는, 종이 필터를 사용한 드립 커피의 순서는 간단하다. 종이 필터를 잘 접은 후 깔때기처럼 생긴 드리퍼에 올리고, 커피를 받을 드립 서버 위에 드리퍼를 올린다. 알맞게 갈은 신선한 커피를 종이 필터에 담고 주둥이가 가늘고 긴 드립 주전자로 커피에 물을 흘려주면 된다. 물을 내려줄 때에는 처음에 뜸들이기라 해서 물을 점찍듯이 커피를 적셔주고, 뜸들인 이후에는 가늘고 고른 물줄기로 나선형이나, 스프링형 등 다양한 방법으로 물을 내려 커피를 추출한다.

P군은 C점장님의 말 한마디, 동작 하나를 주의깊게 듣고 관찰하면서 드립 커피를 위한 기본적인 순서와 규칙들을 익히는데 집중했다. 뜸들이기는 얼마 동안 어떤 방식으로 하는지, 물을 내릴 때에는 어떤 모양으로 얼마 간 내리는지를 항상 염두에 두며 커피 내리기를 시도해봤다. 커피를 내리는 동안에는 세세한 규칙들에 집착하면서 혹시 실수는 하지 않았는지, 물줄기는 계속 가늘고 고른지 항시 긴장을 늦추지 않았다. 대충 비슷하게 커피를 내렸다지만 점장님이 추출한 커피와 맛이 같을리 없었다.

간단하게만 보이는 드립 커피의 과정을 단순히 눈과 귀로 보고 들은 후에 직접 따라 해보면 결코 만만치 않은 것임을 알 수 있다. 물 내리기를 똑같이 따라 하기도 힘들뿐만 아니라 결과적으로 커피의 맛과 향에서 차이가 난다. 순서와 동작은 비슷하더라도 결국 초보자의 커피에는 깊고 매력적인 향은 사라지고 잡스런 맛이 남게 된다.

 

<그림 2> 여유와 리듬감이 실린 고수의 드립 커피

 

고수이신 C점장님의 드립 커피 과정에는 여유와 리듬감이 있다. 경쾌한 음악에 박자를 맞추듯 주전자와 팔은 움직이지만, 주전자의 주둥이에서 내려오는 가는 물 줄기는 얼어버린 고드름처럼 일정하고 고르다. 그 물이 커피의 입자에 닿으면 커피는 살아 숨쉬듯이 부풀어 오른다. 때로는 거칠게 반응하는 커피 입자들을 고른 물줄기로 바른 물길을 내어 절도있게 잠재우고, 시들한 커피 입자들에겐 다시 생명력을 불어 넣는다. P군이 과정에 얽매여 커피에 끌려간다면, C점장님은 커피를 자유자재로 부리는 것이다.

뜸들이기와 물 내리기를 얼마나 해야 할지 감을 못 잡은 P군에게 C점장님은 2분짜리 모래시계를 주면서, 처음에는 2분 30초에서 3분 사이 정도로 커피 추출을 해보라고 했다. 처음엔 2분 30초 정도의 시간이 맛있는 커피를 위한 최적의 시간인줄로 알았지만, 점장님은 그날의 커피에 따라서 뜸들이는 시간도 달라지고, 물을 내리는 방법과 과정도 처음에 가르쳐준 기본적인 규칙과 달리했다. P군이 대체 얼마나 해야 그 정도로 잘 할 수 있느냐고 묻자, C점장님은 오히려 초보자의 사심 없는 애정이 담긴 드립 커피가 더 맛있을 수 있다고 말했다. 어떤 과정이나 규칙에 너무 얽매이지 말고, 사람마다 좋아하는 커피가 다르기 때문에 자신의 맛과 향을 찾아가라고.

P군은 주변에서 가끔씩 “프로그래밍을 잘 하려면 무엇부터 공부해야 하나요?”,  “이것을 마스터하려면 이 책이 좋겠죠?” 등의 질문을 하는 후배들을 본다. 그럴 때면 P군은 비슷한 질문을 하던 몇 년 전의 자신의 모습을 회상한다. 정확한 정답을 가르쳐 주는 사람은 없었다. 다행히도 P군의 주변에는 정답은 아닐지라도 노력하는 방법을 가르쳐 주는 지인들이 많았다. 그리고 그 방법이란 구체적인 몇 가지 규칙이라기보다는 현재 자신의 상태에서 관심과 애정을 가지고 노력하는 습관 같은 것이었다. P군은 몇 년에 걸쳐 느끼고 경험했던 과정들을 커피를 통해 다시 체험하고 있다. 오늘도 B커피숍에서 깊고 진한 ‘지적 윤활유’를 마신다.

 

‘의도전 수련1 – 고수, 무술과 프로그래밍에 대한 소고’ 보러 가기

 

《함께 자라기》는 다음 서점에서 구입하실 수 있습니다.

Yes24 | 교보문고 | 알라딘 | 인터파크