품목정보
발행일 | 2022년 01월 12일 |
---|---|
쪽수, 무게, 크기 | 272쪽 | 528g | 188*245*13mm |
ISBN13 | 9791191600650 |
ISBN10 | 1191600653 |
발행일 | 2022년 01월 12일 |
---|---|
쪽수, 무게, 크기 | 272쪽 | 528g | 188*245*13mm |
ISBN13 | 9791191600650 |
ISBN10 | 1191600653 |
옮긴이 머리말 xi 추천의 글 xiii 베타리더 후기 xvi 추천서문(존 스키트) xviii 시작하며 xx 감사의 글 xxii 이 책에 대하여 xxiv 표지에 대하여 xxvi PART | 코드 더 잘 읽기 CHAPTER 1 코딩 중 겪는 혼란에 대한 이해 3 1.1 코드가 초래하는 세 가지 종류의 혼란 4 1.1.1 혼란의 첫 번째 유형: 지식의 부족 5 1.1.2 혼란의 두 번째 유형: 정보의 부족 6 1.1.3 혼란의 세 번째 유형: 처리 능력의 부족 6 1.2 코딩에 영향을 주는 인지 과정 7 1.2.1 LTM과 프로그래밍 8 1.2.2 STM과 프로그래밍 8 1.2.3 작업 기억 공간과 프로그래밍 10 1.3 인지 과정들의 상호작용 10 1.3.1 인지 과정들이 어떻게 상호작용하는지에 대한 간단한 설명 10 1.3.2 프로그래밍 업무와 관련한 인지 과정 11 요약 13 CHAPTER 2 신속한 코드 분석 14 2.1 코드를 신속하게 읽기 15 2.1.1 두뇌에서 무슨 일이 일어나는가? 16 2.1.2 재현한 코드 다시 살펴보기 17 2.1.3 두 번째 실험 다시 살펴보기 19 2.1.4 생소한 코드를 읽는 것은 왜 어려운가? 19 2.2 기억의 크기 제한을 극복하기 20 2.2.1 단위로 묶는 것의 위력 20 2.2.2 전문가는 초보자보다 코드를 더 잘 기억한다 23 2.3 읽는 것보다 보는 것이 더 많다 25 2.3.1 영상 기억 공간 25 2.3.2 기억하는 대상이 중요한 것이 아니고 기억하는 방식이 중요하다 27 2.3.3 청킹 연습 33 요약 35 CHAPTER 3 프로그래밍 문법 빠르게 배우기 36 3.1 문법을 기억하기 위한 팁 37 3.1.1 중간에 끊어지는 것이 미치는 나쁜 영향 37 3.2 플래시카드 사용해 문법 배우기 38 3.2.1 언제 플래시카드를 사용해야 하는가 39 3.2.2 플래시카드의 확장 39 3.2.3 플래시카드 개수 줄이기 40 3.3 어떻게 하면 잊어버리지 않을 수 있을까? 40 3.3.1 기억을 잃어버리는 이유 41 3.3.2 간격을 두고 반복하기 43 3.4 문법을 더 오랫동안 기억하기 44 3.4.1 정보를 기억하는 두 가지 형태 44 3.4.2 단지 보기만 해서는 안 된다 45 3.4.3 정보를 기억하는 것은 기억을 강화한다 46 3.4.4 능동적 사고를 통한 기억력 강화 47 요약 50 CHAPTER 4 복잡한 코드 읽는 방법 51 4.1 복잡한 코드를 이해하는 것이 왜 어려울까? 52 4.1.1 작업 기억 공간과 STM의 차이 53 4.1.2 프로그래밍과 관련한 인지 부하의 종류 53 4.2 인지 부하를 줄이기 위한 기법 55 4.2.1 리팩터링 55 4.2.2 생소한 언어 구성 요소를 다른 것으로 대치하기 57 4.2.3 플래시카드에 코드 동의어 추가 60 4.3 작업 기억 공간에 부하가 오면 사용할 수 있는 기억 보조 수단 61 4.3.1 의존 그래프 생성 61 4.3.2 상태표 사용 64 4.3.3 의존 그래프와 상태표의 혼용 66 요약 68 PART || 코드에 대해 생각하기 CHAPTER 5 코드를 더 깊이 있게 이해하기 71 5.1 ‘변수 역할’ 프레임워크 72 5.1.1 변수는 각자 다른 일을 한다 72 5.1.2 11가지 역할 73 5.2 역할과 패러다임 76 5.2.1 역할의 이점 76 5.2.2 헝가리안 표기법 78 5.3 프로그램에 대해 깊이 있는 지식을 얻으려면 80 5.3.1 텍스트 지식 대 계획 지식 80 5.3.2 프로그램 이해의 여러 단계 81 5.4 텍스트를 읽는 것과 코드를 읽는 것은 유사하다 84 5.4.1 코드를 읽을 때 우리 뇌에서는 무슨 일이 일어나는가? 85 5.4.2 프랑스어를 배울 수 있다면 파이썬도 배울 수 있다 86 5.5 코드 읽기에 적용해볼 수 있는 텍스트 이해 전략 90 5.5.1 기존 지식의 활성화 91 5.5.2 모니터링 91 5.5.3 코드에서 중요한 라인을 결정하기 92 5.5.4 변수명의 의미를 추론하기 93 5.5.5 시각화 94 5.5.6 질문하기 96 5.5.7 코드 요약 96 요약 97 CHAPTER 6 코딩 문제 해결을 더 잘하려면 98 6.1 모델을 사용해서 코드에 대해 생각해보기 99 6.1.1 모델의 유익함 99 6.2 정신 모델 102 6.2.1 정신 모델 자세히 살펴보기 103 6.2.2 새로운 정신 모델 배우기 104 6.2.3 코드에 대해 생각할 때 정신 모델을 효율적으로 사용하는 방법 105 6.3 개념적 기계 110 6.3.1 개념적 기계는 무엇인가? 111 6.3.2 개념적 기계의 예 111 6.3.3 개념적 기계의 층위 113 6.4 개념적 기계와 언어 114 6.4.1 개념적 기계의 확장 114 6.4.2 여러 개념적 기계는 서로 충돌하는 정신 모델을 만들 수 있다 115 6.5 개념적 기계와 스키마타 117 6.5.1 왜 스키마타가 중요한가? 117 6.5.2 개념적 기계는 의미론인가? 117 요약 117 CHAPTER 7 생각의 버그 119 7.1 왜 두 번째 프로그래밍 언어가 첫 번째보다 쉬울까? 120 7.1.1 기존 프로그래밍 지식을 활용할 가능성을 높이는 방법 122 7.1.2 전이의 다른 형태 123 7.1.3 이미 알고 있다는 것은 저주인가 축복인가? 124 7.1.4 전이의 어려움 125 7.2 오해: 생각의 버그 127 7.2.1 개념 변화를 통한 오개념 디버깅 128 7.2.2 오개념 제압하기 129 7.2.3 프로그래밍 언어에 대한 오개념 130 7.2.4 새로운 프로그래밍 언어를 배울 때 오개념 방지하기 132 7.2.5 새로운 코드베이스에서의 오개념 진단 132 요약 133 PART ||| 좋은 코드 작성하기 CHAPTER 8 명명을 잘하는 방법 137 8.1 이름이 중요한 이유 138 8.1.1 명명이 중요한 이유 139 8.1.2 명명에 대한 다양한 관점 140 8.1.3 초기 명명 관행은 지속적인 영향을 미친다 142 8.2 명명의 인지적 측면 144 8.2.1 형식이 있는 이름은 STM을 돕는다 144 8.2.2 명확한 이름이 LTM에 도움이 된다 145 8.2.3 변수 이름은 이해에 도움이 되는 다양한 유형의 정보를 포함할 수 있다 146 8.2.4 이름의 품질 평가 시기 147 8.3 어떤 종류의 이름이 더 이해하기 쉬운가? 148 8.3.1 축약할 것인가, 하지 않을 것인가? 148 8.3.2 스네이크 케이스냐, 캐멀 케이스냐? 152 8.4 이름이 버그에 미치는 영향 153 8.4.1 나쁜 이름을 가진 코드에 버그가 더 많다 153 8.5 더 나은 이름을 선택하는 방법 154 8.5.1 이름 틀 154 8.5.2 더 나은 변수명에 대한 페이텔슨의 3단계 모델 157 요약 158 CHAPTER 9 나쁜 코드와 인지 부하를 방지하는 두 가지 프레임워크 159 9.1 코드 스멜이 인지 부하를 초래하는 이유 160 9.1.1 코드 스멜에 대한 간략한 소개 160 9.1.2 코드 스멜이 인지 과정에 악영향을 미치는 방식 163 9.2 나쁜 이름이 인지 부하에 미치는 영향 165 9.2.1 언어적 안티패턴 166 9.2.2 인지 부하 측정 167 9.2.3 언어적 안티패턴 및 인지 부하 170 9.2.4 언어적 안티패턴이 혼란을 일으키는 이유 171 요약 172 CHAPTER 10 복잡한 문제 해결을 더 잘하려면 173 10.1 문제 해결이란 무엇인가? 174 10.1.1 문제 해결 요소 174 10.1.2 상태 공간 174 10.2 프로그래밍 문제를 해결할 때 LTM의 역할은 무엇인가? 175 10.2.1 문제 해결은 그 자체로 인지 과정인가? 175 10.2.2 문제 해결을 위한 LTM 교육 방법 177 10.2.3 문제 해결에 역할을 하는 두 가지 유형의 기억 177 10.3 자동화: 암시적 기억 생성 180 10.3.1 시간 경과에 따른 암시적 기억 181 10.3.2 자동화를 통해 보다 신속하게 프로그램을 실행할 수 있는 이유 184 10.3.3 암시적 기억 개선 185 10.4 코드와 해설에서 배우기 186 10.4.1 새로운 유형의 인지 부하: 본유적 부하 187 10.4.2 개발 작업 시 풀이된 예제 활용하기 189 요약 190 PART |V 코딩에서의 협업 CHAPTER 11 코드를 작성하는 행위 193 11.1 프로그래밍 중 이루어지는 다양한 활동 194 11.1.1 검색 194 11.1.2 이해 195 11.1.3 전사 195 11.1.4 증가 195 11.1.5 탐구 196 11.1.6 디버깅은 어떤가? 197 11.2 프로그래머의 업무 중단 197 11.2.1 프로그래밍 작업 시 워밍업 필요 198 11.2.2 중단 후에는 어떻게 되는가? 198 11.2.3 중단에 잘 대비하는 방법 199 11.2.4 프로그래머를 방해할 때 202 11.2.5 멀티태스킹에 대한 고찰 204 요약 205 CHAPTER 12 대규모 시스템의 설계와 개선 206 12.1 코드베이스의 특성 조사 207 12.1.1 인지적 차원 207 12.1.2 코드베이스 개선을 위해 CDCB 사용 217 12.1.3 설계 기동 및 트레이드오프 218 12.2 차원 및 활동 219 12.2.1 차원이 활동에 미치는 영향 219 12.2.2 예상 활동에 대한 코드베이스 최적화 221 요약 221 CHAPTER 13 새로운 개발자 팀원의 적응 지원 222 13.1 적응 지원의 문제 223 13.2 전문가와 초보자의 차이 224 13.2.1 초보자의 행동에 대한 심층적 이해 225 13.2.2 개념을 구체적으로 보는 것과 추상적으로 보는 것의 차이 229 13.3 적응 지원 개선 231 13.3.1 작업은 하나의 프로그래밍 활동으로만 제한 231 13.3.2 새 팀원의 기억 지원 232 13.3.3 코드 함께 읽기 234 요약 237 마치며 238 찾아보기 241 |
개발자, 뇌과학.
요즘 가장 핫한 분야이다.
이 둘이 만나 멋진 책이 나왔다.
뇌과학 중 인지과학과의 연관성에 대해 다양한 분야의 책들이 출간되고 있다.
이 책은 '인지과학'과 '프로그래머'와의 연관성에 말하고 있다.
책을 간단히 요약하면 '프로그래머는 어떻게 생각하고 사고하는 것이 가장 효율적인가'이다.
프로그래머가 가장 많이 하는 일은 코딩이다.
코딩은 비즈니스 모델을 다양한 자료구조와 알고리즘을 사용하여 최적화된 결과물을 제공하는 것이다.
프로그래머에 가장 중요한 것은 빠르고 정확하게 개발을 하는 것이다.
개발 범위가 커지면서 자신의 코드 뿐만 아니라 다른 사람의 코드를 읽고 이해하는 것도 중요해 지고 있다.
이를 위해 코드 컨벤션이 네이밍 룰을 정하는 것이다.
책은 그 이유에 대해 인지과학을 통해 친절하게 설명하고 있다.
앞부분에서는 뇌의 구조에 대해 설명하고 있다.
우리 뇌는 반영구적으로 기억하는 장기 기억 공간(long-term memory, LTM)과 잠시 기억하는 단기 기억 공간(short-term memory, STM), 그리고 이 정보들을 처리하는 작업 기억 공간(working memory)으로 나누어져 있다.
개발을 할 때 어느 타입이 부족한가에 대해 생각해 볼 수 있다.
초보 개발자는 지식이 부족할 것이고, 경험이 없는 개발자는 정보가 부족한 것이다.
이 둘의 부족은 처리 능력의 부족을 불러올 것이다.
개발자라면 이 부분에 공감할 수 있을 것이다.
가장 어려운 것 중 하나가 '이름 짓기'이다.
그래서 항상 개발을 하기 전 네이밍 룰을 정하는 것을 기본으로 하고 있다.
미리 정하지 않으면 개발자마다 자신만의 변수와 함수명을 쓰고 있어 분석에 어려움을 겪는다.
개발에 입문하는 분들에게 항상 강조하는 말이 있다.
'일단 제대로 하나의 언어에만 집중하라'고.
웹개발 같은 경우 처음에 프론트, 백앤드, DB, 심지어 앱까지 다양한 언어를 만나게 된다.
이 모든 것을 한번에 잘 할 수 없다.
(나중에라도 모두 잘하는 사람이 되기는 쉽지 않다. 풀스택 개발자가 귀한 이유이다.)
일단 하나의 언어를 마스터하면 다른 언어를 배우기가 용이하다.
바로 '전이'때문이다.
처음에는 모든 것을 기억하려고 한다.
'방식'이 아니라 '대상'을 기억하는 것이다.
하지만 점점 많은 개발을 하게 되면서 '방식'을 기억하는 것이 더 중요함을 알게 된다.
메소드, 라이브러리를 기억하는 것도 좋지만 그보다는 개발방식이나 프로세스를 기억해야 한다.
책을 보면서 '코드'에 대해서 많이 생각해 보게 되었다.
실행 가능한 코드를 넘어 '좋은 코드'가 무엇인지, 빠르게 코드를 이해할 수 있는 방법은 무엇인지, 협업을 위해 코드 베이스를 어떻게 가져가야 하는지...
경력 여부와 상관없이 프로그래머라면 꼭 읽어보기를 추천하고 싶은 책이다.
많은 글을 쓰는 것도 좋지만, 남들이 보기 좋은 글을 쓰는 것이 더 좋다.
이 책으로 프로그래머로서 레벨업을 할 수 있을 것이다.
호기심에 산 책인데, 호기심을 채워줄 뿐 아니라 의외로 매우 실용적이다. 아직 절반 밖에 읽지 않았는데도 배운 것이 너무 많아서 여기에 다 쓸 수가 없다. 아래 내용은 각 장의 요약이 아니다. 또한, 내가 이해한 대로 쓴 것이므로 오류가 있을 수 있다.
프로그래머가 업무 시간에 가장 많은 시간을 쏟는 일은 코드 작성이 아니라 코드 읽기다. 따라서 코드를 더 빨리 읽는다면(주어진 시간 내에 더 잘 이해한다면), 생산성은 당연히 높아진다. 또한 잘 이해되는 코드를 작성한다면 그 코드를 읽는 사람(자기 자신도 포함)의 생산성을 높여줄 수 있다. 코드를 읽을 때 머릿속에서 어떤 일이 일어나는지 알면, 코드를 더 잘 이해하고, 나아가서 더 이해하기 쉬운 코드를 작성하는 데 도움이 된다.
프로그래밍 언어의 문법이나 디자인 패턴 같은 배경지식을 뇌의 장기 기억 공간(Long-Term Memory)에 미리 넣어두면 코드를 더 잘 이해할 수 있고(2장), 잘 모르는 것을 매번 검색하려고 하기보다는 기억해내려고 노력함으로써 외우는 것이 낫다는 것을 배웠다(3장).
이해하기 쉬운 코드를 작성하다보면 때로는 중복이 발생하기도 하는데, 이러한 점에 대해서도 언급한다. 또한 작업 기억 공간(working memory)을 돕는 앱으로 파이썬 튜터(Python Tutor)를 소개하는데, 나도 파이썬의 for 문을 설명할 때 활용한 적이 있어 반가웠다.(4장)
사람이 코드를 처리할 때 활성화되는 뇌의 영역은 자연어를 구사할 때 활성화되는 영역과 겹친다(5장).
프로그래밍 언어의 ‘변수’를 ‘상자’에 비유하기도 하고 ‘이름표’에 비유하기도 하는데, 이런 것을 정신 모델(mental model)이라고 한다. 개인적으로 전자의 정신 모델을 따르다가 나중에 깨달을 바가 있어서 후자로 바꾼 경험이 있는데, 이 책의 6장에서 바로 그 점을 거론해서 반갑기도 하고 과거에 올바른 결정을 했음을 확인해서 기쁘다.
나는 개발 관련 콘텐츠를 만드는 일을 ‘프로그래머를 프로그래밍’하는 일이라고 생각하는데, 사람이 정보를 어떻게 처리하는지를 이해하는 것이 중요함을 깨달은 것이 이 책에서 얻은 가장 직접적인 소득이라 하겠다.
프로그래밍을 하려면 프로그래밍 언어를 배워야 한다.
이러한 언어를 배우려면 우리는 문법을 익히고 활용해야 하는데 이 과정에서 발생하는 우리의 뇌의 인지과정과
학습과정들에 대한 종합적인 이론들을 다양한 실험결과를 통하여 우리에게 방법론을 제시하고 있다.
이 서적을 읽으면서 생각이 든건 결국
"의식적인 반복 학습 >> 기억 >> 일화화(체득) >> 자유활용"
이렇게 되는 것 같다.
시간을 결국 투자를 하되 시간만 투자를 하는 것이 아니라
어떻게 의식적으로 반복을 할 것이고 이를 팀단위, 기업 단위에서 신규입사자에게 어떻게 빠르게 효율적으로 프로그래밍 (코드베이스) 에 무사히 안착을 (적응) 시킬 것인가에 대한 전략도 제시한다.
그리고 플래시 카드를 이용한 문법적인 기억, 도메인 지식 기억 등을 활용할 수 있는 것도 제안한다.
플래시 카드에 대해선 프로그래밍 특성 상 문법들에 대한 설명을 얼마만큼 잘 적고 기록할 수 있겠나 라는 생각도 들긴 하지만 키워드를 적고 샘플 코드를 사진을 찍어 등록할 수 있는 어플 등을 활용하면 나름 괜찮게 활용할 수 있는 방법 이라고 생각된다.
또한 재미있게 읽었던 것은 언어별로 배우고 활용할 만한 척도 등을 기준삼아 비교를 한 자료였었다.
파이썬을 최근에 새로운 언어로써 주업무 언어로써 활용하고 있는데 이러한 시점에 이 책은 나름 전략을 제안한 서적이면서도 위안을 준 서적이기도 했기에 언어를 최근에 새로이 언어를 배우는 경력 프로그래머에게 추천할만한 책으로 소개하고 싶다.