본문으로 건너뛰기

5장 코드를 더 깊이 있게 이해하기

1. ‘변수 역할’ 프레임워크

  • 코드에 대해 추론할 때는 변수가 중심적인 역할을 한다.
    • 변수가 어떤 종류의 정보를 담고 있는지 이해하는 것은 코드를 추론하고 수정하는데 결정적인 역할을 한다.
    • 이 점 때문에 적절한 변수명은 표식으로 사용될 수 있고 코드를 깊이 이해하는 데도 도움이 된다.
  • 변수를 이해하기 어려운 이유는 대부분의 프로그래머가 변수를 연관 지을 좋은 스키마를 자신들의 LTM에 가지고 있지 않기 때문이다.
  • 변수의 11가지 역할
    • 고정값 - 초기화를 통해 값이 할당 된 이후 변경되지 않는 변수
    • 스테퍼(stepper) - 루프를 반복 실행하며 값이 단계적으로 변하는 변수
    • 플래그 - 무언가 발생했거나 어떤 경우에 해당하는지를 나타내는 변수
    • 워커 - 스테퍼와 비슷하게 자료구조를 순회한다. js의 for in
    • 최근값 보유자 - 어떤 값이 변해갈 때 가장 최근에 변경된 값을 갖는다
    • 목적값 보유자 - 어떤 값에 대해 반복할 때 그 목적이 어떤 특정한 값을 찾는 것일 수 있다. max, min값 등
    • 모집자 - 데이터를 모으거나 모은 데이터에 대해 어떤 연산을 수행하여 얻은 값을 저장하는 변수
    • 컨테이너 - 값을 추가하거나 삭제할 수 있는 자료구조
    • 추적자 - 어떤 알고맂므에서 이전 값 혹은 다음 값을 추적할 필요가 있다. 예를 들어 연결 리스트에서 이전 값에 대한 포인터가 해당함
    • 조직자 - 추가적인 처리를 위해 값을 변환하는 변수. 예를들어 문자열 내 개별 문자에 접근하기 위해 문자 배열로 변환
    • 임시 - 임시값

2. 역할과 패러다임

  • 위 변수의 11가지 역할은 특정한 프로그래밍 패러다임에만 제한되지 않는다.
  • 역할의 이점
    • 이 프레임워크는 새로운 개념이라기보다는 변수에 대해 논의할 때 사용할 수 잇는 새로운 용어를 제공해주는 정도라고 생각하면 된다.
    • 이 프레임워크를 같은 팀원끼리 공유하면 코드를 이해하고 의사소통하는 데 큰 도움이 될 것이다.

3. 프로그램에 대해 깊이 있는 지식을 얻으려면

  • 프로그래머가 소스 코드를 이해하는 두 개의 서로 다른 층위 모델
    • 텍스트 구조 지식
      • 키워드가 하는 일이나 변수의 역할 같은 프로그램의 표면적인 이해와 관련
    • 계획 지식
      • 프로그래머가 프로그램을 작성할 때 계획한 것이 무엇인지 혹은 무엇을 달성하려고 했는지를 나타낸다.
      • 변수의 역할을 통해서만 알 수 있는 것이 아니고 코드가 어떤 구조로 되어 있고 어떻게 연결되어 있는지 살펴볼 때 명확해진다.
  • 프로그램 이해의 여러 단계
    • 초점을 찾는다.
    • 초점으로부터 지식을 활장한다.
    • 관련된 개체로부터 개념을 이해한다.
    • 여러 개체에 걸쳐 있는 개념을 이해한다.

4. 텍스트를 읽는 것과 코드를 읽는 것은 유사하다

  • 프로그래머는 평균적으로 자신의 업무 시간의 60%를 코드 작성이 아닌 읽는 것에 할애한다.
    • 많은 양의 코드를 읽어야 함에도 읽는 법을 그다지 많이 연습하지 않는다.
    • 연습의 부족, 좋은 전략과 훌륭한 스키마의 부재 등으로 개발자들은 코드를 한 줄 한 줄 읽거나 디버거로 코드를 라인 단위로 실행시키곤 하는데 이런 방식은 시간이 많이 소요된다.
    • 이로 인해 기존 코드를 파악해서 재사용하거나 수정하기보다는 자신이 코드를 다시 작성하는 것을 선호하는 상황으로 이어진다.
  • 실험 결과 프로그래밍 코드를 읽을 때 인간 언어 이해와 관련이 된 두뇌 영역이 활성화된다.
    • 개발자들은 보통 수학 능력을 중요시하지만, 테스트 결과 언어 능력의 영향이 더 컸음.
  • 초급 프로그래머의 경우 텍스트를 읽을 때 순차적으로 읽는 경우가 숙련된 프로그래머보다 많았다.

5. 코드 읽기에 적용해볼 수 있는 텍스트 이해 전략

  • 활성화 - 관련된 것들을 적극적으로 생각해서 이미 가지고 있는 지식을 활성화
  • 모니터링 - 텍스트를 읽으면서 자신이 이해한 것을 관찰하고 기록하는 것
  • 중요도 결정 - 텍스트에서 어느 부분이 중요한지 결정하는 것
  • 추론 - 텍스트에서 명시적으로 주어지지 않은 사실을 유추하는 것
  • 시각화 - 깊이 있는 이해를 위해 텍스트에 대한 도표를 만드는 것
  • 질문 - 텍스트에 대해 질문하는 것
  • 요약 - 텍스트를 짧게 요약하는 것