[프로그래머의 뇌 - 1] 인지 과정과 코드 읽기

yongkini ·2022년 4월 18일
0

프로그래머의 뇌

목록 보기
1/1

프로그래머의 뇌 읽기

: 우리는 뭔가를 인지할 때 컴퓨터처럼
사고 작용을 담당하는(CPU) - 작업 공간이라고 할 수 있다.
장기적으로 내용을 기억하는 하드 드라이브 - LTM(Long Term Memory)
단기적으로 내용을 기억하는 메모리 - STM(Short Term Memory)
입력을 받고 잠시 해당 입력을 기억하는 버퍼 메모리 - 촉각, 청각, 시각 등의 감각들

위와 같이 우리는 인지를 한다. 책을 읽는다고 할 때도 '글자에 대한 지식', '해당 글자들이 모여서 이루는 단어의 의미', '단어가 특정 도메인에서 갖는 의미' 등의 롱텀 메모리와 이전 문장과 다음 문장 그리고 그 전 문단 등을 기억하는 short term memory 마지막으로 이러한 두가지 기억들을 바탕으로 내용을 해석, 이해하는 사고작용을 하는 작업 공간과 같은 것이 쓰여진다(시각적으로 글을 읽을 때 해당 내용을 받아들이는 눈 등도 생각해볼 수 있다).

그럼 개발자들도 결국 코드를 읽을 때 혹은 해석할 때 위와 같은 인지과정을 거친다고 할 수 있다. 자바스크립트 코드로 된 코드를 읽을 때 나는 해당 도메인에 대한 롱텀 메모리(JS 문법에 대한 지식, 디자인 패턴 등)를 써서 코드를 읽을 것이고, 읽어 내려가면서 바로 직전의 코드, 메서드 등에 대해서 기억하면서 코드를 읽어나갈 것이다. 그리고 결국 머리속에서 이들을 바탕으로 코드를 해석할 것이다. 하지만, STM(Short Term Memory)에는 한계가 있어서 일정량이 채워지면 우리는 이를 잊게 된다. 그러면 어떻게 최대한 적은 수의 단위로 STM을 만들어서 사고작용을 제대로 할 수 있을까?. 생각해보면 우리는 낯설거나, 잘 모르는 코드를 볼 때 STM의 단위를 너무 많이 쪼개게돼 결국 제대로된 사고를 하지 못한다. 이는 결국 LTM의 부족이라고도 할 수 있다. 예를 들어, 같은 코드를 봐도 많은 지식이 있는 개발자를 이를 보고, 좀더 큰 단위로 생각을 할 수 있다. 이러한 생각단위를 청크라고 부르는데, 이러한 청크를 크게크게 가져갈 수 있는 개발자의 사고 과정이 훨씬 심플하다. 초급 개발자를 생각해보면, 코드의 의미를 해석하는데에 바쁘기 때문에 STM에 들어가는 정보가 너무 작은 단위로 쪼개져있기에 제대로된 사고작용을 할 수 없다. 하지만, LTM이 충분한 개발자는 같은 코드도 좀더 큰 단위로 묶어서 생각할 수 있고(청크), 이를 통해 까먹지 않고, 사고를 이어나갈 수 있다.

그래서 개발자들은 본인의 코딩 실력 혹은 코드 독해실력을 테스트해보기 위해 본인이 이전에 작성했던 코드 등을 5분정도 읽어보고, 그것을 가리고 기억해보고 재타이핑 해보는 과정을 통해 본인의 수준을 가늠할 수 있다. 나의 경우 redux-saga나 thunk에 대한 지식 혹은 경험이 아직은 부족하여 이와 관련된 코드를 읽으면 STM에 들어가는 정보가 너무 많아져 결국 코드를 제대로 해석하지도 못하고 지쳐버린다. 하지만 이에 대한 LTM이 많다면, 청크 단위로 이를 쪼개서 생각할 수 있고, 특정한 패턴으로 큰 단위로 기억을 STM으로 옮겨서 할 수 있기에 유연한 사고가 가능해질 것이다.

기억할 것

  • 익숙치 않은 코드 혹은 그러한 패턴으로 이뤄진 코드를 읽는 것은 당연히 힘들다. 그렇기에 그 때 자책만 하지말고 그러한 패턴에 좀더 익숙해지고, STM에 좀더 대단위 기억을 두기 위해 주석, 디자인 패턴, 표식 사용 등의 방법을 써서 이해하기 쉬운, 읽기 좀 더 쉬운 코드를 작성해보도록 노력하자.
  • 아직 숲을 볼 수 없는 수준이라면, 나무부터 천천히 보면서 접근하자. LTM에 너무 적은 정보가 있는 것은 주니어로서 당연하다. 이럴 때는 억지로 STM을 과부하시켜서 사고작용의 비효율성을 야기하지말고, 지금 내 수준에서 감당되는 수준으로 태스크를 쪼개고, 사고 과정을 쪼개서 사고하자.
  • 앞서 말한 것처럼 인간은 컴퓨터보다 훨씬 작은 캐시 메모리(STM)를 가지고 있다. 이에 따라 컴퓨터만큼의 사고를 할 수 없고, 하려하면 과부하가 일어난다. 이러한 상황에서 코드를 제대로 분석하고, 이해하는 개발자가 되려면 이러한 인간의 한계를 인정하고, 인간의 사고 프로세스에 대한 이해를 바탕으로 일종의 치트키(?)등을 적절히 잘 써야한다. 그것이 바로 앞서 말한 주석, 디자인 패턴 등의 스킬이고, LTM의 증진을 통해 청크 단위로 코드를 이해할 수 있도록 노력하는 것이다. 인간의 STM이 작기에 그 STM에 넣을 수 있는 기억의 단위를 최대한 크게 해서 수를 줄이자라는 것.
    I love cat 을 외운다고 생각할 때 영어를 모르는 사람은
    I,l,o,v,e,c,a,t 8개의 글자를 STM에 넣어야하지만
    영어를 아는 사람은
    I, love, Cat(혹은 더 작은 단위까지 가능할 것이다.)
    이렇게 3개의 단위로 STM을 활용하여 이를 기억 및 이해할 수 있다.
  • 따라서, 이전에 본인이 쓴 코드 혹은 본인이 알고 있는 도메인으로 쓰인 코드를 읽어보고, 이를 기억해보는 과정을 통해 어떤 부분에 약하고, 보완해야하는지를 측정해볼 수 있다.

느낀점 혹은 활용해 볼 부분 정리

  • 인간의 기억 공간이 작다는 점을 생각해보면 너무 당연하지만 제대로 뭔가를 시작하기 전에 주변 정리, 생각 정리 등 기억 공간을 비워놓는 작업을 해야한다(특정 목표를 위해)
  • 그리고 그 기억 공간을 잘 활용할 수 있도록, 목표를 명확히 한다.
  • 코드를 읽을 때 혹은 코드를 설계할 때(코딩을 할 때) 목표를 명확히 하되 그 목표를 너무 크게 가져가지 않는다(코드를 해석할 때도 범위를 너무 크게하지말고, 설계할 때도 소단위 기능으로 나눈다).
  • 이해가 안되거나 모르는 부분은 결국 중간에 흐름을 깨거나, STM의 부하를 일으키기 때문에 꼭 해결하고 간다.
  • 해결하고 다시 돌아왔을 때 STM이 reset되지 않도록, 다른 정보들은 최소화하고, 현재 진행중인 task의 내용을 주석 혹은 메모하면서 작업한다.
  • 한 단위의 task가 완료되면 이를 청크화 시켜서 STM에 넣어가면서 작업한다고 생각하자(혹은 메모). 그리고 점점 이 단위가 커지는 것이 느껴진다면 성장하고 있다는 것!(예전에는 Redux를 쓸 때 dispatch, store 등등 개념을 하나하나 생각하면서 했다면 이제는 좀 더 큰 단위의 디자인 패턴으로 기억하여 STM을 더 잘 활용할 수 있게 된 것처럼)
profile
완벽함 보다는 최선의 결과를 위해 끊임없이 노력하는 개발자

0개의 댓글