| 후배들에게 알고리즘을 스터디하기 위해서 이 책을 선택했었습니다. 책을 선택하면서 나름대로의 경험에 따라 몇가지 선택 기준을 가졌었습니다. 첫째는 지나치게 알고리즘의 입문자에게 어려운 예제를 선택해서 읽는 사람의 상상력이 방해받지 않아야 한다. 둘째는 일정 수준의 논리적 사고력이 형성되기 전에 난이도가 높은 문제를 다루어서 흥미를 감소시키지 않아야 한다. 셋째는 기본 개념적 설명이 충실해야한다. 이러한 기준에 잘 부합이 되는 것 같아서 이 책을 선정하게 되었습니다. 전체적인 평가는 기본개념의 설명이 잘 되어있고 저자의 코딩에 대해서도 구현한 이유에 대하여 상세하게 설명이 되어있습니다. 그리고 구현된 알고리즘에 대한 평가도 달아놓아서 각자의 코딩과 저자의 코딩을 비교할 기회도 가질 수 있다는 점이 좋았습니다. 그러나 이 책에서 구현된 코딩에는 문제점이 있더군요. 저자 스스로가 시간에 쫒기지 않았나 싶은 생각이 드는 부분들이 눈에 보입니다. 불필요한 변수를 설정하는 점 그리고 temp같은 임시변수의 남발, 조건의 설정에서도 주어진 예제에만 작동이 되고 예제를 조금 변형하면 오류가 발생하는 코딩 등이 있었습니다. 예를 들면 ABDE라고 입력되어있다고 전제하에 C를 연결리스트에 넣으면 저자의 코딩이 작동되지만 ABCD라고 입력되어있다는 전제하에서 E를 넣는다면 코딩 자체가 오류가 발생합니다. 삽입할 위치의 조건 설정이 잘못되어서 이러한 결과가 발생한 것입니다. 어느 정도 일반성을 지닌 로직을 구현을 해주어야할 텐데 주어진 예제만 작동된다는 것은 문제가 있다고 봅니다. 물론 이러한 점이 책의 전체적인 흐름이 초보자에게 해당 알고리즘의 핵심적인 부분만 보여주는데 초점을 두었기에 흔히들 많이 보는 알고리즘 서적처럼 일반화의 수준이 초보입문자의 이해력을 넘어버려서 저자의 코딩에 매몰되는 것보다는 좋은 점입니다. 실상 어느 정도 수준까지 독자의 이해력을 전제로 하여서 지나치지도 않고 모자르지도 않게 균형을 맞춘다는것이 쉽지는 않을 것입니다. 책을 기획한 의도가 좋기는 하였지만 충분한 시간을 가지고 서술 방향을 고민을 했어야 하지 않았나 하는 아쉬움이 듭니다. 베타테스터라는 책이 출간되기 전에 초보자를 대상으로 책 내용의 이해도 여부를 미리 검증하는 제도를 두고 있지만 실상 그러한 것이 절차를 위한 절차로 되지 않았나 봅니다. 베타테스터가 분명히 이해를 못하고 넘어갔을텐데 그러한 것에 대하여 확인절차를 거치지 않는다면 이러한 제도를 둔 자체가 의미가 없어지겠죠. 오히려 문제가 있다는 것이 책을 읽는 사람에게 저자와의 도전의식을 불러일으키고 저자의 코딩에 맹목적인 신앙심을 가지지 않게 해준다는 점에서는 오히려 좋을 수도 있습니다. 독학하시는 분들은 이러한 점을 염두에 두고 보시기 바랍니다. 성숙되지 않았다는 점이 오히려 독자들에게는 다양한 사고를 할 기회를 주는 점으로 작용한다고 볼 수도 있습니다. 전체적으로 시중에 나와있는 알고리즘 책으로서는 입문자가 보기에는 가장 적당하다고 판단이 됩니다. 판매순위가 높은 책들이 있는데 모두 초보자가 보기에는 너무 버거운 책이고 자칫하면 알고리즘을 암기 학습으로 변질시키지 않나하는 생각이 듭니다. 알고리즘을 공부하시는 분들은 알고리즘이 절대 언어를 배울 때처럼 중간에 지나치는 하나의 과정으로 보셔도 안되고, 소개되는 알고리즘을 암기하는 방법으로 공부를 하셔도 안됩니다. 알고리즘은 프로그래밍에서 논리적 사고를 키우기 위한 것이기 때문입니다. 수학이 해답지를 암기한다고 실력이 늘 수 없는 것과 마찬가지입니다. |