반응형
1. 복잡한 코드를 이해하는 것이 왜 어려울까?
결론 적으로 작업 기억 공간이 부족하기 때문이다.
- 작업 기억 공간과 STM차이
- STM의 역할이 정보를 기억하는 것인 반면, 작업 기억 공간의 역할은 정보를 처리하는 것이다. 이 책에서는 ‘작업 기억 공간’이라는 용어를 ‘문제에 적용된 STM’의 의미로 사용된다.
- STM과 같이 작업 기억 공간도 한 번에 2개에서 6개까지만 기억할 수 있다. 작업 기억 공간의 맥락에서 이 용량을 인지 부하라고 부르며, 너무 많은 요소가 있어 청크로 나뉘지 않는 문제를 풀려고 할 때 작업 기억 공간은 과부하(overload) 상태가 된다.
- 프로그래밍 관련한 인지 부하의 종류
💡 내재적 부하: 문제 자체가 얼마나 복잡한지
외재적 부하: 외부적 요인에 의해 문제에 추가된 것
본유적 부하: 생각을 LTM에 저장하는 과정에서 일어나는 인지 부하
- 코드를 읽을 때 내재적 인지 부하
- 내재적 인지 부하(intrinisc cognitive load)는 문제 그 자체가 갖는 특성 때문에 발생하는 인지 부하다. 프로그래밍에서는 내재적 복잡성이라는 용어를 사용해서 문제의 내재적 측면을 설명한다.
- 코드를 읽을 때 외재적 인지 부하
- 외재적 인지 부하는 내재적 인지 부하 이후에 추가되는 인지 부하이다. 따라서 같은 코드를 읽었을 때 발생하는 내재적 인지 부하는 동일하지만 코드를 알고 있는 사람과 모르는 사람의 외재적 인지 부하의 크기는 다르다.
2. 인지 부하를 줄이기 위한 기법
- 리팩터링
- 리팩터링은 코드가 외부적으로 제공하는 기능은 유지한 채 내부 구조를 개선하는 것을 의미한다.
- 장기적으로 가독성이 높은 코드를 작성하도록 리팩터링 하는 것을 인지적 리팩터링이라고 정의한다
- 생소한 언어 구성 요소를 다른 것으로 대치하기
- 인지부하를 줄이기 위해 다른 코드로 대치하려는 이유는 첫 번째로 언어 구성 요소들이 이해하기 어렵기 때문이고, 두 번째로는 더 기본적인 문법으로 같은 기능을 수행하는 것이 가능하기 때문이다.
- 자신이 이해할 수 있는 형태로 코드를 변경하다 보면 협업 과정에서 마찰이 생길 수 있다. 이럴 때는 코드 변경 후 이해하고 나면 수정한 코드를 원래 상태로 되돌리면 된다.
- 플래시카드에 코드 동의어 추가
3. 작업 기억 공간에 부하가 오는 이유와 과부하 시 사용할 수 있는 기억 보조 수단
- 작업 기억 공간에 과부하가 오는 이유
- 정확이 코드의 어디를 파악해야 하는지 모를 때
- 코드가 서로 밀접하게 연결되어 있는 경우 두뇌는 두 가지 작업을 동시에 수행한다. 예를 들어 정확이 무슨 일을 하는지 알지 못하는 함수에 대한 호출이 코드에서 이루어진다면 코드 파악을 계속하기 전에 우선 그 함수를 찾아서 읽어야 한다.
- 의존 그래프 생성: 이 방법은 코드의 흐름을 보여주므로 코드의 구조에 대한 정보를 가진 레퍼런스로 활용할 수 있다.
- 모든 변수를 원으로 표시한다.
- 비슷한 변수를 연결한다.
- 모든 메서드나 함수 호출을 원으로 표시한다.
- 메서드나 함수 호출을 정의와 연결한다.
- 클래스의 모든 인스턴스를 원으로 표시한다.
- 클래스와 그 클래스의 인스턴스를 연결한다.
- 상태표 사용: 코드에서 수행하는 계산 로직이 어려울 때 사용하면 좋다.
- 모든 변수를 나열한다.
- 테이블을 만들고 각 열에 하나의 변수를 기입한다.
- 코드의 실행 단계마다 행을 만든다
- 코드를 각 단계별로 실행하고 그 단계에서 변수들의 값을 해당하는 열과 행에 적는다.
발제문
- 초기 프로그래밍을 배울 때는 개념도 제대로 잡히지 않은 상황이다 보니 내재적 인지 부하는 당연했기에 그러려니 했었는데 외재적 인지 부하는 머리가 지끈 거릴 정도로 견디기 힘들더군요.
물경력 이긴 하지만, 내재적 인지 부하는 기초 개념이 어느 정도 확립되면서 자연스럽게 줄어들었습니다. 그런데 이상하게도 외재적 인지 부하도 같이 감소하는 느낌을 받았어요. 잠시 생각해 보니, 그 이유는 제가 사용하고 있는 언어나 프레임워크가 발전하면서 자연스럽게 외재적 인지 부하를 최소화하도록 유도하고 있다는 것을 깨달았습니다.
예를 들어 초기 개발을 공부할 때는 명령형 프로그래밍 코드를 많이 작성하다 보니 코드를 읽으면서 추가적으로 계산 로직을 머리로 실행했지만 선언형 프로그래밍이 발전함에 따라 다양한 코드의 로직들이 추상화되었기에 별도의 계산 로직을 실행하는 경우가 많이 줄어들었습니다.
이렇게 우리는 인지 부하를 최대한 줄이기 위해 노력하는 사람들의 고뇌의 결과물들을 인식하지 못한 채 많은 혜택을 받고 있습니다. 디자인 패턴, IDE, 라이브러리 혹은 프레임 워크 등을 통해 인지 부하를 줄여본 경험 있다면 공유부탁드립니다.
반응형
'독서 > 2024' 카테고리의 다른 글
[프로그래머의 뇌] CHAPTER6 코딩 문제 해결을 더 잘하려면 (1) | 2023.05.14 |
---|---|
[프로그래머의 뇌] CHAPTER5 코드를 더 깊이 있게 이해하기 (1) | 2023.05.13 |
[프로그래머의 뇌] CHAPTER3 프로그래밍 문법 빠르게 배우기 (0) | 2023.05.11 |
[프로그래머의 뇌] CHAPTER2 신속한 코드 분석 (0) | 2023.05.10 |
[프로그래머의 뇌] CHAPTER1 코딩 중 겪는 혼란에 대한 이해 (0) | 2023.05.10 |