일상 & 단상

공부를 효율적으로 하는 방법

Folivora 2020. 1. 11. 06:27

최근에 공부 방법에 대해 다시 생각해보게 되는 계기가 생겼다. 교육 전문가는 아니지만 이때까지 공부를 하면서 느꼈던 점이다. 구체적인 테크닉은 아니고 다소 원론적인 이야기다. 골자는 다음과 같다. 

  • 균형 잡힌 입력-처리-출력 (Balanced Input-Process-Output)
  • 메타 인지 (Meta Recognition)
  • 심성 모형 형성 (Mental Model Creation)

공부에 대해서 잘못 알려진 상식이 있다면, 많이 반복하여 익숙해지면 이해가 잘 된다고 생각하는 것이다. 실제로는 얼마나 많이 반복하는가는 중요하지 않다. 내가 알고 있는 사전 지식(prior knowledge)을 바탕으로 어떤 개념을 정확하게 이해를 한 다음에 필요하다면 반복을 하는 것이다. 이해 없는 반복은 기억에도 오래 남지 않고 그렇게 외운 지식들은 활용되지 않는 쓸모없는 지식이 된다. 또한 입력을 많이 넣는 것과 출력을 잘하는 것은 큰 관계가 없다. 꺼내는 연습을 하지 않으면 잘 안 꺼내진다. 꼭 기억해야 할 내용이라면 주기적으로 반복하면서 단기 기억에서 장기 기억으로 전환시켜야 한다.

 

메타 인지는 내가 무엇을 알고 무엇을 모르는지에 대해서 파악할 수 있는 것이다. 공부를 하고 난 다음에 내가 어떤 대상에 대해 명확하게 이해를 했는지를 확인하려면, 빈 종이에 스스로 설명을 해보면 된다. 막상 빈 종이에 내용을 채우려고 하면 설명이나 회상이 잘 안 되는 것을 발견할 수 있다. 정확하게 이해했다면 한 두 문장 정도로 해당 개념에 대해서 설명할 수 있게 된다. 양자 컴퓨터(Quantum Computer)에 대해서 공부를 시작했다고 가정해보자. 중첩(Superposition)이니 얽힘(Entanglement)니 이런 것들에 대해서 먼저 알 필요는 없다. 가장 기초적인 단계로는 "어떤 계산을 (무언가 다른 방식으로) 빠르게 해주는 기계"라고 도구적인 관점에서 정의를 하고, 그다음에 세부적으로 어떻게 구성되고 상호작용하면서 동작하는지, 어떤 자연현상을 사용한 일인지 디테일하게 공부를 하면 된다. 만약에 도구적인 관점에서 설명하기 어렵다면 어떤 대상에 대한 기초적인 이해가 없는 상태임을 인지해야 한다.

 

심성 모형은 어떤 대상에 대해서 머릿속으로 가상의 시뮬레이션을 돌려볼 수 있는 것이다. 프로그래밍 언어에 대해서 공부를 했다면 컴퓨터가 어떻게 그 코드를 해석하고 실행할 지에 대해서 예상할 수 있으면 된다. 처음에는 정확하게 예상이 불가능하겠지만 여러 케이스들을 보면서 정교하게 모델을 업데이트할 수 있다. 이런 이미지들이 머릿속에 잡히기 시작하면 다음에는 책을 읽으면서 지식을 습득하는 것이 아니라 전문가가 말하는(써놓은) 내용과 교차 비교를 하면서 정교화(elaboration)를 하는 것이다.

 

그 외에도 정보를 압축하는 것 역시 중요하다. 사전 지식과 결합하는 과정에서 이전에 봤던 유사한 사례들을 떠올리는 것이 좋다. 예를 들어 A, A', A'', A*를 개별적으로 습득하려면 외워야 할 것이 많다. 그러나 A + {∅, ', '', *}으로 묶어놓으면 압축률이 매우 높다. 압축률뿐만 아니라 이렇게 유형화를 시켜놓으면 다음에 같은 유형에 대해서는 같은 연산을 적용시킬 수 있다. 컴퓨터 프로그래밍 언어에서 type을 중요하게 생각하는 까닭도 마찬가지다. 변수(variable)란 (name, type, value)인데, type을 잘 정의해놓으면 type만 보고도 데이터가 어떤 식으로 가공될지 쉽게 예상할 수 있다. JavaScript와 같은 언어들은 type보다는 value에 초점을 맞춘 언어라서 버그에 쉽게 노출된다 (잡소리).