프로그래머의 뇌 (펠리너 헤르만스 지음)
📍목차
1장 | 코드 더 잘 읽기
1. 코딩 중 겪는 혼란에 대한 이해
2. 신속한 코드 분석
3. 프로그래밍 문법 빠르게 배우기
4. 복잡한 코드를 읽는 방법
2장 | 코드에 대해 생각하기
5. 코드를 더 깊이있게 이해하기
📍요약
✅코드를 깊게 이해하는 다양한 방법이 존재한다
1. 변수 역할 프레임워크 (role of variable)
2. 헝가리안 표기법 (현재는 안쓰임)
3. 텍스트 이해 전략
- 코드 읽기와 자연어 읽기가 매우 유사하므로, 자연어를 쉽게 배우는 능력을 통해 프로그래밍을 배우는 능력을 예측 가능
- 텍스트 이해 전략을 코드 읽기에 적용 가능
📍"변수 역할" 프레임워크
✅핀란드의 사야니에미 교수가 만든 프로그램 내에서 변수 역할(총 11개)을 정의하는 프레임워크
1. 고정값
- 초기화를 통해 값이 할당된 이후 값이 변경되지 않는 변수 (상수)
2. 스테퍼(stepper)
- 루프를 반복 실행하며 값이 단계적으로 변하는 변수 (예 - for loop의 i 또는 이분 탐색에서 size = size / 2)
- 값을 예측할 수 있다
3. 플래그
- 무엇인가 발생했거나, 어떤 경우에 해당하는지 (isLoading, isError 등..)
- 일반적으로는 boolean 이지만, string이나 integer도 가능
4. 워커(walker)
- 스테퍼와 비슷하게 자료구조를 순회하지만, 예측 불가능한 값 (loop가 실행되어야 확인 가능)
5. 최근값 보유자(most recent holder)
- 어떤 값이 변해갈 때 가장 최근에 변경된 값을 갖는 변수
예) 가장 마지막으로 읽은 line을 저장하는 변수 (line = file.readline())
6. 목적값 보유자(most wanted holder)
- 어떤 값을 반복할 때 원하는 목적에 부합하는 것만 저장하는 변수
예) 최솟값이나 최댓값을 반복하며 갱신
7. 모집자(gatherer)
- 데이터를 모으거나 연산을 반복 수행하며 값을 저장하는 변수
예) 원하는 데이터를 배열에 저장해나감 or sum 변수
8. 컨테이너
- 값을 새로 추가하거나 삭제할 수 있는 자료구조
9. 추적자(follower)
- 이전 값이나 다음 값을 추적할 수 있는 변수
- 항상 다른 변수에 연관되어 있음
예) 연결 리스트에서 노드가 가진 next 혹은 prev 포인터
10. 조직자(organizer)
- 추가 처리를 위해 다른 값을 저장하기 위한 임시 변수
11. 임시 변수
- temp 라는 변수명으로 자주 쓰는, 임시 변수
✅변수 역할은 패러다임에 제한되지 않고 나타난다
예) 자바 클래스
public class Dog {
String name;
int age;
public Dog (String n) {
name = n; // 초기화 이후 변경 X -> 고정값
age = 0;
}
public void birthday () {
age++; // 함수가 호출되면 변경됨 -> 스테퍼
}
}
📍헝가리안 표기법
✅변수의 타입명을 변수명에 나타내는 방식 (타입 시스템이 없는 언어에서 출발)
예) strName = 이름을 나타내는 문자열 타입 변수
lDistance = 거리를 나타내는 long 타입 숫자 변수
- 1970년대에 광범위하게 사용되기 시작
- IDE가 없던 시절 변수명을 파악하는데 도움을 줌
- 변수명이 길어지는 단점 존재하여 현대에는 잘 쓰이지 않음
📍프로그램에 대해 깊이있는 지식을 얻으려면
✅소스코드를 이해하는데 관련된 2가지 지식
- 텍스트 구조 지식 : 키워드 or 변수의 역할
- 계획 지식 : 코드를 작성한 프로그래머의 계획
✅코드 이해 단계
1. 초점을 찾는다 예) main 함수
2. 초점과 관련된 코드 찾기
3. 2번으로부터 찾을 것을 바탕으로 알게된 것을 적으며 확장
📍텍스트를 읽는 것과 코드를 읽는 것은 유사하다
✅프로그래머는 평균적으로 60%의 시간을 코드를 읽는데 보낸다
- 그런데, 코드 읽는 방법을 그다지 연습하지 않아서, 차라리 새로 작성하는게 낫겠다 생각해버린다
- 기존 코드를 활용하지 못하게 된다
✅코드를 읽을 때, 텍스트를 읽을 때 두뇌의 비슷한 영역이 활성화된다
- 한 연구 결과에 따르면, 코드 아카데미에서 교육생들을 대상으로 Python을 가르치는데,
수학(2%)보다 언어능력(17%), 작업 기억 공간 용량과 추론 능력(34%)이 프로그래밍을 잘하는 것과 관련이 더 높았다
- 프로그래밍을 얼마나 잘 배우는지는 자연어를 배우는 능력으로 예측할 수 있다
- 컴퓨터 과학이 STEM(과학, 기술, 엔지니어링, 수학)과 관련이 크다는 기존의 시각과 배치된다
📍코드 읽기에 적용해볼 수 있는 텍스트 이해 전략
✅코드 읽기와 텍스트 읽기가 인지적으로 유사하기 때문에, 자연어를 읽는 아래의 전략이 코드 읽기에서도 유용하다
1. 활성화: 관련된 것들을 적극적으로 생각해서 이미 가지고 있는 지식을 활성화
- 한 번 쭉 훑어보기
2. 모니터링: 텍스트를 읽으며 자신이 이해한 것과 이해하지 못한 것을 관찰하고 기록
- 주석으로 표시하거나, 코드를 프린트해서 이해가 안가는 부분을 정리
- 코드를 읽으며 이해가 안가는 라인만 따로 표시하면, 질문을 하기에도 쉽다
3. 중요도 결정: 텍스트를 읽으며 중요한 부분을 선정
4. 추론: 텍스트에서 명시적으로 주어지지 않은 사실을 유추
5. 시각화: 깊이 있는 이해를 위해 텍스트에 대한 도표를 만드는 것
6. 질문: 텍스트에 대해 질문
7. 요약: 텍스트를 짧게 요약