🌈 Chapter 1: 자라기
자라기는 학습을 말한다.
여기서 말하는 학습은 학교 학습과 반대되는 개념으로 야생 학습을 말한다. 야생 학습의 특징은 아래와 같다.
- 야생 학습은 대부분 협력적이다(학교 학습은 대부분 개별적이다).
- 야생 학습은 대부분 비순차적이다(학교 학습은 대부분 공부 순서가 정해져 있다).
- 야생 학습은 대부분 자료에 한정이 없다(햑교 학습은 대부분 교과서, 교재, 시험 범위 등에 정해져 있다).
- 야생 학습은 대부분 명확한 평가가 없다(햑교 학습은 대부분 시험이라는 명확한 평가기준이 있다).
- 야생 학습은 대부분 정답이 없다(햑교 학습은 무엇이 정답이라고 하는 것이 명확하다).
- 야생 학습은 대부분 목표가 불분명하고 바뀌기도 한다(학교 학습은 대부분 합격, 자격증 같은 목표가 분명하다).
📚 당신은 몇 년 차?
🎈 직원을 뽑을 때 무엇이 그 사람의 실력을 가장 잘 예측할까?
경력 연차와 직무 성과는 0.18의 상관성을 가지고, 학력과의 상관성은 0.10을 가진다. 상관성이 0.20 이하면 사회과학에서도 꽤나 약한 상관성을 갖는다.
작업 샘플 테스트(실제로 채용 후 해야 할 작업의 일부를 해보는 테스트)가 0.54, 아이큐 같은 지능 테스트가 0.51, 구조화된 인터뷰가 0.51이었다. 성실성이나 꼼꼼함 같은 성격 테스트도 0.41이나 0.31 정도의 상관성이 있었다. 레퍼런스 체크(예전 직장의 상사 등에게 확인)도 0.26으로 앞서의 연차 들의 상관성보다 높았다.
경력이 얼마 되지 않았을 때 몇 년간은 연차의 상관성이 꽤 높은 편이다. 하지만 연차가 조금이라도 높아지면 그 상관성은 곤두박질친다. 예를 들어, 대학교를 갓 졸업한 사람과 2년 차 프로그래머 중에서 후자의 실력이 높을 확률이 크다. 하지만 5년 차와 10년 차의 연차 차이는 실력을 판단하는 데 있어 큰 의미가 없다.
🎈 소프트웨어 개발에서 경력과 실력
경험이 많은 사람을 전문가로 본 연구에서는 그들이 문제를 이해하는 데 더 많은 시간과 노력을 기울이는 것으로 밝혀졌다. 하지만 실력이 뛰어난 사람은 실력이 보통 정도인 사람과 비교해 문제를 이해하는 데 시간을 적게 쓰는 것(통계적으로 유의미할 정도는 아니었으니)으로 나왔다.
이렇듯 최소한도의 경험치만 넘어가면 경력 연수와 실제 직무 성과의 상관성이 생각보다 낮다는 것은 소프트에어 개발뿐만 아니라 다른 여러 영역에서도 동일하게 밝혀졌다. 반면 한 가지 흥미로운 연구에서는 경력이 직무 성과와 관련이 있음을 발견했는데 단, 여기에서 경력이란 경력 연차를 말하는 게 아니다. 개발자의 경험이 얼마나 폭넓고 다양했는지가 실제 직무성과와 관련이 있었다. 경력의 양적인 면이 아니라 질적인 면의 중요성을 발견한 것이다.
🎈 중요하다고 생각하는 것이 중요하지 않다
경력이 성과와 별 상관이 없다는 것을 넘어서서 오히려 경력이 편향을 주는 잘못된 지표가 될 수 있다고 본다. 최소한도의 경력 수준만 넘겼으면 오히려 몇 년 일했는지는 모르는 것이 더 낫다고 생각한다. 경력은 오히려 경계해야 할 대상 중 하나인 셈이다.
그렇다면 대안은 구조화된 인터뷰(행동을 중심으로 인터뷰하는 방법)와, 실제 작업을 해보도록 하는 작업 샘플 테스트, 그리고 가능하다면 실제 업무를 주고 시험적으로 짧은 기간 동안 일을 해보게 하는 것 등을 권한다. 그리고 전체 구인 과정에서 실제로 함께 일할 사람들이 인터뷰에 참여하도록 하는 것을 강력히 권한다.
🎈 잘 뽑는 것 이상으로 중요한 것
하지만 이런 것들만큼, 또는 그 이상으로 중요한 것이 또 있는데, 이미 뽑은 사람은 어떻게 할 것인가 하는 문제다. 많은 조직이 사람을 뽑는 것에는 신경을 쓰지만 이 사람들을 차후 어떻게 교육, 훈련시키고 성장시킬지는 깊이 고민하지 않는다. 조직은 개인이 자신의 전문성을 좀 더 발전시키고 관리할 수 있게 최대한 지원을 해야 한다.
뽑고 나서 잘 교육하고 성장하게 도와주는 것 이상으로 중요한 것이 또 있다. 아무리 훌륭한 사람을 뽑아도 조직의 시스템과 문화에 문제가 있으면 그런 사람은 묻혀버리기 쉽고, 반대로 실력이 평범한 사람일지라도 좋은 시스템 속에서 뛰어난 성과를 낼 수도 있다.
🎈 개발자들이 할 수 있는 것
1만 시간 법칙을 만든 주인공, 안데쉬 에릭손은 이에 대해 다음과 같이 딱 잘라 말한다.
55년 동안 걷는 게 점점 더 나아지고 있는 건 아닙니다. (중략) 자신이 즐기는 걸 한다고 해서 더 뛰어나게 될 것이라고 믿는 것은 미신입니다.
그가 말하는 1만 시간 법칙에서 1만 시간은 자신의 기량을 향상시킬 목적으로 반복적으로 하는 수련을 한 시간을 일컫는다. 그런 수련을 그는 의도적 수련(deliberate practice)이라고 한다. 그냥 경험이 아니고 매우 특수한 형태의 수련 방법이다.
정말 기량 향상을 목적으로 자신의 약점을 개선하려고 애쓰는 수련 그것만이 의도적 수련이다. 하지만 업무를 하면서도 의도적 수련을 할 수 있는 방법이 있는데 한마디로 애자일 철학을 활용하는 것이다.
애자일은 학습을 소프트웨어 개발의 가장 큰 병목 중 하나로 본다. 애자일 프로젝트에서는 지금 내가 한 행동의 피드백을 10분 후, 한 시간 후, 하루 후, 일주일 후 등 여러 주기를 통해 지속적으로 얻을 수 있다. 그리고 그때 저지른 실수는 바로 다음 주기에서 교정할 수 있다.
📚 자기계발은 복리로 돌아온다
자기계발이 중요한 이유는 현재 나에게 무엇을 투자했느냐가 1년, 혹은 2년 후의 나를 결정한다고 느끼기 때문이다. 자기가 습득한 지식이나 능력은 복리로 이자가 붙는다.
더 빨리 자라고 싶다면 어떻게 이율을 높일 것인가와 지속적으로 현명한 투자를 하려면 어떻게 할 것인가를 고민해야 한다.
🎈 복리의 비밀
복리 조직이 일하는 구조는 조직이 첫 주기에 만들어낸 결과물을 계단 삼아서 다음 주기에는 조금 더 높은(더 똑똑한) 위치에서 다음 결과물을 만들어낸다. 내가 만든 결과물을 나의 일부로 만들어서 다음 단계에 보탬이 되도록 이용해먹는 것이다. 결과물이 다음 단계의 도구가 된다.
이런 기술을 부트스트래핑이라고 한다. 자기가 신은 신발에 달린 끈을 들어 올려 자신의 몸을 공중에 띄운다는 뜻에서 생긴 단어이다. 외력의 도움 없이 스스로 상황을 개선하는 걸 뜻한다.
이렇게 작업할 때 어떤 효과가 날까? 매일 내가 더 나은 내가 되어 간다. 복리의 효과도 성장하게 된다. 원금에 동일한 이자가 붙는 단리가 더하기라면 복리는 매번 이자가 증가하는 곱하기이다. 이런 증가를 지수적 증가라고 부른다. 지수적 팀은 자기 자신을 곱해나가는 팀이다.
나의 A 작업을 개선하려면 다음 두 가지 질문을 해 봐야 한다. 첫 번째는 어떻게 하면 더하기보다 곱하기를 할 수 있을 것인가이다. 두 번째는 어떻게 해야 곱하기 비율(이자율)을 높일 수 있는가 혹은 이자 적용 주기를 짧게 할 수 있는가이다. 다음은 그에 대한 힌트다.
- 자신이 이미 갖고 있는 것들을 잘 활용하라.
- 새로운 것을 유입시키는 데에만 집중하다 보면 새로 들어온 것들이 이미 있는 것들을 덮어버릴 수 있다. 자신이 올해 몇 권을 읽었다고 자랑하지 말고, 내가 그 지식을 얼마나 어떻게 활용하는지 반성하라.
- 이미 갖고 있는 것들을 하이퍼링크로 서로 촘촘히 연결하라. 즉, 이미 습득한 지식, 기술, 경험 등을 서로 연결 지어서 시너지 효과가 나게 하고 하나의 영역에서 다른 영역으로 왔다갔다하는 것을 자주 해서 다른 영역 간을 넘나들기가 수월해지도록 하라.
- 새로운 것이 들어오면 이미 갖고 있는 것들과 충돌을 시도하라.
- 현재 내가 하는 일이 차후에 밑거름이 될 수 있도록 하라.
- 외부 물질을 체화하라.
- 계속 내부 순환만 하다가는 일정 수준에 수렴할 위험이 있다. 주기적인 외부 자극을 받으면 좋다. 단, 외부 자극을 받으면 그걸 재빨리 자기화해야 한다.
- 외부 물질 유입 이후 생긴 내부의 갈등을 해결하려는 데에 노력을 기울여야 한다. 무시하고 덮어두지 마라. 내가 가진 것들의 상생적 관계를 끌어내도록 하라.
- 자신을 개선하는 프로세스에 대해 생각해 보라.
- 예컨대 나의 A 작업을 되돌아보는 회고/반성 활동을 주기적으로 하는 프로세스를 만들어라(C 작업)
- 나를 개선하는 과정(B 작업)을 어떻게 하면 개선할 수 있을지 고민하라.
- 피드백을 자주 받아라.
- 사이클 타임을 줄여라. 새로운 정보를 얻었다면 1년 후에 크고 완벽한 실험을 하려고 준비하기보다는 1달, 혹은 1주 후에 작게라도 실험해 보는 것이 좋다. 순환율을 높여라
- 일찍, 그리고 자주 실패하라. 실패해서 학습하라.
- 자신의 능력을 높여주는 도구와 환경을 점진적으로 만들어라.
📚 학습 프레임과 실행 프레임
실행 프레임은 사람들이 현재 주어진 과업이 뭔가 좋은 성과를 내는 걸로 생각하는 틀을 말한다.
학습 프레임은 현재 주어진 과업이 내가 얼마나 배우느냐로 여기게 되는 틀을 말한다.
실행 프레임은 여러분의 목표가 학습을 통한 성장이라면 불리한 선택이다.
"아직 1년도 되지 않아서 많이 물어보고 배우고 있습니다. A 선임, B 책임, ... 그리고 제가 공부하고 싶은 내용을 주제로 팀 내 스터디를 운영하고 있습니다. 같이 공부해 가는 거지요. 제가 출퇴근 시간에 지하철에서 지하철에서 봣던 모 프레임워크와 관련된 문제로 다른 팀원이 어려워하는 걸 우연찮게 알게 되었습니다. 그래서 도와드렸죠. 아직 1년도 안 되어서 시간이 있으니까 적극적으로 다른 부들 일을 도와드리려고 나서고 있습니다. A 선임, B 책임, ..."
📚 가장 학습하기 힘든 직업이 살아남는다
🎈 학습에 유일한 조건, 불리한 조건
알파고 같은 인공지는 시대에 대비하려면 배우기 힘든 것에 집중하라고 말하고 싶다.
피드백이 주어지고 작업이 반복되며 객관적 분석이 가능한 경우에 해당 직업에서 전문성이 잘 드러난다. 학습이 잘 일어나는 조건이다.
우리의 일자리가 인공지능으로 대체되지 않으려면, 학습하기 힘든 환경에서 학습하기 힘든 주제들을 골라야 하는 상황이 된 것이다. 학습하기 힘든 환경과 주제는 다음과 같다.
- 목표가 모호하고 주관적일 수 있으며 동적이다.
- 매 순간 선택할 수 있는 행동/선택의 종류가 불확실하다.
- 매 순간 내가 목표에 얼마나 근접했는지 알기 어렵다.(내가 한 선택의 피드백을 빨리 얻기 어렵다.)
- 주로 열린 시스템(즉, 예상 못 한 외부 요소가 갑자기 들어오는 경우가 흔한) 속에서 일한다.
- 과거의 선택과 결과에 대한 구조화된 기록이 별로 없다.
이런 환경은 소위 암묵지, 직관 같은 것들이 작동하는 회색 영역이다. 자신이 왜 이런 선택을 했는지 쉽게 설명할 수 없는 것들 말이다.
🎈 컴퓨터로 대체되기 힘든 일
컴퓨터화할 수 있는 확률은 직업 평군 임금과 높은 음의 관계를 보였다. 즉, 어떤 직업을 컴퓨터화할 수 있는 확률이 높을수록 해당 임금이 낮았다는 뜻이다.
정리하자면 해당 직업에서 독창성, 사회 민감성, 협상, 설득, 타인을 돕고 돌보기 같은 것들이 요구되는 수준이 높을수록 그 직업은 컴퓨터화하기 힘들다는 말인데, 이런 역량들이 바로 학습하기 쉽지 않은 것들이다.
소프트웨어 개발자는 702개의 직업 중 컴퓨터화될 확률이 낮은 직업 130등(4.2%)으로 컴퓨터화가 어려운 편에 속한다. 그런데 컴퓨터 프로그래머는 293등이고 확률은 48%로 컴퓨터화 확률이 꽤 높은 편이며, 이 연구의 분류상 중위험군에 속한다. 이런 결과의 차이는 컴퓨터 프로그래머는 다른 사람이 준 스펙대로 개발하는 것을 주 업무로 하며 그 과정에서 협상, 설득이 크게 필요하지 않다. 반면에 소프트웨어 개발자는 뭘 만들지 고민하고 설계하는 부분이 포함되며, 그 과정에서 타인과 상호작용하는 업무가 많다. 앞서 이야기한 독창성, 협상, 설득 등에서 차이가 나는 것이다.
🎈 무엇에 집중할 것인가
자신이 주로 하는 일이 남이 시킨 대로 혼자 프로그램을 만드는 것이라면 그런 스킬과 경력만 계속 쌓일 것이다. 반면, 컴퓨터화하기 어려운 부분은 크게 성장하지 못한다. 자신의 커리어에 대해 진지하게 다시 생각해 봐야 할 것이다.
현재 자신의 업무 상황 속에서 창의적으로, 그리고 사회적으로 일하지 않는 기간이 계속된다면 결국 자신의 커리어에 막대한 손해가 될 수 있다는 점이다. 혼자서 딱 정해진 일만 할 수 있는 환경이 축복이 아니라 저주가 될 수 있다.
결론적으로, 미래에는 암묵지와 직관을 잘 학습하는 사람들이 높은 경쟁력을 가질 것이다. 하지만, 이런 것들을 배우기가 어렵다. 지금부터라도 암묵지와 직관을 배우고 수렵하는 방법을 배우면 된다. 더 나아가, 알파고랑 경쟁하기보다는 협력하는 방법을 배우는 것을 추가할 수 있다.
- 암묵지: 지식의 한 종류로서, 언어 등의 형식을 갖추어 표현될 수 없는, 경험과 학습에 의해 몸에 쌓인 지식이다. 암묵 지식이 명시적으로 알 수 있는 형태로 형식을 갖추어 표현된 것을 명시적 지식(explicit knowledge) 또는 형식 지식이라고 한다. 학습과 체험을 통해 개인에게 습득돼 있지만 겉으로 드러나지 않는 상태의 지식을 뜻하며, 내재적 지식으로 개인 및 조직의 행태에 대한 관찰 등 간접적인 방법을 통해 획득될 수 있는 지식을 말한다. 예를 들어 자전거를 타는 경우, 사람은 타는 법을 한 번 기억하면 세월을 거쳐도 타는 법을 잊지 않는다. 자전거를 타는 데는 수많은 어려운 기술이 있는데도 불구하고도 그러하다. 그리고 그것을 타인에게 말로 설명하는 것은 곤란하다.
- 직관(直觀, 영어: intuition): 감성적인 지각처럼 추리, 연상, 판단 등의 사유 과정을 거치지 않고, 즉 어떻게 지식이 취득되는가를 이해하지 않고 대상을 직접적으로 파악하는 것을 말한다. 예를 들면, 학교에서 시험을 볼 때 문제를 보는 순간 즉시 정답이나 풀이 방법이 머리속에 떠오르는 것이다.
📚 달인이 되는 비결
자신이 10년 넘게 해온 것 중에 전문성이 실제로 높아진 역량은 무엇이고, 거의 변화가 없는 것은 무엇인가 찾아보아라. 둘을 가르는 차이는 무엇일까?
🎈 동기가 부족하다
첫 번째 이유는 동기에 대한 것이다. 이를 잘 닦는 것에 대해 일정 수준만 되면 더 잘하고자 하는 동기가 딱히 없다.
🎈 피드백을 제때 받지 못한다.
두 번째는 피드백이 없어서이다. 내가 양치질을 어떻게 했는지, 어디가 잘 되었고 어디가 부족한지에 대한 정확한 피드백을 제때에 받지 못한다. 이빨을 한 일 년 닦다가 치과에 가서는 의사에게 한소리 듣는 정도로 느린 피드백을 받는다. 그렇기 때문에 내가 뭘 잘했는지 못했는지 알지 못하고 실력도 늘지 않는다.
정리하자면, 꾸준한 반복으로 달인이 되려면 적어도 실력을 개선하려는 동기가 있어야 하고 구체적인 피드백을 적절한 시기에 받아야 한다. 단순히 반복만 한다고 해서 달인이 될 수 없다.
특정 영역에서 개인이 성취할 수 있는 최고 수준의 퍼포먼스는 경험을 오래한다고 해서 자동으로 얻을 수 있는 것은 아니다.
📚 수십 년 동안 전문가가 안 되는 비결
🎈 전문성 형성에서 타당성과 피드백의 중요성
믿을 수 있는 직관이 형성되려면 특정 조건이 필요하다. 그리고 그 특정 조건으로 두 가지를 드는데 타당성과 피드백이다.
타당성 조건이 필요하다는 의미는 직관이 적용되는 영역에 어느 정도 인과 관계와 규칙성이 존재해야 한다는 거다. 예측가능성이라고 말할 수도 있다.
피드백 조건이 필요하다는 의미는 자신이 내린 직관적 판단에 대해 빨리 피드백을 받고 이를 통해 학습할 기회가 주어지는 환경이 갖춰져야 한다는 걸 말한다.
수십 년 동안 한 가지 일을 하면서 전문가가 안 되는 비결이 있다면 이 타당성과 피드백이 부족한 환경에서 일하는 거다. 저자들은 이렇게 전문성이 발전될 수 있는 직업과 그렇지 못한 직업을 구분한다.
소프트웨어 개발은 중간 정도로 전반적으로 타당성도 낮고 피드백도 낮은 편이다.
🎈 타당성과 피드백을 높이기
전문성을 향상을 위해 할 수 있는 일은 일하는 방식, 개발하는 방식을 바꾸면 이 타당성과 피드백을 어느정도 줄일 수 있다. 그리고 전문성을 현재보다 좀 더 빨리 발전시킬 수 있다고 생각한다.
예컨대, 타당성을 높이려면 변수를 제한하고 실험을 하면서 규칙성과 인과관계를 찾으려는 노력을 하면 된다. 피드백을 높이려면 동료나 상사, 고객에게서, 혹은 내가 개발하는 프로그램에서 직접 피드백을 적극적으로 구하면 된다.
📚 당신이 제자리걸음인 이유
실력을 높이기 위해서는 의도적 수련(Deliberate Practice)이 중요하다. 의도적 수련을 효과적으로 하기 위해서는 동기와 피드백이 필요하다고 앞에서 언급했었다. 의도적 수련이 되기 위한 필수 요건 하나를 더 이야기 해보려 한다.
🎈 의도적 수련의 필수조건, 적절한 난이도
의도적 수련이 되려면 나의 실력과 작업의 난이도가 비슷해야 한다. 실력이 작업 난이도를 초과하면 지루함을 느끼게 될 거다. 실력보다 높은 난이도의 일을 하는 영역은 불안함과 두려움을 느낀다.
이 실력과 난이도가 엇비슷하게 맞으면 이 부분에서 인간이 몰입을 경험한다고 말한다. 이때 최고 수준의 집중력을 보이고, 그 덕분에 퍼포먼스나 학습 능력이 최대치가 될 수 있다고 한다. 뜨한 그때 최고 수준의 행복감을 경험한다는 흥미로운 사실도 발견했다.
🎈 실력이 늘지 않는 이유
의도적 수련의 필수 요건 중 하나가 적절한 난이도이다.
자신의 업무 시간 중에 불안함이나 지루함을 느끼는 때가 대부분이라면, 실력이 도무지 늘지 않는 환경에 있는 거다. 더 무서운 건 점차 이런 환경에 익숙해지고 행동이 습관화된다는 점이다. 그때는 자기 인식도 잘 되지 않는다.
피겨 스케이팅 선수들의 지역 대회 수준의 선수와 세계 대회 수준의 선수 두 그룹을 서로 비교해보았습니다. 그중 하나가 오늘 연습 중 트리플 악셀을 몇 번 정도 했다고 기억하는가 하는 질문입니다.
세계 대회 수준의 선수는 지역 대회 수준의 선수에 비해 몇 배 더 많은 트리플 악셀을 연습했습니다. 지역 대회 수준의 선수는 자신들이 이미 익숙하고 자신 있는 예술적 표현 등의 연습에 시간을 더 썼습니다. 그러고는 트리플 악셀을 많이 연습했다고 착각했습니다.
결과적으로는 더 뛰어난 스케이터가 엉덩방아를 더 자주 찧을 수 있다는 것이죠.
뛰어난 선수는 자기 기량보다 어려운 기술을 연마하지만 그렇지 못한 선수는 이미 잘하는 걸 더 연습한다는 두 그룹의 차이를 잘 보여준 연구이다.
🎈 제자리걸음에서 벗어나기
본인의 하루가 불안하거나 지루한 때가 대부분이라면 이 전략들을 사용해야 한다. 문제는 해야 하냐 말아야 하냐가 아니다. 이런 전략을 써야 한다. 그렇지 않으면 실력이 제자리걸음일 수밖에 없다.
지루함을 느낄 때, 즉 실력에 비해 너무 쉬운 일을 하는 경우는 a1, a2 두 가지 전략을 쓸 수 있다.
🎈 지루함을 느끼는 경우: a1 실력 낮추기
a1의 경우, 작업의 난이도는 그대로 두고 실력을 낮추는 전략이다. 프로그래머의 예로 들자면, 평상시 즐겨 쓰던 보조 도구를 일부러 안 쓰는 것이다. 디버거를 늘 쓰는 경우 디버거를 안 쓰는 것이다.
이렇게 난이도와 실력이 잘 맞아 들어가기만 하면 의도적 수련이 될 수 있다.
🎈 지루함을 느끼는 경우: a2 난이도 높이기
a2는 실력은 그대로 두고 난이도를 높이는 전략이다. 흔하게 쓰는 방법은 자기에게 요구되는 수준을 더 높게 여기는 것이다. 하루 만에 개발하라고 주어진 업무인데 지루한 느낌이 드니 한 시간 만에 할 수 있는 방법을 고안해 보기, 평소 코드를 검토할 때 버그를 시간당 하나 찾았다면 오늘은 두 개 찾기, 익숙한 작업을 새로운 언어로 진행해 보기 등.
보통 자신의 업무를 개선하는 일로 리팩터링을 하거나 자동화 테스트를 달거나, 혹은 자신만의 도구를 개발하거나 하는 것들도 있다.
근데, 쉬운 일을 하면 좋지 왜 자기 일을 어렵게 만드냐고 반문하는 분이 있다면, 자신의 실력을 높일 의향이 있는 건지 생각해 보라고 묻고 싶다.
🎈 불안함을 느끼는 경우: b2 실력 높이기
실력을 높여 몰입 영역으로 들어가는 방법이다. 장기적으로 실력을 높이는 방법은 책을 보거나 스터디에 참가하거나 교육을 듣거나 등등. 하지만 지금 당장 불안함을 느끼고 있다면 어떻게 해야 하는가가 문제이다. 크게 보면 사회적 접근과 도구적 접근, 내관적 접근 세 가지가 가능하다.
사회적 접근은, 나보다 뛰어난 전문가의 도움을 얻는 것이다. 잘하는 사람한테 가서 짝 프로그래밍을 해달라고 부탁하거나 IRC(인터넷 체팅)에서 전문가의 도움을 얻는 것도 괜찮은 방법이다.
도구적 접근은 다른 도구의 도움을 받는 것이다. a1의 도구 접근 제약의 반대로 내 능력을 확장시켜 줄 수 있는 도구들을 찾아 쓰면 된다.
내관적 접근은 비슷한 일을 했던 경험을 머릿속에서 되살려 보는 것이다. 그때 그 일을 어떻게 했는지 떠올려 보면서 비유적으로 문제를 해결한다. 보통 이런 과정을 거치면 자기효용감이 증대하면서 스스로 인식하는 자기 실력이 향상되기 쉽고, 결과적으로 몰입 영역으로 들어가기 좋다.
🎈 불안함을 느끼는 경우: b1 난이도 낮추기
b1은 불안함을 느낄 때 난이도를 낮춰서 몰입 영역으로 들어가는 전략이다.
간단하면서 효과적인 방법은 자신이 맡은 일의 가장 간단하면서 핵심적인 결과물, 즉 아기 버전(혹은 0.0.1 버전)을 첫 번째 목표로 삼는 것이다. 애자일에서 말하는 WTSTTCPW(What's The Simplest Thing That Could Possibly Work?, 동작할 수도 있는 가장 간단한 건 뭘까?)와 같다.
🎈 동적인 균형
유념해야 할 점이 있다. 자신의 실력이나 작업의 난이도가 계속 조금씩 요동을 치고 있다는 점이다. 조금 전에 애매해서 잘 안 되던 이해가 되니까 진도가 쑥쑥 나간다거나, 코딩을 시작할 때에는 쉬운 일로 생각했는데 버그가 나서 난이도가 확 올라간다거나 하는 일 등이 있다.
현재 자신의 업무 처리 속도가 외부적으로 문제가 되지 않는 범위 내에서 적절하게 난이도와 실력을 조정해나가야 한다. 이 말은 곧, 지속적으로 자신의 감정 상태를 살피면서 지금 지루한지 불안한지를 알아채고 만약 지루함이나 불안함을 느낀다면 앞의 네 가지 전략을 적절히 사용해야 한다. 그런 면에서 자기가 지금 어떤 상태인지 살피는 알아차림이 꼭 필요하다.
예컨대, 테스트 주도 개발(TDD)을 잘하려면 앞에서 말한 동적인 균형 맞추기를 잘해야 한다. 이걸 잘하면 지속적으로 몰입을 경험할 수 있고 실력이 일신우일신할 수 있다.
일신우일신: 나날이 새롭게 한다는 뜻으로 계속적인 자기 혁신과 계발의 의미로 쓰인다.
🎈 팀장이 할 수 있는 일
팀원들이 현재 어떤 상태를 주로 경험하고 있는지 파악하고 적절한 전략을 구사하게 도와줄 수 있다.
📚 프로그래밍 언어 배우기의 달인
🎈 튜토리얼을 읽을 때 뭘 만들지 생각하고 읽는다
읽을 때 다음 작성할 프로그램을 염두에 둔다. 그래서 튜토리얼을 읽다가도 이 정도면 그 프로그램을 작성할 수 있겠다는 생각이 들면 그 자리에서 읽기를 멈추고 코딩을 시작한다. 이때에는 다음 프로그램을 목표로 두면서 말이다.
이런 것을 적극적 읽기라고 한다. 무언가를 읽을 때 구체적인 질문이나 목적을 가지고 있는 방법을 말한다.
예를 들어 "이 언어에서 루프는 어떻게 짜야 하지?", "글자 하나를 읽으려면 어떻게 하지?", "출력은 어떻게 하지?" 같은 질문들을 갖고 적극적으로 읽게 된다.
🎈 공부할 때 표준 라이브러리 소스코드를 읽는다
표준 라이브러리는 보통 해당 언어 발명자가 직접 작성하거나 적어도 해당 언어의 스타일을 따르는 소수의 사람들이 작성한다. 가장 그 언어다운 코드들의 말뭉치(연구를 위해 특정 언어의 실제 사용례를 모아 둔 것)이다. 이런 실제 사례들을 통해 해당 언어의 문화와 스타일을 익히는 것이 중요하다.
어떤 언어의 키워드를 썼느냐가 아니라 어떤 스타일을 따르고 어떤 숙어를 사용했는가이다. 이것이 프로그램 기능의 차이를 가져오지는 않을지 몰라도, 프로그램 작성 비용과 더 나아가 수정(유지보수) 비용을 좌우하게 된다. 그래서 해당 언어의 결을 배우고 그걸 따르는 것이 중요하다.
🎈 공부 중 다른 사람의 코드에 내가 필요한 기능을 추가한다
필요한 기능을 추가할 때 그 당신에 자신이 만들 수 있는 작고 간단한 추가 기능을 생각해 본다. 유용하면서도 작고 간단한 걸 생각해 내는 것이 앞서의 몰입을 위한 난이도 조절이라고 볼 수도 있다.
이런 방식을 통해 자신이 튜토리얼을 읽으며 이해한 내용을, 실제로 살아 있는 코드를 수정하고 돌려보고 하는 등 실험하면서 피드백을 받을 수 있었다. 더 나아가, 해당 오픈소스 커뮤니티와 교류를 통한 피드백 받기도 가능했다.
🎈 전문성을 효과적으로 뽑아내는 전문가가 되기
전문가들의 전문성을 뽑아내고 적용하는 것이 자신의 전문성을 빨리 높일 수 있는 방법이다.
그러면 여기에서 궁금한 점은 도대체 어떻게 해야 이런 비결들을 효과적으로 뽑아내냐는 것이다. 한 가지 분명한 건 "프로그래밍 언어를 빨리 배우는 비결은 무엇인가요?"라는 질문은 그다지 유용하지 않다. 한 가지 비결은 전문가가 구체적인 사건에 대해 말하도록 유도하는 것이다. (Cognitive Interviewing) 전문가에게 굉장히 구체적인 기억들을 상기하도록 한다.
뭔가 잘하고 싶다면 이미 잘하는 사람을 관찰하고 인터뷰하는 것부터 시작하는 것이 큰 도움이 된다. 전문가가 빨리 되기 위해서는 전문가에게서 전문성을 효과적으로 뽑아내기에 대해 전문가가 되어야 한다. 그 첫걸음은 전문가를 (직간접으로) 만나는 것이고, 그 다음은 구체적 사례를 듣는 것이다.
📚 실수는 예방하는 것이 아니라 관리하는 것이다.
🎈 두 가지의 실수 문화
마이클 프레제는 회사에서의 실수 문화에 대해 연구를 했다. 그에 따르면 실수 문화에는 크게 두 가지가 있다. 실수 예방과 실수 관리.
실수 예방은 행동에서 실수로 가는 경로를 차단하려고한다. 즉, 실수를 저지르지 말라고 요구한다. 근데, 이 것이 불가능에 가깝다. 전문가도 1시간에 평균 3~5개의 실수를 저지른다고 한다. 그런데, 왜 우리 세상은 그렇게 엉망이 아닌걸까? 그것은 전문가들이 실수를 조기에 발견하고 빠른 조치를 취할 수 있기 때문이다. 이렇게 **"실수는 어떻게든 할 수 밖에 없다. 대신 그 실수가 나쁜 결과로 되기 전에 일찍 발견하고 빨리 고치면 된다."**는 거다. 이 태도를 실수 관리라고 한다. 하나의 경로가 더 있는데, 이미 결과가 난 실수에 대해서는 학습을 통해 "다음 행동할 때 이렇게 하자"는 계획을 세우기도 한다(이를 2차적 실수 예방이라고 함).
실수 예방 문화에서는 실수를 한 사람을 비난하고, 처벌하고, 따라서 실수를 감추고 그에 대해 논의하기 꺼리며 문제가 생겼을 때 협력도 덜하게 된다. 실수에서 배우지 못할 것이다. 반대로 실수 관리 문화에서는 실수가 나쁜 결과를 내기 전에 빨리 회복하도록 돕고, 실수를 공개하고, 실수에 대해 서로 이야기하고 거기에서 배우는 분위기가 생긴다.
하나의 연구가 있는데 우선 회사 문화가 실수 예방보다 관리에 가까울수록 그 기업의 혁신 정도가 더 높다. 그리고 실수 관리 문화일수록 회사의 수익성이 더 높았다. 이러한 이유는 실수가 없으면 학습하지 못하기 때문이다. 이는 학습이론의 기본이다. 즉, 실수 관리를 하는 문화일수록 학습을 더 잘한다.
교육 중에 실수를 더 유도해야 오히려 학습 전이가 더 잘 일어난다. 다양한 실수를 경험하는 걸 격려하고, 실수 사례를 배우고, 실수 시에 어떻게 대처하는가를 가르치는 교육이 더 효과적이라는 연구 결과가 많다. 그래서 전문가에게 실수 대처법을 배우는 것이 중요하다.
불확실한 상황하에서 실수는 피할 수 없다. 그 상황에서 학습을 잘 하려면 실수를 격려해야 하기도 한다.
📚 뛰어난 선생에 대한 미신
기업에서의 교육, 훈련 효과에 대한 메타분석 연구에 따르면 대부분의 훈련은 6개월 정도만 지나도 효과가 거의 사라진다. 효과가 별로 없는 이유는 여러 복합적인 이유가 있는데, 크게 보면 학습자, 교사, 교육 방식과 내용, 조직 환경 등의 이유가 있을 수 있다. 이 글에서는 교사의 요소만 본다.
기업에서 강사를 뽑을 때 얼마나 많이 아나를 주로 고려하는데 메타분석에 따르면 교사의 주제에 대한 전문지식이 학생 학업성취도에 미치는 영향은 발달효과보다도 낮다.
지식이 많은 사람을 뛰어난 선생으로 보는 시각은 앞에서 말한, 교육의 효과를 결과가 아니라 투입으로 측정하는 것과 비슷한 오류가 있다고 생각한다. 궁극적으로는 학생이 더 잘하게 도와주는 것이 목표이다. 이 더 잘하게 한다는 면에서 실험 연구를 해봤더니 선생이 가진 지식은 학생의 성과를 높여주는 면에 있어 큰 영향을 주지 못했다.
이 말은, "지식이 많은 사람이라고 해서 꼭 좋은 선생이라고 할 수 없다", 혹은 "지식이 많은 사람에게 배웠다고 해서 내 실력이 꼭 느는 것은 아니다"는 이야기가 된다.
🎈 전문가가 가르쳐주는 것은 전부가 아니다
의료계의 연구를 보면, 전문가가 특정 수술법을 학생에게 가르칠 때, 의료적 지식, 무엇을 어떻게 해야 할지에 대한 행동 단계, 의사결정 단계 등 자신이 해당 과제를 수행할 때 사용하는 지식 70%는 가르치지 않는다는 분석이 거듭해 나왔다. 그 기술을 성공적으로 해내기 위해 필요한 것의 30%만 가르쳐 놓고 자신은 다 가르쳤다고 생각하는 것이다.
이런 현상이 벌어지는 이유에는 여러 가지가 있지만 대표적인 것이 자동화이다. 전문가가 되면 자신이 하는 일이 반복적으로 몸에 익고 자동화되어서 결국 암묵적이 되어 버린다. 그래서 오히려 인식이 없어지는 것이다.
🎈 인지적 작업 분석으로 극복하기
이걸 극복하는 방법은 앞에서 프로그래밍 언어 배우기의 달인의 인지적 작업 분석 같은 방법을 선생과 학생이 쓰는 것이다.
예를 들어, 선생 입장에서는 자신에 대한 메타인지를 높이는 노력을 할 수 있다. "내가 이 문제를 해결할 때 어떤 과정을 거치는가"를 생각하며 자신의 머릿속을 관찰하고, 질문을 던지고 분석하는 것이다. 그리고 학생들이 이걸 배우면서 어떤 생각을 하는가를 직접 관찰하고 질문을 던지고 분석할 수 있는 것이다. 이런 분석 능력이 뛰어난 선생이 잘 가르치는 사람이다.
반대로 학생 입장에서는 선택권이 있다면, 자신과 학생에 대한 분석을 잘하는 선생을 고르는 것이 유리한 전략이 된다. 그 선생이 가진 지식의 양만 보지 말고 말이다. 이런 부분을 생각하면서 다른 사람을 가르치거나 혹은 배우는 자리를 마련해보라.
📚 나홀로 전문가에 대한 미신
이번에는 왜 배워도 못하는가의 두 번째 이야기로, 전문가의 사회성이라는 측면을 이야기해 보려고 한다.
테스트 주도 개발(Test-Driven Development, TDD)이라는 프로그래밍 기법의 전문가를 예로 든다. 일반적은 TDD교육을 통해 사람들이 기대하는 과정은 보통 이럴 것이다.
- TDD를 제대로 이해하고 조직에 돌아간다.
- 나 스스로 TDD를 제대로 실천해서 객관적 성과를 낸다.
- TDD가 좋다고 사람들을 설득한다.
- TDD를 가르쳐 준다.
- 모두가 TDD를 열심히 한다.
- 좋은 성과를 낸다.
여기에서 보통 문제가 되는 부분은 3, 4, 5, 6번이다. 그리고 1과 2를 잘한다고 해서 3번 이후가 꼭 쉬워지는 것이 아니다. 하지만 교욱에서는 통상 1번에만 집중을 한다. 이럴 경우, 실무로 돌아갔을 때 흔히 접하는 문제는 예컨대 다음과 같다.
- 회사로 돌아가서 실무에 적용하려고 하는데 상사나 동료의 지원 없이 추가적으로 일을 하려니, 시간이 모자라 계속 미루게 되어 결국 적용하지 못한다.
- 팀원, 팀장들에게 전파 교육을 하려 하지만 팀원, 팀장들 가운데 몇몇은 추가 업무를 왜 하는지 필요성도 못 느끼는 상태에서 강제로 해야 한다는 스트레스를 받아서 부작용이 생긴다(그래서 결과적으로 해당 기법은 실무에 써먹을 수 없다는 평가가 나온다).
- 배운 것을 팀 내에서는 열심히 적용했으니 지원해주는 임원이 없어 확대하는 데 실패하고, 조직 내에서는 한 팀의 별난 문화로 치부되어 실행 범위가 축소된다.
- 배운 대로 팀에서 실천했더니 "다른 부서는 그런 거 없이도 잘하는데 너희는 왜 그런 거 하면서 제때 아웃풋이 안 나오냐"며 이해할 수 없다고 말하는 상사나 협력 팀의 리더와 갈등을 겪는다.
- 기술적으로 어떻게 해야 할지 모르겠는데, 주변에 물어볼 사람이 없어 인터넷 검색하느라 몇 시간씩 보낸다. 하지만 결국 원하는 정보를 찾지 못해서 적용을 포기한다.
- 회사에서는 여력이 없어 배운 것을 집에서 시도해 보려 했더니, 가족들의 여러 요구로 인해 집중할 수 없어 호를 내거나, 가족의 요구대로 하느라 내가 할 일은 시작도 못하거나, 그냥 포기하고 잠을 자게 된다.
이런 문제들은 보통 사회적 측면에 대한 것이다. 뭘 하던지 나 혼자가 아니라 항상 누군가가 등장하고, 일의 성패에 다른 사람이 관련되어 있기 때문이다.
아무리 기술적인 실천법이라고 해도 그 기술은 사회적 맥락 속에서 실천되어야 하며 그 기술의 성공을 위해서는 사회적 자본과 사회적 기술이 함께 필요하다.
하지만 안타깝게도 현실에서는 팀원들이 맘에 안 들고, 그들도 나를 맘에 들어 하지 않는 상황, 즉 사화적 맥락이 나쁜 상황에서 타개책으로 TDD의 기술적 측면에만 매몰되는 경우가 있다. 사실 그런 상황에서는 무엇을 골라도 실패가 보장되어 있다.
다시 한번 반복한다. 어떤 기술적 실천법이라도 그걸 현실에서 적용하기 위해서는 사회적 자본과 기술이 필요하다. 설사 나 혼자 하는 실천법이라도 해도 말이다.
🎈 사회적 자본과 기술
신뢰가 깨어져 있는 상태에서는 어떤 행동을 해도 악의적으로 보인다. 이 신뢰를 사회적 자본의 일종이라고 한다. 소위 말하는 사회 연결망도 사회적 자본의 일종이다. 사회적 자본이 좋은 사람들은 통상 사회적 기술이 뛰어나다. 쉽게 말하면 신뢰 구축을 보다 잘하는 사람이겠다. 반대로 사회적 기술에서 음의 기술(안 하는 것보다 못한 것, 음의 생산성)을 가진 사람도 존재한다. 예컨대, 커뮤니케이션할수록 신뢰가 깨지는 사람을 말한다. 전문가는 사회적 자본과 사회적 기술 또한 뛰어나다.
벨 연구소는 수십 년에 걸쳐 뛰어난 연구자의 특성에 대해 연구했는데, 그 결과 구분짓는 결정적인 요인 중 하나는 사회적 자본, 특히 소셜 네트워크의 차이였다. 뛰어난 연구자는 같은 부탁을 해도 훨씬 더 짧은 시간 안에 타인의 도움을 얻는다.
소프트웨어 공학에서 이뤄진 연구 결과도 비슷한데, 뛰어난 소프트웨어 개발자일수록 타인과 인터랙션에 더 많은 시간을 쓰며, 초보 개발자들에게 조언을 할 때 사회적인 측면이 포함된다. 특히, 초보 개발자에게 해줄 조언 부분에 대해 적어보라고 했는데, 뛰어난 개발자들은 약 70%가 동료와의 협력을 언급하는 반면, 실력이 그저 그런 개발자들은 20%도 안 되는 사람들만이 동료와의 협력을 언급했다.
사회적 기술을 지금 당장 개인이 실천하고 훈련하려면 간단한 방법은 주변 사람들과 매일 주고받는 마이크로 인터랙션(인사 주고받기, 지나가는 대화, 물어보기 등 일상적이고 소소하고 빈번한 상호작용)에 신경을 쓰는 것이다. 그걸 기록하고, 복기하고, 다르게 인터랙션한다고 하면 어떻게 했으면 좋았을까를 생각해 보는 것만으로도 훈련이 될 수 있다.
TDD도입에 실패하는 경우, 무엇이 병목이었나를 살표보면 사람들이 TDD의 기술적 내용을 잘 몰라서보다도 TDD를 도입하는 데에 필요한 사회적 자본과 사회적 기술이 없어서가 훨씬 더 많았다. 그렇기 때문에 어떤 기술적 지식을 전달한다고 해도 그것을 사회적 맥락 속에서 가르치고 경험하게 해야 한다. 사회적 기술에는 도움받기, 피드백 주고받기, 영향력 미치기, 가르치고 배우기, 위임하기 등이 있다.