moo***
2021-05-21

노트에 직접 알고리즘 문제 해결 과정을 쓰면서 알고리즘과 자료구조의 개념을 이해하는 학습법 안내 도서
오랜만에 번역서가 아닌 국내 개발자님이 직접 쓰신 서적을 만났습니다. 표지는 깔끔하게 흑백으로 색을 구성하고 제목이 부각되도록 큼직하게 상단과 중간에 자리 잡고 있습니다. 주위에는 알고리즘을 구성하는 함수와 테스트 케이스로 보이는 코드로 장식하고 있네요. 파이썬 언어를 사용할 것이라는 것을 짐작할 수 있게 해 줍니다.
작가는 10년 이상 경험을 하신 베테랑 개발자입니다. 리눅스 커널 쪽에 분석과 수정 작업을 하실 정도이니 알고리즘이나 자료 구조 쪽에 깊은 이해력을 갖고 있으심은 분명합니다.
서문에서는 알고리즘이 필요한 이유와 알고리즘을 고안할 때 사용할 수 있는 노트 레이아웃이라는 방법을 소개하고 있습니다. 노트 레이아웃은 다른 책과 구별되는 이 책의 특징이라고 볼 수 있을 듯 합니다. 특정 기능을 구상할 때 머리 속으로 대충 생각하고 손부터 움직이는 경우가 많습니다. 이렇게 노트로 기록을 하게 되면, 생각도 정리를 잘 할 수 있고 코딩을 할 때도 일목요연하게 잘 진행할 수 있을 것 같습니다. 물론, 코딩부터 하게 되는 급한 마음을 잘 다스릴 수 있어야 하지만 말입니다.
서문에서는 7개의 챕터가 있다고 소개하고 있지만, 실제로는 8개의 챕터로 구성되어 있습니다. 아마 집필 당시에는 7개로 구성했으나, 이후에 챕터가 추가된 것이 아닌가 싶습니다. 마지막 장이 정렬 알고리즘인데, 알고리즘을 설명할 때 보통 가장 먼저 등장하는 부분입니다. 정렬이 알고리즘에 기본이 되는 개념이기 때문인 것 같습니다. 그러나 이 부분이 뒤에 가 있어서 책의 구성 관점에서 조금 아쉬운 부분이라고 생각합니다.
차례 부분을 보게 되면, 각 소제목 란에 '문제 기술 및 설명', '노트 레이아웃을 이용한 문제 접근 및 풀이', '관련 문제 사이트' 가 계속해서 반복되고 있습니다. 이러한 반복되는 내용은 책의 구성 부분에 간단히 설명을 하고, 차례 부분에서는 제외를 하는 것이 더 좋지 않았나 하는 생각을 해 봅니다. 프로그래밍의 규칙 중에도 DRY (Don't Repeat Yourself)가 있을 만큼 개발에서도 반복되는 작업은 가능한 제거해주는 것을 권장하듯이 말입니다. 그리고, 8장은 이러한 진행 방식에서 벗어난 챕터로 구성되어 있어, 다른 챕터와 이질감을 느끼게끔 하기도 합니다. 아무래도 8장은 원래는 Appendix 에 처음이 포함되어 있다가 본 내용으로 들어오지 않았나 하는 짐작이 됩니다.
각 장마다 도입부에 필요한 개념에 대해서 그림을 잘 활용해서 설명을 하고, 부분적으로 필요한 코드들을 보여줘서 실제 구현할 알고리즘에 대한 이해력을 높여주고 있습니다. 배열, 문자열, 연결 리스트까지는 설명도 풍부하고, 조금은 배경 지식을 가지고 있어서 그런지 술술 잘 읽혀진다는 느낌이 들었습니다. 그러나, 재귀부분과 동적 프로그래밍 부분은 상당히 난해하다는 생각을 했습니다. 조금 더 지면을 할애해서 개념에 대한 더 자세하고 많은 설명이 있었으면 하는 아쉬움이 있습니다. 이 부분은 알고리즘 문제도 어렵기도 하고, 개념 이해도 명확히 되지 않아서 다른 자료를 좀 더 찾아봐야 할 것 같습니다.
스택을 이용해서 알고리즘을 설명하는 부분은 그림도 잘 와 닿고, 설명도 절차적이고 상세해서 이해하기가 쉬웠습니다. 풀이하는 문제도 흥미로운 주제이기도 해서 재미있게 읽어 나갈 수 있습니다.
전체적으로 이 책에 대해서 알고리즘 풀이집같은 느낌을 받았습니다. 알고리즘이 쉽게 이해하기가 쉬운 분야인 만큼 작가 분이 설명을 가능한한 자세히 해 주시려고 이 책에 심혈을 기울였음 알 수 있는 부분이 자주 보였습니다. 그러나 조금은 앞 쪽보다 뒤 쪽에 있는 챕터 쪽에 설명이 더 많았으면 하는 아쉬움은 있습니다. 뒤로 갈수록 점점 더 개념이 어려워지는 경향이 있기 때문입니다. 요즘 개발자 입사 시험에는 코딩 테스트가 자리 잡고 있는 것 같습니다. 이것을 준비하는 예비 취업자들에겐 좋은 참고서가 될 것 같습니다. 이 책이 중요시하고 있는 타겟이 이 부분들이기도 하겠지요?
한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다.