나의 의도적 수련
학습 자체는 좋아하지만 스스로에 대한 피드백을 제대로 하지는 않는 편이었다. 많이 다양하게 읽는 것을 좋아하지만 하나의 책을 읽고 나면 그 책에 대해서 독후감을 쓴다거나 시간을 따로 가져 머릿속에서 다시 떠올리려는 연습을 하지 않아왔다. 그러다보니 책을 읽어도 다시금 누군가에게 설명해야 한다고 하면 정작 자세한 이야기는 할 수 없는 것이었다. 기껏해야 책 표지 책 목차의 제목 정도를 보고서 책 읽기 전에도 이미 할 수 있었던 예측 내용만을 읊을 수 있을 뿐이었다. 이렇다면 책을 읽는 이유가 없는 것이 아닌가?
질적으로 향상된 학습이 필요한 시점이라고 생각했다. 그러면서 자연스럽게 읽었던 책의 내용을 "의도적으로" 상기시키는 것이 중요하다고 생각이 들었다. 100권의 책을 읽고 그 책들의 내용이 내 삶의 가치관을 가랑비에 옷 젖듯이 변화시키는 것도 좋은 방법이겠지만, 한 권의 명저를 읽고 그것을 완벽하게 내 것으로 만들어 버리는 것이 더 중요하다고 생각이 들었다. 그러니까, 좀 더 쉽게 생각하면 아예 한 책을 시험을 치듯이 곱씹어 먹어버리는 것이다. 그리고 그 책이 나에게 바라는 실천 행동들을 "훈련"하는 것이다.
그러다 보니 요즘은 "집약적인", "의도적인", "학습", "훈련", "수련" 들이 내 학습의 키워드가 되었다. 한 책을 읽고 또 다른 읽고 싶은 책을 읽어버리는 것보다는 그 책을 다시금 읽고 또 다시금 읽어 집약적인 학습을 하고, 시간과 노력을 할애하여 의도적으로 그 책의 내용을 머릿속으로 끄집어 내 보는 것이다. 이런 키워드들을 생각하다보니 자연스럽게 "의도적 수련"이라는 용어를 접하게 되었다.
김창준 멘토님 (예전에 소프트웨어 마에스트로 프로그램할 때 멘토님이셨었기에 나는 이 분을 멘토님으로 부르는 것이 편하다.) 이 작성하신 http://egloos.zum.com/agile/v/5749946 글을 읽고서 내가 하고 있는 의도적 수련에 대해서 나의 시간과 노력을 할애하여 의도적으로 고민해보고자 한다. 앞서 계속 나의 부끄러운 습관을 말해왔지만, 솔직히 과거에는 어떤 글을 읽어도 한 1-2초 생각했을까, 그냥 내용을 받아들이거나 아예 까먹어버리거나 했을 뿐, 나 스스로 적어도 몇수십분에서 몇시간을 들여서 혼자만의 생각을 해보는 시간을 가져본 적이 거의 없다고 본다. 이번 기회에 그런 습관을 타파하고 100개의 글을 읽기만 하고 넘겨버리는 것보다 하나의 글을 읽고 혼자서 깊이 생각해보는 시간을 가지는 습관을 들여보고자 한다.
하여간, 저 글에 있는 내용에서 핵심은 두 가지 파라미터가 어울려야 최고의 몰입을 경험하고 최대의 학습능력, 퍼포먼스를 보일 수 있다고 한다. 1) 자신이 느끼는 난이도와 2) 자신이 느끼는 실력 (자기효능감) 이다.
- 난이도 < 실력
- 난이도 = 실력
- 난이도 > 실력
위 세 경우가 존재할 것이고, 가운데 경우가 가장 최고의 학습 위치라는 것이다. 여기까지는 사실 늘 읽던 글처럼 정보를 생각없이 받아들이고 있었는데, 그 다음의 그래프와 각각의 사례 설명을 보고 깊은 생각에 빠지게 되었다.
현실적으로 난이도와 실력이 비슷한 환경에 처하기는 사실 쉽지가 않다. 이 말은 즉슨, 내 실력에 정확하게 적절한 난이도의 업무만 항상 하게 된다는 것인데, 회사든 학교든 그런 이상적인 일은 많이 발생하지 않을 것이다. 팀장이나 리더의 관점에서는 사실 팀원의 실력에 맞는 난이도의 업무를 배치하는 능력 또한 중요할 것인데, 그것은 그 자체로 또 다른 주제의 연구가 필요할 것이다.
어쨌든 우리는 자주 [난이도 < 실력] 혹은 [난이도 > 실력] 의 상황에 처하게 될 것이다. 난이도 > 실력의 경우에는 불안함을 느끼고, 난이도 < 실력의 경우 지루함을 느끼게 된다. 이 때 최고의 학습 몰입, 퍼포먼스를 얻기 위해 a1,a2,b1,b2 총 4가지 시도를 함으로써 난이도와 실력을 align할 수 있는 것이다.
각각의 설명과 사례 설명은 사실 원글에서 훨씬 더 잘 하고 있고, 이 글의 목적은 원글을 다시 설명하기 위함이 아니라 나라는 사람이 a1,a2,b1,b2를 어떻게 해왔고 어떻게 할 것인가? 에 대한 생각을 써보기 위함이다.
- a1: 본인의 실력을 낮춤. ex. 평소에 쓰던 도구를 쓰지 않는다.
- a2: 문제의 난이도를 높임 ex. 해야 할 업무에서 부가 업무를 추가한다.
- b1: 문제의 난이도를 낮춤 ex. 어려운 문제를 쉬운 문제로 변환한다.
- b2: 본인의 실력을 높임 ex. 사회적 (전문가의 도움) /도구적 (새로운 도구) /내재적 접근
이런 방식으로 생각해낸다는 것도 되게 신기했다. 일단, 이 4가지 중에서 b1만큼은 내가 자주 쓰던 방법이다. 어려운 문제를 맞이하면 쉬운 문제나 부분문제로 "reduction" (알고리즘 용어 관점에서 ㅎㅎ) 하려는 습관이 있다. 다만, b2에서의 내재적 접근은 부족한 것 같다. 나의 비슷한 경험을 토대로 비유적으로 해결하는 방법인데, 아직까진 나는 나에 대해서 잘 모르고 나의 이전 경험들에 대해서 깊은 고민을 해보지 못한 사람이라고 생각한다. 아주 사소한 문제라도 문제를 풀었던 방법, 그 때의 생각, 고민을 기록하고 복기해야 할 필요성을 느끼게 되었다.
a1, a2는 지루할 때의 상황의 해결책(?)인데, a1,a2는 내가 전혀 고려를 해보지 못한 방법들인 것 같다. 왜냐하면 내가 풀기에 쉬운 문제는 풀어버린 다음에 더 고민을 하지 않았던 것 같다. a2와 같이 문제의 난이도를 높여볼 수도 있는 것이고, 반대로 자기의 실력을 낮춰볼 수도 있는데 (a1) 말이다.
a2 전략은 뛰어난 프로그래머들이 자주 쓰는 전략이라는데, 뜨금하면서도 부족함을 느낀다. 반성한다. 특히 여기서 자신만의 도구/방법 만들기가 중요하다고 하는데, 아직 나는 나만의 코드 스니펫 도구가 있지는 않은 것 같다. 뭔가 알게 모르게 반복화된 코드들이 있고, 그것을 재사용하거나 클린 코드로 만드는 습관은 있으나, 그것을 나만의 무기처럼 엮어두고 언제든지 빼서 쓸 수 있는 형태로 만들어두지는 못했다. "남들보다 일을 효율적/효과적으로 하기 위해 내가 직접 만들어 쓰는 나만의 도구/방법"을 만들어두어야 겠다.
a1 전략으로는 평소에 쓰던 도구를 덜 쓰는 것이 대표적인 예이다. 구체적인 예를 들면 컴파일을 더 적은 빈도로 돌리는 것이다. 나는 코드 뿐만 아니라 거의 모든 문서를 무결하고 완벽하게 쓰고 싶어한다. docx를 쓸 때는 ctrl+S를 거의 매10초마다 한번씩은 누른다. 코드 또한 작은 테스트 코드를 거의 몇 수십번을 돌려가며 코드를 짠다. 간단히 말하면 컴파일과 테스트가 바로 즉각되는 작은 코드 루틴을 만들고 컴파일을 자주 한다는 뜻이다. 코드가 완전하게 돌아가고 무결하게 돌아가는데 있어서는 최고의 습관이라고 자부한다. 그러나, 다시 한번 생각을 해보면 머릿속으로 알고리즘을 돌리는 연산은 덜 한다는 뜻이 되기도 한다.
그러니까, 나는 큰 로직에서의 알고리즘은 당연히 머릿속으로 생각하지만 세부적인 디테일적인 알고리즘은 머릿속으로 생각은 덜 하고 도구에게 맡긴다는 것이 된다. 솔직히 이런 습관은 현업에서는 좋은 것 같으면서도 알고리즘 인터뷰를 준비하는 입장에서는 별로 안 좋은 듯 하다. 알고리즘 인터뷰를 할 때는 손코딩이나 세부적인 로직까지 컴퓨터의 도움없이 진행해야 하는 경우가 많은데 확실히 그런 측면에서는 약한 점을 보인다. 가끔은 a1전략을 위해 도구의 도움없이 깊은 고민을 해보는 연습도 필요한 것 같다.
이번 글을 쓰면서 반성을 많이 했다. 특히 원글이 좋았던 이유 중 하나는 프로그래머로써 확실하게 공감이 가는 정확한 예시들을 소개했다는 것이다. 그러다 보니 단순하게 더 잘해야겠다~ 이런게 아니라 확실하게 뭘 해야겠다는 반성이 되었다. 앞으로 열심히 살아야겠다~ 이런 느낌을 주는 글이나 영상은 무수히 많지만, 정확한 방법론적인 수준까지 (당장 act할 수 있는? 아니면 머릿속으로 기억이 확실하게 남을 수 있는?) 반성하게 되는 계기를 주는 글/영상은 많지 않은 듯 하다. 글도 서두없이 막 썼는데, 앞으로 이렇게 혼자서 글을 써보고 나에 대해서 깊은 고민을 해보고 시간을 쏟고, 의도적으로 수련하고 연습하는 생각을 해야겠다.