자기주도적 학습에 대하여

paulkim·2020년 7월 27일
1

대부분의 사람들은 직감적으로 본인이 경험하지 못하거나 전문지식이 없는 분야에 대해서 이야기하는 것을 두려워하고, 또한 그것이 잘못되었다고 믿습니다.

이러한 선입견은 물론 이 글을 쓰고있는 작성자인 제 자신조차 갖고 있습니다.

이제 막 본격적으로 프로그래밍 학습을 시작하려고 하는 입문자의 입장에서, 당장 오늘 배운 것을 주제로 생각을 공유한다는 것이 저는 마냥 쉽지많은 않습니다. 저랑은 평생 인연이 없을 것이라고 생각했던 소셜 네트워킹 공간에서 불특정 다수에게 어떠한 아이디어나 생각을 공유한다는 것은 마치 제 스스로를 위험지대로 몰아넣고 있는 듯한 느낌이 들게됩니다.

그럼에도 불구하고 학습환경이라는 큰 주제를 첫 블로그 포스트로 선정한 이유는 단순히 이 것이 제가 속해있는 부트캠프의 커리큘럼 과정이라서가 아닙니다.

노벨상을 수상한 물리학자 Richard Feynman은 무언가를 학습을 하는데에 있어서 가장 효율적인 방법중 하나는, 본인이 배우고자 하는 주제에 대해 이해한 내용을 마치 교사의 입장에서 다른 누군가에게 가르치듯 이야기하는 것이라고 했습니다.

이제 막 제가 경험한 부트캠프의 첫 며칠은 사실 앞으로 있을 실질적인 부트캠프 경험과는 분명 동떨어져 있을 것 입니다. 특히 부트캠프의 첫날은 어떠한 강의나, 학습경험이 아닌 오리엔테이션을 주축으로 한 일종의 설명회에 가까운 형태이기 때문입니다. 하지만 제가 이 날을 통해 배운것은 분명히 존재했고, 이러한 개념을 나의 것으로 만들기 위한 하나의 과정으로써 본 블로그 글을 작성하게 되었습니다.

학습하는 법을 학습한다는 것

실제 현업에서 일하고 있는 지인들을 통해 배운 것 중 하나는 프로그래머 직군의 가장 큰 특성중 하나는 배움에 끝이 없다라는 것입니다. 사실 이러한 격언은 어느 직군에나 적용되는 것이지만, 상당수에게 있어서 이러한 이야기가 와닿기에는 우리가 알고있는 사회가 요구하는 것과는 괴리가 있습니다.

잘 생각해보면 터무니 없는 이야기지만, 우리는 제대로 된 직장을 잡으려면 역설적으로 이미 배움이 갖추어져있는 상태가 되어야한다고 믿기 때문입니다. 특히 이제 막 첫 사회생활을 시작하는 신입의 입장에서는 더욱 이런 경향이 짙을 것 입니다.

그렇다고 해서 프로그래머들이 직장을 갖을 때 전문성이 없다는 이야기가 아니라, 직장을 갖더라도 새로운 프로그래밍 언어나 개념을 학습하는 것이 마치 대학교 학부생 시절 처럼 필수적이라는 개념에 있어서 적어도 앞서 이야기한 일부 직종들과 차별점이 있을 것 입니다.

이러한 직업의 특성때문인지 학습을 잘하는 법을 학습하는 것을 부트캠프 첫 날에 유독 강조하는 것도 이해가 됩니다. 매년 프레임워크나 새로운 언어체계등 새로운 기술들이 등장하고 업데이트 되는 개발자들의 직업환경에서, 기존의 개발업무와 동시에 전혀 다른 문법의 언어를 습득하려면 효율적인 학습을 해야할 것 입니다.

자기주도적 학습

사실 자기주도적 학습이라는 단어의 뉘앙스는 이해하기가 쉽지만, 본질적으로는 그 이상의 세부적인 프로세스가 담겨져 있습니다. 예를들면 질문을 올바르게 하는 방법입니다.

통념상 질문이라는 행동의 본질은 문제를 빠른시간안에 효율적이게 해결하는데에 있습니다. 반면 자기주도적 학습에 있어서의 질문은 시간적인 측면에서 전혀 효율적이지 못합니다. 질문의 목적 자체가 애초에 문제를 해결하기 위함이 아니라 질문까지 도달하는 과정, 그 자체이기 때문입니다.

현대인이라면 누구든지 구글등의 검색엔진을 통해서 본인이 모르는 주제에 대한 자료를 찾아본적이 있을 것 입니다. 하지만 대부분 검색을 한다는 것에 큰 시간을 할애하지는 않습니다. 대게 질문의 형식자체가 명백한 답을 구하기위한 형태이기 때문입니다.

하지만 제 경험상 프로그래밍을 학습하기위한 목적으로 검색을 하면 경험해보지 못했던 문제를 맞닥뜨리게 됩니다. 위에서 언급한 답을 구하기위한 검색의 경우, 이미 우리는 검색결과에 대한 기대값에 대한 이해가 되어있는 상태이지만, 프로그래밍 학습에서의 검색은 내가 정확히 무엇을 모르는지 알기위한 목적이기 때문입니다.

예를들어 JavaScript 배열의 method 중 하나인 array.prototype.map 에 대한 공식 다큐먼트를 검색하면 다음과 같은 내용이 나옵니다:

The map() method creates a new array populated with the results of calling a provided function on every element in the calling array.

이를 간단하게 번역하자면, map() 방식은 대상 배열의 각 개체에 주어진 함수를 호출하여 새로운 배열을 생성한다. 라는 의미입니다. 이제 막 코딩에 입문한 제 입장에서 전혀 이해가안가 실질적인 예시를 살펴보려고 하면,

let new_array = arr.map(function callback( currentValue[, index[, array]]) {
    // return element for new_array
}[, thisArg])

다음과 같이 어디서부터 이해를 시도해야할지도 모르는 코드들이 나오게 됩니다.
원래의 단 한가지 질문를 해결을 위해, 위해서 말하는 callback 이 의미하는 바가 무엇인지,
또한 이로부터 파생되는 무수히 많은 개념에 대해서 이해를 하기위해 추가적인 검색을 해야하는 상황이 오게됩니다.

답을 얻으려고 질문을 했는데, 그 답을 얻기위한 질문을 이해하기위해 또 다른 질문을 하는 반복적으로 하는 행위가 이어지는 것이죠. 그럼에도 불구하고 이러한 불편함과 낮은 효율성을 합리화할 수 있는 가장 큰 이유는 질문의 목적이 답이 아닌 내가 모르는 것을 이해하기 위한것이기 때문입니다.

결론

내가 원하는 대답을 얻지 못하고 오히려 질문의 가짓수만 늘어나는 것은 지적으로 받을 수 있는 가장 큰 고문입니다. 이러한 학습방법이 누구에게도 적용되는 지는 당연히 본인만 알겠습니다만, 적어도 제 입장에서는 내가 학습할 수 있는 것의 크기가 받은 고통에 비례합니다. 이러한 고통의 시간을 감내하고 작은 문제이지만 하나씩 해결할 때 마다 자바스크립트를 처음에 공부하고자 찾아본 관련 교육자료에서 나온 이야기가 생각납니다.

프로그래밍 언어를 학습할 때 가장 효과적이고 빠른 방법은 문제 해결해 줄 코드를 기억하는 것이 아니라, 문제를 해결할 방법을 이해하는 것이다.

이 것이 자기주도적 학습이 갖고있는 가장 큰 장점이자, 학습하는 방법을 학습할 수 있는 가장 효과적인 방법중 하나가 아닐까 생각해봅니다.

0개의 댓글