← 블로그 목록

『The C++ Programming Language』는 문법책이 아니라 언어 설계 감각을 키우는 책이다

비야네 스트롭스트룹의 『The C++ Programming Language』는 두꺼운 문법서로 보이지만, 실제로는 언어 기능 하나하나를 어떤 설계 판단 아래 써야 하는지를 함께 묻는 책이다. 창안자가 직접 쓴 만큼 ‘할 수 있다’와 ‘해야 한다’를 구분하는 감각이 남으며, 한 단계 올라가려는 C++ 사용자에게 한 번쯤 통과해야 할 책으로 정리한다.

『The C++ Programming Language』는 문법책이 아니라 언어 설계 감각을 키우는 책이다

『The C++ Programming Language』는 문법책이 아니라 언어 설계 감각을 키우는 책이다

비야네 스트롭스트룹은 C++의 창안자로 가장 널리 알려진 인물이다. 그의 대표 저서인 The C++ Programming Language는 제목만 보면 언어 문법을 설명하는 두꺼운 레퍼런스처럼 보이지만, 실제로 읽어 보면 단순한 문법서보다 훨씬 넓은 책이다. 언어 기능 하나하나를 소개하면서도, 그것을 어떤 상황에서 왜 써야 하는지까지 같이 묻기 때문이다.

그래서 이 책의 가치는 “C++에 기능이 많다”는 사실 자체보다, 그 기능을 어떤 설계 감각으로 다뤄야 하는가를 보여 준다는 데 있다. 스트롭스트룹이 다른 책들과 구별되는 이유도 여기에 있다. 언어를 만든 사람이 언어의 목적과 한계를 직접 설명하기 때문에, 독자는 문법 규칙만이 아니라 언어가 기대하는 사용 방식을 같이 읽게 된다.

이 책이 여전히 중요한 이유는 기능 목록보다 판단 기준을 주기 때문이다

C++는 오래된 언어이면서도 계속 확장돼 온 언어다. 그래서 초보자에게는 종종 “배울 것이 너무 많다”는 인상을 준다. 하지만 스트롭스트룹의 책이 좋은 이유는 기능을 무작정 나열하지 않고, 어떤 도구가 어떤 문제를 풀기 위해 도입됐는지를 같이 설명한다는 데 있다.

예를 들면 이런 식이다.

즉 이 책은 C++의 문법을 외우게 하기보다, 언어를 통해 어떤 종류의 프로그램을 만들고 싶은지 생각하게 만든다.

초보자의 첫 책이라기보다, 한 단계 올라갈 때 읽는 참고서에 가깝다

이 책은 분명 좋은 책이지만, 모든 사람에게 가장 쉬운 첫 입문서는 아니다. 양이 많고, 언어 기능을 설명하는 밀도가 높고, 예제도 단순 튜토리얼보다는 실제 설계 맥락에 가깝다. 그래서 “프로그래밍이 처음인 사람”보다, 이미 코드를 조금 써 본 사람이 자신의 사고방식을 넓히기 위해 읽을 때 더 큰 도움이 된다.

특히 C++를 일상적으로 쓰는 개발자라면, 인터넷 검색으로 단편적인 문법만 익히는 것과 언어를 만든 사람이 제시하는 큰 그림을 읽는 것 사이의 차이를 꽤 크게 느낄 수 있다.

좋은 언어 책은 문법이 아니라 태도를 남긴다

오래 남는 것은 특정 기능 설명보다 책 전체에 깔린 태도다. 좋은 언어 기능은 더 좋은 설계를 돕기 위한 것이고, 언어를 안다는 것은 결국 더 좋은 프로그램을 만들기 위한 판단력을 키우는 일이라는 감각이 남는다.

그 점에서 The C++ Programming Language는 지금도 유효하다. 최신 표준 문서나 온라인 레퍼런스는 훨씬 빠르게 세부 사항을 알려 주지만, “이 언어를 어떤 마음가짐으로 써야 하는가”까지 같이 전달하는 책은 많지 않기 때문이다.

핵심 정리

The C++ Programming Language는 C++ 창안자가 직접 쓴 대표 참고서다. 이 책의 강점은 문법과 기능을 빠짐없이 설명한다는 데만 있지 않다. 언어 기능을 어떤 설계 판단 아래 사용해야 하는지를 같이 보여 준다는 데 더 큰 가치가 있다.

그래서 이 책은 단순히 “C++를 배운다”기보다, “프로그래밍 언어를 더 깊게 사용한다”는 감각을 배우는 책에 가깝다. C++를 오래 쓰고 싶다면, 결국 한 번쯤은 통과해야 할 책이라는 말이 과하지 않다.

참고 자료

← 목록으로
Related

함께 읽으면 좋은 글

프로그래밍데이터 구조상태 전이
모든 프로그램을 데이터와 상태 전이로 보면 설계가 더 선명해진다

‘모든 프로그램은 데이터베이스다’는 엄밀한 정의는 아니지만 사고 실험으로는 꽤 쓸모 있다. 저장·조회·갱신·삭제, 무결성, 상태 전이의 관점으로 코드를 보면 객체 이름보다 접근 패턴과 유효 상태가 먼저 보이고, 프레임워크가 바뀌어도 설계가 덜 흔들린다. 데이터를 어떻게 다루는지가 결국 프로그램의 성격을 결정한다는 점을 정리한다.

프로그래밍문제 해결설계
소프트웨어 설계에서 트리즈는 정답표보다 모순을 드러내는 질문지에 가깝다

트리즈는 소프트웨어 문제를 자동으로 풀어 주는 만능 표가 아니라, ‘성능을 높이면 복잡성이 늘고 단순화하면 유연성이 떨어진다’ 같은 충돌을 더 선명하게 분해하게 만드는 사고 도구다. 40가지 원리 이름을 외우기보다 이상적 상태와 모순을 한 문장으로 적고, 시간·공간·조건으로 분리해 보는 습관이 실무에서는 더 쓸모 있다는 점을 정리한다.

프로그래밍테스트테스트 주도 개발
테스트 주도 개발은 테스트를 나중에 붙이는 습관이 아니라 설계 순서를 바꾸는 방식이다

테스트 주도 개발은 테스트를 나중에 붙이는 습관이 아니라, 실패하는 테스트부터 써서 설계 순서 자체를 바꾸는 방식이다. 레드-그린-리팩터링의 짧은 피드백 주기에서 핵심은 테스트 개수가 아니라 설계와 검증 사이의 왕복 거리이며, 마지막 단계의 리팩터링이 빠지면 TDD는 반쪽만 남는다. 진짜 가치는 커버리지 숫자보다 더 분명한 경계선과 안전한 변경 능력에 있다.