이 장에서는 문제 해결에 도움이 되는 기술에 대해 LTM을 강화하는데 중점을 두어 살펴본다. 문제 해결능력 향상을 위한 두가지 기술을 알게 될 것이다
- 자동화 : 사소한 일을 인지부하 없이 처리할 수 있음
- 다른 사람이 작성한 코드로 문제해결하는 방법
10.1 문제 해결이란?
문제 해결을 위한 세가지 요소
- 목표 상태 : ex) 웹 사이트에 검색 상자를 추가
- 시작 상태 : ex) 현재 코드 베이스
- 시작 상태에서 목표 상태에 도달하는 방법을 규정하는 규칙 : ex) 코드 제약사항, 테스트 코드 통과 등
상태 공간
프로그램을 해결할 때 고려할 수 있는 모든 단계를 문제의 상태 공간이라고 함.
이 두가지가 합쳐져서, 문제 해결이란 가능한 적은 단계로 목표 상태에 도달하기 위해 상태 공간을 최적의 방식으로 탐색해나가는 것을 의미한다.
10.2 프로그래밍 문제를 해결할 때 LTM의 역할
프로그래밍 문제를 해결할 때 작업기억공간에 인지 부하가 너무 많으면 두뇌가 제대로 처리할 수 없게 된다. 하지만 문제해결 과정에서 LTM이 수행하는 역할도 있다
작업 기억 공간이 잘 동작하려면 LTM, STM과 강력한 협업을 해야한다. STM으로부터 문제의 상황에 대한 정보를 가져오고, LTM은 관련 배경 지식을 검색하고 찾으면 작업 기억공간으로 보낸다. 문제 해결을 더 잘 이해하려면 LTM을 검색하는 부분을 탐구해야한다.
문제 해결에 역할을 하는 두가지 유형의 기억
- 절차적(암시적) 기억 : 의식하지않고 발휘하는 기술에 대한 기억(자전거타기,
console.log()
찍기) - 선언적(명시적) 기억 : 기억할 수 있는 사실이 있고, 그걸 자신이 의식할 수 있음.
- 일화적 : 일상적으로 사용되는 기억 (과거에 문제를 겪었던 일, 친구랑 놀았던 일)
- 의미적 : 의미, 개념, 사실에 대한 기억 (apple은 사과, 자바 클래스는 데이터와 기능의 결합)
문제 해결에는 두가지 기억 모두 사용된다
- 암시적 기억 : 키보드 조작 방법, 기본적인 문법, 콘솔로그 찍기 등
- 선언적 기억 : 과거에 버그를 해결했던 경험, 자바에서 루프를 구성하는 방법 등
다만 이러한 기억들이 방해가 되는 경우도 물론 있다. 7장에서 살펴본 부정적인 전이가 발생하는 경우다.
10.3 자동화 : 암시적 기억 생성
자동화는 어떤 기술을 여러번 연습하여 아무 생각 없이 수행할 수 있을 정도가 된 것을 의미한다. 어떤 기술을 자동화하여 해결할 수 있으면, 그것을 응용한 더 어려운 문제를 해결할때 인지부하를 줄일 수 있다.
만약 파이썬 문법에 익숙하지 않은 상태에서 파이썬으로 알고리즘 문제를 풀 때, 문법을 신경쓰느라 인지부하가 걸려 문제에 100% 집중할 수 없다.
시간 경과에 따른 암시적 기억
- 선언적 기억 : 명시적으로 그 내용을 외우려고 노력하여 형성됨. 명시적 주의가 필요함. (ex : 플래시카드)
- 암시적 기억 : 반복에 의해 생성됨. 어떻게 해야하는지 생각하지 않아도 됨.
암시적 기억은 세가지 단계로 형성된다
- 인지 단계 : 무언가 새로운 것을 배우는 단계로, 당면한 작업에 대해 명시적으로 생각한다. (ex : 리스트 내 어떤 요소의 인덱스가 뭔지 명시적으로 생각해야함)
- 연상 단계 : 응답 패턴이 나타날 때까지 새 정보를 적극적으로 반복했을때 형성. 해당 작업을 위한 노하우가 생성되어, 인지 단계보다 간단히 작업할 수 있음. (ex : a번째 요소는 a-1 로 계산 )
- 자율 단계 : 작업에 대해 명시적으로 생각하지 않고 해결할 수 있음. 기술이 자동화가 된 단계로 아무런 노력없이 해당 작업 수행 가능.
인스턴스 이론 : 어떤 작업에 대한 각 경우의 수를 기억에 저장하였다가, 그 작업을 다시 수행할 시 이전의 기억을 참고하여 해결할 수 있다. 따라서 여러번 반복을 통해 관련 기억이 많아지면 순간적인 기억에 전적으로 의존해 자동화가 가능해진다는 이론.
프로그래밍에서는 의도적인 반복 연습을 하지 않는다(ex : for문 작성) 그러나 이러한 기술에 숙달하면 더 큰 작업을 수행할 때 인지부하가 해소된다. 따라서 의도적 연습은 필요한데, 이를 위해선 유사하지만 다른 프로그램을 많이 작성해보는 것이다. 이미 작성된 프로그램을 수정해보는 것도 좋은 방법이다.
10.4 코드와 해설에서 배우기
풀이된 예제 : 문제 해결능력을 향상하기 위해 다른 사람이 어떻게 해결했는지 의도적으로 연구하여 얻은 해결책
우리는 일반적으로 답안지를 들여다보는 것은 좋은 학습방법이 아니라 생각하지만, 연구결과에 따르면 비슷한 문제에 대한 답안지가 주어졌을때 더 빨리 배울 수 있다고 밝혀졌다.
이유는 본유적 부하에 있다.
본유적 부하는 두뇌가 정보를 LTM에 다시 저장하기 위해 수행하는 노력을 의미한다. 작업 기억 공간에서 작업을 한 후 정보를 다시 LTM에 저장할 때 본유적 부하가 걸리는데, 작업 기억 공간이 꽉 차 있으면 본유적 부하를 위한 여지가 남아있지 않아서 문제를 풀어도 그 해결책이 머리에 제대로 남아있지 않게 된다.