kyungla***
2017-05-08

프로그래밍 세계로 초대하는 알고리즘 입문서
안녕하세요? 여러분은 알고리즘이란 말을 들어보셨나요? 아마 이공계 계열을 나오신 분들은 많이 들어보셨겠지만, 인문계 계열은 음~~ 하고 계시겠죠? 초등학교때인가 중학교때인가 순서도란 것을 배우신적 있으시죠? 아니면 여성 잡지때에 나오던 맞으면 yes, 틀리면 no 화살표를 따라가서 자신의 성격을 알아 맞추던 그런 것들요...
제가 이 책을 읽기 전에 알고 있던 알고리즘이란 위와 같은 것들이에요. 하~ 아닌가요?
이번에 제가 읽은 책은 그림으로 개념을 이해하는 알고리즘입니다.
데이터 분석 책을 요즘 많이 읽다가 보니 알고리즘, 알고리즘 해서, 제가 태어나서 알고리즘 책을 읽어본 적도 없고, 알고리즘을 사용해 본적이 없어서 잘 모르지만, 꽤 중요하다는 생각은 들었어요.
더불어 아는 지인들로 부터 알고리즘 책을 읽다가 포기했다는 말도 가끔 듣기도 했고요. 대부분 알고리즘을 다 어려워 하시는 것 같았어요.
이런저런 이유로 저도 조금의 관심은 있었어요. 수포자처럼 다들 포기한다고 해서, 왠지 모를 호기심도 있었구요.
그런데 이 책은 중고등학생들도 읽을 수 있을 정도로 쉽게 쓰여졌다고 자랑하고 있네요. 요즘 중고등학생들의 수준이 너무 높아서, 제 기준으로는 많이 어려울수도 있지만, 도~~~~~전~~~ 해 보기로 했습니다.
이 책의 로드맵이라고 나오는데, 사실은 목차와 같아요.
아~ 이런 것들을 알고리즘이라고 하는구나...
이진 탐색, 선택 정렬, 귁 정렬 그냥 책 덮고 싶어지시죠? 그러지 마세요 ^^
아 반가운 그래프 이론도 나오네요.
사회관계망 이론(그래프 이론)은 이미 R로 조금 다루어본 경험이 있거든요.
이 책 서문에 나오지만, 다 읽어본 지금에서 이 말뜻이 이해갑니다.
데이터 분석 라이브러리들이 요즘 워낙 쉽게, 잘 만들어서 나오기 때문에, 내가 직접 모든 것을 코딩해서 구현할 필요는 없지만, 이 라이브러리들이 어떤 핵심 아이디어를 통해 만들어졌는지 이해하는 것이 더 중요하다는 말 공감합니다.
이 책도 이런 의도에서 쓰여졌다고 생각합니다. 알고리즘을 짜고 만드는 것이 아니라, 그 핵심 원리를 그림으로 쉽고 간결하게 이해하는 것. 각종 컴퓨터 언어에서 기본적으로 제공하면서 가장 중요한 자료 구조를 이해하는 것.
R, 파이썬, 자바스크립트의 기본 자료 구조가 어떻게 탄생했고, 어떻게 작동하고(책에서 언급하지는 않지만, 책을 읽다가 보면 서로 연결 고리가 있다고 느껴지네요) 있는지, 어떤 문제점과 장점을 갖는지 상상력이 막 발동합니다.
이런 부푼 마음을 가지고, 책장을 넘기면 이렇게 많은 그림과 내용들이 나옵니다.
보통의 알고리즘 책들이 얼마나 쉽고 관련 그림들이 많이 나오는지는 모르겠지만, 이 책은 제가 이해할 수 만큼 쉬운 내용으로 그림들이 적재적소에 잘 들어가 있다는 느낌입니다.
번역도 잘 되어 있어서, 번역투 같은 느낌보다는 지은이가 글쓴것 같은 문장이 짧고 설명이 쉽습니다.
물론 아직 제 수준에서는 책 속에 등장하는 모든 단어 정의를 다 이해하지는 못했지만요...
각 이론 설명도 이렇게 그림으로 보니까 더 이해하기가 쉽죠. 그림으로 개념을 이해하는 책인 것 맞습니다.
이 책의 장점이 이론의 결말까지 도달함에 있어, 그림으로 하나하나 끝까지 설명한다는 것입니다. 중간에 비워져 있는 내용이 없어, 책만 쭉~ 잘 읽어나가면 왠지 수학 공식이 증명된 듯한 느낌이 듭니다. 그리고 파이썬으로 실제 코딩할 수 있도록 예시 소스 코스를 보여줍니다. 소스 코드도 간결한 것 같지 않나요? ^^
여러가지 탐색 이론은 처음 공부해서 생소했지만, 그래프 이론은 좀 쉽게 다가오네요. 최단 경로, 경로등 내용이 깊은 곳까지는 가지 않지만, 개념을 잡는데 확실이 도움이 됩니다.
그리고, 마지막의 KNN 알고리즘은 요즘 제가 공부하고 있는데, 이렇게 두 페이지로 설명하네요. 그러니까, 수식과 여러 배경 없이 아 이런 것이 KNN이구나, 아 이런씩으로 접근하구나를 이해시키려는 것 같습니다.
데이터 분석을 하기 위한 기초 지식으로는 충분하지만, 어떻게 보면 제가 조금 아는 부분이라서 쉽게 느껴졌을수도 있습니다. 실제로 여러 머신러닝 도구들을 이용할 때는 더 많은 지식이 필요합니다.
하하 저자의 말대로 알고리즘이 지루하고 어렵다는 느낌이 안 드네요. 물론 전공 서적의 깊은 내용들을 공부하지 않아서 이런말을 하는 것이겠죠.
그래도 처음 알고리즘을 접하거나, 기존 알고리즘 책들이 너무 안 맞는 분들은 서점에서 살짝 읽어보세요.
비전공자들도 아~ 하면서 프로그래밍의 원리를 좀 더 이해하실 수 있을꺼에요.
그러나, 이 책을 읽었다고 해서, 없던 파이썬 프로그래밍 기술이 생기거나 하는 것은 아닌 것 같아요.
그리고, 지금 제 실력으로는 이것을 어디다 사용할지도 정확히 모르는 점 인정하지만, 대략 이런 탐색 기법은 이렇게 사용하지 않을까 하는 느낌 정도는 확실히 받았어요.
나중에 코딩 실력이 좀 더 나아지거나, 고급으로 넘어갈 때 알고리즘을 생각해서 코딩해야 하는 시기가 다가오면, 많은 도움이 되리라고 생각합니다. 이 정도만 해도 대단한 발전이 아닐까 생각해봅니다.
비전공자도 재미있게 알고리즘에 접근할 수 있다에 한 표 던집니다. ^