LeChuck

프로그래머의 뇌

·6 min to read

obsidian image

앞으로 십 수년간은 개발 공부를 해야 할 처지에 놓여버렸다. 오랫동안 반복 할 일이라면 효율적으로 처리해야 하지 않겠는가? 이 책은 학습법에 대한 고민을 타파해보기 위해 읽었다. 공부 잘 하는 사람들이 자신의 노하우를 전수해주는 책들은 별 도움이 못 될 것 같았다. 그보다는 원론적으로 접근해보고 싶었다. 학습을 할 때 내 머릿속에서는 어떤 일이 발생할까. 왜 항상 내 두뇌는 다른사람들의 것 보다 조금 모질라 보일까. 이런 것들이 학습법 개선에 있어서의 출발점이라 믿는다. 그리고 지반을 튼튼하게 다져주는 기본기 연마는 언제나 옳다.

저자는 이 책에 나오는 내용을 알기 전까지만 해도 복잡한 논문, 낯선 코드를 충분히 소화하지 못하는 자신에게 답답함을 느꼈다고 말한다. 하지만 이제는 '뇌가 큰 인지 부하를 겪고 있군'이라고 담담하게 얘기하고, 유연하게 대처할 수 있게 되었다고 한다. 나 또한 저자와 똑같이 답답함을 느꼈고, 이제는 자존감을 깎는 자책 없이 의연하게 대처할 수 있을 것 같다. 위와 같은 태도 하나만 얻어감으로도 이 책을 읽은 건 굉장한 수확이 아닐까.

코드 잘 읽기

1.코딩 중 겪는 혼란에 대한 (인지적) 이해

낯선 코드를 읽을 때 겪는 혼란의 세 가지 유형

  1. 지식의 부족
2 2 2 2 2 T n  
  • 위 코드는 APL 언어로 쓰였다.

  • T에 대한 지식knowledge이 없는 개발자는 위 코드가 혼란스럽게 느껴진다.

  1. 정보의 부족
public class BinaryCalculator{  
    public static void main(Integer n){  
        System.out.println(Integer.toBinaryString(n));  
    }}  
  • 자바로 쓰인 위 코드는 BinaryCalculator라는 클래스명과 toBinaryString이라는 메서드명을 통해 어느정도 기능을 유추할 수 있다.

  • 그러나 해당 메서드의 정확한 내부 동작에 대한 정보Information를 획득하기 전까지는 정확히 어떤 동작이 이루어질 지 단언할 수 없다.

  1. 처리 능력의 부족
LET N2 = ABS (INT(N))  
LET B$ = ""  
FOR N1 = N2 TO 0 STEP 0  
    LET N2 = INT(N1 / 2)  
    LET B$ = STR$ (N1 - N2 * 2) + B$  
    LET N1 = N2  
NEXT N1  
PRINT B$  
  • 베이직으로 쓰인 위 코드를 이해하기 위해서는 계속해서 변경되는 변수의 값을 추적하며 코드를 읽어나가야 한다.

  • 처리 능력processing power에 부하가 걸리면 혼란이 발생한다.

인간의 인지 과정

  1. 정보는 감각 기억 공간sensory memory(일종의 입출력 버퍼)을 거쳐서 STM에 다다른다.

  2. STM(Short Term Memory) 정보를 기억.

  3. Working Memory(작업 기억 공간) 정보를 처리.

  4. LTM(Long Term Memory)
    정보 -> 감각 기억 공간 -> STM -> Working memeory <-> LTM

  • LTM 기억하는 내용을 반영구적으로 저장하는 곳이다. HDD와 유사하다.

  • STM은 정보 수집 중 일시적으로 정보를 저장하는 곳이다. 새로이 유입되는 다른 정보에 의해 기존 정보가 빈번하게 잊혀진다. (캐시 or 메인 메모리)

  • STM에 저장된 정보는 30초라는 아주 짧은 시간 유지되었다가 이후 LTM에 저장되거나 잊힌다.

  • Working memory는 사고할 때 사용되는 영역이다. 머릿속에서 코드를 컴파일하고 실행한다 (트레이싱). 프로세서와 유사하다.

  • Working memory, STM에는 2개에서 6개 사이의 정보밖에 저장하지 못한다.

혼란과 관련된 인지 과정

  • 지식의 부족 = LTM의 문제
  • 정보의 부족 = STM의 문제
  • 처리 능력의 부족 = Working Memory의 문제

2.코드를 읽을 때 두뇌에서는 무슨 일이 일어나는가?

  • 연구에 의하면 개발자는 업무 중 60%의 시간을 코드 '작성'이 아닌 '이해'에 사용한다.

  • 정보를 기억할 때 STM은 크기에 대한 제약을 극복하기 위해 LTM과 협업한다.

청크chunk : 단위로 묶는 것의 위력

  • 체스 말의 위치를 체스 전문가들이 일반인들보다 더 잘 기억해낼 수 있는 이유는 체스 전문가들의 STM 용량이 더 크기 때문이 아니다.

  • LTM에서 시실리언 오프닝이라는 청크를 가져오면 하나의 STM 기억 공간으로도 많은 정보를 처리할 수 있게된다.

  • 관련된 정보를 묶어서 효율적으로 관리하는 것이 청크다.

두뇌가 뛰어난 사람이 코드나 체스의 위치를 잘 기억한다기 보다는 LTM에 관련 지식이 많이 쌓여 있어서 정보를 청크 단위로 묶을 줄 아는 사람이 잘 기억한다.

청크로 묶을 수 있는 코드 작성법

  • 디자인 패턴을 활용할 것.

  • 코드에 대한 사전 정보를 제공하는 고수준 주석문을 활용할 것.

  • 코드 내 표식beacon을 활용할 것. (유용한 정보를 제공하는 적절한 변수/함수 네이밍)

3.기억되는 지식과 잊혀지는 지식

업무 중단이 미치는 나쁜 영향

  • 연구에 따르면 코딩 도중 작업이 중단되면 다시 그 업무로 돌아가는 데 약 15분이 소요된다.

플래시카드를 이용한 학습법

  • 앞 면에는 문제를 정의하고 뒷 면에 정답을 적기.

  • 앞 면에는 프롬프트, 정답을 기억해 낼 수 있도록 요청하는 질문, 단어 혹은 문법을 적어서 정답 도출을 유도한다.

효율적인 기억법

  • 무엇인가 읽고 들어서 STM에 저장된 정보는 이후 LTM으로 옮겨진다.

  • LTM의 정보는 한 시간 이내에 50%가 휘발되고, 이틀 후에는 25%만이 잔여한다.

  • 두뇌의 기억은 폴더 HDD의 폴더 구조처럼 계층화 된 것이 아니고, 여러 정보들이 얽히고 얽힌 네트워크 구조와 유사하다.

  • 망각 곡선에 대한 연구는 반복 학습 시 어느 정도의 간격을 두는 게 가장 효과적인지에 대한 가이드를 제공한다.

  • 50개의 단어를 2주,4주,6주,8주 간격으로 13회 혹은 26회씩 반복하여 학습한 후 1년,2년,3년, 5년 후 테스트하는 실험 결과 8주의 간격을 두고 26회 반복한 경우가 효율이 제일 좋았다.

  • 즉, 오랫동안 학습한 만큼 더 오래 기억한다. 더 많은 시간을 학습해야 한다는 것이 아니라 더 오랜 간격을 두고 학습해야 함을 의미한다.

기억을 강화하는 두 가지 테크닉, 인출과 정교화

  • 인출retrieval : 적극적으로 무언가를 기억해보려고 애쓰는 것.

  • 정교화elaboration : 기존 기억에 새로운 지식을 적극적으로 연결시키는 것.
    ^822cd8

  • 무언가를 능동적으로 기억하려고 하는 행위가 기억을 강화한다.

  • LTM에 저장된 정보를 잘 인출해오는 것이 중요하다.

스키마타

  • 우리 두뇌에서 기억은 다른 기억과 사실에 연관되는 일종의 네트워크 형태다.

  • 스키마schema 혹은 스키마타schemata : 사고나 생각이 서로 관련되어 조직된 방식

  • 새 정보를 학습할 때 정보는 LTM에 저장되기 전 먼저 스키마의 형태로 만들어진다.

  • 이미 존재하고 있는 스키마에 잘 맞는 형태의 정보일수록 더 쉽게 융화되고 기억된다.


인지 부하

  • Working memory는 2개 ~ 6개까지만 기억할 수 있다. 한번에 처리할 수 있는 이 허용치를 넘어서면 인지 부하cognitive load, 혹은 과부하 overload가 발생한다.

  • 작업 중 인지 부하를 줄이기 위해 각고의 노력을 쏟아야 한다. 리팩터링을 통해 코드를 읽기 쉽게 만들고, 각종 기록 혹은 상태표나 그래프에 의존하여 작업해야 한다.