프로그래머의 뇌 (펠리너 헤르만스 지음)
📍목차
1장 | 코드 더 잘 읽기
1. 코딩 중 겪는 혼란에 대한 이해
2. 신속한 코드 분석
📍요약
✅STM
- 저장공간 : 7개 전후 => 크기 제한을 극복하기 위해 LTM과 협업
- 정보는 STM 전 감각 기억 공간을 거쳐서 일부만 STM에 전달됨
✅청크
- 새로운 정보를 읽을 때, 우리 두뇌는 그 정보를 청크라는 몇 개의 묶음으로 나눔
✅코드를 읽을 때 인지 과정
- LTM에서 인출할 지식이 없으면, 키워드같은 정보에 의존해야 해서 STM의 공간이 빠르게 소진됨
- LTM에 관련 지식이 많으면, STM에 저장하는 대신, LTM에서 "자바스크립트에서의 for loop" 같은 방식으로 기억을 인출하므로 STM 공간을 절약
✅코드를 더 잘 읽는 방법
- 디자인 패턴, 언어에 대한 지식, 도메인 지식 등을 더 학습
- 두뇌는 디자인 패턴, 주석, 표식 등을 잘 받아들임
📍2-1. 코드를 신속하게 읽기
⭐코드는 사람이 읽을 수 있도록 작성해야만 한다
대부분 코드를 작성하는 것에 집중하지만, 코드를 읽는 연습도 중요
Java로 작성된 삽입정렬 알고리즘 3분간 보고, JavaScript로 재현해보기
- Java 원본 코드
public class InsertionSort {
public static void main (String [] args) {
int [] array = {45,12,85,32,89,39,69,44,42,1,6,8};
int temp;
for (int i = 1; i < array.length; i++) {
for (int j = i; j > 0; j--) {
if (array[j] < array [j - 1]) {
temp = array[j];
array[j] = array[j - 1];
array[j - 1] = temp;
}
}
}
for (int i = 0; i < array.length; i++) {
System.out.println(array[i]);
}
}
}
- JavaScript 재현 코드
const ARR = [1, 9, 6, 7, 2, 4, 3, 5, 8];
const insertionSort = (arr) => {
let temp;
for (let i = 1; i < arr.length; i++) {
for (let j = i; j > 0; j--) {
if (arr[j - 1] > arr[j]) {
temp = arr[j];
arr[j] = arr[j - 1];
arr[j - 1] = temp;
}
}
}
return arr;
};
console.log(insertionSort(ARR)); // [1, 2, 3, 4, 5, 6, 7, 8, 9]
- 자바 문법에 대한 지식이나 삽입 정렬에 대한 배경 지식은 LTM에서 가져옴
- 숙련된 프로그래머들은 원래 코드에 없던 주석을 추가하는 경우도 있었음
=> 주석을 통해 추가할 내용을 기록하고 넘어감
(주석을 코드를 설명하는 것 뿐만 아니라 미작성된 내용을 기록하기 위해서도 사용)
✅위의 코드에서 for loop의 i, j 같은 변수 명을 l, b 처럼 잘 사용하지 않는 것으로 바꾸면, 재현 가능성이 더 낮아진다
=> 그 이유는, STM에 제약이 있기 때문
- 용량 : 7 언저리 (매직 넘버 7, 최근에는 2 ~ 6 이라는 연구도 있음)
- 시간 : 30초를 넘지 않음
📍2-2. 기억의 크기 제한을 극복하기
✅청킹(Chunking)을 통해 묶어서 기억하기
STM의 한계를 극복할 수 있다
예) abk mrtpi gbar 와 같은 길이의 cat loves cake 문장을 더 쉽게 기억
=> 이는 LTM에 의존할 수 있게 해주기도 한다
실험 사례
ALGOL 이라는 프로그래밍 언어로 작성된 코드를 초급, 중급, 고급 프로그래머에게 외우게 했더니
숙련된 프로그래머일 수록 더 잘 외움 (LTM에서 인출)
그런데, 코드 위치를 무작위로 뒤섞은 코드는, 숙련도와 상관없이 같은 분량의 코드를 외우는 결과가 나옴
=> LTM에 저장된 지식이 많을 수록, 코드 이해가 빠름
📍2-3. 읽는 것보다 보는 것이 더 많다
정보가 STM 전에 감각 기억 공간(sensory memory)을 거침
- 키보드, 마우스같은 입출력 버퍼(I/O Buffer) 역할
- 시각, 촉각, 청각, 미각, 후각마다 각각 공간을 가짐
- 시각 정보의 경우 영상 기억 공간을 거침
✅청크로 묶을 수 있는 코드를 작성하는 방법
- 디자인 패턴 사용
- 주석 사용 => 주석은 읽는 시간을 늘리므로 중요한 곳에만 사용
- 표식(beacon) 사용 예) 변수명에 left, right 등의 정보 부여
의도적인 코드 재현 연습으로 청킹을 통한 코드 기억력을 향상시킬 수 있다