혼자 적어보는 노트

[책 리뷰] 프로그래머의 뇌 본문

책 리뷰

[책 리뷰] 프로그래머의 뇌

jinist 2023. 8. 29. 22:20

 

 

 

📘 리뷰

회사에 입사 후 OJT에서 이 책의 일부 파트를 읽는 게 있었는데, 다시 전체적으로 읽어봐야겠다는 생각이 들어서 다시 읽은 책이다.

 

프로그래밍 기술과 습관을 보다 향상시키고 깊게 이해하고 싶은 사람들을 위한 책이라고 설명되어는 있지만 내가 읽었을 땐 마치 “코드 이해하는 거 어려웠지? 이런 이유 때문에 어려운 것이었단다~” 와 같이 설명해 주는 느낌이라 위로 아닌 위로(?)를 받은 느낌이었다.

 

다만 이 어렵게 느껴지는 관점을 일반적인 관점이 아닌 뇌와 관련된 인지적 관점으로 다루기 때문에 신선하기도 하고 입사 후 한번쯤 해봤을 만한 생각들을 다양한 실험을 예시로 들어서 재미있게 읽었다, 

 

내용의 일부는 프로그래밍 뿐만 아니라 다른 학습을 할 때도 접목시킬 만한 내용도 있었고, 중간중간 자기 자신의 코드에 접목시켜 볼 수 있는 질문들을 던지기도 해서 나의 코드 습관에 대해서 곰곰이 생각해 볼 수 있는 기회를 주기도 했다.

 

회사에 입사하고 다양한 코드를 접하면서 코드 이해에 대한 어려움을 겪고 있는 프로그래밍 초급자들이 읽어보기에 좋은 책이라 생각한다.

 

 

📘 책 내용 일부 요약

 

📄 LTM, STM

기억 공간에는 장기 기억을 보관하는 LTM(Long term Memory) 단기 기억을 보관하는 STM(Short Term Memory)이 존재한다.

LTM은 머릿속의 지식처럼 기억을 영구적으로 저장하는 하드드라이브와 같고 STM은 코드를 읽기 위해 일시적으로 저장하는 기억 공간, 즉 캐시나 메인 메모리와 같다.

긴 코드를 해석하다보면 처음에 봤던 함수가 하던 일이나 변수가 가리키는 값을 잊어버리는 경우가 자주 있는데, 이렇게 해석하는 과정에서의 값들은 STM에 저장이 되고 STM은 2~6개 사이의 항목만 저장을 할 수 있기 때문이다.

1~3 챕터의 내용들을 쉽게 정리하면 결국 지식이 부족하면 새로운 정보가 머릿속에 많이 들어오게 되고 처리할 수 있는 용량 이상의 정보가 들어왔을 때 인지 부하가 일어난다는 말이다.

이것을 극복하려면 문법 등 코드의 대한 지식을 축적시켜야 하고 장기기억 공간에 많은 지식이 있다면 코드들을 빠르게 이해할 수 있다. 그러니 새로운 정보를 기억하는 연습을 정기적으로 하는 것이 필요하다.

 

📄  복잡한 코드에 의한 작업 기억 공간 과부화 줄이기

작업 기억 공간의 역할은 정보를 처리하는 것이다.

STM이 집주소를 기억한다면 숫자를 더하는 일은 작업 기억 공간을 사용하는 것이다.

작업 기억 공간 또한 한번에 2~6개까지 기억이 가능한데 너무 많은 내용이 있을 경우 작업 기억 공간에 과부하가 나타난다.

작업기억공간 과부하로 인한 인지 부하는 아래의 방법들로 줄여볼 수 있다.

 

1. 리팩터링

리팩터링을 할 때는코드를 읽는 사람이 가지고 있는 지식에 맞춰 코드를 수정하여 인지적 부하를 줄이는 것이다. 그리고 해당 코드에 익숙해졌다면 수정한 코드를 원래 상태로 되돌리는 방법을 사용할 수 있다.

 

2. 의존 그래프

코드의 흐름에 따라 모든 변수를 원으로 표시하고 비슷한 변수를 연결한다. 이렇게 하면 코드를 해석할 때 어디서 사용되는지 찾지 않고 연결된 선을 따라가기만 하면 되기 때문에 인지 부하를 줄일 수 있다.

 

3. 상태 표

테이블을 만들고 각 열에 변수를 기입하고 행에 변수의 변경사항을 채우는 방식으로 알고리즘 풀 때 이 방식과 비슷한 방식을 적용해 봤었던 기억이 난다. 이 방법은 for문처럼 반복되는 계산이 있는 코드를 파악할 때 도움을 줄 수 있다.

 

📄 텍스트를 읽는 것과 코드를 읽는 것은 유사하다

알고리즘을 구현한 코드를 읽을 때 어떤 브로드만의 영역이 활성화 되는지를 실험을 해보았는데 텍스트를 읽을 때와 비슷한 인간 언어에 이해와 관련이 있는 영역이 활성화가 되는 것을 확인했다.

또한 어떤 인지 능력이 프로그래밍 능력과 관련이 있는지 예측 모델을 통해 연구를 했을 때 의외로 계산 능력보다 언어 능력이 프로그래밍 능력에 대한 예측력이 높았다.

 

📄 정신 모델

정신 모델은 작업 기억 공간 내에서 추상화를 하여 만든 모델이며 거의 모든 영역에도 적용시킬 수 있는 개념이다.

실제 하드 드라이브의 파일은 0과 1로 구성되어 있지만 폴더와 파일 구조로 되어있다고 떠올리는 것처럼 실재하지는 않지만 설명 혹은 기억을 쉽게 하기 위해 추상적으로 만들어낸 것들을 의미한다.

 

정신모델은 불안정할 수 있다. 이 말은 변수를 박스로 표현하기도 하는데 변수는 한 가지 값만 가지고 있지만 박스에는 여러 물건을 넣을 수 있기 때문이다. 그래서 잘못되거나 혹은 오래된 정신모델이 기억 속에 박히면 나중에 인지 부하가 왔을 때 잘못된 걸 꺼내 쓸 수도 있게 되기 때문에 이 부분을 염두에 두어야 한다.

 

정신 모델을 통해 컴퓨터가 작동하는 방식을 설명하는 것을 개념적 기계라고 하는데 정신 모델에 비해 일관되고 정확하게 추상화한 것을 의미한다. 변수를 상자나 이름표로 표현하는 것도 개념적 기계라고 볼 수 있고 트리탐색이나 스택, 큐와 같이 잘 알려진 자료구조들도 해당된다. 이러한 개념적 기계를 활용하여 코드에 대해 추론하거나 코드를 쉽게 설명할 수 있다.

 

 

📄 LTM을 강화하여 복잡한 문제 해결하기

암시적 기억을 통한 자동화

암시적 기억은 신발끈을 묶거나 타이핑을 잘못했을 때 ctrl+z를 누르는 것과 같이 아무 생각 없이 할 수 있는 기억들을 말하며, 이 것은 자동화를 한 것으로 볼 수 있다.

자동화를 하게 되면 아무 생각, 노력도 없이 일을 수행할 수 있고 뇌는 에너지를 거의 쓰지 않기 때문에 인지 부하가 증가하지 않기 때문에 신속하게 작업을 실행하는데 도움이 된다. 그러면 자동화에 필요한 암시적 기억은 어떻게 향상 시킬수 있을까?

연습하고자 하는 기술이 필요한 경우 유사하지만 다른 방식의 코드를 많이 작성해 보는 것이다.

예를 들어, javascript에서 for문은 아는데 reduce를 모른다면 for문의 코드를 reduce로 변경해 보는 방법이 있는데 이때 이미 작성된 for문의 코드를 reduce로 변경하고 변경사항에 대한 차이점을 생각해 보며 기억을 강화할 수 있다.

 

풀이된 예제 활용하기

문제 해결을 위해서라면 스스로 해결하는 방법을 찾아야 하고 많은 프로그램을 작성해봐야 한다고 생각할 수 있겠지만 프로그램을 읽고 설명을 통해 배우는 것이 프로그램을 작성하면서 배울 때 보다 배우는 것이 더 많다는 실험 결과가 있다.

협업을 통해 코드를 읽으며 설명을 나누고 배우거나 도메인이 익숙한 깃허브 코드 읽기, 문제 해결 방법에 대한 게시물 읽기 등 설명이 포함된 코드를 연구하여 명시적 기억을 강화시킬 수 있다.

Comments