프로그래머의 뇌 (펠리너 헤르만스 지음)
📍목차
1장 | 코드 더 잘 읽기
1. 코딩 중 겪는 혼란에 대한 이해
2. 신속한 코드 분석
3. 프로그래밍 문법 빠르게 배우기
4. 복잡한 코드를 읽는 방법
📍4-1. 복잡한 코드를 이해하는 것이 왜 어려울까?
✅작업 기억 공간 (Working Memory) 은 특정 문제에 대한 STM이다. 따라서 많아봐야 7개 정도의 공간 제한이 있다.
인지 부하(cognitive load) : WM이 처리할 수 있는 한계
인지 부하가 한도를 초과하면 과부하(overload) 상태가 된다
✅인지 부하의 3종류
- 내재적 부하 : 문제 자체의 복잡도.
예) 피타고라스의 법칙을 이해. 3^2 + 4^2 = 5^2
- 외재적 부하 : 외부적 요인에 의해 문제에 추가된 것
예) 피타고라스의 법칙을 사용하기 위해 변수에 실제 숫자를 대입해야 함. a^2 + b^2 = c^2 에 숫자를 대입
프로그램의 우발적 복잡성과 비슷
예) 결과를 위해 과정이 인위적으로 더 복잡해질 수 있는 것
- 본유적 부하 : 생각을 LTM에 저장하는 과정에서 일어나는 인지 부하
인지 부하 예시
# 코드 1. (잠재적) 외재적 부하 + 내재적 부하
# 리스트 컴프리헨션을 이해한다면 쉽지만
# 모르면 인지 부하 증가
above_ten = [a for a in items if a > 10]
# 코드 2. (같은 역할이므로) only 내재적 부하
above_ten = []
if a > 10:
above_ten.append(a)
📍4-2. 인지 부하를 줄이기 위한 기법
✅인지 부하를 줄이기 위한 리팩토링 : 인지적 리팩토링
- 가독성을 좋게 만들기 위해 현 시점에서 개발자가 읽기 쉬운 코드로 변경하는 것
- 유지보수를 쉽게하는 일반적인 리팩토링과 다름
예) 다른 위치의 메서드를 실제 사용처 가까운 곳으로 가져옴
✅생소하지만 간편한 문법을 쉬운 문법으로 바꾸기
예) 가독성을 위해 사용하는 파이썬의 리스트 컴프리헨션에 익숙하지 않다면, 일반적인 for loop로 바꾸기
외재적 부하로 인한 과부하 유발을 방지할 수 있다
📍4-3. 작업 기억 공간에 부하가 오면 쓸 수 있는 기억 보조 수단
✅복잡한 코드는 2가지 방식으로 WM의 과부하 유발
1. 코드의 어디부터 파악해야 할지 모를 때
-> 필요 이상의 많은 코드를 읽게 하여 WM의 인지 부하 초과
2. 위치가 다른 코드가 밀접하게 연결되어 있을 때
-> import 하는 메서드로 이동하여 읽어야 함
✅시도해볼만한 방법
1. 의존 그래프
코드를 출력하거나 PDF로 전환하여 변수/메서드 등에 원을 표시하고 연결
2. 상태표 사용
엑셀 등에 인덱스별 변수 변화를 표시 -> 특히 반복문을 순회하는 경우 좋음