5. 코드를 더 깊이 있게 이해하기
- 아래에서는 코드를 깊게 이해하는 법에 대해 작성합니다.
#
5.1 '변수 역할' 프레임워크- 코드를 추론할 때는 변수가 중심적인 역할을 합니다.
#
5.1.1 변수는 각자 다른 일을 한다- 변수 역할 프레임워크는 변수들의 동작에 존재하는 차이점을 포착합니다.
#
5.1.2 11가지 역할- 다음과 같은 11가지 역할로 분리할 수 있습니다.
이름 | 설명 |
---|---|
고정값(fixed value) | 초기화를 통해 값이 할당된 이후 값이 변경되지 않는 변수 |
스테퍼(stepper) | 루프를 반복 실행하며 값이 단계적으로 변하는 변수 |
플래그(flag) | 무엇인가 발생했거나 어떤 경우에 해당하는지를 나타내는 변수 |
워커(walker) | 워커는스태퍼와 유사하게 자료구조를 순한하지만, 스테퍼와 달리 루프 시작전에는 값을 모릅니다 |
최근값 보유자(most recent holder) | 어떤 값이 변해갈 때 가장 최근에 변경된 값을 갖는 변수 |
목적값 보유자(most wanted holder) | 목적에 해당하는 값 혹은 발견된 값 중에 찾고자 하는 조건에 부합하는 값을 갖는 변수 |
모집자(gatherer) | 모집자는 데이터를 모으거나 모은 데이터에 대해 어떤 연산을 수행하는 얻은 값을 저장하는 변수 |
컨테이너(container) | 값을 새로 추가하거나 삭제할 수 있는 자료구조(리스트, 배열, 스택, 트리...) |
추적자(follower) | 어떤 알고리즘에서는 이전 값 혹은 다음 값을 추적하는 역할을 수행하는 변수 |
조직자(organizer) | 다른 값을 저장하기 위한 목적으로 사용하는 변수 |
임시(temporary) | 임시 변수는 잠시만 사용하기 위한 변수 |
#
5.2 역할과 패러다임#
5.2.1 역할의 이점- 프레임워크를 같은 팀원과 공유하는 것은 도움이 됩니다.
#
변수 역할에 대한 실제적인 팁- 코드를 작성할 때 변수 이름에 역할명을 포함하는 것도 하나의 방법이 될 수 있습니다.
#
5.2.2 헝가리안 표기법- 과거에는 헝가리안 표기법이 의미가 있었으나 IDE가 등장했기 때문에 현재는 유용하지 않습니다.
#
앱 헝가리안 대 시스템 헝가리안시스템 헝가리안 표기법
도 있습니다.lCustomers
과 같은 형태
#
5.3 프로그램에 대해 깊이 있는 지식을 얻으려면#
5.3.1 텍스트 지식 대 계획 지식- 프로그래머가 소스 코드를 이해하는 두 개의 서로 다른 층위에 대한 모델이 있습니다.
- 두 층위는 텍스트 구조 지식(text structure knowledge)와 계획 지식(plan knowledge)입니다.
- 텍스트 구조 지식은 키워드가 하는 일이나 변수의 역할에 대한 내용입니다.
- 계획 지식은 프로그래머가 프로그램을 작성할 때 계획한 것이 무엇인지를 의미합니다.
#
5.3.2 프로그램 이해의 여러 단계- 프로그래머들은 코드를 읽을 때 일반적으로 코드의 초점(focal point)를 찾습니다.
- 프로그래머의 이해는 핵심부터 증진되어 입력값에 대한 함수의 결과를 이해하거나 클래스가 가지고 있는 필드의 지식을 이해하는 것처럼 좀 더 큰 개념을 이해하도록 발전합니다.
- 지식의 단계는 다음과 같습니다.
- 초점을 찾습니다.
- 초점으로부터 지식을 확장합니다.
- 관련된 개체로부터 개념을 이해합니다.
- 여러 개체에 걸쳐 있는 개념을 이해합니다.
#
5.4 텍스트를 읽는 것과 코드를 읽는 것은 유사하다- 프로그래머는 평균적으로 자신의 업무 시간의 60%를 코드 작성이 아닌 읽는 것에 할애합니다.
- 잘 읽는 것이 중요합니다.
#
5.4.1 코드를 읽을 때 우리 뇌에서는 무슨 일이 일어나는가?#
브로드만 영역- 브로드만은 각 영역에 대해, 단어를 읽거나 기억하는 것 등 그 영역이 주로 담당하는 정신적 기능을 설명합니다.
#
5.4.2 프랑스어를 배울 수 있다면 파이썬도 배울 수 있다- 개발 언어를 배우는 능력은 자연어를 배우는 능력과 유사합니다.
- 숙련된 프로그래머는 초급자와 달리 순차적으로 읽지 않습니다. 초급자는 순차적 혹은 콜 스택을 따라가며 읽을 때가 많습니다.
#
5.5 코드 읽기에 적용해볼 수 있는 텍스트 이해 전략- 텍스트 읽기에 대한 전략은 7개의 범주로 나뉩니다.
- 활성화, 관련된 것들을 적극적으로 생각해서 이미 가지고 있는 지식을 활성화 하는 것
- 모니터링, 텍스트를 읽으면서 이해한 것을 관찰하고 기록하는 것
- 중요도 결정, 텍스트에서 어느 부분이 중요한지 결정하는 것
- 추론, 텍스트에서 명시적으로 주어지지 않은 사실을 유추하는 것
- 시각화, 깊이 있는 이해를 위해 텍스트에 대한 도표를 만드는 것
- 질문, 텍스트에 대해 질문하는 것
- 요약, 텍스트를 짧게 요약하는 것
#
5.5.1 기존 지식의 활성화- 코드 스캔이 도움되는 이유.
- 코드 내에 존재하는 개념과 문법적 요소들에 대한 일차적인 이해가 가능하기 때문입니다.
#
5.5.2 모니터링- 코드를 읽을 때 현재 무엇을 읽고 있는지, 이해는 하고 있는지를 계속 추적하는 것이 중요합니다.
- 이해되는 것뿐만 아니라 이해되지 않는 것도 머릿속에서 기억하고 있어야 합니다.
- 이해되지 않는 부분을 표지하는 것은 다른 사람들에게도 유용합니다.
#
5.5.3 코드에서 중요한 라인을 결정하기- 어떤 라인이 중요한지 파악하는 것이 유용할 때가 있습니다.
#
5.5.4 변수명의 의미를 추론하기- 프로그램의 의미가 코드의 구조 자체에 담겨 있을 때가 많습니다.
- 변수 이름은 중요한 표식입니다.
#
5.5.5 시각화- 앞서 상태표나 코드 흐름이 시각화에 대한 예시입니다.
- 연산 테이블도 이와 관련된 좋은 방법 중 하나입니다.
#
5.5.6 질문하기- 코드를 읽을 때 스스로에게 질문하는 것이 코드의 목적과 기능에 대해 이해하는 데 도움이 될 때가 많습니다.
#
5.5.7 코드 요약- 방금 전 읽은 코드를 요약함으로서 많은 이점을 얻을 수 있습니다.
#
요약- 생소한 코드를 읽을 때는 스태퍼나 목적값과 같은 변수의 역할을 이해하는 것이 코드를 깊이 이해하는 데 도움이 됩니다.
- 코드의 이해에 관해서는 텍스트 구조 지식과 계획 지식 사이에 차이가 있습니다.
- 텍스트 구조 지식은 코드에 사용된 문법 개념을 아는 것을 의미하고
- 계획 지식은 코드 작성자의 의도를 이해하는 것을 의미합니다.
- 코드를 읽는 것과 자연언어 텍스트를 읽는 것 사이에는 유사한 점이 많고, 자연어를 배우는 능력으로 프로그래밍을 배우는 능력을 예측할 수 있습니다.
- 시각화나 요약같이 자연언어 텍스트를 심도 있게 이해하기 위해 사용하는 전략들을 코드의 이해를 위해서도 적용할 수 있습니다.