chkim***
2022-08-27

복잡한 수식은 최소화하고 이해에 꼭 필요한 수식만 담고 작동 원리를 단번에 이해할 수 있게 도와주는 다양한 그림과 바로 실행하고 확인할 수 있는 108개 소스 코드를 예제로 제공해 알고리즘의 얼개를 완벽히 이해할 수 있도록 구성했다.
프론트엔드 직무로 현업에서 일하고 있는 내가 알고리즘과 자료구조의 필요성을 느낀 적은 많지 않다. 프론트엔드는 사용자와 상호작용하는 부분을 담당하는 파트이다. 프론트엔드는 자료구조와 알고리즘보다 사용자의 경험에 대한 고려와 요구사항 파악에 더 많은 힘을 쏟아야 한다.
그러나 이 점이 프론트엔드가 알고리즘, 자료구조 상식을 등한시 해야한다고 주장하는 것은 아니다. 필요성을 느낀 적이 많지는 않더래도 사용자 경험을 고려하여 어떠한 문제를 풀어야 했을 경우, 기획자가 기획한 요구사항을 어떻게 풀어내야 할 지 고민에 빠졌을 때는 자료구조와 알고리즘이 필요하겠구나 한다. 결국 프론트엔드도 어떠한 기능을 구현하고자 할때 알고리즘적 요소가 들어가기 마련이다.
그래서 내가 이번에 읽게 된 책은 '이것이 자료구조 + 알고리즘이다.' 이다.
--
내 집 책꽂이에는 저자의 또다른 책 '뇌를 자극하는 파이썬3' 가 꽂혀있다. 의도한 건 아니지만 저자가 집필한 책을 두 권이나 갖게 되었다! 사실 파이썬3 책은 모두 읽지 못했다. 내가 프로그래밍을 처음 시작하던 시절 의욕에 불타올라 언젠간 읽겠노라 하며 사놓은 책이기 때문이다.
각설하고, 본론으로 돌아와 책에 대해 말하자면 저자분의 글 실력이 파이썬3를 쓰던 실력보다 더 좋아졌다. 지금까지 알고리즘 강의나 문서를 여러개 보았는데 이 책이 제일 이해가 잘 된다. 물론 지금까지 축적해온 지식들이 있어 그런 것일 수도 있다. 확실한건 지루한 알고리즘 학문임에도 적절하게 환기시켜주는 이야기가 있어 지루하지만은 않고, 설명할 때 예시들이 컬러풀해서 눈에 더 잘 들어왔던 것 같다.
책은 C언어로 자료구조와 알고리즘을 구현하고 있다. 처음 링크드 리스트들을 C언어로 따라치며 구현해 보았는데, 따라치며 구현해 보니 C언어에 내가 미숙한 것도 있고 따라치며 읽다보니 시간이 너무 오래 걸려 링크드 리스트와 스택까지만 구현을 따라 하고 다른 구현체들은 눈으로 보며 이해하고자만 했다. (다른 이야기지만 C언어는 항상 볼때마다 새롭다.) 여기서 주의할 점은 저자분은 독자가 이미 C언어에 익숙한 사람이라 가정하기 때문에 이 부분 참고하길 바란다.
책의 목차는 간결하다.
1. 링크드 리스트
2. 스택
3. 큐
4. 트리
5. 정렬
6. 탐색
7. 우선순위 큐와 힙
8. 해시 테이블그래프
9. 문자열 탐색
10. 분할정복
11. 동적 계획법
12. 탐욕 알고리즘
13. 백트래킹
나열해 보니 꽤 많긴 한데.. 초급부터 고급 알고리즘까지 필요한 개념들만 꽉 담겼다고 본다. 그래서인지 표지처럼 '입문서'라 하였나 보다. 13가지 목차가 있으니 책은 두꺼운 편이다. 600페이지가 넘는다.
이 책의 장점 중 하나는 쉬운 것 부터 알려주는 점이었다. 단점이 있는 알고리즘들을 먼저 알려주고 단점을 보완한 알고리즘을 차례로 소개해 줘서 더 뇌리에 박히게끔 도와준다. 예를들어.. 버블 정렬부터 알려주고 퀵 정렬을 알려준다. 그 이유로 좋은 알고리즘을 알기 위해서는 나쁜 알고리즘의 조건도 알아야 하기 때문이라고 하신다.
앞서 말했지만, 책에서는 알고리즘을 본격적으로 소개하기 전에 적절히 환기시켜주는 이야기들이 포함되어 있다. 여기서 인상 깊었던 이야기 하나만 얘기해 보자면, 허프만 이야기가 제일 인상깊었다.
MIT 박사과정생 중이던 허프만은 어느날 교수에게 기말 리포트를 제출하게 되었다. 그 리포트의 주제는 '가장 효율적인 이진 코드 기법을 고안하라.'였다. 허프만이 제출한 알고리즘은 그 리포트를 제출하라고 말한 교수의 알고리즘보다 더 우수한 것으로 드러났고 전 세계에서 가장 유명한 압축 알고리즘이 되었다고 한다.
조금 재미있지 않은가? 자신의 스승보다 더 우수한 알고리즘을 개발한 제자라니! 이런 이야기 외에도 오바마의 버블 정렬 언급도 있다.
어떤 것에 대해 전문가 수준의 지식을 갖게 되려면 기본적으로 책을 약 7권 읽으면 된다고 한다. 1~2권의 입문서, 2~3권의 중급서, 2권 이상의 고급서다. 나는 아직까지 알고리즘에 대한 갈증은 있으면서 책을 본격적으로 읽은 경험은 없었다. 그런 의미에서 이 책은 입문서로 정말 알맞는 책이다.
자료구조 + 알고리즘 개념 잡고 싶다면 추천하는 책!
--
"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."