3장은 프로세스와 프로세스 전환, 4장은 x86계열에서의 인터럽트 처리 방식과 리눅스에서의 인터럽트 처리 방식, 5장은 커널 동기화에 필요한 여러가지 primitive들, 6장은 역시 x86 계열에서 사용되는 하드웨어 타이머들의 소개와 리눅스에서의 활용 방식, 9장은 시스템 콜이 처리되는 방식, 10장은 시그널의 처리 방식, 11장은 프로세스 전환 시, 스케줄러 정책을 다루고 있다.
나머지 장들은 디스크 액세스로부터 파일 시스템, swapping에 관련된 것이어서 11장을 읽고 난 후엔 거의 다 읽은 거겠지 하고 생각했는데, 아직도 반이나 남아있다. 비슷한 속도로 읽으면 복학하기 전에는 끝낼 수 있을 듯하다.
읽으면서 든 느낌은 kernel 구현은 보통의 프로그램 처럼 하나의 behavior를 위한 logic이 잘 모여있기 보다는 – 각종 하드웨어 이벤트 들에 대해서 multiplexing되어 있어서 – 이곳 저곳에 얇게 퍼져있고, 따라서 직관적으로 이해하기는 좀 힘들다는 것이었다. 물론 이 책이 그러한 복잡함을 이해하는 데, 큰 도움이 되겠지만 말이다.
XP의 창시자인 Kent Beck이 쓴 XP에 관한 책이다. XP를 공부할 때 처음으로 읽어야할 책이 바로 이 책이다. 200 페이지도 채 안되는 분량의 책은 매우 잘 쓰여진 책이다. 맨 먼저 해결하려는 문제를 정의한 후, 문제에 관련된 변수들을 파악한 후, 추구하는 가치와 기본 원리를 설정한 후 (문제의 해결방법에 있어서, 서로 충돌하는 가치가 있을 때 중요한 단계이다), 이 가치를 달성하기 위한 방법을 제시하고, 이 방법을 실제로 적용할 때의 이슈를 논의한다. 책에서만이 아니라 실제 문제에 있어서도 이러한 접근을 하면, 쓸데없는 혼란을 야기하지 않고 문제를 해결할 수 있다. 또, 자신만의 문제를 해결하기 위해서 뿐만이 아니라 다른사람과 문제와 해결책에 관해 커뮤니케이션할 때도 유용한 패턴이라고 볼 수 있다. (가끔씩 주변을 보면, 문제를 정의하지 않고도 해결법을 찾으려고 하거나, 문제를 알려주지도 않고 해결법을 제시하는 사람들을 볼 수 있다. 선문답이 되면 행복한 케이스지만, 동문서답이 되면 곤란하다.)
다시 XP 얘기로 돌아가서, Kent Beck이 제시하는 소프트웨어 개발 프로젝트의 문제는 바로 Risk이다. 즉, 스케줄의 변경, 프로젝트의 취소, 소프트웨어 결함, 요구사항 변경, 리소스 변경 등이 소프트웨어 실패의 가장 큰 원인이란 것이다. (경험적으로, 이에 전적으로 동의한다) 그렇다면, 우리가 이걸 해결하기 위해서 무엇을 할 수 있는 가를 봐야할 것이다. Kent Beck은 소프트웨어 개발 프로젝트의 ‘Four Variables’로 Cost, Time, Quality, Scope를 제시한다. 일반적으로 Cost와 Time은 우리가 control 하지 않고, (이른바, ‘기획’하는 사람들이 control한다) Quality는 control하기에 너무 어려운 변수이기 때문에, Kent Beck은 Scope에 집중하겠다고 얘기한다.
XP의 네가지 가치(Four Values)는 바로 Communication, Simplicity, Feedback, Courage이다. 기본 원리에는 좀 더 여러가지가 있다. Rapid feedback, Assume simplicity, Incremental change, Embraching change, Quality work.
XP의 해결책이 되는 practice들은 비교적 잘 알려져있다. The Planning Game, Small releases, Metaphor, Simple design, Testing, Refactoring, Pair programming, Collective ownership, Continuous integration, 40-hour week, On-site customer, Coding standards. 이러한 practice는 XP에서 새로 발명한 practice들이 아니라 기존의 Software engineering에서 강조하는 것을 radical하게 강조한 것이다. 다시 말해, code review가 좋은 practice라면 항상 하자는 것이 바로 pair programming이고, simplicity가 좋다면 가장 simple한 design을 하자는 것이 Simple design이라는 식이다. 우리나라말로 하면 좋은 게 좋은 것 정도가 될까? 바로 이러한 아이디어가 ‘Extreme Programming’의 어원이라고 한다.
개인적으로는 Simplicity와 Simple design이 가장 인상적이었다. 물론 현업(-_-;)에 가장 적용하기 쉬운 것이고, 스스로가 ‘design for tomorrow’에 의한 폐해를 많이 겪었기 때문이었다. XP 책을 읽기 전에 이미 약간은 이 practice를 적용해보았고, 결과는 매우 좋았던 것 같다. 개인적인 습관 때문인지 자꾸 복잡한 디자인을 하려는 경향이 있긴 하지만… 계속 remind하고 마인드 트레이닝을 할 필요가 있을 것 같다. 아, 그리고 개인적으로는 기획과 개발이 분리된 job을 그다지 많이 하지 않았기 때문에, 직접 경험한 적은 별로 없지만, 주변 사람들이 자주 불평하는, 기획이 계속 requirement를 변경하거나 기획과 개발의 경계가 불명확한 경우의 괴로움을 XP는, 깔끔하게 해결하고 있는 것 같다. Planning Game을 통한 role의 명확한 분리와 Small release로 인한 risk의 감소가 바로 그것이다. Shared code ownership도 매우 좋은 practice이긴 하지만, 실제 우리 팀에서는 중간 정도의 형태를 취하고 있는 것 같다. product의 경우에는 따로 ownership을 가지고 공유하는 라이브러리의 경우에는 shared ownership 정도가 되는 것 같다. 이렇게 되면 갑자기 다른 사람이 고쳐서 동작하지 않는다는 등의 약간의 리스크는 있지만, Testing으로 극복을 할 수 있도, 이 때에 얻는 개발 속도의 장점은 매우 큰 것 같다. 그리고 On-site customer도 회사에서 자주 보는 communication overhead를 상당히 줄여줄 것 같은데, 우리나라에서 자주 보이는, 팀 간의 알력이 강하게 존재하는 조직 구조에서는 실현하기가 상당히 힘들 것 같다. 더구나 manager들이 깨어있고, 같은 이익을 향해 달려간다는 마인드를 가질 수 있으려면 조직의 크기가 클 수록 불리한 반면, 충분한 인력을 확보할 수 없는 작은 조직의 회사라면 다시 불리한 면도 있는 것 같다.
Agile software development methodology가 상당히 유행하고 있는데, XP가 아닌 다른 방법론 – FDD 등의 방법론들도 한번 살펴보고 싶다.
영문판이 아니라 한글판을 읽고 있다. 2.2 버전을 다룬 1판을 사둔 채 버려두고 있다가 2.4 버전을 다룬 2판도 역시 묵혀오고 있다가, 추석 때 집에 내려가서 읽기 시작했다. 내용은 말그대로 리눅스 커널의 구현에 대한 내용으로, 특히 x86 계열에서의 구현에 집중하고 있다. (때문에 x86에 관한 내용도 꽤 나온다.)
현재, 1장의 introduction을 읽은 후, VM 파트를 따라서 2장, 7장을 읽고 8장을 읽고 있는 중이다. 2장 ‘메모리 주소 지정’은 IA-32 매뉴얼에도 나오는 x86 시스템에서의 segmentation, hardware paging, cache, TLB 등을 다루고 있다. 모호하게 이해하고 있던 부분을 (특히 OS 레벨인지 하드웨어 레벨인지의 구분, ‘logical address’와 ‘linear address’의 용어 구분) 말끔하게 해소한 것 같다. 7장은 커널 상의 메모리 관리를 다루고 있다. physical memory와 linear address space의 관리를 다루고 있다. 8장은 커널이 아니라 사용자 프로세스에게 할당되는 메모리를 다루고 있다. 아마도 프로세스에게 할당되는 linear address space의 관리와 page fault handling을 통해 page frame (physical memory)을 할당하는 방법을 다루고 있다. 여기까지 읽은 후에는 3장으로 돌아가서 프로세스에 대한 내용을 읽을 생각이다.
약간의 번역 inconsistency가 눈에 띄지만 (용어의 번역 여부 e.g. TLB/변환참조버퍼) 번역 퀄리티는 만족스러운 편이며, 내용도 어느 정도 OS에 관심을 갖고 있던 사람이라면 그리 어렵지는 않은 정도. 침대 머리 맡에 놓고, 자기 전에 살짝 조금씩 봐주고 있다. 시스템 프로그래머의 길을 간다면 커널의 이해는 거의 필수적이므로 이를 위해 볼만한 책 중의 하나 일 것 같다.
참고를 위해 언급하자면, 물론 다른 고전적으로 유명한 책들도 있다. Bach의 The UNIX Operationg System (너무 오래된 감이 있음)이나 UNIX Internal (괜찮은 듯), The Design and Implementation of the 4.4 BSD Operating System (안봐서 모름), Solaris Internal (안봐서 모름).
물론 자기네 회사에서 나온 책이니 그렇겠지만, MSDN blog들에서 워낙 칭찬하던 책이라, 이 책을 처음 접하게 되었다. OOT에서 얘기하는 Object design의 기본적인 기법이나 pattern 같은 것들을 어느 정도 알고 있고, 또 사용하고 있지만, 내가 디자인한 OO 코드를 반대하는 사람에게 나의 디자인을 설득할 자신까지는 없었다고 할까. 기껏해야 OO에서 널리 쓰이는 기법이다 정도?의 argument로는 스스로가 납득할 수가 없었다. 따라서, 이 책을 산 목적은 Object-Oriented Technology의 역사/철학적인 백그라운드를 갖기 위해서였다. 실제로 이 책은 OOT의 역사와 철학, 용어들을 설명하는 non-formal한 OOT의 introduction book 정도로 생각하면 될 것 같다.
Preface, Introduction을 막 마친 상태인데, 11월까지는 끝낼 생각이다. 여기서 빠뜨릴 수 없는 얘기가 Preface/Introduction에서 이 사람은 범상치 않은 얘기를 하고 있다는 것이다. Preface에서는 Booch의 말을 언급하면서 OO란 decomposition에 대해 다르게 생각하는 방식/다른 가치/다른 문화라고 얘기한다. 이어서, formalism/Software engineering과 hermeneutics-postmodernism/XP/agile methodologies/behaviroal objects의 철학을 서로 대조하고 있다. Introduction에서는 Software crisis에 대해서 언급하면서 이를 해결하기 위해서 학계가 선택한 현재의 Software engineering은 process와 methodology에 주안점을 두었지만, 이는 현재 실패했다고 한다. 따라서, tool이나 process나 methodology를 만드는 것이 아니라, 원래 ‘Software Crisis’의 해결책으로 제시되었던 ‘Better people’을 만들어내야한다고 주장하고 있으며, 자신의 책이 ‘Better people’을 만드는 데 도움을 주는 책(중의 하나)이라고 주장하고 있다.
What makes a software development project succeed? It’s not language or tools or process. It’s not a simple as people; even great programmers sometimes find themselves associated with disasters. In some sense, a successful project is the same thing as a successful organization; but what makes those? We need an anti-Dilbert. In Organizational Patterns of Agile Software Development, James O. Coplien and Neil B. Harrison lay out the results of their research on the subject; what they found, helps.
즉, 소프트웨어 개발 프로젝트를 성공하게 하는 건, 툴이나 프로세스도, 사람도 아니라 바로 조직이라고 얘기하고 있다. “Object Thinking”에서 주장하는 “사람”과는 또 다른 주장인 것이다. 누구 말이 맞는 것일까? 서로 다른 철학과 서로 다른 주장이 난무하는 이 분야는 아직 pseudo-engineering의 분야이다.
꽤 오랜만에 읽은 자연과학 서적. 끈이론 String Theory에 대해서 설명하고 있는 책이다. 끈 이론이란 고전적인 주류(?) 이론과는 달리 모든 물질의 기본 단위는 입자가 아니라 ‘끈’이라고 주장하는 이론이다. 초대칭 super symmetry 이라는 개념과 함께 이야기를 전개해나가다 보면, 1차원의 끈은 n차원의 membrane이 되고, Superstring theory와 M-theory가 등장하게 된다. 이야기를 전개해나가다보면 공간찢기같은 위상 변환, 초대칭짝 같은 것들이 어떠한 물리학적 의미를 갖는지를 이해하지 못하면서, (내가 이해하기로는 이러한 논리 전개부터가 speculation이나 실험으로부터 나왔다기보다는, 수학적 대칭성으로부터 나온 것이다.) 즐기기란 좀 곤란한 것 같다. 뭐, 그래도 비슷한 얘기를 하는 SF 소설 정도는 (만약에 그런 소설이 나온다면 말이다) 이해할 수 있는 소양을 갖추게 되었다는 것에 만족. 이 책의 반 정도는 상당히 재미있고 잘 쓰여진, (7/10 point!) 상대성 이론과 양자역학에 대한 introduction 이기도 해서, 그것만으로도 만족스럽긴 했다. GUT에 약간이라도 관심이 있는 사람이나, 심지어 상대성 이론과 양자역학의 이해를 다지고 싶은 사람에게도 추천할만한 책이라고 생각한다.
그리폰북스 시리즈의 하나로 나온 ’21세기 SF 도서관’ 시리즈는, Gardner Dozois가 엮은 SF 중단편 선집인 ‘The Year’s Best Science Fiction: Eighteenth Annual Collection’의 번역판이다. 그 중 첫번째인 이 책에 실린 어슐러 르 귄의 단편 제목을 선집의 제목으로 하고 있다. (어슐러 르 귄의 팬들이 혹여나 이 책을 빠뜨리지 않도록 말이다.) ‘노간주나무’, ‘항체’, ‘세상의 생일’, ‘구세주’, ‘암초’, ‘보보를 찾아서’, ‘크럭스’의 총 7편이 실려있다. ‘노간주나무’는 달식민지와 QNSA (Quantum Nondestructive Scanner Array)의 아이디어를 기초로 한 범죄극. ‘항체’는 NP complete 문제의 해결 시점을 배경으로 AI의 종족 보존에 관한 단편. ‘세상의 생일’은 신의 탄생, 신과 신을 칭하는 이들의 전쟁, 새로운 신의 강림(외계인), 그리고 신의 죽음의 과정을 그린 단편. ‘구세주’도 ‘항체’와 비슷하게 AI의 종족보존에 대해서 그리고 있다. ‘암초’는 새로이 개발되고 있는 소행성의 탐사대장을 주인공으로 하여 신비로운 생명체의 발견에 대한 얘기이다. 영화 ‘Abyss’가 연상되는… ‘보보를 찾아서’는 피부 이식 GPS칩을 통해 노동자/범죄자들이 추적되는 디스토피아적인 미래 사회를 배경으로 가족의 화해를 그린 가족극. ‘크럭스’는 핵전쟁으로 대재난이 일어난 후, 타임머신이 학술적으로 연구되고 있는 시기에, 과거를 변경하려는 시도를 저지하는 전통적인 내용의 스릴러.
’21세기 SF 도서관’ 시리즈의 두번째 번역물. ‘유전자가 수상하다!’라니, 보통 사람도 흥미로워할 제목일 것 같다. ‘세상의 생일’이 조용하고 사색적이라면, ‘유전자가 수상하다’의 중단편들은 바쁘고 떠들썩하다. 총 8편이 들어있는데, 첫번째 작품부터 ‘스티븐 벡스터’의 ‘오리온 전선에서’이다. 이 작품은, 경쟁을 통한 진화를 하지 않아 평화적이고 비확장적인 외계인과의 전투에 참여했다가, 함선이 파괴되어 외계인의 기지에까지 떨어졌다가 다시 귀환한 소년병의 얘기를 그리고 있다. 고스트라 불리는 이 외계인들은 놀랍게도 어떤 실험을 하고 있다… ‘래글태글 집시, 오!’는 트릭스터적인 영웅의 얘기를 그리고 있다. ‘유전자가 수상하다!’는 DNA으로부터 원래 주인의 얼굴을 재구성해낼 수 있는 시대(근미래?)의 범죄/형사극이다. ‘빛나는 초록별’은 이 중단편집중에서는 SF에서 가장 거리가 멀면서도 제일 마음에 들던 얘기였는데, 베트남의 서커스단 ‘빛나는 초록별’을 배경으로 아버지에의 복수극을 그린 단편이다. 아마도 ‘베트남’과 ‘서커스단’이라는 이색적인 장소를 배경으로 했기 때문이 아닌가 싶다. ‘화성의 거대한 벽’에서는 보통의 지구인 외에, 뇌에 이식한 칩을 통해 능력을 확장한 종족, 역시 칩을 이용해 모든 감정과 이성을 공유하는 – 초월교감을 가지는 종족(컨조이너인) 사이의 갈등을 그리고 있다. ‘밀로와 실비’도 이상능력자의 종족보존에 관한 단편. ‘지옥의 스노볼’은 동물의 유전자로부터 인간의 형상과 능력을 가진 생물을 만들어내는 데에 성공한 시점에서, 사회와 과학의 충돌을 그리고 있다.
‘유혹의 기술’이란 책을 읽지도 않고 서평을 쓰는 실험. 뭔가 의도를 담아내는 재치가 부족해 보인다. 글쓴이: Cestlavie (이방인) [writers/BlueEyes] 날 짜: 2002년 11월 25일 월요일 04:21:38 제 목: 유혹의 기술 나의 삶이 얼마나 거짓된 삶인지 명확하게 보여주는 글이다. 아이 재미있어라. 낄낄. 참고로 writers/cybgira의 동제목의 글에 대한 리. 남의 보드를 어지럽히기는 미안하여 내 보드로 옮김. — 이 책에서는 유혹의 ‘필요’가 근대에서 발생하기 시작했다고 했는데, 그 때부터일까 근대의 어느 시점에서부터일지, 아니면 훨씬 더 오래전부터일지, 유혹은 부정적인 개념이 아니라 오히려 미덕이 되어버리지 않았을까. 유혹의 역사는 그것이 가능한 사회에서는 우리가 아는 바와 같이 분명히 기록되어 전해져왔으며, 아마도 탄복과 외경의 의미가 아닐지. (두려움과 비난의 형태로만 나타난다 하더라도) 인간사에 흔한 유혹의 시나리오에서 유혹하는 쪽은 유혹당하는 쪽에 비해서 뭔가 뛰어난 조건-능력을 가지고 있다고 생각되고 (그 뛰어난 조건이 아무리 원천적이고 인간 본능적인 것이라고 하더라도) 그러한 뛰어난 조건이 미덕인 것으로 생각해야할 터인데, 유혹과 유혹의 기술과 그것을 위한 조건들은 모두 뭉뚱거려져서 미덕으로 생각되고 있는듯하다. 많은 사람들이 유혹당하는 쪽보다는 유혹하는 쪽을 원한다. 심지어 유혹을 경멸하면서도 말이다. 합리적이라고 일컬어지는 인간은 불합리함의 점철이자 결정판이지만, 그러한 불합리성을 어떻게든 극복해낸 사람이라면 유혹에 있어서 좀 더 능수능란할 수 있을 것이고 유혹이 성공할 가능성도 높아질 것이다. (살인에 대해서 자기합리화를 잘할 수 있는 병사가 더욱 능력있는 병사가 될 것이다.) 하지만, 이러한 유혹에 대한 합리성의 문제는 사소한 것에 불과하고, 합리성의 문제와 유혹의 기술 자체, 그리고 그 기술을 위한 능력의 세가지 중에 유혹의 실행을 위해서 가장 중요한 것은 아마도 유혹을 위한 조건, 즉 능력의 존재여부일 것이다. 이 책은 유혹을 실행하기 위한 이러한 세가지 조건 중 가장 덜 중요하지도 가장 중요하지도 않은 유혹의 기술 즉, 방법론에 관한 책이다. 유혹의 기술에 관한한 이 책은 상당히 잘 설명하고 있다. 이 책의 최고의 매력이라고 생각되는 점은 아무래도 유혹의 기술을 몇 가지의 유형으로 분리하고 예를 들어 설명한 것이다. 설명하기 힘든 인간간의 문제에 대해서, 역사는 가장 합리적인 설득이 될 수 있는 것이다. 덤으로 독자들은 유혹의 역사에서 조명을 받는 주인공들을 통해 어느 정도의 대리만족을 느낄 수도 있다. 하지만, 책을 덮고 나서 막상 유혹의 실행에 있어서 난감해지는 것을 느낄 수 있는데, 이것은 위에서 설명한 자신의 능력의 조건에 대해서 만족스러울 만큼 잘 알고 있지조차도 못하기 때문이다. 글쎄 이 책을 읽은 독자라면 다음과 같은 제목의 책을 기다리지 않을까? ‘유혹, 세라비만큼만 하기’ ‘유혹자를 위한 변명’
C# Programming Language에 관한 책이다. 사실 .Net Framework에 대한 내용도 상당히 포함되어있기 때문에, Language를 배우기에 좋은 책은 아니다. 그럼에도 불구하고, C#의 여러 언어적인 요소와 CIL(Common Intermediate Langauge; aka MSIL)을 비교하면서 작동원리를 설명해주기 때문에 C# Programming Language의 구현 방식을 약간이나마 들여다볼 수 있는 점은 이 책의 미덕이다. 번역은 엉망인 편이다. (10점 만점에, 초반은 4점 중반은 0점, 후반은 5점 정도?) 아르바이트 생들에게 시키고 한번도 제대로 읽어보지 않은 정도의 퀄리티. 읽어보면서 내가 직접 수정하면서 읽어간 곳만도 한 스무군데 정도 되는 것 같다. 요즘에 번역서를 몇권 보면서 신뢰를 약간 얻어가는 중이었는데, 이 책을 보고 다시 실망해버렸다. 따라서 이 책을 읽고자 하는 사람은 차라리 원서를 보기를 추천한다.
현재 읽고 있는 책이다. 현재 Chapter 6를 읽고 있는데, 이번 달 안에 끝낼 생각. 번역은 C++ In-Depth 시리즈를 통틀어서 그렇듯이, 만족스러운 편이다. Template parameter를 Strategy로 사용하는 idiom을 Chapter 1에서 소개하고, Template을 사용하는 자잘한 techniqueue을 Chapter 2에 모아두었다. 이어서 Template을 이용해서 구현하는 굵직굵직한 주제들이 나온다. Typelists, SmallObjAllocator, Generalized functor, Singleton, Smart pointer, Object Factory, Abstract Factory, Visitor, Multi Method가 그것들인데, 잘 알려진 패턴이거나 현재 Library TR에서 adopting 중인 것이기 때문에 어쩌면 이미 잘 알고 있는 사람도 있을 것 같다. (저자인 Andrei Alexandrescu가 CUJ의 고정 칼럼 필자이기 때문에, CUJ에서도 이미 다루어졌던 주제들이 많다.) 어떤 것들은 이것이 쓸모가 있는가 싶을 정도인 것도 있고, 어떤 것들은 당장 내 코드에 반영할만한 것들도 있고, 또 내가 직접 구현해보고 싶은 것들도 있다. 확실히 template을 잘 쓰고 싶은 사람이라면 한번쯤은 거쳐가야할 책인 듯 싶다.
[“딥뿔군의 글”:http://myruby.net/archives/002324.html]에 적혀있는 세가지 법칙을 보고 생각난 것을 적어보자면… **1. ‘공격적인’ 스케쥴에 메인 프로젝트는 좀 더 타당한 스케줄을 따랐을 때보다 프로젝트를 끝내는 데 더 오래 걸린다.** bq. 흔히 스케줄을 일에 비해 짧게 또는 희망적으로 잡는 경우인데, 스케줄은 프로젝트 관리에 경험이 적을 수록 비관적으로 잡는 것이 좋다고 생각한다. (경험이 많아지면, 스케줄을 재조정하는 것도 프로젝트에 나쁜 효과를 끼치지 않고 유연하게 할 수 있지 않을까 생각) 그런데, 의외로 이렇게 잡아야만 열심히 일한다고 생각하는 사람이 많다. 하지만, 경험적으로 리스크가 끼어들거나 해서 시간이 부족하면 위에서는 압력이 들어오고, 당사자들은 초조해지고, 그래서 프로젝트가 방향을 잃고 좌초하는 경우도 많다. **2. 작업을 완료하는데 필요한 프로세스에 대한 자신의 직감을 모델링한다.** bq. ‘직감’ 이런 단어가 들어가면 정말 어려운 것들이다. 책을 읽지는 않아서, 이 말이 무엇을 말하는지 정확히는 모르겠지만, 경험을 통해 직감을 성숙시키고, 이를 ‘모델’화하라는 말인 것 같다. 대부분의 책들은 이를 위한 의식적인 노력이 필요하다고 얘기하고 있다. 특히 ‘측정’을 통해, 원래의 예측이 얼마나 틀렸는지, 무엇이 원인인지 등을 파악해야한다. 난 측정까지가 아니라 원인 분석 정도에 그치고 있는데, 측정을 활용하면 좀 더 빠르게 이러한 직감에 이를 수 있지 않을까 생각해본다. **3. 하루를 잃는 데는 수없이 많은 방법이 존재하지만, 하루를 만회하는 데는 단 한가지 방법조차도 존재하지 않는다.** bq. 내 경우, 하루를 잃게 되는 대부분의 경우는, 오늘 할 일을 내일로 미루는 것이다. 프로젝트 원에게 진행상황을 물어볼 것을 오늘 하지 못하는 경우, 무엇을 확인하고 시켜야할 것을 내일로 미루는 경우, 스케줄은 하루씩 미뤄지는 것 (단축할 수 없는 것)과 마찬가지인거다.
프로그래밍 언어에 대한 책에는 세가지가 있다. 프로그래밍 언어를 배우기 위한 책, 프로그래밍 언어를 잘 쓰기 위한 책, 프로그래밍 언어의 레퍼런스.
읽어보지는 않았지만, C++을 배우기 좋은 책으로 ‘Essential C++’을 꼽을 수 있을 것 같다. Bruce Eckel의 ‘Thinking in C++’같은 것도 나쁘지 않은 것 같다. (본인은 좋은 C++ 입문서를 읽어본 적이 없다. 번역서는 커녕 일반 서점에서는 외서를 구하기가 힘들었기 때문에, 한국 사람이 쓴 책을 읽었었다.)
‘The C++ Programming Language’는 C++의 창안자인 Bjarne Stroustroup이 쓴 책인 만큼 권위도 있고 자세하기도 하고 잘 쓰여진 책이기도 하다. (한 때, ISO C++ Standard가 이 책을 기반으로 쓰여지기도 했으니까) 이 책은 위에서 말한 프로그래밍 언어에 대한 책의 세가지 성격을 모두 갖고 있는 책에 가깝다. C++의 문법뿐만 아니라 왜 그런 문법이 생기게 되었는가, 그리고 어떻게 사용해야하는가 까지도 자세하게 적고 있으니 말이다. 이러한 성격 탓에 입문서로는 약간 부담스러울 수는 있으나, 다른 입문서를 읽고 C++ 문법을 모두 익히더라도 한번 쯤 읽어볼만한 책이다.
개인적으로 Effective 서들은 C++의 중급자로 올라서기 위해서는 ‘필수서’라고 생각한다. C++을 사용할 때 거의 항상 부닥치는 문제들에 대한 idiom을 제시하고 있기 때문이다. Exceptional* 서는 *Effective*보다는 덜 범용적이지만, 역시 중요하고 유용한 idiom들을 적고 있다. Modern C++ Design은 template의 사용에 관한한 최고의 책이라고 한다. template이 어디에 쓰는 건지 모르겠다면 Modern C++ Design은 template을 사용해서 구현할 수 있는 모든 technique을 보여줄 것이다.
‘The C++ Standard’는 말그대로 ISO C++ Standard를 책으로 만든 것이다. 더 정확하게는 C++98과 이후에 나온 Technical Corrigandum 1 (일종의 서비스팩)을 합쳐놓은 버전이다. STL reference로는 STL Tutorial and Reference Guide의 번역판을 가지고 있으나 별로 참조할 일이 없어서 평가는 하기 힘들 듯 하다. 대체로 http://cppreference.com 이나 ‘The C++ Standard’를 참조하는 편이다.
번역에 관해 한마디 하자면, 본인이 읽어본 번역서는 Effective 시리즈와 Exceptional C++이다. (Modern C++ Design 읽는 중) Effective 시리즈도 번역이 나쁘다는 사람이 있으나, 개인적으로는 그런대로 읽을만하다고 생각했고, (개인적으로 기본적인 용어를 번역하는 것을 싫어한다) Exceptional C++은 악역이었다. Herb Sutter의 홈페이지에 쓰여진 내용을 찾아 대조해보면서 읽어야만 했다.
저자에 대해서도 좀 적어보면, Bjarne Stroustroup(http://www.research.att.com/~bs/homepage.html)은 C++의 창안자이자 현재도 ISO C++ standard commitee에서 활발하게 활동하고 있는 사람이다. Herb Sutter(http://www.gotw.ca/)는 ISO C++ standard committee의 의장(convener)이며, 책이나 논문, 잡지(CUJ) 등을 통해, 활발할 저술활동을 하고 있다. comp.lang.c++.moderated newsgroup의 moderator이기도 하다. ‘Modern C++ Design’의 저자인 Andre Alexandrescue도 CUJ에 정기적으로 기고하는 사람 중 하나이다. Scott Meyers는 Effective 시리즈의 저자라는 사실 하나라도 너무나도 유명하기 때문에 굳이 따로 언급할 필요도 없을 듯 하다. (사실, 그 외에는 잘 모르겠음)
가장 먼저 현실 생활에서 자주 볼 수 있는 심리적 사건인 ‘실수 행위’와 ‘꿈’을 통해서 우리의 정신 생활은 이성적으로 판단하고 실행하는 자아만으로 이루어져있지 않음을 밝힌다. 즉, 기본적인 욕구들의 충동과 이를 검열하는 정신적 entity의 갈등이 존재한다는 것. 본격적으로 신경증의 분석으로 들어가서는 신경증의 종류에 따른 기작에 대한 이론을 제시한다. 기본적으로 리비도에 대한 자아의 억압 구도에서 여러가지 신경증의 원인을 설명하고 있으며, 어린 아이의 리비도를 인정하고 성적 조직의 발달 단계 이론을 제시함으로써, 신경증의 실제 증상들을 설명하고 있다. 그 중에서도 인간의 본능 형성과 발생-발달 단계를 유비함으로써 얻어지는 해석은 상당히 매력적이기까지 하다. 유명한 id, ego, superego의 개념들은 이 책을 쓸 당시에는 확립되지 않은 개념인 모양이다.
프로이트가 이 책에서 소개하고 있는 이론 설명은 대체로, 정신분석 방법의 적용을 통한 경험적인 가설과 비논리적인 도약으로까지 보이는 사변적인 구상의 혼합으로 보인다. 프로이트 자신도 이 책에서 매우 여러번 자신의 이론이 불완전함을 강조한다. (그것이 이론의 비합리성을 보완해주는 것은 아니지만) 하지만, ‘정신분석 강의’가 정신분석학을 소개하려는 의도로 쓰여졌으며, 실제로 이론을 논리적으로 설명하려는 책은 아닌 터라 섣부른 해석은 현재로서는 배제하는 것이 합당할 것이다.
사상 최초로 경험적 (과학적이라고 말하기는 어렵다) 방법론에 의거하여 ‘무의식’이라는 개념을 도출해내고 정신의 ‘지도’를 그려냄으로써 여러가지 이론과 가설들로 이루어진 인간 정신의 시스템 하나를 구축해낸 프로이트의 업적은 그 이론과 가설의 정확성 이전에 위대한 것이라고 평가할 수 밖에 없다. 현대의 양자 역학이 고전 역학을 구축해버렸지만, 아직도 아르키메데스, 갈릴레이, 뉴턴이 이루어낸 업적의 빛이 바래지 않는 것처럼..
의심스러워하는 사람들까지 굳이 프로이트의 모든 이론을 수용할 필요는 없다. 인간의 본성에 대해 알고자 하는 이에게 새로운 접근 방법과 시각을 보여주는 것만으로도 충분히 가치가 있는 책이다. 내가 굳이 강조할 필요가 있으련만은.. 반드시 읽어볼 것!
(열린책들에서 워낙 안팔리니 판매량 달성 목적으로 얼마전까지 전집으로만 판매했었으나, 낱권 판매를 시작한 듯 하다. 번역은 만족스러운 정도니 안심하고 사시라.)
– Introductory Readings
Freud by Richard Wollheim 이 책을 읽기 전에 시공 로고스의 ‘프로이트’를 입문서로 읽었는데, 당장 이해가 가지 않는 내용은 많더라도, 프로이트 이론의 발전과정을 포함한 전체적인 구도를 잡는데에는 많은 도움이 되었음.
– Further Readings
꿈의 해석(De Traumdeutung) by Sigmund Freud 새로운 정신분석 강의 by Sigmund Freud