https://i2.wp.com/image.aladin.co.kr/product/2952/61/cover/8998756404_1.jpg?w=640

프로그래밍을 배우면서 놀랐던 적이 2번 있는데, 한 번은 C#에서 LINQ와 Lambda 식을 섞어 사용하는 것을 봤을 때였고, 다른 한 번은 재귀 알고리즘을 봤을 때였다. 재귀 알고리즘에 대한 놀라움 덕분에 나는 프로그래머는 아니지만 –가끔 오해하는 사람들이 있는데, 나는 'Designer'다– 알고리즘을 좀 배워봐야겠다는 생각을 하게 되었고, <Introduction to Algorithms>의 번역자인 문병로 교수가 직접 쓴 책인데다 '쉽게 배우는'이라는 타이틀이 달려 있어서 다른 책 보다 먼저 읽게 되었음.

동일 저자의 <쉽게 배우는 유전 알고리즘>이 유전 알고리즘에 대한 기반 지식이 없으면 이해하기 어려워서 읽다가 말았는데, 이 책은 그것보다는 좀 쉬운 편. 알고리즘에 대한 기본적인 개념에서부터, 검색이나 정렬 등 실재하는 여러 문제에 대한 알고리즘과 NP 문제등 알고리즘에 대한 다양한 내용을 잘 다루고 있다.

물론 교재로 쓰여진 책이니 만큼 한 번 읽었다고 내용을 온전히 이해했다고 보기는 어렵고, 별도로 공부를 해둬야 이해가 잘 될 것 같다. 다만 알고리즘에 대한 책은 많은 관계로 다른 책들도 살펴 본 후에 괜찮은 책을 따로 정리하는게 좋을 듯.

책 내용과는 별개의 것이지만, 결국 알고리즘이라는 것도 결국 생각하는 것과 관련한 것이라 알고리즘에 대한 지식을 배운다고 알고리즘 실력이 는다기 보기는 어렵고, 다양한 문제 상황에서 직접 문제를 해결하고 그것의 더 나은 방법을 찾아보고 해야 알고리즘 실력이 오르는 것 같다. –뭐 사람 하는 일에 아닌 일이 어디있겠느냐만–

물론 도구를 쓰는 법을 배워야 도구를 사용할 수 있듯 이런 책을 통해 기본 지식은 배워야겠으나, 실력을 높이는 것은 어디까지나 직접해봐야 한다는 것. 다이어트 지식을 아무리 많이 가져도, 다이어트를 하지 않는 이상 살은 빠지지 않는다.