출판사 및 저자
- 저자: 펠리너 헤르만스
- 출판사: jpub
책 소개
이 책은 주로 뇌과학, 인지적인 측면에서 프로그래머가 어떻게 하면 프로그램을 더 잘 작성할 수 있는지에 대해 이야기하는 책입니다. 크게 나눈다면
- 코드를 더 잘 읽는 방법
- 코드를 더 잘 생각해보는 방법
- 좋은 코드를 작성하는 방법
- 협업을 하는 방법
이렇게 네 가지 구성으로 나뉘어져 있습니다.
이 책이 방법론적인 측면에서 제시하는 다양한 방법론 역시도 매우 흥미롭긴 합니다. 새로운 언어를 공부할 때 플래시 카드를 사용해라, 변수들에 원을 치고 이것들이 어디에서 불려지는지를 이어가면서 확인해라, 변수들이 무슨 뜻을 가지는 지를 정리해서 작성해봐라.
하지만 이 이야기들을 다 모아서 책에서 이야기하는 가장 핵심이 무엇이냐에 대해 제가 정리하자면 다음과 같이 요약할 수 있을 것 같습니다.
“프로그래밍이란 글을 읽고 쓰는 과정이고, 이를 효과적으로 하기 위해서는 인지적 부하를 줄여야 한다.”
이런 것 때문에 연구를 통해 확인한 좋은 프로그래머의 자질은 수학적인 능력과는 전혀 상관이 없었고, 오히려 글을 읽고 쓰는 능력만이 유일하게 상관이 높았다고 합니다.
여기서 말하는 인지적 부하란 여러가지가 있을 수 있습니다.
문법에 대한 이해가 얼마나 있느냐일수도 있고,
변수명 자체가 실제 프로그램의 동작을 이해하는데 얼마나 도움이 되느냐일 수도 있고,
주석이 프로그램 전반에 대한 추상적인 개념 및 작성에 대한 이유를 나타내느냐일 수도 있고,
프로그램이 자주 쓰이는 디자인 패턴을 사용하느냐일수도 있고,
때로는 camelCase를 사용하느냐, snake_case를 사용하느냐에 대한 선택이 인지적 부하에 영향을 미칠 수도 있습니다. (별개로 camelCase가 인지적 부하가 더 낮다는 것이 통계적으로 밝혀졌다 합니다.)
이 책을 읽고 나서 코드를 작성하는 데 있어 내가 작성한 코드에서 인지적 부하를 줄일 수 있는 방법이 무엇인지에 대해 요즘 많이 고민하게 되었습니다. 대표적으로는 변수명을 작성할 때, 변수가 해당 객체의 행동을 제대로 나타내지 못한다는 생각이 들면 이를 좀 더 명확하게 나타내도록 노력하고 있습니다. 이는 확실히 이해하지 못했던 코드를 이해하는 데 많은 도움이 되고 있습니다.
- 약자가 흔하게 사용되는 경우가 아니면 약자를 사용하지 않는다.
- camelCase > snake_case 와 같은 원칙들은 꽤나 유용하게 사용하고 있습니다.
이와는 별개로 또 프로그래밍의 개념적인 지식을 습득하려고 노력하고 있습니다. 대표적으로 현재 하고 있는 디자인 패턴 공부가 그것입니다. 이를 통해 이전에는 코드가 동작하는 것을 확인하고 나서 이해한 뒤에 코드를 작성할 수 있었던 반면, 이건 xx 패턴이니까 무슨 용도로 쓰이겠구나 하는 LTM을 통해 프로그램을 더 잘 이해할 수 있게 됐습니다. 가능하면 앞으로도 많은 글을 읽어가며 개념을 습득하려 합니다.
해당 책에서 사람들이 많이하는 착각으로 제시하는 것이 이제 직접 코드 작성하기입니다. 그러는 것보다는 어떻게 코드를 작성하는 지에 대한 예시를 제공하고 이를 훈련하는 것이 최초의 인지적인 부하가 적기 때문에 학습의 속도나 질적인 모든 면에서 우수하다고 합니다. 이와 마찬가지인 것이 남이 작성한 코드를 읽는 것이지요. 이는 요즘에 copilot을 통해 일단 코드를 따라 작성해보고, 원리에 대한 해설을 듣다보니 학습의 속도가 빨라지는 것과 일맥상통한다 생각합니다.
또 신경쓰는 것은 뭔가를 배울 때 추상적 => 구체적 => 추상적 설명을 통해 내용을 갈무리하는 것입니다. 실제로 요 근래 제가 작성하고 있는 모든 디자인 패턴 글은 이런 형태를 따르고 있습니다. 개요/요약을 통한 추상화 => 실제 사례를 통한 구체화 => 결론 요약을 통한 추상화.
디자인 패턴이나 아키텍처 관점이 아니라, 인지과학 측면에서 프로그래머의 생산성을 높이기 위한 고민에 대한 내용이 꽤나 흥미롭고 배울 점이 많은 책이었습니다. 나중에 한 번 더 읽어보고 싶기도 하네요.
다음에 리뷰하게 될 책은 아마 소프트 스킬이 되지 않을까 싶습니다.