컨텐츠 바로가기

당신이 제자리 걸음인 이유 : 지루하거나 불안하거나

http://agile.egloos.com/5749946

1965년 이소룡이 샌프란시스코에서 막 쿵푸를 가르치기 시작했을 때였다. 전통 무술을 하던 사람 중 하나가 이소룡이 서양인을 가르친다는 걸 듣고 도전을 하러 찾아왔고, 이소룡의 아내 린다 리가 그 장면을 목격했다.

린다 리: "약 3분 정도 진행되었죠. 브루스가 그 분을 땅에 쓰러뜨리고는 말했어요. '이제 포기하시겠어요? 이제 포기하시겠어요?' 그러자 그 남자가 '포기합니다'라고 했죠. 그러고 그 둘은 샌프란시스코로 돌아갔어요. 하지만 브루스는 무진장 화가 났어요. 3분 되기 전에 그 사람을 쓰러뜨리지 못했다고요. 하하하. 그 때부터였죠. 브루스가 자신의 육체적 건강수준과 자신의 무술 방식에 대해 회의하기 시작한 게."

--How Bruce Lee Changed the World, 디스커버리 채널 방영, 2009 (위 글은 김창준이 직접 전사후 번역, 강조는 김창준)


(사진출처: 위키백과 사전)

실력을 높이기 위해서는 "의도적 수련"이 중요하다는 점은 대중에게 널리 알려져 있습니다. 안타까운 점이 있다면 의도적 수련의 양적인 부분(예컨대 1만 시간 법칙 등)은 많이들 아시지만, 의도적 수련의 질적인 부분, 즉 어떤 조건을 갖춰야 의도적 수련이 되는지, 더 효과적인 의도적 수련이 되기 위해서는 어떠해야 하는지 등에 대해서는 이야기가 별로 없다는 점입니다(달인이 되는 비결에서 동기와 피드백의 중요성에 대해서 언급한 적이 있습니다).

오늘은 의도적 수련이 되기 위한 필수요건 중 하나를 잠깐 이야기 해보려고 합니다. AC2 과정에서 "전문성" 내용을 다룰 때 단골로 등장하는 손님이기도 하죠. 최근 이것 관련해 코칭을 몇 번 해드리기도 했고요.

의도적 수련의 필수조건, 적절한 난이도


의도적 수련이 되려면 나의 실력과 작업의 난이도가 비슷해야 합니다. 이것은 미하이 칙센트미하이의 몰입이론과도 일치하는 부분인데요, 미하이의 단순화된 도식을 보시면 이해가 쉽습니다.



가로축은 해당 작업에 대해 본인이 느끼는 자기 실력을 말합니다. 세로축은 해당 작업에 대해 자신이 느끼는 난이도입니다.

자 그러면 봅시다. A 영역의 일을 하고 있으면 어떤 느낌이 들까요? 실력이 작업 난이도를 초과하는 지역입니다. 몇몇 기업에서는 "아싸!"라는 답변을 해주시더군요. ^^;; 네. 일시적으로 아싸이긴 해도 잠시 후에는 지루함을 느끼게 될 겁니다.

B 영역은 어떨까요? 실력보다 높은 난이도의 일을 하는 영역이죠. 불안감이나 두려움입니다.

여기에서 우리가 주목해야 할 부분은 C 영역입니다. 난이도와 실력이 엇비슷하게 맞는 부분이죠. 미하이는 이 부분에서 인간이 몰입을 경험하며, 최고 수준의 행복감과 최고 수준의 집중력을 보이고, 그 덕분에 퍼포먼스나 학습 능력이 최대치를 보일 수 있다고 합니다.

비슷한 이야기를 언어학자인 크라센(Stephen Krashen)이 입력가설(Input Hypothesis)을 통해 말하고 있습니다. i+1 이론이라고 하는데, 현재 언어학습자의 언어 수준을 i라고 할 때 딱 한 단계 높은 i+1 수준의 입력이 주어질 때에만 유의미한 언어 능력 진전이 있다는 이론이죠.

교육학에서도 비슷한 이야기를 합니다. 인지 부하 이론에서는 학습시 불필요하게 인지적인 부담을 주게 되면 어떤 것도 제대로 학습하기 어렵다는 말을 합니다. 예컨대 Hello World를 찍는 프로그램을 만드는 인문계열 학생의 프로그래밍 입문 수업인데, Java나 C 언어로 수업을 하게 되면 프로그래밍 자체보다 엉뚱한 다른 것들에 두뇌 에너지를 빼앗겨서 학습효율이 떨어질 수 있다는 것이죠. 반대도 있습니다. 영단어 여러개를 외울 때 모음을 감추고 외우게 하면 "더 어려워서" 오히려 기억이 오래갈 수 있다는 연구도 있습니다. 핵심은 역시 적절한 난이도겠죠.

실력이 늘지 않는 이유


전문성 연구에서도 같은 이야기를 합니다. 의도적 수련의 필수요건 중 하나가 "적절한 난이도"입니다. 즉, 위 C 영역의 수련이 의도적 수련이라는 것이죠. 반대로 말하면, A나 B 영역의 일은 해도 의도적 수련이 되지 않고, 실력 향상에 별 도움이 안된다는 말입니다. 이 부분이 아주 중요합니다.

자신이 업무 시간 중에 불안감이나 지루함을 느끼는 때가 하루 중 대부분이라면, 자신은 실력이 도무지 늘지 않는 환경에 있는 겁니다.

더 무서운 부분은 이런 환경에 익숙해지고 자신의 행동이 습관화 된다는 점이죠. 그때는 자기 인식도 잘 되지 않습니다.

관련해 흥미로운 연구가 있습니다. 피겨 스케이팅 선수들에 대한 연구인데요, 지방 대회 출전자와 세계 수준 선수 두 그룹을 서로 비교해 봤습니다. 우선 하루 연습을 끝낸 후 간단한 설문을 통해 여러가지를 물었습니다. 그 중 하나가 오늘 연습 중 트리플 액셀을 몇 번 정도 했다고 기억하는가 하는 질문입니다. 두 그룹의 응답에 큰 차이는 없었습니다. 하지만 그들의 실제 연습을 몰래 녹화해서 국제 심판들에게 분석하게 한 결과는 달랐습니다. 세계 수준 선수는 지방 대회 수준 선수에 비해 몇 배 많은 트리플 액셀을 연습했습니다. 지방 대회 수준 선수는 자신들이 이미 익숙하고 자신있는 "예술적 표현" 등의 연습에 시간을 더 썼습니다. 그리고 트리플 액셀을 많이 연습했다고 착각했습니다. 결과적으로는 더 뛰어난 스케이터가 엉덩방아를 더 자주 찧는 모습을 보이게 된 것이죠. 뛰어난 선수는 자기 기량보다 어려운 기술을 연마하지만 그렇지 못한 선수는 이미 잘하는 걸 더 연습한다는 차이를 잘 보여준 연구입니다.

제자리 걸음에서 벗어나기


그럼 어떻게 해야 하나요? 팀장이 딱 내 실력에 맞는 혹은 약간 그보다 어려운 일들만 주면 좋겠는데, 안 그러면? 현재 내 직무 자체가 단순 반복 작업이라면?

위 도식에 안내선을 몇 개 더 추가해서 다시 한번 보시죠.



보시다시피 총 네 가지의 전략이 있습니다. 이 전략을 사용해서 몰입 밖의 영역에서 몰입 안의 영역으로 이동할 수 있습니다.

본인의 하루가 불안하거나 지루하거나 위주로 전개되고 있다면 이 전략들을 사용해야 합니다. 문제는 해야 하냐 말아야 하냐가 아닙니다. 이런 전략을 써야 하는 것은 이미 현실입니다 -- 그렇지 않으면 실력이 제자리 걸음일 수 밖에 없습니다. 핵심은 어떻게 하냐입니다.

우선 지루함을 느낄 때, 즉 실력에 비해 너무 쉬운 일을 하느라 지루한 경우를 봅시다. 이 때는 a1, a2 두 가지 전략을 쓸 수 있습니다. 혹은 복합적 전략을 써서 대각선으로 이동하는 것도 가능한데, 간단한 설명을 위해 기본적인 경우만 이야기하겠습니다.

a1 실력 낮추기


a1의 경우, 난이도는 그대로 두고 실력을 낮추는 전략입니다. 같은 난이도의 체력훈련을 하는데 팔과 다리에 모래주머니를 달고 운동하는 경우를 생각하면 이해가 쉬울 겁니다. 일시적으로 자기의 몸이 무거워지고 민첩성이 떨어지겠죠.

프로그래머의 예를 들자면, 평상시 즐겨 쓰던 보조 도구를 일부러 안쓰는 겁니다. 마우스를 즐겨 쓴다면 키보드로만 개발을 해보려고 용을 써보거나, 디버거를 늘상 쓰는 사람 경우 디버거를 안쓰게 되면 눈을 하나 감고 진행하는 느낌이 들겁니다. 혹은 컴파일을 30초마다 한 번 씩 하는 사람이라면 5분에 한 번으로 늘려보는 것이죠. 실력이 팍 떨어진 느낌이 들겠죠. 좀 더 집중해야 하고 머리 속에서 좀 더 많은 연산을 해야 합니다. 머리에 땀 나겠지만, 난이도와 실력이 잘 맞아 들어가기만 하면 의도적 수련이 될 수 있습니다. 지루하던 작업이 몰입하는 작업이 되고 실력도 늘 수 있습니다.

a2 난이도 높이기


a2는 실력은 그대로 두고 난이도를 높이는 전략입니다. 문두에 소개한 이소룡의 사례가 a2 전략입니다. 즉, 너무 무술을 잘하기 때문에 어지간한 사람하고는 싸움이 너무 쉽습니다. 그래서 자신만의 제약을 추가한 겁니다. 3분 이내에 이겨야 한다는 거죠. 혹은 일의 양(100미터 뛰던 걸 150미터로 늘린다든지)을 늘리는 것으로 할 수도 있고요.

a2 전략은 많은 뛰어난 프로그래머들이 이미 많이 쓰고 있습니다. a2 전략을 쓰는가 아닌가로 뛰어난 프로그래머를 가려내는 것도 좋은 방법이지요. 이 부분은 상대적으로 좀 더 자세히 써보도록 하죠.

흔하게 쓰는 방법으로는 자기에게 요구되는 수준을 더 높이 잡는 겁니다. 하루만에 개발하라고 주어진 업무인데, 지루한 느낌이 드니 한 시간만에 할 수 있는 방법을 이리저리 고안해 본다거나, 100 rps면 되는 시스템을 1000 rps 기준으로 만든다든가(이 경우 오버엔지니어링의 부작용이 있을 수 있으므로 주의!), 평소 코드 검토에서 시간당 버그 하나 찾았다면 오늘은 두 개 찾기, 익숙한 작업이라 새로운 언어로 만들어 보기 등.

그 밖에도 자주 쓰는 방법은, 공식적으로는 안해도 되는 업무를 자신의 의지로 추가로 하는 경우가 있습니다. 보통은 개인적 개선 업무인데요, 리팩토링을 하거나 자동화 테스트를 달거나, 혹은 자신만의 도구(혹은 방법)를 개발하거나 하는 것들이죠.

예전에 EBS 방송으로 기억하는데, 고속도로 톨 게이트의 직원이 소개되었습니다. 그 아주머니는 다른 분들에 비해 몇 배의 속도로 정산 처리하고 있었는데요, 실제로 카메라로 내부를 비춰보니 이해가 되었습니다. 돈을 한 손으로 받으면서 동시에 다른 손으로는 잔돈을 이미 집어 들고 있고, 받은 동전은 일정한 개수대로, 지폐는 지폐대로 몇 장씩 묶어서 여기저기 일정한 패턴으로 정리를 해나가며 일을 하고 있었습니다. 아주 놀라웠죠. 뭔가 동선에 리듬감 같은 것이 있었습니다. 그 아주머니의 인터뷰 답변이 아주 걸작이었습니다. '오늘은 한 번에 집어서(초밥왕의 밥알 갯수 이야기가 생각나...) 동전 10개 집었네, 이번에는 안됐네. 다음번엔 어떻게 해볼까. 저는 톨 게이트 일이 게임 같고 너무 재미있어요' 뭐 이런 요지였습니다.

톨 게이트 일 같이 항간에 단순반복적이고 지루하고 재미없는 일로 알려진 것도(톨 게이트에서 일하는 분들을 비하하려는 의도가 아닙니다 ^^;;) 이런 개선과 "난이도 향상"이 가능하다면 다른 일은 어떻겠습니까.

이 외에도 a2에서는 자신만의 도구/방법 만들기가 매우 중요합니다. 인지심리학에서 상대의 전문성을 빠른 시간내에 간파하는 기법(미특수부대, 소방관, 병원 응급실 등에서 사용) 중에 "남들보다 일을 좀 더 효율적/효과적으로 하기 위해 내가 직접 만들어 쓰는 나만의 도구/방법"을 묻는 방법이 있습니다. 최근 모 대기업에서 코딩 전문가를 뽑는 면접에서도 이 질문을 했었는데요, 인상적인 분들이 많았습니다. 예컨대, 임베디드 장비에서 데드락 관련한 문제를 해결해야 하는 상황에서 자신이 만든 스크립트를 통해 해당 C 파일들에 자동으로 특정 로그 삽입을 해서, 스레드나 프로세스가 어떻게 동작하는지 쉽게 분석하게 해주는 도구(일종의 Code Instrumentation)를 쓰시는 분이 있었죠 -- 그 분은 그런 도구가 수십개가 넘는다고 했습니다.

이런 도구(크게 보면 이미 내가 아는 단계를 자동으로 진행하게 해주는 실행적 도구와 현 상황 파악을 쉽게 해주는 탐색/분석적 도구 두 가지로 나눌 수 있습니다)를 만들기 위해서는 자주 일어나는 반복적 패턴(Don't Repeat Yourself 적용)을 파악하고 분석해야 하며, 부족한 시간을 짬을 내어 도구를 고안하고 작성해야 합니다. 난이도가 확 올라가는 셈이죠.

b2 실력 높이기


이번에는 불안감을 느끼는 경우로 넘어가 봅니다. 우선 실력을 높여서 몰입 존으로 들어가는 전략입니다.

장기적으로 실력을 높이는 방법은 많습니다(얼마나 효과적인지는 논외로 하고). 책을 보거나 스터디에 참가하거나 교육을 듣거나 등등.

하지만 정작 문제가 되는 순간은 "지금 당장"이겠죠. 지금 당장 불안감을 느끼고 있다면 어떻게 해야 하냐 이거죠. 실력을 어떻게 당장 올리냐 하는 문제입니다.

크게 보면 사회적 접근과 도구적 접근, 내관적 접근 세 가지가 가능합니다.

사회적 접근은, 나보다 뛰어난 전문가의 도움을 얻는 겁니다. 잘 하는 사람한테 가서 짝 프로그래밍 해달라고 부탁하거나 하는 겁니다. IRC(인터넷 채팅)에서 전문가의 도움을 얻는 것도 괜찮은 방법이고요. 혹은 괜찮은 문서가 있다면 그 문서대로 따라가 보는 것도 좋겠죠.

도구적 접근은 다른 도구의 도움을 받는 겁니다. 아까 a1에서 도구 접근을 제약하는 경우의 반대로 볼 수 있죠. 내 능력을 확장시켜 줄 수 있는 도구들을 찾아 쓰는 것인데, 예컨대 괜찮은 디버거, 자동 통합 도구, 코드 분석툴, REPL 환경 등도 되겠고, 오픈 소스 라이브러리를 빌려 쓰는 것도 좋은 방법입니다.

내관적 접근은 기존에 내가 비슷한 일을 했던 경험을 뒤져서 되살려 보는 겁니다. 그 때 내가 어떻게 했더라 기억하면서 비유적으로(analogically) 문제해결을 합니다. 보통 이런 과정을 거치면 자기효용감(self-efficacy)이 증대하면서 내가 인식하는 자기 실력이 향상되기 쉽고, 결과적으로 몰입 존으로 들어가기 좋죠.

b1 난이도 낮추기


b1은 불안감을 느낄 때 난이도를 낮춰서 몰입 존으로 들어가는 전략입니다.

간단하면서 효과적인 방법은, 자신이 맡은 일의 아기 버전(혹은 0.0.1 버전)을 첫번째 목표로 삼는 겁니다. 애자일에서 말하는 WTSTTCPW(What's The Simplest Thing That Could Possibly Work? -- 참고로 여기에서 simplest랑 possibly의 조합이 핵심!)랑 같습니다. 테트리스를 만들어야 하는데 불안감이 엄습해 온다면, 일단 화면 한 가운데에 네모난 사각형 하나 그리기를 목표로 합니다. 그걸 완성하면 이제 난이도를 조금 올려서, 좌우 화살표를 누르면 그 사각형이 움직이게 합니다(물론 화면을 벗어났을 때 처리는 무시).

제가 평소 흠모하는 박모 프로그래머의 경우(그 사람이 작성한 코드를 보고 같은 회사 사람이 감동해서 눈물 흘렸다는 이야기도 있음) 대학 시절 알고리즘 수업을 들었는데, 학점 주는 방식이 매주 알고리즘 코딩 퀴즈를 내서 학생들이 서버에 제출을 하면 자동 채점을 하게 했다고 합니다. 채점은 1) 얼마나 일찍 제출 했는가 2) 얼마나 많은 테스트 케이스를 통과하는가 3) 얼마나 빠른가 세 가지를 합산해서 했다고 하는데, 박모씨는 특이한 전략을 취해서 학기 내내 거의 1등을 놓치지 않았다고 합니다. 기본적으로 과제는 C 언어로 작성해서 내야 했는데, 박모씨는 남들이 C 언어로 하나 작성할 때 자신은 파이썬으로 한 번, 그리고 그걸 C 언어로 한 번 해서 총 두 개의 프로그램을 만들었습니다. 파이썬은 스크립트 언어인지라 로우레벨에 신경쓰지 않고 알고리즘 자체에만 신경을 쓰고 프로그래밍 할 수 있습니다. 그는 이렇게 난이도를 일시적으로 낮추어 몰입을 경험하고, 거기에 이은 학습 효과로 실력이 높아져서 C 언어로 작업할 때에 복리이익을 얻을 수 있었죠.

모 연구에 따르면 A 그룹과 B 그룹을 나누어 A에는 어려운 코딩 문제, 쉬운 문제 순서로 내어주고, B는 쉬운 문제, 어려운 문제 순서로 주었습니다. 결과는 어땠을까요? 작성 시간은 유의미한 차이가 없었으나 결함수에 엄청난 차이가 있었습니다. B 그룹이 A 그룹보다 절반 이하의 결함을 만들었습니다. 난이도를 낮추어서 학습효과(및 동기 강화, 스트레스 감소, 자기 효능감 증가 등)가 생겨서 얻은 이득으로 볼 수 있습니다.

동적인 균형


자 이렇게 네 가지 전략을 모두 설명했습니다. 근데, 좀 쉬운 일을 하면 좋지 미쳤다고 자기 일을 어렵게 만드냐고 반문하는 분이 있으시다면, 자신의 실력을 높일 의향이 있는 건지 생각해 보셔야 합니다.

그런데 주의해야 할 점이 있습니다. 자신의 실력이나 난이도는 계속 조금씩 요동을 치고 있다는 점입니다. 또, 내가 시행한 전략이 지나치게 작용할 수도 있습니다(예컨대 너무 과도하게 난이도를 올려버리거나).

예를 들어, 작업이 너무 어렵게 느껴져서 난이도를 낮췄습니다. 어, 그랬더니 할만해서 좋긴 한데 의외로 지루해 집니다. 그러면 난이도를 다시 높이거나 실력을 낮추거나 해야 합니다. 그러는 중 내 실력이 붙어서 올라가면 난이도를 높이는 걸 해야 하고요. 현재 내 업무속도가 외부적으로 문제가 되지 않는 범위 내에서 적절하게 난이도, 실력 조정을 해나가야 합니다.

그렇다면 우리는 계속 1) 지속적으로 현재 자신의 감정 상태를 검토하면서 내가 지금 지루한지 불안한지를 느끼고 2) 그 경우 네 가지 전략을 적절히 사용하고 다시 1)번 감정 상태 검토로 돌아가는 싸이클을 유지해야 한다는 말이 됩니다.

그런면에서 자기가 지금 어떤 상태인지 "알아차림"(mindfulness)이 꼭 필요합니다. 이에 대해서는 다음 기회에 좀 더 이야기 해보도록 하고요. (참고로 TDD를 잘하려면 이런 동적인 균형 맞추기를 잘해야 합니다 -- 잘만 하면 지속적으로 몰입을 경험하고 실력이 일신우일신할 수 있죠)

팀장이 할 수 있는 일


기본적으로 이 내용은 전문가가 되길 원하는 사람이라면 누구나 개인적으로 적용할 수 있는 것입니다만, 다른 사람을 관리하는 사람 입장에서 의미가 있기도 합니다.

내 팀원들이 1) 현재 어떤 상태를 주로 경험하고 있는지 파악하고 2) 적절한 전략을 구사하게 도와줄 수 있습니다. 물론 이상적으로는 그 사람의 실력에 맞는 난이도의 일을 나눠주는 걸 할 수 있겠지만 현실은 그렇게 딱딱 맞아 떨어지지 않으니까요. 게다가, 개개인들이 자신 스스로 몰입 상태를 조정할 수 있는 능력을 키우게 도와주는 것이 더 바람직한 상황 아닐까 싶습니다.

하지만 안타깝게도 정반대의 행동을 하는 팀장들을 더 흔하게 봤습니다. 몰입 영역 밖으로 팀원들을 몰아내는 행동이죠. 예를 들어 실력보다 낮은 난이도의 일을 해서 지루함을 느끼는 직원에게 실력을 더 높이게 스터디를 시키거나 컨퍼런스에 보내거나 하는 것, 혹은 실력보다 높은 난이도의 일을 해서 불안감을 느끼는 직원에게 일 못한다고 핀잔을 줘서 인지하는 실력(자기효능감)을 더 떨어뜨리거나, 진행 안되는 일들의 문제를 분석해서 보고서를 제출하라는 추가 업무를 줘서 난이도를 더 높이거나 하는 것 등이죠.

이런 상황을 고려한다면, 팀장들에게는 팀원의 상태를 파악하고 그들이 몰입으로 가게 도와주는 것 자체가 고도의 의도적 수련이 될 수도 있겠습니다.

이소룡의 자기 혁신


다시 처음 이야기로 돌아가 보죠. 이소룡은 이 때의 "이긴, 그러나 진" 싸움으로 자신의 훈련 방법 전반을 재검토하게 됩니다. 그러면서 웨이트 트레이닝에 관심을 갖게 되었죠. 운동생리학을 공부하고, 각종 웨이트 트레이닝 도구를 직접 고안해 사용하고, 자신이 먹는 고단백질 음료까지도 직접 고안했습니다. 이런 자기 혁신을 통해 실제로 웨이트 트레이닝계에 많은 영향을 끼치게 되었죠.

이소룡이 그 사람을 쓰려뜨렸다는 사실만으로 만족했더라면 어땠을까요? 아마 아주 지루해 했을 것이고, 세계 최고라는 이야기는 듣지 못했을 겁니다.

여러분은 어떤 하루를 살고 계신가요?

--김창준

p.s. 일반적인 예시(등산, 코칭)를 추가했습니다.

트랙백

덧글|덧글 쓰기|신고