누워서 읽는 알고리즘
알고리즘은 딱딱하고 고리타분하고 어떤 틀이 정해져 있어 그냥 외워야 한다고 생각하는 독자가 많다. 그러나 알고리즘이란 최적의 문제 해결 방법을 도출해내는 것으로, 외우는 것이 아니라 생각하는 것이다. 이 책은 딱딱한 알고리즘 이론서가 아니다. 그렇다고 독자에게 감동과 재미를 주는 에세이도 아니다. 때로는 딱딱한 수학과 지저분한 펄 코드가 등장하기도 하지만 깔끔하고 읽기 쉬운 C 코드와 재미있는 퀴즈도 나온다. 책 속의 삽화나 특이한 그림을 보는 재미 또
‘행복한’ 프로그래밍 이후 출간된 ‘누워서 읽는’ 알고리즘은 전작과 마찬가지로 독자가 IT업계라고 가정하고 우리가 매일 수행하는 ‘일’이 얼마나 재미있고, 얼마나 아름다운지 이야기 하고 있습니다. 전작의 ‘행복한’ 이라는 형용사에 이어 ‘누워서 읽는’ 이라는 조건(?)을 내선 이책은 언뜻 보면 복잡한 알고리즘을 ‘쉽게 풀어서’ 설명한 책인 것 같아 보이지만 저자의 말대로 읽을 거리를 만들기 위해서 알고리즘과 같은 기술적인 내용을 동원한 책입니다.
전작과 마찬가지로 이책의 매력(?)은 독자에게 무언가를 생각해 보게끔 하거나 시키는 것입니다. 간단한 퀴즈를 통해 문제를 해결해 보도록 하고 그로 인해 느끼는 성취감을 맛보게 하고 있습니다. 다만 저 같은 소심한 독자들에게는 “이러한 문제는 중학생도 풀 수 있습니다.” 라는 소리를 들으면 문제를 ‘즐기지’ 못하고 꼭 맞춰야 한다는 강박관념에 빠져버린 답니다..-_-;; 이 때문에 저자의 의도 즉, 문제 해결 방법을 통해 생각하는 방법과 동기부여를 놓쳐 버릴뻔한 우를 범했네요.
행복한 프로그래밍에서 커피의 종류를 들어 책을 설명했다면 누워서 읽는 알고리즘에서는 재즈, 롹, 하드코어, 클래식 네 개의 음악 장르에 비유해서 장을 나누었습니다. 처음 저자의 실제 경험담을 토대로 알고리즘의 중요성과 현실에서의 알고리즘을 설명함으로써 생각하는 방법을 알려주고 있습니다. 재즈로 시작하는 아침향기에서는 Smooth Jazz(KennyG, David koz, David Grusin : 듣기 편하고 주로 라디오 오프닝 음악으로 쓰이는.. ^^;;)와 같은 특별함 없이도 쉽게 읽을 수 있는 알고리즘을 설명하고 있습니다. 주된 내용은 저자의 경험담이나 간단한 문제, 신기한 문제로 이루어져 있습니다.
두 번째 롹은 어떻게 보면 약간 정신이 없습니다. 저만의 생각이지만 그렇기 때문에 내용도 왠지 산만하네요. 시험문제에 단골로 등장했던 정렬, 검색 알고리즘과 이것과 관계 있는 해시 알고리즘, 마지막으로 별로 들어 보지 못했지만 신선한 문학적 프로그래밍을 소개하고 있습니다.
세 번째 하드코어는 프로그래밍 세계에서의 매니아들에 관한 내용을 기술하고 있습니다. 재귀의 미학, RSA 알고리즘과 이것을 펄로 구현한 그냥 이런 것이 있구나 하고 넘긴 기묘한 3줄의 코드등 이해하기 어려운 내용도 포함되어 있지만 자료구조 시간에 배웠던 Linked List나 폴란드식 표기법은 친숙한 것이었습니다.
마지막으로 클래식으로 마무리하는 차분한 저녁은 고전음악을 뜻하는 클래식에 자료구조 및 알고리즘 및 전공 시간에 나오는 고전적인 초식을 대응시킨 N개의 여왕문제, 퇴각검색, 2의 보수와 전공이였다면 몇 번은 들어 봤을 법한 내용을 설명하고 있습니다.
이 책 또한 행복한 프로그래밍처럼 쉽고 재미있게 읽어 볼 수 있었습니다. 다만 이전보다는 알고리즘이라는 도우미를 통해 프로그래밍에 관하여 수다를 떨기 때문에 약간은 생각해 봐야 할 부분도 존재하구요. 저같이 IT관련 전공인 분들은 시험문제로 지겹게 외웠거나 숙제 했던 기억을 떠올리며 알고리즘들을 좀더 즐길 수 있어 좋았습니다~ 이와는 반대로 지겨운 알고리즘을 또 봐야 하나..라는 분들도 계시겠네요.. ㅋㅋㅋ