brunch

You can make anything
by writing

C.S.Lewis

by 조인석 chris May 01. 2017

정말 쉬운 <그림으로 개념을 이해하는 알고리즘>

<Hello Coding 그림으로 개념을 이해하는 알고리즘>을 읽고

컴퓨터공학 학부 시절, 가장 어려웠던 과목이 무엇이었는지 돌이켜보면 컴퓨터 구조론이나 알고리즘, 데이터 자료구조론과 같은 과목이었다. 과목에서 설명하고자 하는 내용도 난이도가 깊은 데다가 교재가 워낙 읽기 어렵고 재미가 없어서 가장 중요하면서도 기초적인 과목임에도 불구하고 명확하게 이해하기 쉽지 않았던 것 같다.


졸업을 하고 십수 년 동안 필드에서 일하면서 이러한 기초 지식이 얼마나 중요한지 새삼 깨달으면서도, 알고리즘에서 배웠던 내용들을 직접 활용하여 소스 코드를 작성할 일은 많지 않았다. 하지만, 한창 코딩을 많이 하다 보면 어느샌가 실행 속도가 점점 느려지는 현상을 발견한 적도 있고, 아주 간단한 정렬이나 자료구조의 잘못된 선택이 전체 시스템의 성능에 영향을 미치는 경우를 자주 접하게 되었다. 그리고 근래에는 회사에서 기존 사원들이나 신입/경력 신규 입사자들의 기술 역량을 평가하기 위해 온라인 코딩 사이트를 통하여 알고리즘이 포함된 문제들을 푸는 경우가 많아졌다. 이름이 알려진 소프트웨어 회사라면 어김없이 온라인 코딩 테스트를 치르게 되어 있고, 알고리즘에 대한 기본적인 소양이 없다면 문제를 푸는 것이 그리 쉽지 않다. 비단, 경력이 어느 정도 있는 개발자라도 말이다.


이런 와중에 아주 반가운 책을 접하게 되었다. 한빛미디어에서 "Hello Coding" 시리즈 중 하나로 "그림으로 개념을 이해하는 알고리즘"이라는 번역서를 출간하였고, 우연히 "나는 리뷰어다!"행사에 참석하게 되어 해당 책을 읽어보게 되었다.


책을 처음 접하였을 때는 무척이나 쉬운 개념 설명서 정도 될 줄 알았다. 솔직히 내용도 그리 기대하지 않았었다. 하지만, 첫 챕터부터 나의 생각을 완전히 뒤집어 놓았다. 아마도, 컴퓨터 전공과 아무런 관계가 없는 독자더라도 이 책을 통해서 알고리즘의 컨셉뿐만이 아니라, 기본 동작 원리를 제대로 이해하는데 도움이 될 것이라 생각이 되었다. 

이진 탐색에 대한 쉬운 설명


특히, 단순히 알고리즘 설명뿐 만이 아니라, 실행 속도의 상대적인 비교 및 정량적인 표기를 위해 반드시 알아야 하는 빅오 표기법에 대해서도 쉬운 예제와 함께 설명을 하고 있어, 처음 접하는 사람이라도 개념을 기억하기에 무척 적합하다는 생각이 들었다.

단순탐색 및 이진 탐색의 비교
빅오 표기와 실행 속도의 상대적인 비교표


게다가, 어떤 데이터 타입을 사용하는 것이 성능에 영향을 미치는지 등의 놓치기 쉬운 내용 역시 잘 설명해 나가고 있다. 

배열과 리스트를 선택하기 위해 고려해야할 사항


또한 다소 어려울 수 있는 재귀나 해시 테이블에 대한 설명은 무척 인상 깊다. 적절한 예제와 이해를 돕기 위한 스토리 텔링은 굉장히 흥미롭고 재미있기까지 하다.

재귀 실행 방식 설명
재귀 호출 스택  설명
해쉬 테이블 이해를 위한 쉬운 설명


하지만, 책의 7장을 넘어서면서부터 내용이 다소 어려워지는 건 어쩔 수 없는 듯싶다. 처음 알고리즘을 배우는 사람에게 굳이 다익스트라 알고리즘이나 동적 프로그래밍 심지어는 머신러닝에서 사용하는 k-NN 알고리즘까지 풀어내고 있다. 내 생각에는 저자의 욕심이 다소 과하지 않았나 싶기도 하다.

k-NN 알고리즘의 설명


차라리 상대적으로 현업에서나 코딩 테스트에서 항상 거론되는 트리 관련된 내용이 더욱 깊이 다뤄졌으면 하는 아쉬움이 앞선다. 이런 이유로, 책의 후반부에서 집중력이 다소 흐려질 수도 있겠다. 실은 마자막 장에 나오는 맵리듀스나 SHA알고리즘 등은 지나쳤다고 생각이 든다. 너무나 간단한 개념만을 담고 있어 크게 도움이 되지는 않을 듯하다. 하지만, 실무에서는 모두 활발하게 사용이 되고 있는 것들이기 때문에, 개념을 이해하는 수준에서는 좋은 콘텐츠가 될 수도 있다는 생각이다.

마지막장의 목차 리스트


300 페이지가 넘는 책이지만, 그림과 도식이 많아서 금방 읽혔다. 필자도 3일 정도 걸린 듯하다.


알고리즘에 대해서 처음 공부를 하거나, 학창 시절의 알고리즘을 다시 한번 되돌아보는 개발자 혹은 근래에 유행하는 머신러닝 알고리즘이나 데이터 분석, 암호화 알고리즘에 대해 가볍게 이해하고 싶다면, 한 번쯤 읽어 보면 좋겠다. 오래간만에 가볍게 중요한 기본 지식을 훑어보면서 시간을 알차게 보낸듯하여 기분이 좋다. :)


* 본 후기는 한빛미디어의 지원으로 작성이 되었습니다.

브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari