티스토리 뷰

<해당 포스트에서 소개하고 있는 책 중 "Hello Coding:그림으로 개념을 이해하는 알고리즘" 은 한빛 미디어로부터 지원을 받아 읽고, 그에 대한 서평을 이 포스트에서 담고 있음을 알려드립니다. 책에 대한 자세한 내용은 링크를 참고하시기 바랍니다.> 

한번 이 글을 읽는 사람이라면 물어보고 싶은 내용이 한가지 있다. 과연 여러분은 자료구조와 알고리즘을 어떻게 배웠을까? 

 아마 컴퓨터 관련 전공을 가진 사람이라면 위의 책 중 하나는 읽지 않았을까 싶다. 특히 Cormen 책은 거의 알고리즘 계의 바이블 수준일 정도로 많이 읽을거라고 생각한다.(물론 아닐수도 있고, 내가 모르는 알고리즘 책이 또 있을 수 있다.) 참고로 나는 맨 밑의 책(Horowitz 책)으로 공부했었는데, 과도 컴퓨터과도 아니고, 그렇게 심도있게 배웠다는 생각이 없다. 물론 C에 대해서 잘 알기 전에 이 책으로 자료구조부터 배워서 그런지, 이 책을 처음 접할때는 뭔가 읽기도 난해했고, 재미없었던 기억이 난다. 그래도 알고리즘의 기초부터 구현까지 단계별로 설명한 좋은 책이었다고 생각한다.

 문득 드는 생각이지만... 난 정말 자료구조이나 알고리즘에는 정말 약하다고 생각한다. 정말 뭔가 체계적으로 배운것도 없고, 알고리즘을 구현해보라고 시키면 정말 자신이 없다. 회사에서 하는 업무도 업무일뿐더러 이런 알고리즘과 관계가 없기 때문에 다뤄볼 기회도 없고, 시간을 내서 공부할 여력도 안된다. 그래서 항상 답답함을 느끼는 터에 이 책을 받게 되었다.

이 책을 한마디로 표현하면 위에 소개되어 있는 "Introduction to Algorithm의 축소 그림책" 이라고 하고 싶다. 그렇게 하고 싶을 정도 이 안에는 그림과 설명이 정말 많다. 기존의 책들이 설명과 유도 방식으로 되어 있어, 읽는데 매우 지루했던데 비해, 이 책은 그림과 단계별 설명이 잘되어 있다. 또한 기존 책들이 C와 Pseudo code로 되어 있어 뭔가 어려움을 느꼈더라면, 이 책은 실제 학습 코드가 Python으로 구현되어 있어 훨씬더 따라해보고, 이해하기 쉬울 책이라고 생각한다. 어쩌면 요즘 대세 프로그래밍 언어라 할 수 있는 Python을 선택한건 최근의 학습 트렌드가 반영된 형태라고 보면 좋을거 같다. 

 참 이 책의 제목이 "Hello Coding : 그림으로 개념을 이해하는 알고리즘"이라고 되어 있지만, 원제는 "Grokking Algorithm: An illustrated guide for programmers and other curious people" 라는 책이다. 

그리고 실제로 책안에 들어있는 일러스트들은 저자가 직접 다 그리고 올린 그림이라고 한다. 실제로 그림이 이렇게 되어 있다.

 위의 그림은 이진 탐색을 설명하기 위한 그림이었는데, 여기에 쓰인 일러스트들을 보면 직관적으로 설명되어 있다. 우리나라 편에서는 그림속의 내용들이 한글로 다 바뀌었다. 사소하면서도 저자의 의도를 최대한 살리면서, 책을 알기 쉽게 풀어나간 부분이 아닐까 생각한다. 이밖에도 Dijkstra Algorithm이나 Knapsack 에 대한 설명도 어떻게 보면 설명이 길어질 수 있는데 그림으로 잘 도식화시켰다.

개인적으로 생각하는 이 책의 장점은 알고리즘의 원리를 설명하는 틀에 갇혀있지 않고, 다양한 분야로 설명하고자 노력했다는 것이다. 예를 들어 Dynamic programming이나 Greedy Algorithm, k-NN 같은 알고리즘도 어떻게 범주를 굳이 나누자면 조금 고급 개념일텐데, 이 책에서도 이것도 다루고 있었다.  나도 대학원에서나 최근에 들은 수업중에 Optimization과 관련된 내용을 조금 다뤘었기에 해당 부분을 관심읽게 살펴봤다. 그래서 이책을 읽고나면, 어디서 그런 이야기를 들었을때 적어도 그에 대한 이야기를 할 수 있을 듯하다.

그런데 다만... 한계가 여기까지다. 그냥 그에 대한 이야기만 할수 있을 정도이지, 뭔가 응용하고 실습을 할 수 있는 예제나 직접 해볼 수 있는 내용들은 부족했다. 물론 이런 개념들이 실제 일상에서는 어떻게 쓰인다는 것을 설명하고는 있지만, 아마 처음 읽고 해당 파트를 읽게 된다면 "So what? 그래서 어떻게 해볼 수 있는거지?" 에 대한 의문을 가질 법하다. 그래서 마지막에 제시되어 있는 "k-NN"이나 더 살펴봐야 할 내용으로 다룬 내용은 조금 부실하게 표현된게 아닐까하는 개인적인 생각이 든다. 물론 개인적인 호기심으로 이 책을 정도하는 것은 좋을 수 있으나, 뭔가 해당 부분에 대한 이해를 원한다면 다른 참고서적을 살펴보는게 좋을거 같다. 

 책의 소개 페이지에서 언급하고 있는 독자의 수준에 적합한 책이고, 정말로 프로그래밍이나 알고리즘을 다뤄보지 못한 사람이라면 이 책은 정말 더할 나위없이 좋은 참고서라고 생각한다. 나한테는 일러스트나 단계별 설명, 거기에 Python 을 통한 실습까지.. 서두에서 잠깐 언급했던 "Introduction to Algorithm의 축소 그림책" 이라는 느낌에 딱 맞는 책이라고 느꼈다. 뒷 챕터에서 다루는 내용의 부실함이 약간의 아쉬움으로 남긴 하지만, 처음 읽는 사람의 호기심을 자극하고, 더 공부해보고자 하는 의지가 있다면 이 책은 그 역할을 할 수 있는 발돋음판이 되지 않을까 싶다.


PS1. 저자의 홈페이지는 링크와 같다. 가보면 개발과 관련해서 흥미로운 포스트들이 소개되어 있다. 아마 개인적인 생각으로는 이사람의 설명 전개 방식은 이런 그림이 동반되어 있기 때문에 조금더 독자의 흥미를 유발시키고, 관심을 이끄는 원동력이 되는 거 같다. 참고로 책 사이사이에서 언급하고 있는 Introduction to Algorithm과의 비교 내용도 저자가 설명하고 있다. 한번 참고해보길 :)

PS2. 공학을 전공한 사람답지 않게 그림을 정말 잘 그린다. 더구나 남자다. 부럽다....

댓글