내 프로그래밍에 대한 생각을 극도로 바꿔준 것 중에 하나이다.
(또 하나는 Object Oriented Programming with C 라는 문서이다.(현재는 폐간되어 다른 잡지에 종속된 C/C++ User's Journal 이라는 곳에서 개제되었다.- 차후 블로그 작성 예정)
알고리즘과 자료구조에 대해서 나름대로 알고 있다고 생각했을 때였다.
물론 그것은 어느정도 수준이지 전반적으로 알고 있던 적은 아니었다. 그러니까, 검색 같은 것들은 잘 알지 못했지만, 어려운 것들을 배울 준비가 돼있었고, Heap 이나 Hash 까지는 깊게 공부하지 않았지만, 이 밑의 수준의 것들은 뭐 쉬운니까 전혀 문제가 없는 쉬운 내용들이라고 생각했었다.
그 때 쯤 이 책을 봤었고 이 책을 본 이유는 위에 말한 (비교적) 고급 기술들을 배우기 위함이었다. 일단은 어렵고 좋은 책이 필요했었다.
이 책을 본 이후에는 정말로 많은 것을 알게 되었다. 내가 알고있는 알고리즘과 자료구조(이하 알고리즘으로 통칭)는 정말 개념적인 것만 알고 있던 것이고, 딱 내가 구현할 수 있는 범위에서만 알고 있었다는 것을 알게 되었다. 다시 말해 나는 내가 알고 있던 알고리즘을 내가 익숙한 C++으로만 편하게 짜고 딱 내가 알고 있는 범위에서만 이해하고 있었다는 것이다.
이것을 C로 효율적으로 작성할 때 어떻게 되는지(즉 환경이 많이 변할 때..), 정작 알고리즘을 언제 사용하는게 효율적인지 따위는 나는 잘 알지 못했던 것이다. (이 부분은 흔히 개념적으로만 접하기 쉬운 복합도(Time/Space Complexity)를 좀 자세히 파악할 필요가 있었다. 이 것은 The Art of Computer Programming, Vol. 1 에서 더욱 자세히 다룬다.)
온라인 서점에서 이 책의 서평을 보다보면 평이 유독 극과 극으로 갈리는 경우가 있다. 악평을 하는 이유는 대부분 하나 같다. '너무 어렵다. 뭔말인지 모르겠다.'
하지만 꼭 알고리즘이 아니더라도 아주 중요한 한 부분을 다룬다. 바로 Chapter 2. Pointer Manipulation이다. 포인터에 대해서 고급 부분을 다루는데, 다른 부분은 필독으로 보지 않더라도, 이 부분 만큼은 필독으로 두고 싶을정도이다. 정말로 좋은 내용들을 다룬다. 예를 들어 흔히들 포인터는 배열이고 서로 사용 법이 약간만 다를 뿐 완전히 같다고생각하기 쉬운데, (사실 내부적으로야 맞다) 실제 사용에 대해서, 특별히 Parameter 로 보낼 때의 사용에 대해서는 엄청난차이가 있다.
이 책은 절대 초보용 책이 아니다. 개인적으로 이 책은 자신이 어느정도 알고리즘에 대해 알고 있다고 착각이 될 쯤에 보면 좋을 듯 하다. 그 때 이 책을 보면 '난 아는게 없구나' 라고 세삼스럽게 느껴지는 좋은 계기가 될 수 있을테니 말이다.
ISBN - 1565924533
(또 하나는 Object Oriented Programming with C 라는 문서이다.(현재는 폐간되어 다른 잡지에 종속된 C/C++ User's Journal 이라는 곳에서 개제되었다.- 차후 블로그 작성 예정)
알고리즘과 자료구조에 대해서 나름대로 알고 있다고 생각했을 때였다.
물론 그것은 어느정도 수준이지 전반적으로 알고 있던 적은 아니었다. 그러니까, 검색 같은 것들은 잘 알지 못했지만, 어려운 것들을 배울 준비가 돼있었고, Heap 이나 Hash 까지는 깊게 공부하지 않았지만, 이 밑의 수준의 것들은 뭐 쉬운니까 전혀 문제가 없는 쉬운 내용들이라고 생각했었다.
그 때 쯤 이 책을 봤었고 이 책을 본 이유는 위에 말한 (비교적) 고급 기술들을 배우기 위함이었다. 일단은 어렵고 좋은 책이 필요했었다.
이 책을 본 이후에는 정말로 많은 것을 알게 되었다. 내가 알고있는 알고리즘과 자료구조(이하 알고리즘으로 통칭)는 정말 개념적인 것만 알고 있던 것이고, 딱 내가 구현할 수 있는 범위에서만 알고 있었다는 것을 알게 되었다. 다시 말해 나는 내가 알고 있던 알고리즘을 내가 익숙한 C++으로만 편하게 짜고 딱 내가 알고 있는 범위에서만 이해하고 있었다는 것이다.
이것을 C로 효율적으로 작성할 때 어떻게 되는지(즉 환경이 많이 변할 때..), 정작 알고리즘을 언제 사용하는게 효율적인지 따위는 나는 잘 알지 못했던 것이다. (이 부분은 흔히 개념적으로만 접하기 쉬운 복합도(Time/Space Complexity)를 좀 자세히 파악할 필요가 있었다. 이 것은 The Art of Computer Programming, Vol. 1 에서 더욱 자세히 다룬다.)
온라인 서점에서 이 책의 서평을 보다보면 평이 유독 극과 극으로 갈리는 경우가 있다. 악평을 하는 이유는 대부분 하나 같다. '너무 어렵다. 뭔말인지 모르겠다.'
하지만 꼭 알고리즘이 아니더라도 아주 중요한 한 부분을 다룬다. 바로 Chapter 2. Pointer Manipulation이다. 포인터에 대해서 고급 부분을 다루는데, 다른 부분은 필독으로 보지 않더라도, 이 부분 만큼은 필독으로 두고 싶을정도이다. 정말로 좋은 내용들을 다룬다. 예를 들어 흔히들 포인터는 배열이고 서로 사용 법이 약간만 다를 뿐 완전히 같다고생각하기 쉬운데, (사실 내부적으로야 맞다) 실제 사용에 대해서, 특별히 Parameter 로 보낼 때의 사용에 대해서는 엄청난차이가 있다.
이 책은 절대 초보용 책이 아니다. 개인적으로 이 책은 자신이 어느정도 알고리즘에 대해 알고 있다고 착각이 될 쯤에 보면 좋을 듯 하다. 그 때 이 책을 보면 '난 아는게 없구나' 라고 세삼스럽게 느껴지는 좋은 계기가 될 수 있을테니 말이다.
ISBN - 1565924533







536923
118
559





댓글을 달아 주세요
혹시 번역서는 없을까요? 흠...
있습니다~
오렐리 전용 번역 출판사, 한빛미디어
'C로 구현한 알고리즘' 이라는 제목으로 바뀌었네요.
http://kangcom.com/common/bookinfo/bookinfo.asp?sku=200004270023
강컴 링크 남깁니다.