ands

8월의 한빛 서평 도서는 이것이 자료구조+알고리즘이다 with C 언어입니다. 서평 덕에 오랜만에 C언어 코드를 읽는 시간이어서 조금 어색하기도 했지만, 구현과 컴퓨터에서 실제로 어떻게 동작하는지 이해 하긴 좋은 선택이었습니다. ADT부터 해당 자료구조들의 기본 스펙과 기능들을 소개하고 컴퓨터 메모리 상에서 어떻게 작동하고 올렸다가 내리지 등 시스템 적 이해도 동시에 키울 수 있는 책이었습니다. C언어로 코드를 작성해서 단순히 문법을 익힌 수준으로 책의 코드가 다소 어려울 수 있습니다. 포인터를 이용해 메모리를 직접 참조해서 넘기고, 메모리를 할당하기 위해 해당 구조체의 크기를 연산해서 메모리 할당을 하고, 구조체에서 자신을 재귀적으로 참조하는 등 C 기초 이상을 이해를 하고 있어야 큰 무리 없이 읽을 수 있다고 생각이 들었습니다.

이런저런 개발자/프로그래밍 커뮤니티를 보다보면 주기적으로 돌아오는 주제 중에 ‘과연 자료구조와 알고리즘은 모든 프로그래머에게 필요한가?’입니다. 저는 이 질문에 필요하다고 답을 드리고 싶습니다. 탄탄하지 못한 알고리즘은 결국 개발의 속도를 지연 시키고 드물지 않게 퍼포먼스에도 영향을 줍니다. 공부를 막 시작하고, 과제나 작은 프로젝트를 하는 수준에서는 적절하지 못한 자료구조 선택이라는게 크게 와닿지 않을 것입니다. 데이터의 양이 작을 때는 체감이 힘들정도로 컴퓨터가 빨라져서 3중 for문을 써도 뭐가 잘 못 된지 모를 수 있습니다. 자료구조를 잘 못 선택하면 프로젝트가 커질수록 다루는 데이터가 많아 질수록 속도 저하와 예기치 못한 문제들을 만나게 될 수도 있습니다. 기능이 커지고 절차가 복잡해 질수록 알고리즘과 그 에 맞는 자료구조는 빛을 발합니다.

이 책에서 다루고 있는 자료구조와 알고리즘은 우리 선배 전산학도들께서 수많은 시행착오와 트러블 슈팅을 겪으면서 우리에게 정리 해주신 농축액라고 생각하시면 좋겠습니다. 여러분의 필요에 따라 자려구조를 개선해서 사용 할 수도 있고, 새로운 기능을 추가 할 수 있습니다. 여러분이 만나는 대부분의 상황은 여기있는 기본 자료구조만 숙지하고 있으면 충분히 해결 가능한 문제들입니다. 책의 정렬 알고리듬 파트에서 나오는 예시 처럼 제한 된 시간 내에 정렬 되어 있지 않은 30,000개의 데이터 중에 14,142 번째로 큰 데이터를 출력 해주기 위해서 어떤 자료구조로 데이터가 구성되고 정렬하고 탐색 해야 할 지 알고 연습이 되어 있어야합니다.

이 책의 유일한 단점은 스택을 자동 메모리, 힙을 자유 저장소, 데이터 영역을 정적 메모리로 기술하고 있는 부분이었습니다. 그런데 이 단점은 어느 정도 스택, 힙 등으로 배우고 불렀던 사람들에게 단점이지 프로그래밍을 입문한지 그리 오래 되지 않은 학습자라면 오히려 좋은 번역이라고 생가이 듭니다.

책을 읽으시면서 눈으로만 읽지 마시고 꼭 실습을 같이 하시기 바랍니다. 포인터를 다루는게 익숙하고 능숙하신 분들이 이 책을 읽을 확률이 낮기 때문에 이 책을 읽는 대부분의 독자는 포인터에 능숙하지 않은 분들일 것입니다. 상상 디버거로 머릿속으로 코드를 돌려가면서 책을 읽으실 수도 있지만 손으로 쓰고, 실행 직접 보시면서 숙달 하시기 바랍니다.


한빛미디어 2022 도서 서평단 "나는 리뷰어다"의 일원으로 도서를 제공받아 작성한 리뷰입니다.