“만약을 위한” vs “필요에 의한” 학습
소프트웨어 엔지니어로서 우리는 “만약을 대비하여” 새로운 것을 배워야 할까? 아니면 우리가 실제로 필요할 때, “필요에 의해” 새로운 것을 배워야 할까?
“만약을 위한”(just-in-case) 와 “필요에 의한”(just-in-time)이라는 용어는 재고 관리(inventory management)에서 파생된 말입니다. 만약에 미래에 필요할지도 모르는 물건들을 쌓아둔다면, 그 물건들이 구비되어 있기때문에 리드타임(상품 생산부터 완성까지 걸리는 시간)을 줄일 수 있습니다. 하지만 그런 물건들을 저장하는데에 필요한 오버헤드(저장 공간, 손상, 물건들을 쌓아둠으로써 발생하는 기회비용 등)와 그 물건들이 실제로는 필요하지 않을 수 있는 위험성을 가지게 됩니다. Toyota와 같은 회사들이 짧은 리드 타임, 작은 오버헤드, 군더더기 없는 생산으로 대표되는 이러한 “필요에 의한” 재고관리와 생산 체계를 개척하였죠.
이는 새로운 것을 배우는 과정에도 꽤 잘 들어맞습니다. 극단적인 “만약을 위한” 학습은 기본적으로 학교나 대학에서 볼 수 있는 것들입니다. 가까운 미래에 사용하지 않을 수도 있는 넓은 지식들을 배우게 됩니다. 문제는,
- 배운 것들이 실제로는 전혀 필요하지 않을 수 있습니다. 당신의 커리어 혹은 삶에 등장하지 않을 수도 있고, 완전히 무관해질 수도 있습니다.
- 지속적으로 지식을 환기(refresh)시키지 않는다면, 아마도 배운 것들의 대부분을 잊어버릴 것이고, 이는 굉장히 비효율적인 일입니다.
- 분명하고 확실한 필요성이 있을 때 더 몰두(engaged)할 수 있기 때문에 실제로 더 잘 배울 수 있습니다.
또 다른 극단인 “필요에 의한” 학습은 이런 위험성의 대부분을 피할 수 있습니다. 분명한 단점은 리드타임 즉, 필요할 때 지식이 준비되어 있지 않다는 것이지만, 이는 “만약을 위한” 학습에서 일어나는 “낭비”에 비하면 작지 않은가요? 수 많은 신뢰할 만한 사람들이 필요할 때 배우는 것이 옳다고 말합니다(advocate).(google에 just-in-case vs just-in-time learning을 검색해보세요)
제 생각엔 다음과 같은 “만약을 위한” 학습이 주는 이점들을 간과한 듯하네요.
Meta-Learning
“만약을 위한” 학습에서는 여전히 “메타-학습”이라는 것으로부터 오는 이점을 누릴 수 있습니다. “새로운 것을 배운다”라는 것을 하나의 기술(skill)이라고 생각한다면, 새로운 것들을 배울 수록, 이를 더 잘하게 됩니다. 따라서 다음 번에 “필요에 의한” 학습을 할 때, 더 효율적으로 새로운 것을 배울 수 있게 되는 것입니다.
이는 이전에 배웠던 것, 그리고 미래에 배울 것들과 비슷한 지식을 학습하기 때문입니다. 예를 들어, 저는 수년의 기간 동안 많은 프로그래밍 언어를 배웠고(적어도 표면적으로는, 기본적인 코드를 그 언어로 쓰고 읽는다는 관점에서), 새로운 프로그래밍 언어를 배우기 한결 수월해 졌습니다.
한편, 때로는 아는 것과 꽤나 다른 어떤 것을 배우게 되는데 이 또한 유용한 일입니다. 왜냐하면 이는 당신이 다른 방식으로 배우도록 강제(force)하기 때문입니다. 예로, 프로그래밍 언어를 배우는 것과 AWS에 대해 배우는 것은 매우 다르지만, 둘 모두 미래의 일어날 상황에 적용할 수 있는 기술을 가르쳐줍니다. 언제 물어봐야 하고 물어볼 사람은 어떻게 찾아내나요? 언제 무언가를 하며 배우나요? 언제 책을 읽어야 하며 기술 문서 혹은 코드를 읽어야 할까요? 어떻게 배우는지를 아는 것, 그 근육을 기를 수 있는 것입니다.
Blind Spot Elimination
때로 당장 필요하지 않은 무언가를 배우는 것은 “사각지대”를 제거하는 좋은 방법입니다. 사각지대란, 배우지 않았더라면 그 배움으로부터 얻을 수 있는 것이 있을 있으리라고 인지하지 조차 못 하는 것들을 말합니다.(혹은 그 기초들입니다). 한번도 사용하거나 본적이 없다면 그 툴이나 패턴의 존재를 알지 못했을 것입니다.
제가 진정으로 값지다고 느낀 충고 하나가, 새로운 것을 배울 때 항상 이것이 현재나 미래의 문제를 푸는데에 어떤 도움이 되지? 라고 생각하라는 것입니다. 그렇게 하면, 실생활에서 문제를 마주쳤을 때, 두뇌 안에서 “오, 나 이 문제를 푸는데 사용할 수 있는 걸 알아!”하며 작은 깃발 하나가 올라갈 것입니다. 이 질문을 바꿔 말하면(reframe) 애초에 어떤 문제를 해결하기 위해 이 툴/패턴이 개발된 거지? 라고 할 수 있습니다. 만약 누군가 툴을 만들거나 패턴을 통해 생각하는데에 시간을 투자했다면, 그 사람이 그 툴이나 패턴을 통해 해결하고자 했던 문제에 대한 이해 없이 배우기만 하는 것은, 나무만을 보고 숲을 보지 못하는 것입니다(miss forest for the trees). 나무는 어찌되었건 잊게 되겠지만, 수 많은 숲들을 볼 수 있게될 것입니다.
예를 들어 난처할 정도로 병렬적이고(혹은 병렬적이기 쉽고), real-time이 아니면서(혹은 전체가 real-time일 필요가 없으면서) 매우 규모가 큰 문제들은 Spark와 같은 분산 데이터 처리 엔진으로 해결할 수 있다는 작은 패턴-매처(pattern-matcher)가 제 머리 속에 존재합니다. 지금은 Spark를 배우지 꽤 오랜 시간이 지났고, Spark job을 어떻게 구성하는지 대부분의 디테일은 잊었지만, 적어도 그 연결점을 만들어 낼 수 있습니다. 그렇지 않았다면, 저는 그 툴을 고려하지 않았을지도 모르고, 완전히 다른(그리고 비용이 많이 드는) 접근을 했을지도 모릅니다.
본질적으로, 더 넓게 배울수록, 대부분의 디테일은 잊게 된다하더라도 사각지대가 점점 작아지게 됩니다. “또 다른 하나(another one of those)“라는 것을 인식하기 위해서 배우는 것입니다.
마지막으로, 사각지대 제거와 관련있는 것은 탐험(exploration)입니다. 아마도 당신은 항상 무언가가 이상하고 이해할 수 없다고 느낄지도 모릅니다. 그것에 대해 배우게 되면, 당신은 그 가정이 틀렸다는 것을 깨닫게 될지도 모릅니다. 저는 그런 깨달음으로부터 커리어가 바뀐(굉장히 멋진 방향으로) 경우를 봐왔습니다.
Layers and Graphs
우리의 두뇌는 어떤 정보가 유용한지, 유용하지 않은지 끊임 없이 작은 결정(micro-decisions)들을 내립니다. 유용하지 않은 것들은 위축(atrophy)되고 잊혀집니다. 인지 과학에 대해서는 검색하거나 읽을거리가 많이 있습니다. 분명한 하나의 테크닉은 단순히 반복하는 것이고, 사람들은 간격 반복(spaced repetition)이라는 테크닉을 발명해냈습니다. 이는 모두가 학교에서 사용하는, 시간(간격)을 정해 다시 보는 옛날 “낱말 카드(flash card)”와 같은 기법입니다.
반복은 두뇌에게 어떤 것이 중요하고 반드시 두뇌에 남아있어야 한다는 것을 알리는 방법입니다. 반복은 단순 “암기”에 좋은 성능을 보이지만, “만약을 위한” 학습의 경우에 소프트웨어 엔지니어링 지식을 머리에 남기는데 사용하는 것은 분명히 더 어려운 일입니다. 그러나 두뇌에게 중요하다는 것을 알리는 다른 방법이 존재합니다.
학교나 대학에서 수업을 들을 때, 학기 초에 배우는 내용이 학기 말에 배웠던 것들보다 더 오래 기억에 남는다는 기분이 든 적이 없나요? 저는 단지 학기 초에 배우는 것이 더 쉽기 때문이라고 생각했었습니다. 하지만 실제로는 더 복잡한(deeper) 무언가 일어나고 있는 것입니다. 후반 내용들은 초반 내용에 기초하고(builds on), 두뇌는 이 의존성을 인지하고 이 의존성에 기반하여 지식을 유지할지말지 결정을 내리게 됩니다 .
이를 호박(amber) 또는 앙금(sediment)의 레이어들로 생각할 수 있습니다. 상단의 레이어들은 느슨하고 분해되기 쉽지만, 이 레이이들은 하단 레이이들을 압축시키고 응집시키게 됩니다. 이를 개념화하는 다른 방법은, 두뇌가 스스로 정보 의존성의 유향 그래프(directed graph)를 구성한다고 생각하는 것입니다. 두뇌가 어떤 것들을 지울 때(혹은 더 정확히는 “갱신(refresh)” 또는 유지하지 않기로 결정하였을 때), 그래프에서 상위에 있고 의존성이 적은 것들부터 지우기 시작할 가능성이 높은 것입니다.
많은 것을 배우면, 두뇌는 그 그래프와 의존성에 대해 더 잘 이해하게 됩니다. 두뇌가 기하학, 미적분학, 다른 많은 스킬들이 기초 대수학에 의존한다는 것을 이해하기 시작하는 것이죠. 당신의 두뇌에 작은 garbage collector가 돌아다니면서, 자주 사용되지 않거나 의존성이 없는 것들을 잊게 만든다고 생각해볼 수 있겠습니다.
The Balance
무엇이 균형일까요? 분명 절대 유용하지 않을 임의의(random) 것들을 배워서는 안됩니다. 그러나 저는 “만약을 위한” 학습법이 어떤 도움이 되는지 알아보면서, 당신이 업무에 당장 필요하지 않거나 직접적으로 관련 없는 것들을 배우는 것이 왜 좋은지 납득할 수 있었기를 바랍니다.
제가 생각하는 최고의 균형이란 미래에 사용될 지도 모르는 것들에 대한 전략을 가지고, 당장 커리어 또는 삶에 도움이 되는 것들과 더 배우면 도움 될 수도 있는 것들 사이에서 균형을 잡는 것입니다.