요즘 가장 각광받고 있는 업종 중 하나가 바로 프로그래밍 분야일 것이다.
프로그램을 통해 새로운 것을 만들어 내는 기쁨은 예술가의 그것과 다르지 않을 것이다.
문제는 책을 통해 컴퓨터 언어만을 공부하면 누구나 프로그래머가 되는 것은 아니라는 것이다.
초보자는 책을 통해 배운 내용만으로도 충분할 수 있으나 어느 단계를 넘어가기 시작하면 어려움에 봉착한다.
컴퓨터 전공자들이 기본적으로 배우는 '자료구조'와 '알고리즘'이 바로 그 벽이다.
이 책 '다이내믹 프로그래밍 완전 정복'은 이 중 '알고리즘'의 최적화와 해결방안을 알려주는 책이다.
흔히 동적 계획법이라고도 하는 것으로 프로그래머로써 레벨업을 위해 반드시 넘어야 하는 것이다.
프로그램을 전문적으로 하는 큰 회사에 입사하기 위해서는 코딩 테스트를 위해 꼭 알아야 하는 것이기도 하다.
프로그램에는 정답이 없다.
시스템 특성에 따라, 언어에 따라, 심지어 환경에 따라 답이 달라질 수 있다.
우리가 다이내믹 프로그래밍을 알아야 하는 이유는 알고리즘을 통해 코딩의 질을 높이고 단순화할 수 있기 때문이다.
책의 시작은 '재귀 호출'로 시작하고 있다.
재귀야 말로 알고리즘의 효용성을 극대화하고, 프로그래머의 실력을 검증할 수 있는 좋은 코딩 테스트 중 하나이다.
특정 프로그래밍 언어에 대한 숙련도가 아니라 해당 문제의 논리적 이해도와 창의적 해결방법을 확인할 수 있다.
그 다음으로 '다이내믹 프로그래밍'을 보여주고 있다.
상향식 프로그래밍이 무엇인지, 언제, 어떻게 사용하는지, 그리고 언제 사용하면 안되는지 등 다이내믹 프로그래밍의 모든 것을 보여주고 있다.
마지막의 실전 문제는.... 솔직히, 아직 모두 풀어보지 못했다.
앞서 말한 바와 같이 다이내믹 프로그래밍은 언어의 숙련도와 상관없이 알고리즘에 대한 깊은 이해가 있어야 한다.
알고리즘은 당연히 수학적 지식을 바탕으로 한다.
주변의 개발자들 중 더 나은 알고리즘을 만들기 위해 고등학생때 보았던 수학 책을 다시 펼치는 분들도 있다.
대부분 알고리즘의 책들이 자바나 C로 설명하고 있는데 이 책은 파이썬 소스를 제공하고 있다는 것이 마음에 들었다.
원본은 C 소스만 제공하고 있으나, 출판사에서 번역을 하면서 파이썬 코드를 별도로 제공하고 있다.
솔직히 이것이 내가 이 책을 보게 된 이유 중 하나이기도 하다.
책 뒷 표지이다.
이 책에서 주로 다루고 있는 내용을 보여준다.
여기서 내 눈길을 확 잡아 끈 문장이 있다.
"다이내믹 프로그래밍의 장벽을 넘지 못해 컴공과에 가지 못하고 출판사에 들어간 기획자가 혼신을 다해 야근하며 편집했다."
요즘은 개발자들도 많이 하지 않는 야근을 하며 만들었다니 더 애잔하다.
그래서인지 이 책의 편집이 너무나 마음에 들고 하나하나에 더 애정이 간다.
이 자리를 빌어 편집자 분에게 좋은 책을 만들어 준 감사의 말씀을 전하고 싶다.