올해도 벌써 끝나가고 있는 게 믿기지 않지만(…) 11월이 되기 전에 책 한 권을 더 읽었습니다. 이 책을 원래 알고 있었던 건 아닌데, 올해 9월부터 합류한 팀 내에서 스터디를 하고 있는 책이어서 읽게 되었습니다.
책의 뒤표지에 적힌 난이도가 중하였고, 다루고 있는 내용도 개발 방법론이라고 해서… 사실 처음에는 좀 가볍게 읽을 수 있는 내용인 줄 알았습니다.
그런데 책에서 다루는 내용이 생각보다 진지했고 제가 미처 생각하고 있지 못한 부분을 많이 다루길래 놀랐습니다. 마치 별생각 없이 방문한 점집에서 제 점괘를 다 맞힌 그런 기분이랄까요?
그러다 보니 평소에 고민하고 있던 개념이 등장할 때는 좀 더 집중해서 책을 읽은 것 같아요. 다만 책에서 다루는 내용이 꽤 많다 보니 오늘은 이 책의 챕터 별 핵심 개념을 인용하고 느낀 점을 적는 방식으로 정리해보려고 합니다.
이번 포스트를 통해 프로그래밍 스킬을 향상하고자 하는 개발자, 나만 못한다는 자괴감에 빠진 주니어 개발자, 아무리 가르쳐도 발전이 없는 주니어에게 발전한 시니어 개발자 분들에게 도움이 되었으면 좋겠습니다.
책 소개
원서의 제목은 『The Programmer’s Brain』 입니다. 제가 주목하고 싶은 것은 이 책의 부제인 ‘훌륭한 프로그래머가 알아야 할 인지과학의 모든 것’ 이었습니다. 즉 이 책의 목표는 인지과학을 통해 우리의 뇌가 코드를 처리하는 방법에 대한 고찰을 하는 것이 목표입니다.
뿐만 아니라 개발자가 새로운 언어나 프레임워크를 빠르게 배워 생산성을 향상하도록 도우며, 코드를 더 잘 이해하는 것에서 나아가 버그 방지, 명확한 작명법, 리팩토링, 대규모 코드 베이스 개선에 이르기까지 과학적으로 입증된 기법을 제시하고 있습니다.
책 내용은 4부로 구성됩니다. 전체 분량은 250쪽 정도로 많지 않지만, 낯선 용어와 개념들이 많이 등장하기 때문에 시간을 넉넉히 두고 읽는 것을 추천합니다.
- 코드 더 잘 읽기: 코드를 인식할 때의 뇌 작동 원리
- 코드에 대해 생각하기: 코드를 빠르게 파악하는 읽기 방법
- 좋은 코드 작성하기: 복잡한 코드와 문제를 쉽게 바꾸는 기법
- 코딩에서의 협업: 협업 환경에서 코드 베이스를 개선하는 요령
인지과학 용어 먼저 알기
먼저 이 책의 내용을 100% 이해하기 위해서는 인지과학에 대해 미리 알아두면 도움이 됩니다.
인지과학(cognitive science) 은 인간의 마음과 동물 및 인공적 지적 시스템(artificial intelligent systems)에서 정보처리가 어떻게 일어나는가를 연구하는 학문이라고 할 수 있다.
쉽게 말해 우리의 뇌가 외부에서 들어온 자극을 인식하고 전달하며 처리하는 전반적인 과정을 연구한다고 보면 됩니다. 이 책은 이제 그중에서도 프로그래머가 코드를 읽고 작성하는 과정에서의 뇌 를 보다 집중적으로 다루고 있구요.
이 책에서 다루는 세 가지의 핵심 인지 과정과 용어를 그림으로 나타내어 보았습니다. 여기서 등장하는 개념에 대해서도 간단히 알아보고 가죠.
LTM
장기 기억 공간, LTM(Long Term Memory) 이라 불리는 이 공간은 기억한 내용을 반영구적으로 저장하는 공간입니다. 컴퓨터로 비유하자면 마치 컴퓨터의 하드디스크와도 같죠.
이것을 코딩하는 우리의 모습으로 비추어 보면 무의식적으로 쿼티 키보드를 쓰는 모습, 프로그래밍 언어의 문법을 큰 노력 없이도 떠올리는 모습 등이 떠오르네요. 이처럼 LTM에 잘 저장된 정보는 쉽게 사라지지 않을 뿐만 아니라 복잡한 문제를 해결하기 위한 도구로 꺼내 쓸 수 있기 때문에 중요합니다. 즉 기억하고자 하는 정보를 LTM에 넣는 것이 핵심이죠.
한편 LTM에 정보를 저장할 때는 연관 정보들이 서로 연결되어 있는 네트워크의 형태로 저장되기 때문에, LTM에 비슷한 기억이 있다면 더 기억하기가 쉽습니다. 다만 기억의 편의성을 위해 실제 사실과 다른 왜곡된 정보를 저장할 수도 있다는 점에 유의해야 합니다.
STM
단기 기억 공간, STM(Short Term Memory) 이라 불리는 이 공간은 기억한 내용을 일시적으로 저장하는 공간입니다. 컴퓨터로 비유하자면 마치 컴퓨터의 메인 메모리(RAM) 또는 캐시 메모리와도 같죠.
이것을 코딩하는 우리의 모습으로 비추어 보면 방금 등장했던 변수나 함수의 이름을 기억하고 있는 모습이 떠오르네요. STM은 외부에서 받아온 정보를 잠시 저장하여 활용할 수 있다는 점에서 유용하지만, 한 번에 두 개에서 여섯 개 사이의 항목만 저장 가능하다는 한계가 있습니다. 그래서 새로운 정보를 많이 읽을수록 STM의 저장 공간이 빠르게 소진되기 때문에 모든 정보를 기억하지 못하게 되죠.
그래서 STM은 크기에 대한 제약을 극복하기 위해 LTM과 협업을 하는데요, 정보의 저장 단위를 고수준으로 추상화하는 청킹(Chunking) 과정을 통해 STM 공간을 절약합니다. 가령 정렬에 필요한 모든 로직과 변수를 라인 단위로 기억하는 것이 아니라, 정렬이라는 고수준의 개념을 기억하고, 정렬이 필요할 때마다 LTM에서 해당 개념을 찾아서 사용하는 것이죠.
작업 기억 공간
작업 기억 공간(Working Memory) 은 현재 집중하고 있는 내용에 대한 연산을 수행하는 공간입니다. 컴퓨터로 비유하자면 마치 컴퓨터의 프로세서(CPU)와도 같죠.
이것을 코딩하는 우리의 모습으로 비추어 보면 중첩된 for
문 코드를 한 줄씩 짚어나가면서 각 변수의 상태를 추적하는 모습이 떠오르네요. 작업 기억 공간은 복잡한 작업을 처리함과 동시에 STM처럼 한 번에 두 개에서 여섯 개 사이의 항목만 저장 가능한데요, 이러한 한계를 극복하기 위해 STM과 LTM에서 저장된 정보를 인출해 사용합니다.
감각 기억 공간
감각 기억 공간(Sensory Memory) 은 시각, 후각, 청각, 촉각 등의 자극 정보를 아주 잠깐 저장하는 공간입니다. 컴퓨터로 비유하자면 마치 컴퓨터의 입출력 장치의 버퍼와도 같죠. 본 책에서는 시각 정보만 다루기 때문에 시각 기억 공간이라고도 부릅니다.
이것을 코딩하는 우리의 모습으로 비추어 보면 처음 보는 코드를 읽을 때 코드의 구조를 눈으로 먼저 파악하는 모습이 떠오르네요. 즉 이 코드의 구조가 중첩된 형태인지, 특별히 눈에 띄는 라인은 없는지, 들여쓰기의 간격이 어떤지, 여백으로 구분되는 뭉쳐진 코드 덩어리들이 존재하는지를 판단합니다.
책에서 등장하는 인지과학 용어를 정리해보았으니, 본격적으로 각 챕터 별 핵심 개념과 감상을 정리해보겠습니다.
코딩 중 겪는 혼란에 대한 이해
코드를 읽거나 작성할 때 세 가지 인지 과정이 일어난다. 첫 번째 과정은 LTM에서 정보를 인출하는 것으로, 키워드의 의미 같은 것들이 여기에 해당된다. 두 번째 과정은 메서드나 변수의 이름과 같이 코드를 읽는 과정에서 발생하는 정보를 STM에 일시적으로 저장한다. 마지막 과정은 작업 기억 공간에서 일어난다. 코드를 처리하는 일이 여기서 이루어지는데, … 코드를 읽는 동안 이 세 가지 인지 과정은 다 같이 일어나며 서로 보완적으로 작용한다.
- 13p
인지과학에서 등장하는 모델을 이용해 우리가 코딩을 하면 뇌에서 어떤 일이 일어나는지를 설명합니다. LTM, STM, 작업 기억 공간의 협업 모델을 떠올리면서 우리가 코딩을 할 때 뇌에서 어떤 일이 일어나는지를 알아볼 수 있었습니다.
이 부분을 읽으면서 놀랐던 것이 인지과학을 통해 코딩할 때 우리의 뇌에서 일어나는 현상을 꽤 구체적으로 모델링하고 있었기 때문입니다. 특히 이러한 모델을 증명할 수 있는 다양한 실습 코드들이 있어서 이해하는데 도움이 되었습니다.
신속한 코드 분석
정보를 기억할 때 STM은 크기에 대한 제약을 극복하기 위해 LTM과 협업한다. 새로운 정보를 읽을 때 우리 두뇌는 그 정보를 청크라는 몇 개의 묶음으로 나눈다. … LTM이 코드와 관련 있는 지식을 충분히 가지고 있다면 코드 하위 수준의 요소들을 STM에 저장하는 대신 … 추상 개념을 기억하기 때문에 STM의 공간을 절약한다.
- 35p
STM이 LTM과 협업하는 관계이며 청킹으로 인해 STM의 공간을 절약할 수 있다는 것을 알 수 있었습니다. 즉 청킹을 잘하면 STM의 공간을 더 효율적으로 쓸 수 있는데, 이를 위해서는 의도적으로 LTM에 많은 정보를 저장하기 위해 노력해야 한다는 것을 알 수 있었습니다.
이러한 청킹 개념에 대해서도 공감할 수 있었던 게, 제가 알고리즘 공부를 할 때 BFS와 DFS 코드가 항상 헷갈렸었거든요. 그래서 처음에는 두 알고리즘을 한 줄씩 외우려고 했는데 이게 꽤 어렵고 헷갈렸습니다. 하지만 반복적으로 훈련을 하다 보니 나중에는 거의 눈 감고도 코드를 다 칠 정도로 정도로 익숙해지는 경험을 해보았기 때문입니다. 덕분에 STM의 공간을 절약하고 더 복잡한 문제를 풀기 위한 공간을 확보할 수 있었던 것 같습니다.
프로그래밍 문법 빠르게 배우기
문법에 대한 지식이 더 많을수록 청킹을 쉽게 할 수 있기 때문에 문법을 외우는 것이 중요하다. … 기억이 없어지는 것을 방지하기 위해 새로운 기억하는 연습을 정기적으로 하는 것이 중요하다. … 기억하는 지식의 양을 최대로 하기 위해서는 연습을 긴 시간에 걸쳐 고르게 해야 한다. … 새로운 정보를 능동적으로 정교화하면 그 새로운 기억이 연결할 기억의 네트워크를 강화하고 이는 인출을 쉽게 하는데 도움이 된다.
- 50p
본 챕터에서는 본격적으로 LTM에 정보를 저장하는 방법을 설명하는데, 결국에는 의도적 암기와 정기적 연습이 필요하다고 이야기합니다.
검색을 통해 쉽게 정보를 얻을 수도 있지만 여기에서 발생하는 작업 중단이 생산성을 악화시키므로, 결국 가장 좋은 방법은 LTM에 문법 정보를 직접 저장하는 것이라 설명합니다. 이를 위한 구체적인 방법으로는 특정 개념과 설명을 카드의 앞뒤에 써놓는 플래시카드 방법을 제시하구요.
또한 훈련은 짧은 시간에 집중적으로 하기보다는 긴 시간에 거쳐 고르게 하는 것이 좋으며, LTM은 네트워크 구조이므로 새로운 정보를 저장할 때는 기존의 정보와 연결하고 기억을 자주 인출하는 정교화(elaboration) 과정을 거치면 더 효율적이라고 설명합니다.
복잡한 코드 읽는 방법
인지 부하는 작업 기억 공간이 처리할 수 있는 한계를 나타낸다. 인지 부하가 너무 크면 두뇌가 코드를 적절하게 처리할 수 없다.
- 68p
복잡한 코드를 읽는 행동은 작업 기억 공간이 처리할 수 있는 작업에 부하를 가하는데 이것을 인지 부하(cognitive load) 라고 부릅니다. 인지 부하가 너무 큰 작업을 하면 두뇌가 코드를 적절하게 해석하고 처리할 수 없으며 이를 LTM에 저장하는 것도 어렵기 때문에 인지 부하를 적절히 관리하는 법이 필요하다고 설명합니다.
인지 부하를 일으키는 원인도 외부적/내부적 요소로 구분할 수 있으며, 이를 줄이기 위해서는 코드가 외부적으로 제공하는 기능은 유지한 채 내부 구조를 개선하는 리팩토링, 생소한 개념을 익숙한 개념으로 대치하기, 작업 기억 공간의 용량만으로 처리할 수 없는 내용은 메모하는 방식 등을 사용할 수 있습니다.
코드를 더 깊이 있게 이해하기
생소한 코드를 읽을 때는 변수의 역할을 이해하는 것이 코드를 깊이 이해하는 데 도움이 된다. … 텍스트 구조 지식은 코드에 사용된 문법 개념을 아는 것을 의미하고 계획 지식은 코드 작성자의 의도를 이해하는 것을 의미한다.
- 97p
코드를 더 깊이 이해하기 위해 변수가 하는 역할을 카테고리화 하기, 텍스트를 읽는 방식 훈련하기, 작성자의 의도 이해하기 등의 방법을 소개합니다.
이 챕터에서 다소 특이하게 느꼈던 점은 코드를 읽는 것과 자연어 텍스트를 읽는 것이 뇌과학적으로 크게 다르지 않기 때문에, 언어적 지식을 학습할 수 있는 능력을 측정하면 프로그래밍 학습 능력 또한 예측 가능하다는 점이었습니다. 즉 우리가 일반적으로 언어를 배울 때 쓸 수 있는 다양한 방법과 전략들을 프로그래밍 언어를 배울 때에도 동일하게 적용할 수 있다는 점이죠.
코딩 문제 해결을 더 잘하려면
정신 모델은 우리가 문제를 생각할 때 형성하는 정신적 표상이다. 개념적 기계는 실제 컴퓨터가 어떻게 기능하는지를 추상적으로 표현한 것으로, 프로그래밍 개념을 설명하고 프로그래밍에 대한 추론을 할 때 사용한다. … 여러 다른 개념적 기계는 때때로 서로를 훌륭하게 보완하지만 상충되는 정신 모델을 만들 수도 있다.
- 118p
이 챕터에서 등장하는 용어가 특히 복잡하긴 한데, 쉽게 이야기하자면 우리가 비유를 통해 획득한 프로그래밍 지식들이 뇌에서 서로 어떻게 동작하는지를 설명합니다.
특히 저는 블로그에 글을 쓰면서 비유를 많이 활용하곤 하는데, 이것이 독자들이 갖고 있던 기존 지식과 충돌하면서 혼란을 느낄 수 있다는 점에 눈길이 갔습니다.
생각의 버그
기존의 지식이 학습 속도를 높이거나 새로운 작업을 더 잘 수행하는 데 도움이 된다. 이를 긍정적 전이라고 한다. … 다른 도메인으로의 지식 전이는 부정적일 수도 있는데, 부정적 전이가 일어나면 … 새로운 작업을 수행하는 데 방해가 된다. … 오개념은 단순히 자신이 틀렸다는 것을 깨닫거나 듣는 것만으로는 해결되지 않는다. … 잘못된 모델을 대체할 새로운 모델이 필요하다.
- 133p
기존에 잘못 알고 있던 지식이 새로운 지식을 얻는데 부정적인 영향을 미치는 이유와 이러한 오개념을 쉽게 수정하기 어려운 이유에 대해 설명합니다.
이 부분도 특히 많이 공감할 수 있었는데 제가 프로그래밍 언어를 새로 배우면서 느꼈던 혼란스러움, 그리고 기존의 잘못된 지식이 습관처럼 남아있어서 고치기 어려웠던 이유를 명확히 이해할 수 있었기 때문입니다.
명명을 잘하는 방법
카멜 케이스 같은 문법 규칙부터 코드 베이스 내의 일관성까지, 좋은 이름에 대한 다양한 관점이 있다. … 다른 차이가 없다면 스네이크 케이스로 작성된 변수보다 카멜 케이스 변수가 기억하기 쉽다. 하지만 사람들은 스네이크 케이스를 더 빨리 식별한다. … 잘못된 이름이 있는 곳에서 버그가 발생할 가능성이 높다. 다만 이 둘 사이에 반드시 인과관계가 있는 것은 아니다.
- 158p
변수나 함수 등에 좋은 이름을 짓는 방법에 대해 설명합니다.
사실 프로그래밍에서 이름 짓기는 어려운 것으로 꽤 유명하기 때문에 다른 책에서도 많이 다루는 내용인데요, 이 책에서 독특하게 다루는 부분은 우리가 변수의 이름을 읽고 해석하는 과정을 인지과학으로 접근하여 우리가 왜 이름 짓기를 어려워하는지에 대해 설명하는 것이었습니다. 가령 네이밍 컨벤션을 지킬 때 청킹을 중요하게 생각해야 하는지, 아니면 인지 부하를 중요하게 생각해야 하는지에 대한 방법처럼요.
마지막으로는 구체적인 방법론 등을 모범 사례로 제시하면서 더 나은 이름을 지을 수 있는 방법들을 제공합니다.
나쁜 코드와 인지 부하를 방지하는 두 가지 프레임워크
코드 스멜은 코드의 구조적 문제를 의미한다. … 언어적 안티 패턴은 코드가 실제 수행하는 작업과 맞지 않는 이름을 의미한다.
- 172p
작성한 코드가 인지 부하를 일으키는지 아닌지를 판단하는 척도로 코드 스멜과 언어적 안티 패턴을 제시하고 이에 대해 설명합니다. 이를 통해 나쁜 이름이 프로그래머에게 어떤 인지 부하를 일으키며 이것이 신체적으로도 어떤 변화를 일으키는지를 파악할 수 있었습니다.
다루고 있는 내용은 클린 코드의 내용과도 비슷하다고 느꼈는데, 복잡한 매개변수나 메서드, 코드 복붙 등이 어떻게 악영향을 주는지를 인지 과학의 개념으로 설명할 수 있다는 것이 인상 깊었습니다.
복잡한 문제 해결을 더 잘하려면
프로그래밍과 관련된 암시적 기억을 강화하려면 터치 타이핑, 관련 단축키 암기 같은 관련 기술을 자동화하는 것이 효과적이다. 프로그래밍과 관련된 명시적 기억을 강화하려면 기존 코드, 가급적이면 코드 설계 방법에 대한 설명이 포함된 코드를 연구하라.
- 190p
프로그래밍과 관련된 기억을 강화하여 LTM을 효율적으로 사용하고, 이를 통해 복잡한 문제 해결을 더 잘하는 방법에 대해 설명합니다.
이 챕터에서는 두 가지 이야기가 공감이 됐는데요, 우리가 특정 분야에 통달하게 되면 그 행동을 무의식적으로 할 수 있기 때문에 유용하다는 사실, 그리고 너무 복잡한 문제 해결 작업을 하다 보면 인지 부하가 심하게 오기 때문에 해당 정보를 LTM에 저장할 여유조차 없다는 사실이었습니다.
코드를 작성하는 행위
프로그래밍을 할 때 검색, 이해, 전사, 증가, 탐구 등 다양한 프로그래밍 활동을 함께 수행한다. 각각의 활동은 서로 다른 기억 체계에 부담을 준다. 따라서 여러 다른 기법을 사용해 이 활동들을 지원해야 한다. … 프로그래밍 중 중단은 성가실 뿐만 아니라 코드에 대한 정신 모델을 재구성하는 데 시간이 걸리기 때문에 생산성에 나쁜 영향을 미친다.
- 205p
코드를 읽고 쓸 때 일어나는 활동을 카테고리화 하였으며 업무 중단이 발생하거나 멀티 태스킹을 할 때 발생하는 비효율에 대해 설명합니다.
대규모 시스템의 설계와 개선
코드 베이스, 라이브러리, 프레임워크가 사용자에게 미치는 영향을 이해하는 데 도움이 되는 프레임워크를 활용하자. 대부분의 경우 서로 다른 차원 간의 트레이드오프가 이루어져야 한다.
- 221p
이 부분은 사실 다소 장황하게 느껴지긴 했는데요, 기존 코드 베이스에 대한 평가 방법과 개선 방향을 제시합니다.
새로운 개발자 팀원의 적응 지원
새로운 정보를 배우다 보면 초급 수준의 사고방식으로 떨어질 때도 있다. 새로운 개념을 배우는 사람들은 추상적인 용어와 구체적인 예를 모두 배울 필요가 있다. 온보딩 과정에서 새 팀원의 장기, 단기, 작업 기억 공간을 지원하기 위해 관련 정보를 준비해야 한다.
- 237p
마침 제가 새 회사에 새 팀원으로 합류하게 되어서 더 반갑게 느껴졌던 챕터입니다. 새롭게 합류한 팀원이 왜 코드를 읽을 때 혼란을 겪게 되는지를 있어서, 저도 심리적 안심(?)을 할 수 있어서 좋았습니다.
후기
책 제목 그대로 프로그래머의 뇌를 투명하게 관찰한 느낌이다
책에서 다루고 있는 내용이 정말 많은데 분량 상 모두 다루기 어려운 게 참 아쉽네요. 일단 총평하자면 이 책은 제게 꽤 신선한 충격을 줬는데요, 그 이유를 하나씩 살펴보겠습니다.
우선 주제의 신선함입니다. 이 책은 단순히 문제 해결 방법에 대한 하드 스킬을 가르쳐주는 게 아니라, 프로그래머가 문제 해결 방법을 떠올리는 과정을 과학적으로 분석한 내용을 다룬다는 점이 매우 신선하고 흥미롭게 느껴졌습니다.
다음으로는 설명의 친절함입니다. 생각하는 방법을 생각한다 는 고차원적인 관점에서 접근을 하다 보면 설명이 장황해지거나 복잡해질 수 있죠. 그럼에도 불구하고 이 책에서는 구체적인 예제가 꽤 많고, 배운 개념을 실습할 수 있는 연습 문제도 제공하며, 각 장 마지막에 요약을 다시 제공하는 방법 등으로 독자의 이해를 돕기 위한 장치가 많았습니다. 그러다 보니 다루는 개념 자체는 어렵지만 이것을 독자에게 이해시키기 위한 설명이 꽤 친절하다고 느껴졌습니다.
마지막은 메타인지 향상인데요, 내가 개발을 하다가 마주친 어려움의 원인을 객관적으로 파악할 수 있고 이를 다른 사람에게 명확히 설명할 수 있게 되었다는 것입니다. 사실 우리가 개발을 하다 보면 다양한 어려움을 겪게 되잖아요. 가령 방금까지 알고 있었던 내용을 까먹기도 하고, 이전에 알고 있던 지식이 방해가 되기도 하며, 왜 중첩된 for
문 로직은 이해하기 어려운지… 그런데 이것을 명확히 설명할 수 있는 단어가 없죠. 보통 그냥 까먹었다, 어렵다, 이해가 안 간다 이런 식으로 추상적으로 설명하게 되니 커뮤니케이션 비용도 커지죠.
하지만 이 책을 읽으면서 내 뇌가 어떤 모델로 동작하는지에 대한 개념을 세우게 되었습니다. 그러다 보니 내가 왜 어려움을 겪고 있는지에 대해 명확히 설명할 수 있게 되었죠. ‘아, 내가 지금 짧은 시간 동안 많은 정보를 읽으면서 STM이 가득 차서 그렇구나’, ‘이 정보는 LTM에서 잘 못 청킹된 정보를 STM에 가져온 덕분에 오해한 것이구나’, ‘작업 기억 공간에서 인지 부하가 높은 작업을 처리해서 그렇구나’ 처럼요. 덕분에 개발 도중 마주친 문제를 더 정확히 공유할 수 있고 해결책도 더 빨리 찾을 수 있습니다.
학교 다닐 때 이러한 인간의 인지 모델을 배운 경험이 떠올라서 좀 더 이해가 잘 됐다
저는 예전에 학교에서 UI/UX 프로그래밍 이라는 수업을 들었던 배경 지식이 있었던 덕분에 공감을 많이 하면서 읽을 수 있었습니다. 해당 수업에서는 인지과학과 연관된 학문인 HCI(Human-Computer Interaction, 인간-컴퓨터 상호작용) 를 얕게나마 공부해보는데 이것이 제 LTM에 저장돼 있다 보니 이해에 도움이 되었습니다.
마지막으로 칭찬만 하면 섭섭하니(?) 아쉬웠던 점도 소개하자면… 가끔씩 나오는 예제가 너무 구체적이어서 굳이 이런 것까지 알아야 하나? 싶은 내용도 있었고, 인지과학과 관련한 용어가 많이 쏟아져 나오기 때문에 앉은자리에서 한 번에 읽기에는 다소 부담스러운 책이긴 합니다. 그래서 시간을 넉넉히 두고 반복해서 읽어야 책 내용을 온전히 이해할 수 있었습니다.
그럼에도 불구하고 프로그래머에게 실용적인 내용이 많으며 마치 블랙박스처럼 동작했던 나의 뇌 속 모델을 이해하는 것이 매우 유익했기 때문에 다른 사람에게도 이 책을 추천하고 싶습니다.