저는 전공 서적을 보고 깊은 감동을 받아 본 일이 거의 없습니다. 제가 이 책을 보고 감동을 받은 까닭은 저의 과거입니다. 부끄럽지만, 저는 C언어 자체를 학교 수업에서만 쓰일 것이다라고 생각하고, 사용하려고 노력하지 않았고, 자바-OO 교조주의 빠져 C언어 학습 자체를 불필요하다고 생각했었습니다. 항상 디자인 패턴이나 새로운 프레임의 자바 API를 습득하는 데에 집중을 했었습니다.

최근 미들웨어의 일부를 개발하면서, C언어를 이용하여 제가 담당한 모듈을 구현을 해야 했습니다. 기본적인 C언어의 문법, 활용사례도 모른 체, 얄팍하게 아는 지식으로 당당하게 구현을 하려고 시도했지만, 엄청난 시련의 시기가 있었습니다.

단순히 C언어를 잘 아느냐의 문제보다는 그 동안, 기본기에 대해서 상당히 소홀히 했음을 깨달았던 시기였습니다. How to programme C, A book on C  와 같은 책들을 훑으며 단순히 이 정도만 알면 머 C코딩은 금방 할 수 있겠구나 하는 단순한 생각은 저를 산산조각으로 만들어 주었습니다.

이런 저의 마음을 어루어 만져준 책은 K&R의 C Programming Language 2nd 였습니다. 고등학교 시절에 학원에서 저자 직강이라는 수업은 다른 과목 수강비보다 비쌌습니다. 그 이유는 저자의 생각, 철학을 최대한 이해하고, 의도하는 바가 정확하게 어떠한지를 알 수 있는 기회였기 때문입니다.

마찬가지로 이 책은 저자 직강책입니다. C Programming Language를 디자인한 두 명의 그루(해커)가 C언어를 디자인하면서 이런 용도로, 저런 용도로, 이런 한계, 저런 기능등을 잘 서술하였습니다. 혼자서는 잘 이해가 안가는 구절때문에 쉽게 포기하는 일도 있었는데, 다른 분과 같이 이 책을 가지고 공부를 시작하였습니다.

기초부터 다시 차곡차곡 쌓아 올리고 싶은 마음과 군 복학 후 학교에서 오랜만에 전공 과목을 듣는 간절한 마음으로 이 책을 정독하기 시작했습니다. 한 문장 한 문장을 꼼꼼히 읽어 가면서 어떤 의도에서 이런 말을 했는지, 지금의 gcc, visual c 컴파일러를 일일히 실행하고, 의문점을 가지거나, ISO/IEC C 스펙을 읽어보는 등, 최선을 다해서 공부를 시작했습니다.

파라미터 패씽에 대해서 다른 언어에서는 어떻게 활용되는지, Java가 native 코드를 호출할 때, 어떻게 메모리 구조를 가지고, 어떤 sequence를 가지며 내부적으로 어떻게 동작을 하는지등을 공부하게 되었습니다.

프리미티브 타입, struct, union과 같은 구조체에 대한 정확한 정의를 다시 한번 명확히 하였고, 같이 공부하는 상대방에게 쉽게 이해시킬 수 있는 communication skill, presentaion skill도 덤으로 키울 수 있었습니다.

정확한 의미가 전달이 되고, C언어의 저자를 듣고 나면서, 기분이 한결 많이 나아졌으며, 실제 C 코딩을 할 때 큰 도움이 되었습니다. 또한, 이 책을 가지고 공부할 당시, 제가 Code Reading을 읽던 때라 상당히 머리 속에 도움이 되었습니다.

특히 이 책의 하이라이트 8장에서는 malloc, free에 대한 구현이 나와 있습니다. 이 구현을 통해서 c언어의 활용에 대해서 많은 것들을 깨닫게 되었고, 기초가 다져지는 느낌을 많이 받았습니다. 역시 c언어는 알고리즘을 이해하는 데 가장 이해가 되는 언어라고 생각이 듭니다.

저에게 훌륭한 깨달음을 주신 K&R 선생님께 깊은 감사를 드립니다. 그리고, 정말 제대로 C언어의 기초를 다시 쌓고 싶거나, C중급자로 가시는 분들에게 원서를 강하게 추천해 드립니다.
Posted by '김용환'
,