2장 신속한 코드 분석
- 프로그래머가 일하는 시간 중 코드를 읽고 분석하는 시간은 생각보다 많다.
- 연구에 따르면 프로그래머의 시간 중 거의 60%를 코드를 ‘작성’하는 게 아니라 ‘이해’하는 데 사용한다고 한다.
- 따라서 정확도를 유지하면서 코드를 빨리 이해하도록 향상한다면 프로그래밍 기술이 크게 개선되는 셈이다.
1. 코드를 신속하게 읽기
- 현실적으로 프로그래머들은 코드를 읽는 법보다 작성하는 법을 훨씬 더 많이 연습한다.
- 코드를 읽는 모든 상황에서 한 가지 공통점은 코드를 읽을 때 우리는 그 코드에 존재하는 특정한 정보를 찾는 다는 점이다.
- 예를들어 새로운 기능을 추가할 적당한 부분, 마지막으로 수정한 코드 중 특정 버그가 있을 만한 곳 등
- 관련 정보를 신속하게 찾는 능력을 향상하면 코드를 다시 찾아보는 횟수를 줄일 수 있다.
- 코드를 읽는 기술의 수준이 높아지면 추가 정보를 찾기 위해 코드 여기저기를 살피는 횟수 역시 줄어들게 된다.
- 생소한 코드를 읽는 것은 왜 어려운가?
- 결정적으로 STM의 용량에 제한이 있기 때문이다.
- 코드에 있는 모든 정보를 STM에 저장하고 처리하는 것은 물리적으로 불가능하다.
- STM은 정보를 짧은 시간만 저장하는데 30초를 넘지 않는다고 함
- 30초 후 그 정보는 LTM에 저장되거나 잊혀진다.
- 이 작은 용량을 극복하기 위해 STM은 LTM과 협업하여, 읽거나 기억한 정보를 이해한다.
2. 기억의 크기 제한을 극복하기
- 인간은 제한된 기억력으로 어떻게 다른 많은 일을 할 수 있는 것일까?
- 단위로 묶는 것의 위력
- 청크라는 단위로 데이터를 묶어서 기억한다.
- 이는 6개의 제한된 STM 용량에 데이터 덩어리를 기억하게 함으로 한계를 극복할 수 있음.
- 예시) 체스 전문가들은 경험으로 이미 기억하고 있는 포석들을 기반으로 체스판에 있는 말들의 위치를 일반인들 보다 더 잘 기억할 수 있음. 하지만 실제 체스 게임에서 일어날 수 없는 위치의 포석같은 경우 일반인과 차이가 없었다.
- LTM에 지식이 많으면 기억을 쉽게한다는 사실은 프로그래밍에도 해당한다.
3. 읽는 것보다 보는 것이 더 많다.
- 정보는 STM에 도달하기 전에 감각 기억 공간이라는 영역을 통과한다.
- 감각 기억 공간은, 컴퓨터에 비유하면 마우스나 키보드 같은 입력장치와 통신하는 입출력 버퍼라고 볼 수 있다.
- 영상 기억 공간
- 정보가 감각기관을 통해 들어오면 STM으로 전달되기 전에 감각 기억 공간에 저장된다.
- 코드를 읽을 때에는 우리 눈을 통해 정보가 들어오는데 이 정보는 영상 기억 공간에 잠시 저장된다.
- 이 장소는 용량 제한을 갖는 STM과는 다른 곳이다.
- 영상 기억 공간에 저장된 모든 정보를 STM이 처리할 수 있는 것은 아니기 때문에, 코드를 읽을 때는 처리할 수 있는 정보를 선택해야 한다.
- 하지만 이런 선택이 의식적으로 이루어지는 것은 아니다.
- 코드의 어떤 자세한 부분을 놓치고 지나가는 일이 있는데 이것은 종종 무의식적으로 일어난다.
- 이것이 의미하는 바는 코드에 대해 STM이 처리할 수 있는 것보다 더 많은 정보를 저장하는 것이 이론적으로 가능하다는 것이다.
- 기억하는 대상이 중요한 것이 아니라 기억하는 방식이 중요하다.
- 프로그래밍 코드의 경우 어떻게 해야 읽기 쉬운 코드를 작성할 수 있을까?
- 그룹으로 나누기 쉬운(두뇌에서 처리하기 쉬운) 코드를 작성해야 한다.
- 그룹으로 묶기 쉬운 코드를 작성하려면 디자인 패턴을 사용하면 된다.
- 연구결과 디자인 패턴을 학습한 프로그래머는 해당 패턴을 적용한 코드를 수정하는데 시간이 단축된다.
- 주석문 쓰기
- 주석문이 있으면 새로운 팀원이 코드를 쉽게 이해할 수 있다.
- 주석문은 개발자가 코드를 청킹하는 방식에도 영향을 미친다.
- 표식 남기기
- 표식은 일반적으로 코드 내에서 사용하는 특정 자료구조, 알고리즘 혹은 접근 방식 등을 보여주는 라인을 뜻한다.
- 표식은 개발자가 코드를 읽을 때 그 코드가 무엇을 하는지 이해하는 데 도움이된다.
- 표식은 코드를 읽고 이해하는 과정에서 소스 코드에 대해 개발자가 갖는 가정이 맞거나 틀린 것을 확인해주는 역할을 수행하기 때문에 매우 중요하다.
- 표식은 청크와 관련있지만 대부분의 연구자는 그 둘을 다른 개념으로 본다.
- 표식은 보통 청크보다는 좀 더 작은 코드의 일부분으로 받아들여진다.
- 숙련된 개발자는 코드를 읽고 이해할 때 표식을 많이 이용하지만 초급 개발자는 그렇지 않다.
- 청킹 연습
- 경험이 쌓이면서 프로그래밍에 대한 지식이 자연스럽게 늘어나긴 하지만, 코드 청킹을 의도적으로 연습하는 방법이 있다.
- 의도적 연습 - 어떤 기술을 향상하기 위해 조금씩 연습하는 것을 의미한다.
- 프로그래밍의 경우에는 여러 가지 이유로 의도적 연습이 흔치는 않다.
- 많은 사람이 코드를 많이 작성하는 것으로 프로그래밍을 연습하지만 효과적인 방법은 아닐 수 있다.
- 청킹을 의도적으로 연습하기 위해서는 적극적으로 코드를 기억해내는 것을 훈련하면 좋다.
- 1단계 - 코드 선정
- 어느정도 익숙한 코드 베이스를 고른다. 최대 50라인
- 2단계 - 코드 파악
- 3단계 - 코드 재현
- 새로운 파일을 열고 기억을 되살려 그 코드를 작성한다.
- 4단계 - 회고
- 5단계 - 다른 사람과 비교