Book

The Mythical Man-Month

The Mythical Man-Month: Essays on Software Engineering, 20th Anniversary Edition by Frederick P. Brooks

소프트웨어 엔지니어링 과목을 수강한 적이 있다면, 소프트웨어 엔지니어링에 어느 정도 관심이 있다면, 한번쯤은 이 책 제목 정도는 들어보았을 것이다. M-MM은 소프트웨어 엔지니어링의 고전이다.

Brooks는 IBM에서 OS/360 개발 프로젝트의 관리자였다. 나중에 Brooks는 이 경험을 분석하고, 그것에 관하여 여러 동료들과 논의했다. 그래서 그 결과로 나온 책이 바로 M-MM이다. 이 책은 각각 하나의 주제를 가지고 있는 에세이 모음의 형식으로 되어있다.

그 중에서도 가장 유명한 내용은 아무래도 Brooks’ Law가 나오는 책과 동명의 에세이인 ‘The Mythical Man-Month’일 것이다. Brooks’ Law는 간단히 말하면,

늦어진 소프트웨어 프로젝트에, 인력을 더 투입하면, 그 프로젝트는 더욱 늦어진다.

는 것이다. Brooks의 논지를 따라가다보면 당연한 얘기다. 하지만, M-MM이 쓰여진 지, 30여년이 지난 지금도, 소프트웨어의 생산을 부품 생산 공장에 빗대어 생각하려는 경향 – 미신은 여전히 존재하는 것을 보면, Brooks’ Law는 아직도 강력한 의미를 지니고 있는 것 같다.

이 책이 워낙 오래 전에 쓰여진 책이라, 현재의 기술에는 약간 맞지 않는 얘기도 나오지만, 대부분은 여전히 유효한 얘기들이다. 뿐만 아니라, 요즘에 나오는 소프트웨어 개발에 관한 수많은 철학의 근간은 M-MM에 빚지고 있는 것으로 보인다.

내가 산 책은 1995년에 나온 Anniversary Edition으로, 그 시점에서 원래의 M-MM에 대한 스스로의 평가를 내리고 있다. 특히, 인상적이었던 것은 , 원래 Parnas가 주창한 Information Hiding을 격하게 비판하던 Brooks가, “Parnas Was Right, and I Was Wrong about Information Hiding”이라고 적으면서, 자신이 틀렸음을 솔직하게 인정하고 있다는 것이었다.

Anniversary Edition에는 역시 엄청나게 유명한 에세이인 “No Silver Bullet”을 함께 싣고 있는데, 이 에세이는 소프트웨어 개발자라면 반드시 읽어봐야할 에세이라고 생각한다. (인터넷에서도 쉽게 구할 수 있고, 번역도 되어있는 걸로 알고 있다.) 이 에세이는 소프트웨어 개발에 있어서의 어려움은 본질적인(essential) 어려움과 비본질적인(accidental) 어려움으로 나눌 수 있다고 얘기한다. 비본질적인 어려움은 기술의 발전과 함께 개선되고 점차 사라져왔지만, 본질적인 어려움에 있어서의 기술 발전은 10년 내의 범위에서 크게 이루어지지 않을 것이다라는 그의 예측은, 이 책이 쓰여진 1975년에도, Anniversary Edition이 쓰여진 1995년에도 맞았고, 지금도 맞지않을까 하는 생각이다. 그가 생각하는 본질적인 어려움의 궁극적인 해결책은 소프트웨어 컴포넌트의 시장화를 통한 재사용이다. 현대에는 어느 정도 컴포넌트의 시장화가 진행되었지만, 본질적인 어려움을 해결할만큼의 재사용에 있어서는 벽에 부딪히고 있는 것이 실정이다. 하지만, “Software Factory”같은 개념을 발전시켜 나가고 있고 그와 같은 개념은 바로 Brooks의 이상을 정확하게 표현한 것이 아닐까 싶다.

흔히, 고전을 “오래된 것”, 그래서 낙후된 것으로 생각하는 사람들이 많다. 하지만, 고전의 참뜻은 “전범”이다. 그리스/로마 신화를 이해하지 못하고서, 서양의 미술을 이해하기 힘든 것처럼, 소프트웨어에 관해 이해하기 위해서 반드시 읽어야할 책들 중의 하나가 바로 M-MM이다.

The Mythical Man-Month 더 읽기"

김영하의 "엘리베이터에 낀 그 남자는 어떻게 되었나"

한국의 현대 소설은 잘 읽지않는 편이다. 그렇다고, 이런 저런 소설은 읽지 않아야겠다고 작정할만한 이유가 있는 것은 아니다. 굳이 이유를 찾아본다면, 내가 살을 접하며 살고 있는 현실과 너무 가까운 것은, 날생선을 먹는 것처럼 비린내가 난달까. 나와 같은 언어로 말을 하고, 나와 비슷한 체험을 하는 사람들의 이야기는, 일부러 스스로를 지목하여 촘촘히 들여다보게 만들어서 불편하다. (“불편하다”는, 김영하의 소설들을 읽으며, 그 유용함을 발견한 표현) 기왕이면, 어느 먼 왕국의 이야기가 좋고, 수억광년 떨어진 외딴 별의 이야기가 좋다. “킬킬, 당신도 결국 이딴 종류의 인간일 뿐인거 아냐?”라고 말하는 것보다는, “원래 인간이란게 이런거라네.”라고 하는 소설이 좋다.

본의든 아니든 “문학의 이해”를 수강했던 것은, 내가 복학했던 탓이고, 본의든 아니든, 본의든 아니든 한국 작가의 소설을 읽어야 했던 것은, 내가 숙제를 하기로 마음먹었던 탓이다. 본의든 아니든 김영하를 집어든 것은, 그 사람의 책이 내겐 재미있어 보였던 탓이다.

뭐, 대단찮은 취향을 굳이 지키려고 끙끙댈 필요가 있나, 책 한 권 읽는 것에 무슨 대단한 이유가 필요한가. 사람이 그리워 서울로 향하는 버스 안에서 가볍게 꺼내들었다. 대체 왜 “우등”이라고 이름을 붙이는지 이해할 수 없는, 덜덜 떨리는 버스 안에서 책을 읽은 탓에, 친구와의 만남은 좀 피곤했지만, 책 자체는 재미있었다. 상당히 재미있었다. 대강 때려맞춰봐도, 이 작가 나랑 코드가 맞고, 이야기를 잘한다, 다른 책도 한번 사서 읽어볼까. 책 맨 뒤에 있는, 짤막한 평론은, 당연하고 대단찮은 이야기를, 굉장히 어렵게 써놓은 것 같다. 이게 뭐야. 이럴거면 그냥 붙이지말지. 내가 “문외한”이라서 그런가?

첫번째로 나오는 소설이 (얘기안했던가? 이건 단편소설집이다.) “사진관 살인 사건”이다. 제목이 말해주듯 추리소설이라는 감이온다. 실제로 추리소설의 형태를 하고 있다. 중간쯤 가면 흥미진진하다. 그런데, 이 소설에서는, 김전일 만화였다면 “범인은 바로 이 중에 있다!”라고 외치며, 의외의 인물을 지목해야하는 시점에서, 그만 시시해져버린다. 거기가 아니라, 이어지는 수사관의 후일담이 나오는 지점이 바로 독자들이 무릎을 탁쳐야하는 지점이다. 연애를 한번이라도 해본 사람은, 특히 짝사랑인지 사랑인지 모를 중간쯤의 연애을 해본 사람은, 이 단편 전체에 흐르는 두 용의자의 미묘한 감정의 흐름에 쾌감을 느낄 수 있을 것이다. 졸졸 흐르던 감정이 결말에 가서는 엄청난 양으로 증폭되어 쏟아져나온다. 그만큼 긴 여운. 그런데, 그것은 수사관 얘기처럼, 신문에 흔하디흔하게 오르내리는 추잡한 감정 놀이였을 뿐인데. 그 두사람에게는 또는 독자에게는 그만큼 드라마틱하지 않을 수 없었을 것이다. 당신이 소중하게 생각하는 연애담을 인터넷 게시판에 올리거나, 술자리 선배에게 얘기를 한번 해봐라. 다른 사람들에게는 그저 흔하디흔하고 너절한 연애 얘기에 지나지 않는다. 영화 “엽기적인 그녀”를 보면, 탈영한 군인에게 인생 강좌를 해주며, 사랑보다 인생이 중요하지 않냐고 한다. 자기네들은 사랑가지고 울고 불고 지지고 볶으면서 말이다. 지하철에서 토한 여자를 여관에 업어다 줄만큼 엽기적이고, 맞선 보는 자리에서 헤어진 여자친구를 만날 정도로 드라마틱하지 않으면, 그런 생각은 절대 않는게 좋을 것이다. 결국, 치정살인사건이 아니었다는 건, 그다지 중요하지 않다. 치정살인사건이어도 아무것도 이상할 것이 없었다는 것이 우리들이 하는 감정 놀이의 진수다.

“흡혈귀”에 나오는 흡혈귀는 멋있다. 삶과 죽음을 초월하고, 사랑을 초월하고, 시간을 초월하고, 덤으로 아는 것도 많다. 한가지라도 빠졌으면 덜 멋있었을 것이다. 내 이상형이라고 해도 나쁘지않다. “정말로 그런 멋있는 사람이 있는거야? 어떻게 그럴 수 있지?”라는 물음에, “별거 아냐, 그 사람, 흡혈귀라서 그런거아냐?”라는 느낌이다. 숨겨진 한마디는, “그런데, 뭐 어쩌라고, 제 멋대로 살겠다는데.” 정도일까.

“피뢰침”은 벼락을 맞아본 사람의 모임을 소재로 한 소설이다. 진짜로 그런 동호회가 있나하고 찾아봤지만, 그 동호회 이름인 “Adad”가 고대 오리엔트의 뇌신이라는 것 정도만 알아냈다. 주인공이 그 동호회의 회장인 J에게 대체 왜 위험을 감수하면서 다시 벼락을 맞으려하는지 묻자, J는 그 이유를 예술적 희열에 비교한다. 간단하게, 예술적/종교적 희열을 벼락 맞기의 희열로 비유한 것을 유추해볼 수 있다. 나처럼 예술이나 종교와 거리가 먼(?) 사람들에게, 명화을 그리면서 느끼는 희열이 뭔지, 신을 섬기면서 느끼는 희열이 뭔지를 말로, 글로 설명해봤자 이해할 사람은 별로 없다. 하지만, 발기한 피뢰침으로는 설명이 되는 것 같다.

“당신의 나무”는 앙코르 사원으로의 여행과, 히스테리아를 앓는 여성과의 연애를 소재로 하고 있다. 개인적으로는 히스테리아라는 단어에는 묘한 감정을 가지고 있다. 거기에는 비정상 자체가 정상인의 권력이 낳은 횡포라는 인식도 작용하고 있고, 요즘 시대에 히스테리아에 대해서 좀 알고 있으면 유식하게 보이는 것도 있고, 더욱 근본적으로는, 히스테리아를 앓는 여성을 사랑한 적도 있었기 때문일 것이다. 나도 그런 시절의 어느쯤엔가는 “당신의 나무”가 되고 싶었던 적이 있었고, 이성으로 설득하려고도 해보았고, 감정을 내세워 달래보기도하고, 정신의학 입문서나 프로이트도 읽어보았다. 결론은, 난 “당신의 나무”가 될만한 능력따위는 애초부터 없다는 것이었고, 포기할 수 밖에 없었다. (어쩌면 그러한 포기 자체가 그 점을 입증하는 걸지도 모른다.) 내가 그녀에게 “당신의 나무”가 아닌 것은 확실하지만, 그녀는 나에게 “당신의 나무”인가? 글쎄, 별로. 소설에서처럼 앙코르에라도 가봐야 깨달음을 얻을려나.

친구들이 이 책에 대해서 어떻게 생각하느냐고 묻는다면, “글쎄, 읽어볼 만 하긴 하다” 정도가 될 것 같다. 덧붙인다면, “매우 재미있다. 김영하를 한권 정도 더 사볼 생각이다.”가 될 것 같다. 한가지 아이러니는, “친구”는 보통 접근성이나 신뢰의 정도에 의해서 결정되고, 정작 책을 추천해줄 때 중요한 기준이 되는 취향에 의해서 결정되지는 않는다는 점이다. 그래서, 이 글은 별로 쓸모가 없는 것 같다.

김영하의 "엘리베이터에 낀 그 남자는 어떻게 되었나" 더 읽기"

Exceptional C++ Style

Exceptional C++ Style by Herb Sutter

Exceptional C++, More Exceptional C++에 이은 세번째 gotw 책이다. gotw (Guru of the Week)란, C++ 프로그래밍에 관한 Herb Sutter의 연재물이다. Herb Sutter의 홈페이지에 잘 정리되어있으면서, CUJ에 가끔 실리기도 하고, 책으로도 출간된다. 현재까지 87번까지 나와있는데, #1~#30은 Exceptional C++에, #31~#62는 More Exceptional C++에, #63~#86은 바로Exceptional C++ Style이다.

주변이나 커뮤너티에서 C++ 관련 질문을 하면, 내가 자주 언급하는 것은 바로 gotw다. 그만큼 C++ 프로그래머가 자주(언젠가는?) 접하게되는 문제들을 gotw가 다루고 있기 때문이다. (Effective 시리즈들도 비슷한 성격을 갖고 있지만, C++ 프로그래머들이 보편적으로 읽는 필수서라서 굳이 언급하게 되는 기회는 없는 것 같다.) 굳이 책을 사서 읽지 않더라도, 시간날 때마다 웹에서 gotw item 하나씩 읽어보는 것도 괜찮을 것이다.

기존 Exceptional 시리즈의 형식이나 내용의 질을 그대로 유지하고 있기 때문에 기존의 글에 덧붙여서 별다른 설명은 필요하지 않을 듯 하다. 아쉽게도, 아직 번역은 되지 않았다.

 

Exceptional C++ Style 더 읽기"

Writing Solid Code

Writing Solid Code by Steve Maguire

번역판을 읽었다. 원제는 ‘Writing Solid Code: Microsoft’s Techniques for Developing Bug-Free C Programs’. 대체로 C/C++ Programmer를 대상으로 한 버그를 줄이기 위한 프로그래밍 기술에 관한 유명한 책이다. 하지만, programming language에 한정되지않는 조언들도 있다. Steve Maguire의 Microsoft에서의 실제 경험을 바탕으로 지어진 책이고, 실제로 그의 경험들이 예시로 등장한다.

이 책에는 다음과 같은 조언들이 등장한다.

– Enable compiler warnings and pay attention to them.
– Use assertions to validate your assumptions.
– Don’t quietly ignore error conditions or invalid input.
– For a complicated, critical algorithm, consider using a second algorithm to validate the first. (e.g. validate binary search with a linear search).
– Don’t write multi-purpose functions such as realloc (it can grow memory, shrink memory, free memory, or allocate new memory — it does it all).
– Check boundary conditions carefully.
– Avoid risky language idioms.
– Write code for the “average” programmer. Don’t make the “average” programmer reach for a reference manual to understand your code.
– Fix bugs now, not later.
– There are no free features; don’t allow needless flexibility (like realloc).
– Ultimately the developer is responsible for finding bugs; he shouldn’t write sloppy code and hope that QA will find all his bugs.

[from Paul J. Mantyla’s comments in Amazon]

대체로 programming을 1-2년 정도 한 경험이 있는 사람이라면, 이러한 충고들은 대체로 스스로 익힐 수 있다. 시행 착오를 피하기 위한 책 정도가 될까. 오래된 책이라서 (1993년에 출판), 설명을 위한 예들 역시 오래된 감이 있지만, 충고들 자체는 여전히 유효하다. C/C++ programming job을 얻기 전의 학생들은 한번씩 읽어보면 좋을 듯한 책이다. 어느 정도 숙련된 programmer라면 부담없이 읽어볼만한 책이라서, 화장실에 두고 심심풀이로 읽는 것도 나쁘지는 않을 듯하다.

번역은 몇가지 용어의 번역이 모호해서, 원서를 찾아보기도 했지만, 무난한 편이었다. 번역서다 보니, 1-2일 정도만에 다 읽을 수 있었다.  조판 자체가 깔끔하지 못해서, 딱히 소장하고 싶은 마음이 들지 않는다. 번역서는 누군가에게 줘버리고, 원서만 가지고 있을 생각이다.

Writing Solid Code 더 읽기"

Test Driven Development: By Example

Test Driven Development: By Example by Kent Beck

TDD는 XP와 함께 매우 유명한 프로그래밍 기술 중의 하나다. 어느 정도 TDD나 Agile software development methodology에 관심이 있는 사람이라면, “Test First”가 TDD의 가장 중요한 idiom을 알고 있을 것이다. ‘automated test를 먼서 작성하고, test를 동작하게 만들기 위한 가장 간단한 code를 작성하고, refactoring은 가능한 한 뒤로 미루라’는 것이 TDD의 기본이다.

이 책은 세 개의 파트로 나뉘어있다. Part I은 어떤 story (일종의 requirement)를 구현하는 과정을 TDD를 사용해서 보여주고 있다. Part II는 xUnit이라는 tool을 사용해서 TDD를 좀 더 편리하게 수행하는 것을 보여주고 있다. Part III는 TDD와 연관된 여러가지 pattern들을 정리해두었다.

TDD는 여러가지 이익을 가지고 있지만, 가장 마음에 드는 것은 test 설계부터 하기 때문에, 구현자의 입장보다 사용자의 입장에서 먼저 생각해보게 되고, 결국 interface의 품질이 더 좋아진다는 것이다. interface는 중요하지만, implementation은 그다지 중요하지 않다. implementation은 변경할 수 있고, interface는 그렇지 않을 가능성이 크기 때문이다. 이미 사용자들이 interface를 사용하고 있다는 이유로 대충 설계해놓은 interface를 개선할 수 없게되는 경우를 흔히 볼 수 있다.

번역도 되어있고 하니, 한번쯤은 읽어볼만한 책이다. 아마 집중해서 읽으면 2-3일이면 다 읽을 수 있을 듯 하다.

Test Driven Development: By Example 더 읽기"

Object Thinking

Object Thinking

‘Introduction to Software Engineering’ 과목에서는 Object-Oriented Design을 가르친다. 간단한 정의와 함께, UML design 과정에서 use case로부터 object를 골라내서 class diagram을 그리는 법은 가르친다. 하지만, 아무도 object-oriented programming paradigm 뒤에 들어있는 생각을 가르쳐주지는 않는다. (물론, 다룰 주제가 많은 software engineering 과목에서 OOP를 깊게 설명하기는 어렵다.)

OOP language를 쓰는 것은 일종의 유행이다. 모두들 그 이유를 잘 알지도 못하면서 OOP를 선호한다. 심지어는 그것이 무엇인지도 모르면서 말이다. 사실, 나도 그런 사람들 중의 하나였고, C를 사용한 procedural programming paradigm에 익숙해지고 난 후, 주로 OOP language (C++, Java, Python, Ruby, …)를 사용하기 시작하면서, 계속 던지게 되는 질문은 OOP란 무엇인가, 대체 procedural programming paradigm보다 object-oriented programming paradigm이 무엇이 우월한가라는 것이었다.

‘Object Thinking’은 이러한 질문에 답변해주는 책이다. 즉, SE 과목에서 한두페이지의 페이지에 설명해놓은 것을 이 책에서는 300페이지에 걸쳐서 설명해놓은 책이다. OOP는 technique이 아니라 paradigm이다. 생각하는 방식은 누군가의 간단한 한마디 말로는 바뀌기 힘들다. (물론 그런 경우도 있다.) ‘Object Thinking’은 ‘object philosophy’, ‘object culture’란 말을 도입한다. 당연하게도, 사상(thinking)에는 철학(philosophy)이 전제되고, 문화(culture)가 따르고, 역사(history)를 가지기 마련이다. object thinking의 중심 원리(principle)들과 역사를 설명하고,  다른 philosophy와 culture와 대조를 함으로써 object thinking이 무엇인지가 조금씩 드러난다.

이 책에서는 단지 OOP가 무엇인지에 대해서만 다루고 있는 것은 아니다. OOP 외에도 software development의 여러가지 생각(thought)들을 object culture의 범주안으로 통합시킨다. 특히, XP와 같은 Agile software development가 여기에 해당된다. 따라서, 이 책에서 얘기하는 ‘object thinking’은 단지 OOP가 아닌 것이다.

또, 이 책에서 설명하는 OOP는 Booch를 중심으로 표준화된 전통적인 SE 진영의 OOP와는 조금씩 다르게 보인다. 여러번 책에서 언급되는 Smalltalk community 쪽(이를 공식적으로는 어떻게 지칭하는지 모르겠다.)에서 발전된 생각으로 보인다. 한가지 예로, OOP에 관한 여러 책들에서 object란 data와 algorithm의 결합이라고 지칭하지만, 이 책에서는 그러한 생각을 과감하게 거부한다. object란 behavior로 정의된다고 주장한다. 이러한 생각 한가지만으로도 object design에는 엄청난 영향을 미치게된다고 생각된다. (이 주제에 대해서는 나중에 따로 다뤄보겠다.)

아직 번역서가 없지만, 여력이 된다면, 또는 언젠가 번역이 된다면, 반드시 읽어보라고 추천해주고 싶은 책이다. 시간이 난다면, 이 책에서 인상 깊었던 생각들을 조금씩 블로그에 정리해볼까도 한다.

Object Thinking 더 읽기"

번역 진행중인 소프트웨어 개발 관련 책들

The C++ Programming Language

“More Effective C++”와 “Effective STL”을 번역하신 곽용재님이 번역작업 중이시고, 초고를 탈고하셨다고 한다. The C++ Programming Language는 C++의 창안자인 Bjarne Stroustroup이 쓴 책인 만큼 권위있고, 자세하며, 잘 쓰여진 책이다. (Books for Software Development 참조) C++ 을 배우는 사람들이 C++ 책을 추천해달라고 할 때, The C++ Programming Language를 추천해줄 수 없었던 가장 큰 이유가 번역이 되지 않았다는 사실이었는데, 앞으로는 대답이 달라질 수 있을 듯하다.

Joel On Software

“Rapid Development”번역하신 박재호님이 번역작업중이시다. 이 책은 원래 개발자들 사이에 매우 유명한 “Joel On Software”라는 Joel Spolsky의 홈페이지 내용을 책으로 엮은 것이다. 나는 송민철 팀장님이 알려주신 “The Joel Test”를 통해서 Joel On Software를 알게되었는데, 이 후로 계속 RSS를 구독중이다. 아쉽게도, 원서를 아마존을 통해서 이미 사버려서, 번역판을 살 일은 없을 것 같지만, 이런 좋은 책이 번역된다는 것은 매우 기쁜 일이다.

번역 진행중인 소프트웨어 개발 관련 책들 더 읽기"

The Hitchhiker's Guide to the Galaxy

“간단해요. 전 너무 지루하고 우울했어요. 그래서 이곳에 와서 외부 컴퓨터 플러그에 저를 연결했죠. 전 컴퓨터에게 오랜 시간 동안 우주에 대한 제 견해를 설명했어요.” 마빈이 대답했다.

“그래서 어떻게 됐는데?”

“컴퓨터가 자살해버렸어요.”

from The Hitchhiker’s Guide to ther Galaxy

The Hitchhiker's Guide to the Galaxy 더 읽기"

More Exceptional C++

More Exceptional C++

Herb sutter“Exceptioanl C++”의 후속작이다. Exceptioanl C++ 처럼 Guru of the Week item을 책으로 엮어서 펴낸 책이다. 때문에 책에 있는 내용들은 거의 전부 웹에서 볼 수 있고 내용도 거의 비슷하다.

C++ In-Depth 시리즈의 번역 quality는 그동안 믿을만 했기 때문에, 별 걱정 없이 번역판을 읽었다. 이로써, 그 시리즈의 번역된 중급서들은 다 읽은 셈이다.

내용은 Scott Meyers의 Effective C++과 비슷한 부류의 것을 기대하면 된다. 즉, C++ 언어를 잘 쓰는 것에 대한 책이다. 여러가지 주제를 다루고 있어서 딱히 한정해서 얘기하기는 힘들 것 같다. 목차를 살펴보라.

형식은 C++ programming 시에 발생하는 문제들을 내놓고 이에 대한 답을 제시하는 식이다. (혹자는 문제집 풀고 있냐고…) 개인적으로 문답법을 상당히 좋아하긴 하지만, 이 책을 읽을 때는 그냥 무시하고 죽죽 읽어나가버렸다.

지금 읽는 소프트웨어 개발 관련 책만도 2권이나 있고 다른 읽을 책도 많지만, C++ 언어 계열로 더 읽는다면, 최근에 C++ In-Depth 시리즈에 추가된 Herb Sutter와 Andrei Alexandrecu의 저작, C++ Coding Standards를 꼽고 싶다. 제목으로부터 오해할 가능성이 높겠지만, tab size를 어떻게 쓰고, bracket 위치를 어디에 두는가에 관한 책이 아니다. 실제로 읽기 전엔 모르겠지만, EC++ 계열의 practice들을 정리해서 “표준적인 coding style”로 집약한 책으로 보인다. 하나를 더 고르라면, C++의 아버지 Bjarne Stroustroup이 C++ 언어의 진화 과정을 설명하고 왜 현재의 문법이 생겼는지를 설명해주는 Design & Evolution of C++을 꼽겠다. 언어의 역사를 이해하는 것은 언어의 철학을 이해하는 데에 도움을 주고, 언어의 철학을 이해한다면 그 언어를 쓰기도 쉬워진다.

덧붙여, 프로그래밍 언어에 대해 왜 그렇게 열심히 공부하냐는 사람도 있는데, 이는 작문법을 왜 그렇게 열심히 공부하냐는 질문과 비슷하다. 작문을 잘하기 위해서는 물론 작문을 많이 해보아야겠지만, 다른 사람들이 이미 고민해둔 좋은 작문방법이 있다면, 시행착오를 통해서 배우는 것보다는 이를 공부하는 것이 훨씬 시간이 절약되기 때문이다. 게다가, 작문법에는 언어간의 벽을 뛰어넘는 무언가가 있어서, 다른 언어에 대해서도 적용되는 경우가 있다. 반대로, 언어간의 벽을 뛰어넘지 못하는 철학적인 요소도 작문을 하는데에 필요하다.

물론, (프로그래밍을 처음 배우는 모든 사람들에게 항상 얘기하듯이) 작문법만 공부해서는 절대로 문장가가 될 수 없다는 점을 유념해야할 것이다. 역사 공부도 중요하고 철학 공부도 중요하지만, 실제로 다작을 해보는 것처럼 중요한 것은 없다. 마찬가지로 어느 정도 프로그래밍에 대한 지식을 익히고 나서는, 실제로 프로그래밍을 해보지 않는 한, 절대로 더 높은 단계로 올라설 수가 없다.

More Exceptional C++ 더 읽기"