코드를 읽거나 작성할 때 일어나는 3가지 인지과정
새로운 프로그래밍 언어나 프레임워크를 배울 때, 익숙하지 않거나 자신이 오래 전에 작성한 코드를 볼 때, 그 코드가 무슨 일을 하는지 왜 그렇게 작성되었는지 이해가 안갈 수 있다. 코드를 처음 보게되었을 때 어떤 과정을 통해서 처리하게 되는지 3가지의 인지과정을 통해 알 수 있다.
1. 장기 기억공간(LTM)
오랜 시간 동안 저장한다는 점에서 컴퓨터의 하드 드라이브와 비슷하다.
장기기억공간에 해당 언어에 대한 지식이 없기 때문에 꺼내어 쓸 수 없는 것이다.
장기 기억공간에 해당 지식이 없기 때문에 코드를 보았을 때 혼란이 발생할 수 있다.
2. 단기 기억공간(STM)
단기 기억공간은 들어오는 정보를 잠시 보관하기 위해 사용된다.
값을 일시적으로 저장하는 캐시나 메인 메모리라고 할 수 있다.
3. 작업 기억 공간
정보를 처리하는 공간이다. 실제 사고작용이 일어나는 공간이다.
작업 기억공간은 프로세서 역할이라고 볼 수 있다.
우리는 코드를 읽을 때 머릿속에서 코드를 컴파일하고 실행하는 과정이 일어나는데 여기서 담당하는 역할이다.
이 3가지의 인지 과정이 상호작용한다.
코드를 보게되면 단기 기억공간이 받아들이는 정보가 들어오면 장기 기억공간의 지식이 더해져서
해당 코드가 무엇을 하는 역할인지 파악하는 일은 작업 기억 공간에서 이루어진다.
만약 새로운 버그가 리포트 되었다면, 단기 기억공간에 새로운 버그에 대한 정보가 기억된다.
장기 기억공간에 유사한 버그에 해결법이나 개인적인 기억이 존재한다면, 그 지식을 인출한다.
이 두 기억공간과 함께 작업 기억공간(프로세서)에서 어떻게 처리할지 생각한다.
예를 들면 "인덱스 값이 하나 작다." 같은 판단이 일어나는 것이다.
코드를 읽는 동안 이 세 가지 과정이 함께 일어나며 보완적으로 작용한다.
생소한 코드를 읽을 때 어려운 이유
알고리즘을 공부하다가 반복문이 여러개 중첩되거나 임시 변수가 계속 값이 바뀌는 경우에 머리로 계산을 하고자하는 경우, 적어보고 싶게 된다. 그 이유는 단기기억공간의 용량에 제한이 있기 때문이다. 일반적인 인가의 단기기억공간의 용량은 2개에서 6개라고 한다. 이 적은 용량을 극복하기 위해 장기기억공간과 협업하여 코드를 읽거나 이해하게된다.
장기기억공간에 지식이 부족하면 코드를 읽을 때 하위 수준의 정보를에 의존해야하는데, 이때 단기기억공간이 빠르게 소진된다. 그래서 장기기억공간에 관련 지식을 충분히 가지고 있다면 추상 개념을 기억하기 때문에 단기기억공간을 덜 쓰고 인지과정이 일어날 수 있다. 그래서 관련 지식이 많을 경우 경우 코드를 더 빨리 이해하고 쓸 수 있다.
인지과정을 높이기 위한 방법
지식을 늘리기(장기기억공간 활용)
특정한 주제에 대해 두뇌가 더 많은 정보를 저장하고 있다면 장기기억 공간에서 빠르게 꺼낼 수 있다. 단기 기억공간의 용량은 작기 때문에 장기 기억 공간을 활용하는 것이 더 좋다. 생소한 문자로 된 문장보다 우리가 이미 아는 단어로 된 문장이 기억하기 훨씬 쉬운 것과 같은 의미이다. 단어의 의미를 장기기억공간에서 인출하기 때문에 기억이 쉬운것이다. 그래서 장기기억공간에 지식이 많으면 기억을 쉽게 할 수 있다.
기억하는 대상이 중요한게 아니고 기억하는 방식이 중요하다
읽기 쉬운 코드를 작성하기 위한 방법 중 하나로 얘기되는 것이 디자인 패턴 사용하기이다. 디자인 패턴을 사용하는 이유는 그룹으로 나누기 쉽기 때문이다. 또 그 이유는 두뇌에서 처리하기 쉽게되기 때문이다. '읽기 쉬운 코드를 작성해야하는 이유' = '인지 과정을 빠르게 하기 위해서' 이다. 디자인 패턴에 대한 지식을 가지게되면 청킹 능력(묶어서 기억할 수 있는 능력)이 향상되고 코드를 더 빠르게 수정할 수 있게 된다는 점이다.
청킹 능력(묶어서 기억할 수 있는 능력)을 위한 의도적 연습
많은 사람들이 코드를 작성해보는 것으로 프로그래밍을 학습하는데 경우에 따라 효과적인 연습방법이 아닐 수도 있다. 청킹을 위해서는 코드를 의도적으로 기억해내는 연습을 하는 것이 좋다. 여러가지 방법이 있는데 여기서는 2가지를 제시한다.
1. 반복적으로 학습하기
장기기억공간을 컴퓨터의 하드웨어로 예시를 들어 얘기했지만, 가장 큰 차이는 영원히 기억되지 않는 것이다. 비교적 오래 저장될 뿐. 그래서 정보를 다시 학습, 연습해주어야한다. 오랫동안 반복해서 학습하면 더 오래 기억한다. 더 많은 시간이 아니라 오랜 간격을 두고 학습해야한다는 것을 의미한다.
두뇌의 기억은 네크워크 구조로 되어있다. 하나의 사실은 다른 많은 사실과 연관이 되어있다. 기존 기억에 새로운 지식을 적극적으로 연결시키는 정교화 작업이 필요하다. 원하는 정보에 대해 생각하는 과정을 정교화라고 한다. 두뇌에서 기억은 다른 기억과 사실을 연결하는
연관 네트워크 형태이다. 정교화하면 네트워크는 강화된다.
우리가 무엇을 기억해내려고할 때 분명히 아는 것인데 기억이 잘 나지않는다고 경험이 있을 것이다. 저장은 되어있지만 인출이 되지 않는 것이다. 장기 기억 공간의 어딘가에 저장되어있지만 그것을 필요할 때는 정작 가져오지 못하는 것이다. 인출은 시간이 흐를수록 약해진다. 이 때 정교화 작업이 필요한 것이다.
2. 정교화를 이용해 프로그래밍 개념 학습하기
정교화는 기억하고자 하는 내용을 기존 기억과 연관지으면서 생각하는 것이고, 이것과 장기기억공간에 저장되어있는 스키마에 맞춰서 새로운 기억이 저장된다. 새로운 정보를 더 잘 기억하고 싶다면 그 정보를 정교화하자. 그것과 연관된 기억이 많을 수록 인출이 잘된다.
정교화할 때 연습할 수 있는 질문
- 새로운 개념이 어떤 다른 개념을 생각나게 했는지?
- 공통점이 있는지?
- 비슷한 환경에서 사용될 수 있는지?
- 이미 알고있는 개념 대신에 사용될 수도 있는지
- 어떤 패러다임, 도메인, 라이브러리 혹은 프레임워크와 잘 맞을까?
'📓Book' 카테고리의 다른 글
Book | 그림으로 이해하는 네트워크 구조와 기술 (0) | 2023.08.30 |
---|---|
Book | 미라클모닝 (0) | 2021.10.30 |