Book Review

[2016/02/29] 누워서 읽는 알고리즘

The uprooted 2016. 2. 29. 16:26

"임백준, 누워서 읽는 알고리즘"

1.
'나는 프로그래머다'라는 팟캐스트 진행자로 유명한 임백준씨가 2003년에 처음 쓴 책을 재출간한 책. 이때도 그는 미국에서 일을 하고 있을 때였는데, 아마 많지 않은 나이였을 때부터 이런 책 쓰기를 지속해온 것 같다. 실력도 실력이지만 여러 글에서 간간히 드러나는, 세상을 바라보는 시각과 프로그래밍에 대한 애정이 더 마음에 드는 사람이다.

2.
쉽고 재밌게 이해했던 부분도 있었고, 전혀 알아듣지 못한 부분도 있었다. 쉬운 예제를 시작으로 실제 코드로 이어지는 설명들이 주를 이룬다. (물론 아주 어렵게 느껴지는 것도 있었다.)

3.
프로그래밍을 전혀 모르는 사람도 읽을 수 있는 책이지만, 기본적으로는 자료구조와 알고리즘을 어느 정도 알고 있는 사람들을 대상으로 한 책이다. (저자가 이야기하는 것처럼) 이 책을 통해 알고리즘 자체를 새로 배운다기 보다는 자신이 하고 있는 프로그래밍에 대해 고민거리를 던져주는 ('왜 그렇게 해야하는지 고민하게 하는') 책에 가깝기 때문이다.

4.
이 책에서 소개된 알고리즘은 다음과 같다.

LIFO 알고리즘
RSA 알고리즘
검색 알고리즘
깊이 우선 탐색 알고리즘
둠스데이 알고리즘
메르센느 소수찾기
사운덱스 검색 알고리즘
암호화 알고리즘
유클리드 알고리즘
재귀 알고리즘
정렬 알고리즘
제프 소머즈의 알고리즘
퇴각 검색 알고리즘
팰린드름 알고리즘
피보나치 알고리즘
해시 알고리즘

수업 때 배운 것도 (아주 조금) 있고, 전혀 몰랐던 것도 (대부분) 있었는데 프로그래밍이라는 것이 그저 코드를 작성하는 것이 아니고, 프로그래밍 과정에서 알고리즘이 무엇보다 중요하다는 것을 계속해서 강조하고 있다.

5.
책 서문에 포함된 저자의 글. 사실상 이 책의 주제이기도 하다.

“그렇기 때문에 대학은 학생들에게 코딩 능력이 아니라, 문제를 해결할 수 있는 능력, 즉 알고리즘 능력을 길러주는 방법을 고민해야 한다. 살에 새긴 문신 같은 코딩 능력은 MOOG, 학원, 스터디 그룹 등을 통해서 필요할 때 얼마든지 배울 수 있다. 지울 수도 있다. 하지만 뼈에 녹이들어 나와 한 몸이 되는 알고리즘 능력은 그 자체로 프로그래머의 정체성을 규정한다. 그렇기 때문에 배워야 하는 시기가 따로 있다. 시기를 놓치면 익히기 어렵다.

요즘처럼 기술 변화의 속도가 빠른 시대에는 특정 기술, 플랫폼, 언어, API에 종속되는 코딩 기술의 가치가 전보다 크지 않다. 오히려 낡은 기술을 버리고 새로운 기술을 재빨리 익히는 능력이 중요하다. 전투기의 생명이 빠르게 방향을 전환하는 기동성 (maneuverability)에 달려 있는 것처럼, 프로그래머의 생명도 방향전환 능력에 달려있다. 알고리즘은 그러한 방향전환을 가능하게 만들어주는 일종의 '메타-능력'이다.

그래서 미국의 IT 회사들은 (특별한 경우를 제외하면) 특정 기술이나 API에 정통한 사람을 찾지 않는다. 기본적인 능력(문제를 해결할 수 있는 능력, 즉 알고리즘)을 갖춘 상태에서 새로운 기술을 빠르게 습득해서 활용할 수 있는 사람을 찾는다. 이런 면 들을 생각해보면 실리콘밸리라는 미국 드라마에서 해커 느낌이 풍기는 보안 전문가와 자바 전문가가 아니라 파일을 압축하는 '알고리즘'을 개발한 사람을 주인공으로 배치한 것은 우연이 아니었을 것이다.

프로그래밍이라는 기술은 이렇게 알고리즘이라는 세포로 이루어져 있다. 그리고 알고리즘이라는 세포의 내부에 존재하는 DNA는 논리다. 만사에 논리적인 사람은 좋은 코드를 작성하지만, 논리적 사고가 결핍되어 있는 사람은 아무리 열심히 '코딩'을 배워도 좋은 코드를 작성하지 못한다."