코드를 작성하고 있는 개발자의 뇌를 실시간으로 열어보자
2학기를 마치고 여유를 찾기 위해 사뒀던 책을 읽는 중이다.
오늘 소개할 책은 최근 커뮤니티에서 개발자 필독서로 언급되고 있는 <프로그래머의 뇌>이다.
이 책은 생각에 관한 생각을 해볼 수 있는 책이다. 어렸을 때 흔히 말하던 "공부 잘하는 법"처럼 "개발 잘하는 법"에 대해 고민해볼 수 있다.
자신이 완벽한 개발자라고 해도 이 책을 읽으면 본인도 어딘가 개선할 점이 있다는 걸 알 수 있을 것이다.
도서 <프로그래머의 뇌>는 인지과학 관점에서 개발자가 코드를 작성하는 과정을 설명한다. 우리가 어떻게 코드를 인식하고 그 과정에서 우리 뇌에서 무슨 일이 일어나는지 쉬운 도식과 친절한 설명으로 명쾌하게 설명해준다. 물론 이에 관한 연구 결과를 함께 소개하면서 주장을 뒷받침한다.
누구나 처음 프로그래밍 언어를 접하거나 새로운 기술을 공부할 때 느꼈던 감정이 기억날 것이다. 내 경우에는 예전에 사용하던 언어가 시간이 지나면서 한동안 쓰지 않다 보니 어느 순간 단순한 문법조차 기억이 나지 않아서 당황했던 경험이 있다. 그래서 울며 겨자 먹기로 예전에 공부했던 책을 다시 꺼내서 훑어봤던 기억이 있다. 그렇게 겨우 복기하면서 작성하는 코드는 어이없는 실수를 남발하기 마련이고 개발 과정에서 상당한 스트레스가 쌓이기 마련이다. 이 같은 과정을 인지부하라고 부른다. 즉 내 뇌에서 처리할 수 있는 용량을 넘어섰거나 혹은 끄집어낼 수 있는 지식에 한계가 있는 것이다.
한동안 사용하지 않으면 분명 머릿속에는 어떻게 해야 하는지 아는 것 같은 희미한 느낌만 남아있다. 그래서 지식을 구체화하지 못해서 당황했던 경험은 누구나 한 번쯤 있을 것이다.
그런 경험이 있는 사람이라면 이 책을 읽고 나면 왜 그런 현상이 발생하는지 이해할 수 있을 것이다.
<프로그래머의 뇌>는 그런 과정을 LTM과 STM 그리고 작업 기억 공간이라는 개념을 이용해서 친절하게 알려준다.
STM은 컴퓨터의 RAM과 같다고 보면 된다. 우리가 방금 본 대상을 STM에 올려두는 것이다. 마치 메모리에 로드하는 것처럼 말이다. 그리고 LTM은 오래된 기억이 자리 잡고 있는 Disk다. 오래전에 공부했던 희미한 지식을 가까스로 기억해서 현재 상황에 끼워 맞추려 노력하는 것처럼 말이다. 그리고 LTM과 STM에서 가져온 정보를 섞어 작업 기억 공간에 올리고 그곳에서 복잡한 사고를 진행한다. 이것이 <프로그래머의 뇌>에서 언급되는 가장 핵심적인 사고 과정이다.
이 책을 읽고 나면 앞으로 코드를 작성하면서 마주하는 인지부하 상황 속에서 당황하거나 본인의 무지에 답답하기보다는 내가 멍청해서가 아니라 인지부하 때문에 발생하는 상황이라고 생각할 수 있다. 그래서 좌절하지 않는 마인드를 갖게 될 수 있다고 생각한다. (하지만 그럼에도 불구하고 코딩은 좌절의 연속이다)
물론 좋은 마인드를 갖는 것은 당연하고 책에서 언급된 다양한 방법들을 시도해볼 수 있는 것이 좋은 점이다.
<프로그래머의 뇌>는 우리의 기본적 사고방식의 작동 원리를 이용해서 오히려 개발 과정에서 어떻게 해야 효과를 극대화할 수 있는지 알려준다.
책은 코드를 어떻게 읽어야 더 효율적으로 읽을 수 있는지, 복잡한 코드를 어떻게 하면 잘 읽을 수 있는지 그리고 문법을 더 빠르게 익히거나 문제 해결을 효율적으로 하는 방법을 소개한다. (직접 체크해볼 수 있는 간단한 연습문제도 제공된다. 시간이 된다면 연필을 들고 한 번씩 작성해보는 것을 권한다.)
개인적으로 가장 마음에 들었던 부분은 책의 후반부에 나오는 좋은 코드를 작성하는 방법에 대한 소개이다.
현재 취업준비생이기에 코드를 읽고 작성할 일도 많을뿐더러 과거 프로젝트를 리팩토링할 일도 많아서 고생하는 중인데 어떻게 좋은 코드를 작성할지에 대한 소개가 내게는 많은 도움이 되었다.
혹시라도 시간이 없어서 책 일부만 읽어볼 심산이라면 좋은 코드 작성과 코드 이해에 관한 내용을 다루는 챕터 8과 챕터 5는 시간을 내서라도 읽기 바란다. 방법론을 떠나서 코드에 대한 이해를 얻을 수 있어 써먹을 곳이 많은 내용이다.
읽어본 결과 세 부류의 사람에게 가장 추천한다.
첫 번째는 관련 학과에 재학 중인 대학생이다. 아직 학생이라면 복잡한 코드를 읽거나 빠르게 문법을 배울 방법이 언급되어 앞으로 개발 공부를 하면서 많은 도움이 될 것이다. 본인이 학교에서 나온 과제를 하는 중이던 강의자료에 있는 처음 보던 코드에 좌절하든 간에 책에 나온 대로 직접 방법들을 실천하면서 본인의 인지 과정의 효율성을 꾀함으로써 복잡도를 낮춰보는 연습을 하는 것이 도움이 될 것으로 생각한다.
두 번째는 본인의 현재 실력에 만족하지 못하는 취업준비생이다. 이제 막 개발자로 취업하고 싶은 취업준비생이라면 자신이 지금 헤매고 있는 부분이 어디고 그에 맞는 해결방법은 뭔지 알아보고 적극 실천하면서 코딩 실력을 더욱 기르고 다듬을 수 있을 것이다.
세 번째는 현업 개발자다. 만약 현업에서 일하고 있는 개발자라면 마지막 챕터가 가장 도움될 것으로 생각한다. 협업에 관해 이야기하는데 그중에서도 주니어 개발자가 합류했을 때 어떻게 주니어 개발자에게 도움이 될 수 있는지 설명하기 때문이다. (흔히 말하는 온보딩 과정을 말한다.) 책에서 나온 대로 상대방을 이해하려 노력하고 어떻게 접근해야 도움을 줄 수 있는지 고민해본다면 성공적인 온보딩을 이끌어낼 수 있다고 생각한다.
사실 위에서 언급된 독자층을 떠나 누구든 본인의 현재 실력보다 더 나은 실력을 갖추고 싶은 개발자라면 꼭 한번 읽어봐야 한다고 생각한다. 가장 중요한 건 책에서 나온 방법들을 한 번씩은 실천해봐야 한다는 것이다. 이 책은 읽고 난 뒤 행동을 통해 체득해야 효과를 볼 수 있는 방법론들을 주로 소개하기 때문이다.
만약 행동하지 않는다면 책에서 얻을 수 있는 것은 우리가 코드를 작성할때 하게 되는 사고방식의 원리에 대한 이해 정도가 전부다. 이 책은 방법론때문에 더욱 권장되는 책이라고 생각한다.
책이 두껍지 않아서 읽는데 오래 걸리지 않는다.
기술적 내용은 거의 없다. 그래서 가벼운 마음으로 읽을 수 있는 책이지만 얻게된 내용은 오랜 기간 코드를 작성하면서 상기시킬 가치가 있는 묵직한 가르침이라고 생각한다.
개발자로 지낸다면 누구나 성장하고 싶기 마련이고, 내가 일하는 방식 중에서 아주 작은 부분조차 최적화를 이뤄내고 싶은 사람에게 적극 추천한다.
개발자 필독서답게 좋은 내용이 상당히 많다.
재밌게 읽었습니다.
감사합니다.