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

‘의도적 수련 2 – 프로그래머에게 적합한 의도적 수련’ 보러 가기

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

이 글은 최근 있었던 제6회 자바 개발자 컨퍼런스에서 필자가 발표했던 ‘테스트 주도 개발 수련법’의 내용 중 몇 가지에 대해 상술하고 추가한 것이다. 총 2회에 걸쳐 연재될 예정인데, 첫 번째의 무게 중심이 무술 쪽에 가깝다면 두 번째는 프로그래밍 쪽에 가깝다고 할 수 있다. 그리고 무술과 프로그래밍의 관계를 설명함에 있어 필자가 수련하는 기천이라는 무술에 대한 언급이 몇 번 있는데, 이는 특정 무술을 선전하거나 혹은 그 무술이 다른 무술에 비해 월등하다는 주장을 하거나 신비화하려는 의도는 전혀 없음을 미리 밝혀둔다. 특정 무술에 대한 언급이 약간 눈에 거슬리더라도 마소는 무술 잡지가 아니라 프로그래밍 잡지라는 맥락을 상기하고 가볍게 읽어 주길 바란다.

고수, 무술과 프로그래밍에 대한 소고

필자는 무술을 수련해 오고 있다. 처음 무술의 ‘武’자를 몸으로 접한 것은 초등학교 입학 전후로 기억하는데, 당시 대한민국 남아의 필수 교양 스쿨이었던 태권도 도장을 통해서였다. 고등학교는 태권도 수업 시간이 있는 좀 독특한 학교였는데, 그 때 단증과 함께 명예의 검은 띠를 얻었다. 대학에 들어와서는 손이 그리는 태극 모양에 매료되어 기천이라는 전통무예를 배우기 시작했다. 군대에서는 고참의 눈을 피해 날마다 저녁 자유시간에 창고에서 몰래 수련을 하기도 했다. 현재까지 계속하고 있는 이 기천이라는 무술은 시작한지 벌써 10년이 넘었다.

프로그래머로서 무술을 한다는 것이 무슨 상관이 있냐고 혹자는 반문할지도 모르겠지만, 경험에 의하면 무술은 음으로 양으로 프로그래밍에 도움을 주고 있다. 먼저 간접적으로 얻는 깨달음에 대해 이야기해보자.

무술에서 얻는 영감

무술에서 얻는 부차적인 이득이 하나 있다. 필자는 마소 2003년 1월호에서 개발자에게『훈민정음 해례본』을 추천한 바 있다. 당시 기사의 일부분을 인용해본다.

한글은 하나의 시스템이다. 기능과 모양새가 한 박자에 맞춰간다. 다양한 상징과 은유가 일관된 체계를 구축하며 들어 있다. 필자는 이제까지 한글처럼 완벽한 시스템을 본 적이 없다. 디자인을 하는 사람이나 어떤 시스템을 만들려는 사람에게 이 책이 큰 계발이 되리라 생각한다. 무형의 것을 어떻게 자연스럽게 유형화해서 표현할 것인가, 추상적인 개념들을 어떻게 규칙적으로 체계화할 것인가 하는 데에 큰 공부가 된다.

당시 담당 기자로부터 몇 번 확인을 받아야 했다. 정말 이 책을 추천하는 게 맞느냐. 다른 책으로 바꿔줄 수는 없겠냐. 하지만 필자는 무술을 하면서 훈민정음 해례본에서 느꼈던 치밀함을 다시 맛볼 수 있었다. 다음은 공부론에 대해 도올고신에 연재를 했던, 필자의선배 윤종권 씨의 글이다. 윤종권 씨는 무술과 음악에 대해 퍽이나 깊은 수준을 갖고 있다.

여기서 우리가 의외로 명확하게 인식하지 못하는 인체의 상식 하나를 소개하고자 한다. 그것은 우리가 사지를 몸통에서 멀리 뻗을 때(伸)는 숨을 내쉬고(呼息), 몸 쪽으로 당기거나 굽히는(屈) 동작을 수행할 때에는 숨을 들이쉰다(吸息)는 사실이다. 이는 다음과 같은 단순한 실험을 해보면 단번에 이해될 것이다. 두 사람이 서로 악수한 상태에서 손을 서로 잡아당길 때, 한쪽이 숨을 내쉬면 그는 곧 상대방 쪽으로 끌려가고 만다. 팔을 접으면서 잡아끄는 행위는 屈의 움직임이며, 이 때는 들숨이 필요하기 때문이다. 반대로 서로 손을 맞잡고 밀어내는 경우, 한쪽이 숨을 들이키면 그는 뒤로 밀리게 된다. 팔을 앞으로 내미는 신장(伸張) 동작은 날숨과 연동되어 있기 때문이다. 참고로 숨과 신근(伸筋)의 연동은, 권투에든 야구에든 첼로 연주자의 활 긋는 동작에든 모두 동일하게 적용된다.

조던은 결국 다음과 같은 이유에서 혀를 내미는 것이다: 그는 돌파시에 혀를 내밀고 달림으로 인해서 “날숨”의 상태(정확하게는 숨을 내쉰 직후의 호흡정지 상태)를 인위적으로 지속시켜서, 伸筋(등 부분, 다리의 앞면, 팔의 뒷면 등의 근육)의 퍼포먼스를 최대한으로 높인다. 이 시점에서 주력(走力)이 향상된다. 점프할 때 혀를 빼무는 것은, 전신의 脫力(불필요한 屈筋의)을 촉진하고 몸통 내부에 일정한 상태를 조성하여 — 이 부분은 구체적으로 기술할 수 없으나, 소위“浮身”이라고 불리우는 무술의 한 테크닉과 거의 일치한다 — 더 높고 멀리 점프할 수 있도록 도와준다.

윤종권, 마이클 조던이 혀를 내민 까닭은?, 도올고신 27신

윤종권 씨는 이 글에서 조던이 혀를 내미는 이유를 운동역학적인 면에서 분석하면서, 몸의 특성과 그것을 운용하는 방식 등을 하나의 디렉트 시스템으로 통합하여 보고 있다. 그런데 본인은 기천 운동을 하면서 기천의 수들이 이런 체계적이고 치밀한 시스템 원리를 따르고 있다는 것을 점점 더 절감하고 있다. 기천의 수는 일종의 부트스트랩핑과 비슷하다. 부트스트랩(bootstrap)은 신발 뒷축의 가죽 끈을 말하는데, 부트스트 랩핑은 스스로 자기의 신발끈을 당겨서 자신을 공중에 띄워야 하는 것과 같은 모순적 상황을 일컫는다.

기천은, 나아가서 모든 무술은 어떻게 하면 조직이 스스로를 개선할 수 있을까 하는 질문과 마찬가지로 어떻게 하면 자신의 몸으로 더 많은 힘을 낼까 하는 부트스트래핑적인 고민을 담고 있다. 기천의 수는 땅을 박차는 반작용의 힘을 많이 이용한다. 동시에 자신의 몸을 여러 개의 부분들이 연결된 것처럼 다루면서 회전력과 비트는 힘을 이용해서 힘을 배가시킨다. 마치 수영선수가 출발할 때 속도를 얻기 위해 벽면을 박찰 때에 벽면이라는 외부요소를 이용하듯이, 기천에서는 자신의 팔이나 다리, 허리 등을 일시적으로 마치 외부요소인 것처럼 이용해서 자신의 힘을 불리는 것이다. 그 치밀함은 정말 놀라울 정도이다. 그래서 기천 수를 연습하면서 많은 계발과 영감을 얻고 있다. 그런 영감의 몇 가지를 소개한다.

무술과 프로그래밍은 모두 시간의 예술이다. 무술에서 고정된 동작이란 그 자체로 의미가 없다. 주먹은 앞으로 나가야 타격을 할 수 있는 것이다. 프로그램 역시 시간의 흐름 속에서만 의미가 있다. 프로그램 실행이란 공간적 배치를 시간적 배치로 바꾸는 것이다.

한 동작을 거듭 수련하면 할수록 더 복잡해지는 것이 아니라 더 소박하고 단순해진다. 필요없는 잔 동작이 없어지고 핵심만 남는다. 전설의 검객 미야모토 무사시는 자신의 오륜서에서 “필요없는 것을 하지 마라”고 했다. 프로그램도 계속 다듬으면 오히려 단순해지는 것 같다.

무술은 허실, 음양의 양태의 조합과 반복이다. 주먹을 뻗으면 실을 만들면서 나의 허리 쪽에는 허가 생긴다. 오른손이 올라가면 왼손이 내려간다. 왼손이 올라가면 왼발은 뒤로 간다. 왼발이 뒤로 가면 오른발은 앞으로 간다. 컴퓨터 시스템에도 이런 허실과 음양의 관계 양상이 존재한다. 전체 시스템에서 특정 컴포넌트가 실하다면 나머지 부분 중 허한 부분이 생기게 되고 그 부분을 보충해줘야 한다. 공수가 어울려야 한다.

범사(기천에서는 사범 대신 범사라고 호칭한다)가 시범을 보이면 그걸 따라한다. 하지만 뭔가 다르다. 양념이 빠진 느낌이랄까, 2% 부족한 느낌이다. 그러다가 문득 깨달은 것이 있다. 범사의 동작에는 흥과 리듬감이 있었다. 기천의 동작(특히 동공)은 ‘흥’이 나야 한다. 이것을 알고 나서 하는 동작은 훨씬 더 자연스럽고 쉬우면서도 힘이 난다. 흥이 나려면 리듬을 타야 한다. 흥을 내다보면 탈춤을 하는 느낌이 들기도 한다. 생명의 느낌에는 리듬이 있다. 이처럼 뛰어난 프로그래머를 관찰하면 흥이 난다. 리듬감이 있다. 옆에서“얼쑤!”라고 추임새를 해주고 싶을 때도 있다. 필자도 프로그래밍이 잘 될 때에는 박자가 잘 맞고 흥이 난다. 하지만 그렇지 않을 때에는 박자가 어긋나고 흥이 없고 살아 있는 느낌이 나질 않는다.

프로그래머의 스트레스

이번에는 무술에서 얻는 직접적인 효과에 대해 이야기해보자. 지식 노동자들은 스트레스가 많다. 특히 프로그래머라는 직업은 나날이 늘어가는 신기술의 홍수 속에서 가만히 있으면 뒤쳐지는 붉은 여왕의 스트레스(루이스 캐럴의『이상한 나라의 앨리스』에 등장하는 붉은 여왕에서 유래. 그 나라에서는 있는 힘을 다해 달려야만 제 자리에 머물 수 있다)가 이만저만이 아니다. 어디에선가 프로그래머는 5년에 한 번씩 자기가 아는 지식의 절반을 완전히 갈아엎어야 한다는 이야기를 본 것 같다. 그래서 이런 스트레스를 해소하는 방법은 꼭 필요하다.

필자는 몸으로 하는 무언가가 좋은 처방이라고 생각한다. 본인은 그 중에서도 특히 무술을 통해 스트레스를 해소하고 있다. 운동을 한 날은 마치 정신의 샤워를 한 느낌이 든다. 가장 좋은 아이디어는 샤워를 할 때 떠오른다는 유명 프로그래머들이 꽤 있는데, 정신의 샤워 역시 비슷한, 혹은 더 높은 효과가 있다.

세상에는 인과관계가 역으로도 성립하는 듯 보이는 경우가 종종 있다. 우리는 기분이 좋으면 웃는다. 상식적 견지에서 보면, ‘기분이 좋다’가 원인이면 ‘웃는다’가 결과가 될 것이다. 하지만 최근의 연구에 따르면 웃는 표정을 지으면 기분도 좋아진다고 말한다. 우리는 기분이 좋으면 육체적 활동을 한다. 하지만 반대로 육체적 활동을 하면 기분이 좋아지기도 한다. 우울증 치료의 가장 효과적 처방 중 하나가 바로 운동이다. 매일 계속하는 운동은 우울증 예방과 치료에 큰 도움이 된다.

스트레스 해소라는 정신적 측면뿐만 아니라 육체적인 측면에서도 큰 도움이 된다. 하루 종일 의자에 앉아서 일해야 하는 직업의 특성상 허리, 눈, 다리, 팔, 손목 등에 병이 걸리기 쉽다. 꾸준히 하는 운동이 있으면 그런 병 걱정이 없다. 또 몸이 조금 피곤해도 쉽게 풀린다.

알파파와 집중력

며칠 전 필자를 지도해 주는 범사님과 함께 집중력 검사를 받았다. 필자의 지우 중에 지상은 박사라고 계신데, 한의사 출신으로 다양한 공부를 하신 분으로 지금은 서울 근방에서 학습 클리닉을 운영하고 있다. 일전에 지 박사와 함께 기천 수련과 관련해 심박 측정을 했었는데 이번에는 뇌파 측정을 해보기로 했다.

머리에 전극을 연결하고 뇌파를 측정해서 집중력을 검사(혹은 트레이닝)하는 것인데(소위 바이오피드백이라고 알려져 있다) 스트리트파이터 류의 게임을 머리로 했다. 상대는 컴퓨터가 조종한다. 좌뇌, 우뇌 활성화 여부(알파파와 베타, 쎄타파의 비율)에 따라 캐릭터가 움직이고 공격을 한다. 뇌에서 어떤 패턴으로 알파파가 얼마나 강하게 나오느냐에 따라 공격의 종류가 달라진다. 복잡한 공격 기술일수록 만들어 내기가 어렵다. 꽤나 힘들긴 했지만 컴퓨터 상대를 이길 수 있었다. 꼭 영화 ‘매트릭스’의 한 장면 같았다.

이 게임이 어려운 이유는 자연스러움을 거스르기 때문이다. 일반적으로 이러한 종류의 대전 격투 게임을 할 때에는 뇌에서 알파파가 나오는 차분하고 평정한 상태를 잃기 쉽다고 한다. 하지만 그런 흥분되는, 혹은 몽환적 상황에서도 차분하게 집중을 하고 있는(보통 알파파 상태를 영어로 calm and focused attention이라고 한다) 상태를 유지해야 하기 때문에 어떻게 보면 모순이다. 필자의 생각으로는 무술의 고수는 실제 겨루기를 할 때에도 알파파가 나오지 않을까 한다.

이 알파파라고 하는 것은 우리가 보통 공부를 할 때 필요한 집중력과 직접적 관련이 있다고 한다. 학습장애 클리닉에 집중력 장애를 가진 학생이 부모와 함께 왔을 경우, 부모는 대부분 부인한다. “우리 애가 집중력이 부족하다고요? 말도 안돼요. 게임할 때 보면 누가 업어가도 모를 정도로 얼마나 집중을 잘하는데요.”그래서 국내의 연구자가 프로 게이머 대상으로 실험을 했다. 게임을 할 때 어떤 뇌파가 많이 나오는가. 쎄타파였다. 쎄타파 상태는 깨어 있는 것과 잠든 것의 중간 상태와 비슷하다. 그런데 이 쎄타파는 공부할 때 필요한 알파파와는 전혀 차원이 다르기 때문에 아무 도움도 되지 않는다는 것이 그 연구자의 말이다.

지 박사는 이런 몇 가지 실험 후, 필자와 범사님 두 사람 모두 상당한 집중 능력을 보여줬다고 말했다. 이는 기천 수련의 영향이라고 생각한다. 집중력이 높다는 것은 원하는 시점에, 심지어 주변에 방해요소(앞선 실험에서는 화면에서 번쩍이는 현란한 그래픽과 폭력성)가 있어도 알파파를 내도록 스스로 조절할 수 있다는 이야기이다. 프로그래밍에 몰입한 때에도 알파파가 나온다고 생각하는데, 그렇다면 당연히 이런 능력이 프로그래밍을 비롯한 대다수의 지적 활동에 많은 도움이 될 것이다.

건강과 프로그래밍

정신 건강이나 육체 건강이 프로그래밍과 얼마나 관련이 있을까? 필자는 그 관계가 무척 깊다고 생각한다. 예컨대 동일한 사람을 극심한 스트레스 아래에 놓고 일을 시킬 때와 그렇지 않을 때를 비교하면 그 사람의 퍼포먼스는 많은 차이가 난다. 본인이 주변을 관찰한 바로는 몸 상태에 따라 한 프로그래머의 성과가 서너 배 이상 차이가 났다. 주지해야 할 것은, 이런 효과가 개인이 아니고 조직에 영향을 끼치게 되면 파급효과는 제곱수가 된다는 것이다. 짜증이 극도에 이른 개발자나 몸살로 헤롱거리는 개발자와 함께 일해 본 경험이 있는 사람이라면 쉽게 고개를 끄덕일 수 있을 것이다.

궁금한 독자는 다음 실험을 해보시라. 주변 동료에게 간단한 프로그래밍 문제를 풀게 한다. 같은 시간을 주되, 한 번은 일요일 오후 편안한 시간에 풀게 하고 다른 한 번은 업무를 마치고 스트레스가 높고 피곤한 상태에서 풀도록 한다. 양자의 결과는 놀라우리만큼 차이가 크다. 후자의 경우, 프로그래머는 실수를 자주 하게 되며 그 실수가 되먹임되어 더 큰 실수가 생기고, 더군다나 아주 어처구니없는 실수를 잡아내지 못해 고생을 하고, 그래서 시간은 부족하고 스트레스는 더 늘어나며 그로 인해 다시 실수를 하는 악순환에 빠지게 된다. 세미콜론 하나를 빠트려서 두 시간 삽질해 본 경험을 한번쯤은 해보지 않는가. 길을 걷다가 발을 헛디디는 순간 우리는 숨을 들어 마시게 되고 몸의 균형이 깨어진다. 이 때 누군가가 그 사람을 타격하면 이건 정말 치명타가 될 수 있다. 기의 균형이 깨어진 상태, 정말 무방비의 시점이다. 한 번 발을 헛디뎌 헉하는 순간 주먹을 맞으면 그냥 KO당하는 수가 있다. 그렇게 센 주먹일 필요도 없다. 정신 활동도 이와 비슷하다.

고수가 되는 것이란

앞서 살펴본 바와 같이 무술을 꾸준히 하면 육체와 정신에 여러모로 긍정적인 영향을 준다. 그렇다면 이런 무술의 고수는 어떤 사람들일까? 질문을 조금 일반화해 보자. 고수는 어떤 사람들일까? 현대 한국어에서 고수는 한 방면에 매우 뛰어난 사람을 일컫는 비유적 표현으로 많이 쓰이고 있다. 간단히 말하자면 전문가인 셈이다.

필자가 만든 말 중에 ‘메리 분석하기(AnalyzeMary)’라는 게 있다(메리에겐 뭔가 특별한 것이 있다라는 영화에서 따온 말이다). 우리 주변에는 메리처럼 뭔가 특별한 사람들이 있다. 남들과 비슷하게 일을 하는 듯하면서 늘 더 나은 성과를 보이는 사람들이다. 그런 사람을 볼 때 대다수의 사람들은 그 사람은 특별하다는 감탄사를 외치고 나는 왜 그들처럼 될 수 없을까 한탄하고, 곧 까맣게 잊는다. 다음은 필자가 노스모크에 썼던 글이다.

그들을 주의 깊게 관찰하고, 분석하라. 그리고 무엇이 그들을 그렇게 ‘특별하게’ 하는지 알아내고 그걸 배워라. 또 그들이 어떻게 그렇게 특별해질 수 있었는지 배워라. 조만간 당신도 그들이 하는 것을 할 수 있을 것이다.

……

나는 지하철에서 물건을 파는 사람들을 매일 본다. 그러나 부산에서 봤던 구두솔(구두약이 나오는) 파는 아저씨를 도무지 잊을 수가 없다.

그 아저씨는 내가 타고 있던 칸에서만 50개를 넘게 팔았다. 아주 경이로운 장면이었다(영화의 한 장면 같았다). 도대체 어떻게 하길래 저 사람은 물건을 이렇게 잘 파는 것일까. 내게는 그 사람이 세일즈의 달인으로 보였다. 나는 세일즈를 하는 사람이 아니다. 하지만 세일즈의 기본은 설득과 유혹이다. 설득과 유혹은 내가 나날이 사용하는 기본적인 삶의 도구들이다. 그래서 그 사람을 ‘Analyze Mary’해보았고 거기서 많은 통찰과 영감을 얻었다. 그 사람은 좌석에 앉은 사람들의 신발을 일일이 자신의 구두솔로 닦아주었다 — 한 사람도 빼놓지 않고(아 물론 운동화와 샌들은 빼고). 그걸 싫어하는 사람들이 대부분이지 않겠냐고 생각하겠지만 상황은 정반대였다. 저마다 반짝거리는 자신의 신발을 이리 저리 돌려 보면서 신기해했다. 그 사람이 신발을 닦아준 사람의 90%는 모두 구입을 했다. 상품과 세일즈 기술이 잘 결합된 좋은 예였다.

나는 여기 등장한 구두솔 아저씨를 고수로 생각한다. 그 아저씨의 고수됨은 이소룡의 고수됨과, 또 베토벤의 고수됨과, 다익스트라의 고수됨과 크게 다르지 않다.

공부와 쿵후

여기에서 잠깐 공부와 쿵후의 관계에 대해 짚고 넘어가도록 하자. 이에 관해서는 도올 김용옥의『태권도철학의 구성원리』라는 책이 무척 탁월하다. 그 책의 설명을 인용한다.

“To study”의 번역술어로서 우리 현대어에 자리잡은 이“공부”(工夫)라는 말의 원뜻은 “德의 得함을 지향하는 모든 디시플린(훈련)”을 의미하는 것으로 그 원의는 사실 중국말의 “쿵후”에 더 잘 보존되어 있다. 우리 말의 “工夫”의 중국 발음이 “kung-fu”이며 이것을 우리말로 簡化하여 표기한 것이 곧 “쿵후”다. (工夫=功夫=功夫). “ 쿵후”는 공부다. ……

중국말(혹은 우리 옛 한문)에 있어서 쿵후는 인간의 몸의 達人的 경지에 대하여 광범위하게 두루두루 쓰이는 표현으로서 우리가 지금 “쿵후”라고 부르는 무술의 한 형태는 쿵후라는 일반명사의 개념에 포섭되는 광범위한 개념 중의 한 하위개념일 뿐이다. 지게를 잘 지는 노인의 지팽이질도 쿵후요, 호리병에 한 방울도 흘리지 않고 기름을 떠넣는 기름장수의 손놀림도 쿵후다. …… 이러한 인간의 몸의 동작의 장난에 있어서 高手와 下手의 차이를“쿵후”라고 표현하며, 이 쿵후는 오랜 시간의 축적을 통하여 高手의 몸이 얻은(得) 德인 것이다.

관심있는 독자들은 꼭 일독하기를 권한다. 도올은 여기에서 우리가 일상어에서 공부라고 부르는 뇌의 기호 조작(symbol manipulation) 능력과 무술의 쿵후 능력, 더 나아가 빨래터의 아낙이 능숙하게 방망이질을 하는 것을 모두 몸(Mom)의 수련이 이룬 경지라는 동등한 차원에서 볼 수 있다고 하는 것이다.

수련의 필요성

고수가 되려면 어떻게 해야 하는가. 필자가 노스모크에 썼던 글을 인용하겠다.

고수가 하는 것을 배우거나 따라하려고 하지 말고, 그들이 어떻게 고수가 되었는지를 배우고 따라하라.

대부분의 사람들은 어떤 분야의 전문가가 되기 위해 현재의 전문가들이 하고 있는 행동을 따라하려고 한다. 우선은 따라하기가 힘들 뿐만 아니라, 설령 똑같이 따라하게 되더라도 그것은 전문가 흉내내기일 뿐 전혀 전문가적이지 못하다. 행동 하나하나의 맥락을 이해하지 못하기 때문이다.

문제의 해결법만 달달 외운 사람은 세상의 모든 문제가 그 해결법을 적용할 대상으로 보인다. 또 새로운 문제에 직면했을 때 창의적이고 상황에 맞는 전문가적 해결안을 제시하지 못한다. 컴퓨터 프로그래밍에서 좋은 해결안들만 사전처럼 모아둔 디자인 패턴을 공부하는 사람들의 병폐가 대부분 여기에서 온다.

인공지능에서 전문가 시스템(Expert System)이라는 것이 초기의 장밋빛 기대와는 달리 별 신통한 결과를 주지 못한 이유가 이것이기도 하다. 전문가 시스템 구축을 위해 특정 분야의 전문가 수백 명을 몇 년에 걸쳐 인터뷰와 관찰을 계속한다. 그 전문가들은 자신이 일을 하는 원칙과 법칙을 서술해야 한다.

즉, 영어 전문가라면 어떤 문장에서 어느 경우에 무관사인지, 정관사인지 부정관사인지 등을 법칙으로 설명해야 한다(우리는 이런 것들을 달달 외우려고 노력한다). 이미 많은 연구에서 밝혀졌지만 의외로 전문가들은 전혀 법칙에 의해 행동하지 않는다. 우리가 질문을 했을 때 전문가들은 법칙을 즉석에서 자신의 평소 상황에서 유추, 만들어내어 설명해주고 있다. 우리가 이 법칙을 모두 외운다고 해도 전문가의 행동을 할 리 만무하다. 전문가의 머리 속에는 그런 법칙들은 물론 이제까지 그가 축적해온 엄청난 영어 경험이 각 상황성과 함께 적절히 정리되어 있기 때문에 그들의 머리와 법칙만 외운 우리의 머리에는 큰 간극이 존재한다.

아마도 우리가 배워야 할 것은 그들이 전문가에 도달하기 위해 밟았던 과정일지도 모른다. 우리의 목표는 몇몇 특정 시점에서 전문가를 흉내내는 것이 아니고 스스로 전문가가 되는 것이기 때문에.

고수가 되려면 수련이 필요하다. 단순히 현재 고수가 하는 것을 따라하는 것으로는 부족하다. 사실 제대로 따라하기가 거의 불가능하다. 하지만 고수가 현재 무엇을 하는가에 대한 정보도 매우 귀중하다. 등대가 되어줄 것이기 때문이다.

무술처럼 프로그래밍에도 수련이 필요하다. 이 생각을 갖게 된 계기는 무술을 수련하면서, 그리고 인지심리학을 공부하면서였다. 인지심리학에서는 전문가에 대한 연구(전문성, expertise에 대한 연구라고 한다)를 몇십 년 전부터 해오고 있다. 이 때 연구 대상은 주로 전문직이라고 할 수 있는 음악 연주자, 의사, 판사, 운동선수, 체스선수, 프로그래머 등에 해당한다. 그렇다. 프로그래머! 인지심리학 분야에서는 꽤 오래전부터 고수 프로그래머에 대해 연구해 오고 있다.

이런 전문성 연구의 목표는 크게 잡아 두 가지이다. 전문가와 비전문가가 그 사고 과정과 문제 해결, 행동 방식에 있어 어떻게 다른가. 어떻게 비전문가를 전문가로 만들 수 있을 것인가.

의도적 수련

필자는 전문성 연구 중에서 특히 앤더스 에릭슨(Anders Ericsson)이라는 사람의 연구결과에 주목한다. 그는 퍼포먼스와 수련 시간 간에 밀접한 관계가 있다고 말한다. 아니, 좀 더 극단적으로 한 영역에서의 경험은 일, 놀이, 수련 세 가지로 나눌 수 있는데, 이 중 수련에 투자된 시간만이 퍼포먼스 향상과 관련이 있다고 한다.

프로그래밍 쪽으로 말한다면, 회사에서 프로그래밍하는 시간이나 심심풀이로 프로그래밍하는 시간은 내가 고수가 되는 데에 직접적 공헌을 하지 못한다는 이야기가 된다(사실 일, 놀이, 수련의 구분은 엄격할 수 없고, 겹쳐진 영역이 존재할 수 있다). 특정 영역에서 개인이 다다를 수 있는 최고 수준의 퍼포먼스는 경험을 많이 한다고 자동으로 획득되지 않으며 심지어 많은 경험을 했던 사람일지라도 개선하려는 의도적인 노력의 결과로서 퍼포먼스 수준이 향상될 수 있다고 에릭슨은 말한다. 피터 드러커는 이노베이터의 조건에서 다음과 같이 말한다.

세상에 음계(etude-연습곡)를 연습하는 것보다 더 지루한 일은 없다. 그러나 위대한 연주자일수록 하루도 빠짐없이 성실하게 음계를 연습한다. 마찬가지로 유능한 외과 의사일수록 한층 더 성실하게 봉합술을 연마한다.

피아니스트는 연주 능력 향상에 크게 도움이 될 것 같지 않은 음계를 여러 달 동안 계속 연습하기도 한다. 그러나 그 연습이 피아니스트로 하여금 원하는 음악적 성취를 이룰 수 있도록 해준다. 외과 의사는 능숙한 수술 실력 향상에 크게 도움이 될 것 같지 않은 작은 손놀림을 익히기 위해 여러 달 동안 계속해서 봉합용 실과 씨름을 한다. 외과 의사는 그 꾸준한 연습 덕분에 수술을 빠르고 정확하게 하게 되고, 그 결과 소중한 인명을 구하기도 한다. 무언가를 성취하는 것은 반복적인 연습에 의해서만 가능하다.

하지만 단순한 음계 연습은 무엇도 이루어주지 않는다. 에릭슨은 바이올린 전문가들에 대해 막대한 조사를 해보았는데, 그들의 실력은 자신이 바이올린 연습에 투자한 시간과 거의 비례했다. 하지만 그는 여기에 전제를 단다. 단순한 반복 연습은 아무 도움이 안 된다고 강조한다. 자기 자신을 관찰하는 것, 그리고 피드백을 통해 재조정하는 것, 특별히 현재의 기량 증진을 위해 설계된 훈련 등이 중요하다. 에릭슨은 이런 수련을 특별히 의도적 수련(deliberate practice)이라고 부른다.

에릭슨의 연구에 따르면, 고수와 하수를 가르는 가장 효과적인 인자는 의도적 수련의 양이었다. 예컨대 IQ와는 별 상관이 없다. 실제로 프로그래머의 퍼포먼스에 대한 연구를 봐도 그 사람이 얼마나 일을 잘 하는가와 그 사람의 학력, 경력년수, IQ 간에는 별 관련이 없었다. 필자의 경험으로도 크게 틀리지 않는 것 같다. 경력이 많은 개발자가 꼭 경력이 짧은 개발자보다 능력이 더 뛰어나진 않았다. 설사 처음에는 큰 차이가 있더라도 금새 따라잡을 수 있었다.

에릭슨의 연구는 우리의 뒷통수를 칠만큼 허를 찌른다. 우리의 커리어 모델에 대한 심각한 재고가 요구된다. 전문성 연구에 따르면 한 분야의 세계적 수준의 고수가 되려면 10년의 수련, 혹은 도합 일만 시간 이상의 의도적 수련이 필요하다고 한다. 재즈 기타리스트에 대한 전문성 연구에 따르면, 실제 공연 시간은 전문가와 비전문가를 가리는 데에 별 도움이 되지 않았고 혼자서 연습한 시간이 더 의미가 있었는데, 전문가와 준전문가(semi-expert)의 경우 수련 시간이 일주일에 최소 두 배 이상(43시간 대 17시간)의 차이가 있었다. 나는 일주일에 몇 시간을 의도적 수련에 할애하는가? 이건 정말 무서운 질문이다.

무술 쪽에 이런 의도적 수련이 많이 개발되어 있는 것 같다. 실제로 무술인의 의도적 수련에 대한 연구도 있다. 본인은 의도적 수련을 다른 말로 ‘특수 훈련’이라고 옮기기도 한다. 세계적인 전문가와 비전문가 혹은 ‘나름대로 전문가’의 차이 중 하나는 자신의 기량을 향상시키기 위해 자신만의 특수 훈련을 직접 설계, 시행하느냐에 있다. 전문가가 되기 위해서는 많은 특수 훈련이 필요하다. 특수 훈련에는 여러 가지 종류가 있다. 그중에 스캐폴딩(scaffolding)이라는 방법이 있다. 우리말로는 지지대인데, 두발 자전거 뒷바퀴 양옆에 보조 바퀴를 달고 타다가 나중에 떼어 버리는 것과 유사하다.

수영선수들이 받는 특수 훈련 중에 이런 게 있다고 한다. 선수의 몸에 밧줄을 묶는다. 그리고 풀장 밖에서 트랙터를 이용 선수의 몸을 빠른 속도로 끌어당긴다. 그러면 선수는 평소 자신의 속도보다 훨씬 높은 속도로 물속을 가로지르게 된다. 이 때 그 선수는 빠르게 수영할 때의 느낌을 맛볼 수 있다. 물의 저항, 몸의 느낌 등. 이런 특수 훈련을 하고 나면 더 이상 트랙터로 당기지 않더라도 그 사람의 기량이 향상된다.

기천의 수중에 이런 것도 있다. 정면을 보고 선 자세에서 한 발자국(예컨대 오른발) 크게 내딛는다. 발 뒤꿈치가 닫는 순간 뒤꿈치를 축으로 몸을 반 시계 방향으로 비튼다. 주먹은 이 때 허리에 있다가 정면으로 내어지른다. 주먹이 완전히 나간 상태에서는 몸은 왼쪽을 바라보고 있고 주먹은 원래의 정면 쪽으로 나와 있는 상태이다. 그리고 다리는 기마자세이다.

처음 이 동작을 배우고 계속 연습을 했다. 그런데 범사님이 뭔가 제대로 되고 있지 않다고 말을 했다. 하지만 동작은 수정되지 않았다. 그러다가 다시 한 번 앞발을 내딛으려는 순간 뒤에서 범사님이 내 허리춤을 잡고 몸을 획 돌려버렸다. 마치 애들이 손바닥 사이에 끼고 막대기를 비비면 윗부분의 자그만 북에 실로 연결된 구슬이 북을 쳐서 소리를 내는 장난감처럼. 그러자 내 주먹이 마치 허리춤에서 총알 발사되듯이 앞으로 튕겨 나갔다. 바로 이 느낌이었다. 엄청난 파워. 그러나 힘은 들지 않았다. 이 경험을 한 번 했더니, 한 마디로 말해 ‘감이 왔다’. 당연히 기량에도 발전이 있었다.

왜 이런 훈련이 효과가 있을까? 몸이 기억하기 때문이다. 몸은 그 당시의 느낌을 기억한다. 그래서 그 이후 같은 수련을 해도 그 때의 그 완벽한 느낌에 가깝게 가기 위해 노력하고 몸을 컨트롤한다. 이번에는 그 느낌이랑 좀 비슷했네. 아니야, 이번에는 영 아니었어. 미감이 생기는 것과 비슷하다. 피드백이 더 구체적으로 어떤 방향을 제시해 주게 되는 것이다.

이런 이야기를 ‘테스트 주도 개발 수련’에 적용하면 어떨까? 나는 애자일 언어(파이썬, 루비 등 동적인 성질이 강한 언어)로 TDD를 하는 것이 이런 특수 훈련의 효과를 낼 수 있다고 본다. 그러고 나서 비-애자일 언어로 돌아가는 것이, 차라리 처음부터 비-애자일 언어와 씨름하는 것보다 빠른 기량 향상을 가능하게 할 것이다.

이런 자기보다 한 단계 높은 경험을 하는 특수 훈련도 있는가 하면 발목에 모래주머니를 차고 다니는 한 단계 낮은 경험을 하는 특수 훈련도 가능하다. 프로그래머를 위한 다양한 특수 훈련의 소개는 다음 연재를 기대하시라. 다음 연재에서는 구체적으로 프로그래밍의 고수와 하수의 차이점, 프로그래밍의 고수가 되기 위해 어떤 수련이 필요한지 등에 대해 살펴보겠다.

인터뷰

필자는 자바 개발자 컨퍼런스의 TDD 수련 비결 강의를 준비하면서 나름대로 TDD에서 한 수준에 올랐다고 생각되는 사람들과 인터뷰를 했다. 그들 모두 공통점이 있었는데 의도적 수련을 통해 한 계단 오르는 경험이 있었다는 점이다. 인터뷰에서 박응주씨는 다음과 같이 말했다.

저는 아주 쉬운 문제들을 주로 TDD 했습니다. 제가 2003년에 복학을 했었는데 복학 첫 학기 실험 수업으로 자바를 배우게 됐습니다. 회사 다니면서 2년 넘게 자바를 썼었는데 말이죠. 그냥 실험하고 과제를 하면 저에게는 시간을 버리는 것이나 마찬가지였기 때문에 실험과 과제를 TDD로 만들었습니다. 대부분 아주 쉬운 문제들입니다. 그런데 이런 문제를 풀면서도 제 생각보다 훨씬 빨리 끝냈다든지, 혹은 나온 코드가 너무 예쁘다든지 해서 놀란 적이 있습니다. 그 후로도 알고리즘 수업 등의 과제를 대상으로 계속 TDD를 해서 재미를 느낀 적이 많습니다.

저는 좀 여유를 가지라고 말하고 싶습니다. TDD를 배워야겠다고 생각을 하는 동시에 이걸 빨리 배워서 빨리 효과를 봐야겠다고 생각을 하게 됩니다. 이렇게 되면 재료로 가장 먼저 택하게 되는 것이 자신이 항상 접하게 되는 분야입니다. 저도 그래서 처음부터 제가 업무로 하던 분야인 웹 애플리케이션을 TDD하려고 많이 시도 했습니다. 그런데 처음부터 이런 어려운 것을 대상으로 하다 보니 중간에 그만 두게 되는 경우도 많고, 한 후에도 결과가 만족스럽지 않았습니다. 그래서 재미가 없었습니다.

너무 급하게 효과를 봐야겠다는 생각보다는 좀 여유를 가지시고 아주 만만해 보이는 것부터 하나씩 하나씩 연습을 해서 힘을 조금씩 기르면서 실무에서도 가장 쉬울 것 같은 부분부터 조금씩 적용해보는 것이 도움이 될 것입니다.

‘의도적 수련 2 – 프로그래머에게 적합한 의도적 수련’ 보러 가기

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

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