— book — 14 min read
1책 제목: 실용주의 사고와 학습2저자: 앤디 헌트
이 책을 읽기로 결정한 이유는 개발 공부를 좀 더 효과적으로 하고 싶어서 였다. 어떻게하면 같은 시간을 들이더라도 더 효과적으로 학습할 수 있을까? 이 책이 그 해답을 조금이나마 줄 수 있을 것 같았다. 에자일 코치로 유명하신 김창준님이 감수하셨다는 것도 선택에 큰 영향이 있었다.
늘 맥락을 고려하라!
초보자에서 전문가로 가는 과정을 다섯 단계로 구분해서 설명하는 개념. 드라이퍼스 모델은 구성 이론으로 분류된다.
드라이퍼스 모델은 우리의 능력, 자세, 실력, 관점이 기술 수준에 따라 어떻게 바뀌는지, 또 왜 바뀌는지를 설명해준다. 드라이퍼스 모델은 기술별로 적용가능하다.
규칙은 전문가의 생산성을 갉아먹는다.
초보자는 규칙을 활용하고 전문가는 직관을 활용하라
초보자가 전문가가 되는 과정에서 다음 3가지가 변화한다.
네가 모른다는 것을 알라
대다수의 사람들은 대부분 고급 입문자다. 자기 자신이 모른다는 것을 알아야 한다. 전문성을 얻기까지 10년 가량의 노력이 필요하다. 여기서 사려깊은 연습이 필요하다. 다음 조건들을 기억하자.
특수한 상황에서 벌어지는 다양한 변화에 맞춰서 현장에서 바로 결정을 내리려면 개개인이 책임을 받아들일 수 있어야 한다. 이러한 태도의 변화를 이끌어내려면 고급 입문자를 중급자 수준으로 올려야 한다. 이걸 달성하는 좋은 방법은 같은 근무환경에 모범이 될만한 사람이 있는 것이다.
보고 따라 하면서 배우라!
전문가를 남아 있게 만들어라!
성공적인 소프트웨어를 만들기 위해서는 전문가들이 편안한 환경이 되어야 하고 전문가를 남아 있게 만들어야 한다.
창의성, 직관, 고안력이 필요하다면 정형화된 방법론은 피하라
소프트웨어 개발에서 도구와 모델은 적절한 환경에서 유용할 수 있지만 만병통치약이 되진 못한다.
드라이퍼스 모델의 가장 중요한 교훈은 초보자들에게는 상황에 무관한 규칙이 필요하지만 전문가들은 맥락에 의존적인 직관을 사용한다는 것이다. 맥락에서 떼어놓고 객관적이려고 하는 것은 위험하다.
초보자에게는 빨리 성공을 맛보게 해야 하고 맥락에 무관한 규칙이 필요하다. 필요한 지원을 하되, 불필요한 큰 그림으로 혼란스럽게 하지 마라. 이와 반대로 전문가들은 큰 크림을 볼 필요가 있다. 제한적이고 관료적인 규칙을 강요하면 판단력을 잃을 수 있다.
배우는 기술을 배워라!
전문성으로 가는 길에 오르기 위해서는 다음과 같은 것을 해야 한다.
인간의 뇌는 2개의 CPU 모드를 가지고 있다.
L모드(Linear)는 논리적인 생각, 그리고 언어 처리를 담당한다. 상대적으로 느리고 전체 뇌용량의 작은 부분을 사용한다.
R모드(Rich)는 구글처럼 검색과 패턴 매칭을 담당한다. 무엇인가를 생각할 때 그 결과를 비동기로 반환한다.
R모드는 직관, 문제 해결, 창조성에 필수적이다. L모드는 세부적인 것들을 통해서 작업하는, 무언가 일을 되게 만드는 힘을 준다.
두 모드는 하나의 메모리를 두고 경합을 벌이기 때문에 둘 다 진행될 수는 없다.
떠오르는 모든 아이디어를 잡아라. 그러면 더 잘 활용하게 될 것이다.
모든 사람은 좋은 아이디어를 갖고 있다. 그 중 소수만이 다음 단계로 간다.
훌륭한 아이디어를 가진 사람 -> 그것을 기록하는 사람 -> 행동하는 사람 -> 실현할 수 있는 사람
R모드의 처리 방식에 많은 장점이 있음에도 우리는 별로 사용하지 않는다. 많은 능력이 낭비되고 있다.
전문가가 되기 위해서는 R모드가 필수적이다. R모드의 유추적이고 전체론적인 사고방식은 소프트웨어 아키텍처와 설계에서 아주 중요하다. 세부적인 것을 보는게 아니라 종합적인 것을 만들어 보는것이 더 많은 학습기회를 제공한다.
분석을 통해서 배우는 것 만큼 종합을 통해서 배우라
인간은 L모드의 사고와 연관된 활동으로 편향되어 있다. R모드가 필요할 때조차 L모드에 지나치게 의존하면서 핵심적인 능력을 상실했다.
동물을 우리에 가둬놓고 있으면 새로운 뉴런이 생성되지 않는다. 즉 사무실에서 개발자를 칙칙한 칸막이에 가둬두면 결코 새로운 뉴런은 발생하지 않는다.
좋은 디자인을 위해 노력하라. 훨씬 더 나은 결과를 얻을 수 있다.
알려진 문제 (코드 속의 버그나 조직의 나쁜 프로세스, 형편없는 인터페이스, 바보같은 관리)가 해결되지 않고 남아 있으면 그 문제가 스스로 생맹력을 가지고 더 많은 문제를 일으키게 된다. 훨씬 더 나은 결과를 얻기 위해 더 아름다운 디자인을 만들어야 한다. 아름다움은 수 많은 선택지 중에서 적절한 것을 선택하는 것에서 나온다. 어떤 맥락에서 무엇을 선택해야 하는지를 아는 것은 '패턴매칭'에서 나온다. 패턴 매칭은 전문가가 보여주는 능력 중에서도 핵심이다. 전체론적인 패턴을 찾을 때는 R모드를 사용하며, 부분을 분석하고 세부사항을 보고 싶을 때는 L모드를 사용한다. R모드와 L모드를 잘 통합시킬 때 최고의 효과를 낼 수 있다.
뇌를 문제 해결과 창의적인 일에 더 많이 쓰게 만드는 방법은 평소보다 더 많은 신경 회로를 활성화하는 것이다. 즉, 평소와 다른 감각을 사용한다는 뜻이다. 예를 들면 객체지향 설계를 레고를 이용해서 하는 것이 있겠다.
뇌를 더 많이 활용하고 싶다면 감각적인 경험을 늘려라
공감각적 피드백을 활용하는 것도 필요하다. 설계할 때 다음과 같은 것을 해보는 것도 좋다.
역할극은 부가적인 감각을 연관시키고 다양한 형태로 상호작용하게 만든다. 입력이 하나 더 늘어나면 뇌에서 더 많은 영역을 활성화할 수 있다. 그러면 그만큼 처리 능력이 올라간다.
뇌는 끊임없이 변하는 환경에 지속적으로 적응하도록 만들어져있다. 그러니 환경을 주기적으로 바꾸고 뇌에 자양분을 주어야 한다.
R모드로 시작해서 L모드의 흐름을 타라. 처음에는 공감각적이고 실험적인 상황을 주고 우리가 '머리 전체'를 활용할 수 있게 한다. 그리고 나서 전통적인 사실 위주의 지식을 얻는 것이다.
R모드가 이끌고 L모드가 따라오게 하라
사고의 두 모드 중 어떤 것도 무시할 수 없다. 두 모드가 협력해야 한다. 주 모드는 R모드다. R모드가 원천이기 때문에 R모드에 자유롭고 제약 없는 주도권을 주어야 한다. 아이디어에 제약을 가하려는 것 때문에 창의성이 죽을 수 있는 것처럼 학습도 전체 그림을 모르는 상태에서 자잘한 것을 기억하려고 하면 제대로 되지 않는다. 서두르지 말고 전체를 봐야 한다. 그 다음 L모드로 흘러가는 것이다. 불확실해도 괜찮다. 완벽을 달성하기 위해 세부내용 하나하나를 살펴보는 것은 사람을 옥죄이고 미치게 만든다.
페어프로그래밍이 L모드와 R모드가 조화를 이룰 수 있는 방법 중 하나다. 코드를 타이핑하는 드라이버와 지시를 내리는 네비게이터가 있다. 드라이버는 L모드로 세부 코딩에 집중하고 네비게이터는 R모드로 전체 그림을 본다. 만약 페어프로그래밍을 하지 않는다면 개발하다가 자주 멈추고 키보드에서 떨어져서 볼 필요가 있다.
L모드와 R모드가 만나는 점으로 메타포를 활용하라
L모드와 R모드는 메타포에서 만난다. 유추를 만들어내는 것이다. 메타포를 이용해 어떤 추상적인 개념을 무언가 구체적이고 일상에서 찾을 수 있는 것에 연관시키면 이해하기 쉬워진다. 일관성있는 준거 체계에서 다른 예상치 못한, 양립하기 힘든 준거 체계로 급작스럽게 바뀌는 것은 강항 메타포의 기초가 된다. 이러한 두 가지 다른 틀의 결합을 이중 연관(bisociation) 이라고 한다. 이중 연관이 멀면 멀수록 창조의 크기도 더 거대해진다. 이러한 생각은 포(PO) 테크닉의 기초가 되었다. 포의 테크닉 중 하나는 무작위로 병렬배치하는 것이다. 전혀 무관한 두 단어를 매칭시키는 것 같은 일이다.
익스트림 프로그래밍에는 매력적인 실천방안, 시스템 메타포가 있다. 소프트웨어 시스템을 적절한 메타포로 연관 짓는 것이다. 메타포적인 준거 체계를 활용하면 그 자신을 시스템에 각인시킬 수 있다. 잘 이해하고 있지만 암묵적인 실세계의 속성을 그대로 소프트웨어에 전달할 수 있다. 명확한 메타포는 배우기도 쉽고 논리적으로 생각하고 코드를 확장하기도 쉽다.
현재의 맥락에서 생성력이 있는 좋은 메타포를 떠올리는 것은 어렵다. 메타포를 설계에 활용해 보고 그게 도움이 되는지 관찰해 본다. 결과물이 어느정도 불확실성이 있어도 받아 들이고 관찰하기만 한다. 이 때 도움이 되는 것은 유머이다. 서로 연관되지 않은 것을 연관시키거나 아이디어의 한계점을 넘어 확장하는 것 등이 필요하다.
강력한 메타포를 만들려면 유머 감각을 키워라
메타포를 많이 만들어보는 연습이 필요하다. 유머집이나 유의어 사전을 보는 것도 좋다.
많은 아이디어가 비언어적이다. R모드는 그 아이디어를 시각적인 형태로 울타리를 넘게 만들어야 한다. R모드의 인지를 활용하는 두 가지 다른 방법은 다음과 같다.
Free-form journaling 기법 중 효과적인 방법으로 모닝 페이지 기법 이 있다.
자다 일어난 상태는 아직 무의식이 중요한 역할을 하는 순간이다. R모드가 활약하기 좋을 때다. 또는 익숙하게 반복되는 순간도 R모드가 활약하기 좋다. 샤워를 하거나 설거지를 할 때 등등 많을 것이다. 중요한 것은 R모드는 절대 의도적으로 만들 수 없다는 것이다. L모드는 집중하면 작동할 수 있지만 R모드는 단지 초청만 할 수 있을 뿐이다.
어려운 문제를 풀려면 키보드에서 떨어지세요
문제를 푸는 시각을 바꾸어 보라
인간의 마음에서 다음과 같은 부분에서 버그가 발생한다.
이러한 버그를 인식하는 것이 버그를 완화하는 첫걸음이다.
이 정신적인 버그는 의사결정이나 기억, 지각, 이성 등에 영향을 미친다.
뇌는 복잡한 시스템을 단순하고 쉽게 조작할 수 있는 표상으로 축소하려 한다. 이럴 경우 표상적 축소 오류에 빠지기 쉽다.
'드물다' 는 ' 결코 일어나지 않는다' 와 다르다.
예외를 살펴보라: '드물다'는 것이 '결코 일어나지 않는다'를 의미하지는 않는다.
불완전한 상태에서 급하게 불확실성을 제거하려 하지 마라. 결정을 내려버리면 선택사항이 줄어든다. 중요한 문제가 오랫동안 결정되지 않으면 불편해진다. 이러한 압박을 이겨내야 한다. 자연스럽게 결정에 이르면 문제가 해결될 것이다. 잘 모른다는 사실에 익숙해져야 한다.
불확실성을 편하게 생각하라
기억을 신뢰하지 말라. 자신의 오해나 편견을 유효한 것이라고 믿게 한다.
기억보다 글로 쓴 것을 신뢰하라. 모든 기억은 읽기와 쓰기가 함께 일어난다.
자신을 또래집단과 환경이라는 맥락 속에서 봐야 한다. 사람들의 태도는 다음과 같은 축으로 나눌 수 있다.
4가지 세대적 전형이 존재한다.
이 4가지 유형은 계속해서 순서대로 바뀐다. 특정 유형이 옳은 것은 없다. 맥락에 따라 적합한 유형이 존재한다.
과격한 주장을 억제하고 다양성을 열어두라
기초적인 성격 유형을 분류하는 MBTI는 사람들의 성향을 네 가지 축의 선상 어딘가에 놓습니다.
사람마다 다른 버그를 갖고 있다는 것을 인지하라
진화한 생명체답게 행동하라. 숨을 쉬되, 뱀처럼 쇳소리는 내지 말라
너무 즉각적으로 반응하지 말고 고수준의 인지 사고 처리가 진행될 수 있도록 시간을 두어라
직관은 강력하지만 크게 틀릴 수도 있다. 직관이 전문가의 경험일 수 도 있지만 선입견이나 편견일 수 도 있다. 그렇게 때문에 반드시 검증이 필요하다.
직관을 신뢰하되 검증하라
검증은 프로토타입을 만들어 단위 테스트를 돌려보거나 벤치마크 그래프를 그려볼 수도 있다. 자기 자신에게도 단위 테스트가 필요하다. 다음과 같은 질문을 해볼 수 있다.
무언가를 정의했다면 그 반대도 정의해 보라. 이를 통해서 정의한 것에 대해 더 깊이 파고 들어서 더 비판적이고 사려 깊게 살펴볼 수 있다.
마지막으로 모든 결정에 대가가 따른다. 동전에는 언제나 양면이 있기 때문에 어떤 대가를 치러야 하는지 자세히, 긍정적인 측면과 부정적인 측면을 모두 세심히 살펴야 한다. 그러면 상황을 좀 더 완전하게 평가할 수 있게 된다.
기술 자체보다는 지속적으로 배우는 것이 중요하다. 교육은 누군가에게 이끌어내짐을 당하는 것이다. 교육으로는 학습이 되지 않는다. 이유는 다음과 같다.
목적을 달성하기 위해 SMART 목표를 만들어라
SMART 한 목표는 목적을 달성할 수 있도록 해준다. 목표를 개인적으로, 긍정적으로 구체화하면 도움이 된다. 그리고 현재 시제로 하거나 명확한 시간을 넣어서 말하는 것도 좋다. 또한, 국지적인 관점에서 목표를 바라보는 것과 함께 자신의 일과 삶이라는 넓은 맥락에서 목표가 어떤 영향을 줄지를 고려해 보는 것도 필요하다.
시간은 '남는' 시간이 없다. '~할 시간 내기' 같은 표현은 잘못된 표현이다. 시간은 만들 수도 없앨 수도 없다. 오로지 할당할 수 있을 뿐이다. 학습을 의도적으로 해내려면 적당한 시간을 할당해야 한다. 그리고 그 시간을 현명하게 써야 효율적으로 학습할 수 있다.
실용주의 투자 계획
의도적인 학습을 위한 투자를 계획하라
학습자의 유형
자신에게 맞는 최고의 학습 방법을 찾아라
스터디 그룹은 아주 유용한 학습 방법이다. 형식을 갖춘다면 의도적인 단계를 밟을 수 있다.
서로 배우고 가르치기 위한 스터디 그룹을 만들어라
SQ3R 기법
테스트 주도 학습
의도적으로 읽으라
단순히 메모만 하는 것은 부족하다. 다양한 색과 표현력으로 마인드맵을 그린다. 다른 질감의 종이, 다른 타입의 펜들을 활용하면 보다 R모드를 살릴 수 있다. 계층구조로 그리는 것은 피해야 한다. 공간적인 단서를 강조해라. 이 정보가 어디에 위치해야 하는지를 고민하면서 더 의미있는 활동을 하게 된다.
프로그램을 이용하지 말고 손으로 그려야 한다. 정제되지 않은 메모를 공식적인 메모로 변환하면서 정제하는 과정이 가장 중요한 가치를 가진다.
R모드와 L모드를 모두 사용해서 메모하라
마인드맵은 무엇을 찾아야 할 지 정확히 알지 못할 때 가장 효과적이다. SQ3R을 하면서 메모할 때 마인드맵으로 기록한다면 복습단계에서 다시 마인드맵을 그려본다. 그러면 기억을 새롭게 하는데 훨씬 더 효율적일 것이다.
마인드맵은 불확실한 문제를 해결하는데 도움을 줄 수도 있다. 상징적인 단어들로 핵심 아이디어를 표현하면서 빠르게 그린다. 주제가 뭔지도 모르는 영역에서 작업을 한다면 마인드맵은 광범위한 생각들을 긁어 모으는데 아주 큰 도움이 된다.
자신의 주의를 내부로 돌리면 마인드맵을 할 떄와 마찬가지로 뇌에 번쩍하는 아이디어가 떠오르게 하는 어떤 조건을 갖추게 된다. 그래서 문서화는 문서보다 더 중요하다. 특히 손으로 문서화를 할 경우 R모드의 처리가 강화된다. 또한 나중의 활동을 위한 마음의 준비가 된다.
글을 써라: 문서화는 문서보다 중요하다.
버그를 발견했을 때 동료에게 설명을 해본다. 동료가 짜증낼 수도 있지만 설명하는 중에 버그를 찾을 수도 있을 것이다. 아니면 다른 분야의 사람에게 설명하는 것도 좋다. 그리고 듣는 사람의 관점에서 사물을 보고 학습 자료를 명확하게 표현할 수 있는 메타포를 개발하는 것은 좋은 훈련이 된다. 마지막으로 더 크고 활발한 청중을 대상으로 가르치는 시도를 해보는 것도 좋다.
보라, 하라, 가르쳐라
지속적으로 되새겨보는 것은 학습에 아주 효과적이다.
우리는 단순히 정보를 받아들이기보다 스스로의 정신적인 모델을 형성하도록 설계되어 있다. 문제를 찔러서 탐험하고 '익숙해질' 수 있어야 한다. 재미도 매우 중요하다. 새로운 것을 활용하거나 문제를 풀 때 재미있는 방법을 찾으면 더 즐겁게 할 수 있지만 더 배우기 쉽게 만들어주기도 한다. 중요한 것은 학습 프로세스에 자기 스스로를 흠뻑 빠지게 하는 것이다. 언어적으로, 시각적으로, 음악적으로, 수학적으로, 온 몸의 동작으로, 손가락의 작은 움직임으로 하는 것이다.
더 많이 배우려면 더 많이 놀아라
새로운 기술을 배울 때 기존의 지식을 활용하는 것을 경계해야 한다. 물론 이전의 해결책에서 유사성을 찾는 작업은 유용하다고 할 수 있다. 위험한 것은 짬뽕된 접근법에 고착되어 새로운 기술을 완전히 받아들이지 못하는 것이다.
유사성에서 배우고, 차이점에서 배운 것을 버려라
실패는 성공에 필수적인 요소이다. 배우기 위해서는 자유롭게 탐험하는 것이 필요하다. 하지만 탐험은 상대적으로 위험으로부터 자유로워야 한다. 시도하는 것을 두려워 하면 안된다.
자신의 환경에서 탐험하고, 발명하고, 적용하라, 안전하게
어떠한 학습도 이끌어내 내지 못한 실패를 경험 했을 때, 실패를 인지하고 극복하려면 이너게임을 알아야 한다. 이너게임을 이해하면 학습을 방해하는 요소를 제거하고 학습을 도와주는 좋은 피드백을 강화할 수 있다. 우리는 지시가 아니라 발견을 통해서 배운다.
상황적인 피드백은 이너게임의 주요한 기법으로, 방해를 제거하여 더 효율적으로 학습할 수 있게 해준다. L모드를 활용하는 것이 아니라 스스로 인지하는 것이다. 개별 세부사항을 보는데 집중하지 말고 그저 인지하게 두는 것이다. 바로 잘하려고 하기보다 무엇이 잘못됬는지 알아차린 뒤 교정하는 것이다.
판단하지 말고 지켜본 후 행동하라
압박은 인지를 죽인다. 시야는 좁아지고 다른 선택사항을 고려하지 못하게 된다. 더 나쁜 것은 R모드의 활동이 거의 차단된다.
실패를 허락해야 한다. 실패를 허용하는 것이 성공으로 이끈다.
스스로에게 실패를 허락하라. 그것이 성공으로 가는 길이다.
압박이 사라지면 주의력이 더 높아진다. 편안해지고 그저 관찰하게 된다. 실패 허용 지대를 만들어라.
대부분의 인지는 예측에 기초한다. 그리고 예측은 상황과 과거의 경험을 기반으로 한다. 이것이 심할수록 현재의 실시간 입력은 뒷자리로 물러난다.
실력을 끌어올리려면 기술 수준이 높은 사람들에게 둘러싸여 있어라. 우리는 타고난 모방자다.
마음속으로 성공을 그려라
성공의 느낌에 익숙해지는 것은 처음에는 성공한 척이라도 할 가치가 있을 만큼 중요하다. 즉, 그 수준에서 해내는 법을 배웠을 때 경험할 것 같은 조건을 인위적으로 만들어 보는 것이다. 경험한다고 상상하는 것으로도 마치 정말 그걸 해본 것처럼 효과적으로 배울 수 있다. 뇌는 그 차이를 모른다.
원하는 정보에 집중할 수 있어야 하고 쏟아지는 정보를 걸러내고 적시에 정확한 정보를 잡아낼 수 있어야 한다.
시간은 부족한 것이 아니라 할당하지 않는 것이다. 즉, 주의력 이라는 자원이 부족하면 뭔가를 놓치게 된다. 명상을 하면 명상을 하는 순간 이외의 시간에서도 주의력을 향상시켜준다.
주의를 기울이는 법을 배우라
집중하기 위해 집중을 풀어라. 의식적으로 문제를 흘려보내서 그 문제가 생각에 절여지게 만들어야 한다.
생각할 시간을 만들어라
외부 뇌세포를 구축한다. 예를 들면 개인 Wiki가 있다. 생각을 절이고('소금에 절인다' 할 때 절임을 의미) 분류하고 발전시키고자 할 때 가장 효과적인 도구가 될 수 있다.
위키를 이용해 정보와 지식을 관리하라
메모를 위키에 옮겨 쓰면 뇌가 그 자료를 기억하는 데 도움이 된다. 회의나 교육에서 적은 메모를 옮겨 쓰는 것만 해도 그 자료를 두 번 깊이 있게 노출하는 것이기 때문에 신경망의 연결을 강화할 수 있다. 그것을 더 많이 다룰수록 전에 인지하지 못했던 새로운 관계나 패턴을 많이 발견할 수 있다. 그리고 그 중 더 재미있는 부분을 마인드맵을 그린다든지 해서 통찰을 이끌어내고 다시 위키에 적을수도 있다. 의도적으로 패턴을 찾을 수 있게 되는 것이다.
맥락은 지금 작업 중인 것과 관련돼서 현재의 단기 기억에 올라와 있는 정보의 집합이다. 컴퓨터와 다르게 인간은 컨텍스트스위칭이 어렵다. 컨텍스트 스위칭이 반드시 필요한 경우 의식적으로 하는 것이 방법이 된다. 현재 작업중인 것을 닫고 심호흡을 한 후 새로운 활동에 정면으로 마주하는 것이다.
작업을 효율적으로 조직화하고 처리하기 위한 세 가지 핵심적인 관점이 있다.
인터럽트를 의식적으로 처리하는 방법으로 다음과 같이 제안한다.
인터럽트를 관리하기 위해 작업 규칙을 세우라
이메일을 더 적게 보내라. 그러면 더 적게 받을 것이다.
이메일 대화를 위한 자신만의 템포를 선택하라
집중을 유지하기 위해 인터럽트에 마스크를 씌워라
스택을 저장하라. (인터럽트에 대비하라)
모니터를 여러 개 쓴다.
모니터를 여러 개 쓰면 컨텍스트 전환을 피할 수 있다.
컨텍스트를 최대화하기 위해 개인 작업흐름을 최적화하라