-
<프로그래머의 뇌> 정리Study/개발 2025. 8. 16. 19:02
https://www.yes24.com/product/goods/105911017
프로그래머의 뇌 - 예스24
인지과학을 활용한 개발자의 일머리 개선법 이 책은 인지과학에 기반을 둔 각종 방법론으로 개발자가 새로운 언어나 프레임워크를 빠르게 배워 생산성을 향상하도록 돕는다. 코드를 더 잘 이해
www.yes24.com

프로그래머의 뇌 - 훌륭한 프로그래머가 알아야할 인지과학의 모든 것 크게 네 파트로 구성되어, 개발하면서 겪는 어려움을 인지 과학의 관점에서 분류한다.
이를 분석하여 어떻게 해야 코드를 잘 읽고 좋은 코드를 작성할지에 대해 설명한다.공감되는 부분도 많고 머릿속으로만 느끼던 부분들에 대해 구체적으로 설명해주기 때문에 실무에서도 도움이 될 것 같다.
- 내가 짠 코드를 상대방에게 설명하거나, PR을 작성할 때
- 좋은 코드, 안좋은 코드 느낌은 있지만 설명을 잘 못하겠을 때
- 이해하기 쉬운 코드를 작성하기 위해 고민할 때
내가 이해한 흐름으로 큰 내용을 재구성하여 짧게 정리해보았다.
인지과학적 관점의 프로그래밍
인지과학에서 우리 뇌는 크게 세 부분으로 구분된다.
- LTM(Long term memory) - 장기 기억 공간 (지식) - 하드 디스크
- STM(Short term memory) - 단기 기억 공간 (정보) - 메모리
- 작업 기억 공간 - 지식과 정보를 통해 처리. 생각, 아이디어, 해결책 등이 만들어짐. - 프로세서
코드를 읽는 것은 LTM, STM, 작업 기억 공간의 복합적인 작용이다.
코드를 읽을 때 뇌는 LTM, STM에서 정보를 인출하여 작업 기억 공간에서 처리한다.하지만, 작업 기억 공간에 들어갈 수 있는 정보의 개수는 한정되어있고, 굉장히 적다.
그럼 어떻게 해야 코딩처럼 많은 정보를 처리하는 일을 잘 할 수 있을까?LTM 더 활용하기
먼저 "청크"를 활용하는 것이다.
정보의 개수가 한정되어있다고 했지만, 어떤 사람들은 굉장히 많은 정보를 처리한다.
이는 작업 기억 공간에 정보가 들어갈 때, 관련된 정보들이 청크 단위로 함께 들어가기 때문이다.ex) 트리를 활용한 코드를 읽을 때
트리와 관련된 지식들이 청크로 작업 기억 공간에 들어감.
트리 관련 메서드, 프로퍼티 등은 이미 알고 있기 때문에 다른 부분을 더 파악할 여지가 큼
그런 지식이 없을 때는 트리 관련된 정보를 읽는 것부터 부하가 생김청크를 잘 꺼내 쓰려면 "표식"이 중요하다.
표식은 이 코드가 어떤 지식과 연관되어 있는지를 나타내는 어떤 표지이다.
변수명이나 문자열, 또는 코드 구조가 될 수 있다.ex) 트리 구조
root, left, right 등을 통해 tree 구조와 관련된 지식을 떠올릴 수 있다.위의 내용처럼, 코드를 잘 읽으려면 LTM에 지식이 쌓여있는 것이 좋다.
반복/인출/정교화를 통해 LTM의 지식을 강화할 수 있다.- 반복 - 반복을 통해 장기 기억으로 저장
- 인출 - 의도적으로 떠올리는 연습을 통해 인출력 강화 - LTM에서 잘 꺼낼 수 있어짐
- 정교화 - 기존 지식과의 연결을 통해 강화 - 청크 활용을 강화
작업 기억 공간 부하 줄이기
작업 기억 공간에 많은 정보가 들어가면 부하가 생겨 처리에 어려움을 겪는다.
이걸 "인지 부하"라고 한다.
높아진 인지부하를 감소시키는데엔 보조도구를 사용하는 것이 도움이 된다.- 머릿속 실행 결과를 주석으로 달아두기
- 모델링하여 그래프로 그려보기
- 상태변화를 상태표로 나타내보기
- 어려운 코드를 읽기 쉽게 리팩토링 해보기 (임시라도)
코드에 적용하기
이 장에서는 앞서 배운 개념들을 토대로
- 코드를 더 잘 이해하기
- 코딩 문제를 잘 해결하기
에 대해 공부한다.
코드 이해
코드를 읽고 이해하는 것은 개발자가 가장 많이 하는 일이다.
역시 여기에도 LTM을 활용할 수 있다."변수의 역할"을 분류하여 어떤 변수가 어떻게 동작하는지에 대한 지식이 미리 있다면,
코드를 읽을 때 미리 관련 청크를 가져와 작업 처리 공간을 더 효율적으로 사용할 수 있다.ex) Stepper 변수
i, j, k 등의 변수는 반복문 내의 stepper로 사용되므로, 반복문과 관련된 기억을 가져올 수 있다.코드를 읽는 것은 또한 텍스트 읽는 것과 유사하다.
긴 글을 읽을 때 처럼 스캔을 한다면 미리 필요한 지식 청크들을 가져올 수 있기 때문에 이해에 도움이 된다.문제 해결
복잡한 문제는 인지부하가 커진다.
그렇다면 LTM을 활용하고, 작업 기억 공간의 부하를 줄여 문제 해결에 도움을 줄 수 있다.멘탈 모델을 통해 문제의 일부를 추상화하면 인지부하를 줄일 수 있다.
1) 추상화를 통해 복잡한 디테일은 숨긴다.
2) 추상화와 관련된 기억을 LTM에서 가져올 수 있다.ex)
네트워크도 추상화 레이어가 없다면, 물리적으로 데이터를 전송하는 방법까지 생각해야한다.
하지만 그런 복잡한 디테일은 숨겨져 있으므로 더 쉽게 네트워크를 다루고 이해할 수 있다.ex)
DP 문제를 자주 풀어본 사람은 문제를 읽고 DP의 풀이법을 떠올려서 쉽게 풀 수 있다.어떤 문제를 해결하는것에 익숙해지면, 그 문제를 해결할 때에는 인지능력이 거의 사용되지 않는다.
이런 종류의 기억을암시적 기억, 이걸 활용하는 것을자동화 (automization)라고 한다.암시적 기억이 많아지면, 복잡한 문제의 많은 디테일에 집중하지 않아 인지 부하가 줄어든다.
그러면 문제해결 자체에 집중할 수 있기 때문에 크고 복잡한 문제의 해결에도 도움이된다.- 의도적인 반복 연습
- 다른 좋은 코드를 분석 및 학습
좋은 코드 작성하기
좋은 코드를 작성하기 위해서는 이름을 잘 지어야한다. 실제로 코드 베이스의 상당 부분이 "이름"에 해당한다.
- 좋은 이름 사용
- 이름을 통해 이미 알고 있는 정보를 LTM에서 가져옴
- 코드내에서 정보를 제공하는 "문서"의 역할을 할 수 있음
- 나쁜 이름 사용
- 코드에 대한 잘못된 추측, 오개념 생기게 함
- 이름에서 정보를 찾지 못하면 다른 곳에서 정보를 찾게되어 인지 부하 증가.
- 나쁜 이름과 버그는 상관관계가 있다.
좋은 이름이란?
이해하기 쉽도록, 너무 짧거나 길지 않은 이름
코드베이스 내의 규칙에 따라 일관성있게 지은 이름코드베이스 내에서 일관성 있게 명명한 변수는 협업하는 사람들의 인지부하를 줄이는데에 도움이 된다.
다만, 코드베이스의 규칙을 바꾸는 것은 쉽지 않으니 초기에 잘 정해야한다.언어적 안티패턴
코드가 실제 수행하는 작업과 맞지 않는 이름을 가질 때 "언어적 안티패턴"이라 칭한다.
이런 "나쁜 이름"은 LTM의 최적화와 오히려 반대로 작용하여 더 높은 인지부하를 줄 수 있다.e.g. isValid라는 변수가 불리언 값 대신 정숫값을 가지면 기존 정보와 달라 헷갈릴 수 있다.
식별자가 그 이름보다 더 많거나, 적은 역할, 또는 반대의 역할을 하지 않도록 주의해야한다.
업무 중단에 대응하기
업무가 중단되면 작업 기억 공간이 작업 중이던 중요한 정보를 잃어버린다.
작업으로 되돌아가기 위해서는 의도적으로 노력하는 워밍업의 단계가 필요하다.개발자 업무 시간의 약 20%가 업무 중단에 사용된다.
또한, 중단은 짜증, 불안, 실수의 정도도 높인다.
이런 업무 중단에 잘 대응할 수 있다면 더 효율적으로 일하여 생산성을 높일 수 있다.대응
- 중단 시, 진행 상황에 대한 정신 모델을 작성해두기 (메모, 주석 등)
- 큰 task를 미리 subtask로 나누고 계획해두기
- 멀티 태스킹 피하기 (메신저, 음악 듣기 등)
책을 읽으며 중요하다고 느낀 부분들을 간단히 정리해보았다.
책에는 더 디테일한 부분들과 설명들, 그리고 관련 연구 자료와 근거들이 나와있다.
또한 이런 이론들을 연습해 볼 연습 방법들도 수록되어있다.
그러므로 관심이 생긴다면 한번 직접 읽어보는 것 추천한다.728x90'Study > 개발' 카테고리의 다른 글
FE Conf 2025 후기 (6) 2025.08.24 [Github MCP] Github 작업은 AI에게 맡겨보자 (7) 2025.04.29 뚝뚝 끊기는 이미지 UX 개선 - Progressive 이미지 (0) 2025.04.27 Neovim에서 Copilot 사용하기 (0) 2025.02.28 [Naver D2] 고급 타입스크립트 세션 정리 (0) 2025.02.25