Media Log

열정을 경영하라 - 10점
진대제 지음/김영사

이 책도 역시 BooksMBA 프로그램을 통해서 읽어 보게 되었는데, 읽는 내내 너무 즐거웠다. 수재들의 이야기는 언제나 재밌다.
자서전이지만 컴퓨터 엔지니어의 이야기를 담고 있으므로 가볍게 읽을만한 컴퓨터책 카테고리에 넣어보았다.

이 책의 구성은 그가 삼성전자에서 일하던 당시와, 미국에서 유학시절 공부하던 날들, 정통부 장관을 하면서 있던 이야기들로 되어 있는데 모든 이야기가 정말 재미있지만 나는 특히 삼성전자에서 일할 때의 이야기들이 좋았다.

열정이 있는 사람은 아름답다.
이런 사람들을 볼 때마다 더욱 열심히 살아야겠다고 다짐하곤 한다.

책의 마지막에는 그가 우리들에게 해주는 조언들이 있다.

언제 어디서나 꿈과 목표를 높이 설정하고 끊임없이 열정적으로 최선을 다해 그 목표에 도전하는 것, 그리고 나중의 결과가 어떻든 간에 겸허히 감사하는 마음으로 받아들이는 것.

바로 그가 말하는 성공의 비결이다.

하루하루 행복함을 느끼면서 열심히 살아가야겠다.

프로그래밍 얼랭 - 8점
조 암스트롱 지음, 김석준 옮김/인사이트
요즈음 회사에서 동료들과 함께 일주일에 한번씩 모여 얼랭을 공부하고 있다.

나는 언젠가는 꼭 함수형 언어를 한 번 공부해보고 싶었는데, 그 시간이 생각보다 일찍 찾아왔다.

처음 얼마간 이 책을 공부하면서는 정말 미칠 것만 같았다.
배열도 없고 자료구조에 랜덤액세스로 접근할 수도 없으며 변수에 값을 재할당 할수조차 없으니 불편함이 이만저만이 아니다.
이 모든 것을 재귀적으로 생각하고 표현해야 하는데(간단한 루프조차도), 그것은 고1때 점화식을 공부하면서 수학을 포기해버린 나에게는 참 고통스러운 일이었다.

그럼에도 불구하고 많은 훌륭한 해커들은 LISP 같은 함수형 언어를 공부하는 것이 좀 더 나은 프로그래머가 되기 위해 많은 도움을 줄 것이라고 얘기하는데(비록 실무에서 그런 언어를 사용하지 않을지라도) 나는 얼랭을 공부하면서 그것이 어떤 뜻인지 느껴보고 싶다.

우리들은 ACM 문제들을 주 마다 하나씩 풀어보고 있는데, 모임이 있는 목요일까지는 아주 고통스러운 나날들이다. 나는 마치 예전 처음 C언어를 공부할 때 Linked List를 작성하면서 코드를 썼다 지웠다 쩔쩔매던 그 시절로 돌아간 것만 같다. 구조체 안에 자신을 가르키는 포인터가 있다는 것은 나를 아주 미치게 만들었었다. 정말 그 당시와 비슷한 기분이다.

다음번 과제는 'The Cat in the Hat' 이라는 문제인데, C로 작성된 코드가 인터넷에 있어서 얼랭으로 다시 작성해봤다. 보고 그대로 옮기는 것 조차 쉽지 않다.
아직 함수형 프로그래밍에 익숙하지 않아 몇몇 부분은 마치 C로 작성한 것 같은 느낌을 준다.


-module(cat).
-export([solve/2, pow/2, gcd/2, hcf/1, result/2, f/3, g/5]).

%greatest common divisor
gcd(A, 0) -> A;
gcd(A, B) -> gcd(B, A rem B).

%power
pow(_X, 0) -> 1;
pow(X, Y) -> X * pow(X, Y-1).

%highest common factor
hcf( N ) -> hcf( N, 2, 0, [], [] ).
hcf( 1, I, P, FL, CL ) -> [ FL ++ [I], CL ++ [P] ];
hcf( N, I, P, FL, CL ) when ( N rem I ) =:= 0 -> hcf( N div I, I, P + 1, FL, CL );
hcf( N, I, 0, FL, CL ) -> hcf( N, I + 1, 0, FL, CL );
hcf( N, I, P, FL, CL ) -> hcf( N, I + 1, 0, FL ++ [I], CL ++ [P] ).

result(N, K) -> result(N, 0, K, 0, 0).
result(N, I, K, SUM_LAZYCAT, SUM_HEIGHT) when I < K ->
   result(N, I + 1, K, SUM_LAZYCAT + pow(N, I), SUM_HEIGHT + ( pow(N, I) * pow(N+1,K-I) ) );
result(N, _I, K, SUM_LAZYCAT, SUM_HEIGHT) -> [SUM_LAZYCAT, SUM_HEIGHT + pow(N,K)].

f(K, I, COUNTLIST) when I < length(COUNTLIST) ->
   A = gcd( K, lists:nth(I+1, COUNTLIST) ),
   f( A, I+1, COUNTLIST );
f(K, _I, _COUNTLIST) -> K.

g(FN, CN, I, K, N) when I < length(CN) ->
   g( FN, CN, I+1, K, N * ( pow(lists:nth(I+1, FN), lists:nth(I+1,CN) div K) ) );
g(_FN, _CN, _I, _K, N) ->
   N.

one(L) -> one(L, 0, 0).
one(L, CNT, SUM) when (L rem 2) =:= 0 -> one( L div 2, CNT + 1, SUM + L );
one(L, CNT, SUM) -> [CNT, SUM + L].    

solve( L, N ) when (L =:= 0) and (N =:= 0) -> io:format("bye~n");
solve( L, N ) when (N =:= 1) -> one(L);
solve( L, N ) ->
   [_FL, CL] = hcf( L ),
   [FN, CN] = hcf( N ),
   io:format("~w~w~w~n", [CL, FN, CN]),
   K1 = lists:nth(1, CL),
   io:format("~w~n", [K1]),
   K2 = f( K1, 1, CL ),
   io:format("~w~n", [K2]),
   K3 = f( K2, 0, CN ),
   io:format("~w~n", [K3]),
   N1 = g( FN, CN, 0, K3, 1 ),
   io:format("~w~n", [N1]),
   result( N1, K3 ).


이제 얼랭의 꽃이라고 할 수 있는 병렬 프로그래밍 부분을 보려고 하는데, 그 부분에서 많은 기법들을 얻을 수 있을 것 같아서 기대된다.

이 책은 구성이 좀 특이하다.
보통의 언어책은 변수, 제어, 루프 등이 책의 초반부에서 많은 장을 할애하는데 반해, 이 책에는 위 내용이 거의 없다. 얼랭의 특징이 그렇기 때문이다. 중요한 것은 오직 함수이다.

나는 이 책을 공부하면서 문제를 더 작게 쪼개나가는 방법을 배우고, Closure와 같은 고차함수를 능숙하게 작성 할 수 있게 되는 것이 목표이다.

하지만, 이렇게 공부하는 것은 재미있다만 만일 직장에서 프로젝트에 얼랭을 사용하라고 한다면 나는 정말이지 회사를 그만다니고 싶어질 것 같다. 하하하.

크리스탈 리포트 2008 - 6점
백영일 지음/가메출판사
Visual Studio를 설치 할 때 항상 Visual Basic Cristal Reports 라는 프로그램이 눈에 띄었었는데, 뭐하는 프로그램인지를 몰라서 나는 매번 설치에서 제외하곤 했었다.

얼마전에 새 책 목록을 받아 보다가 낯익은 이름이 있길래 드디어 이것이 뭐하는 프로그램인지 알아볼 기회다하고는 책을 구해보게 되었다.

나는 크리스탈 레포트가 MS에서 만든 프로그램인 줄로만 생각했었는데, 그냥 번들로 함께 딸려오는 제품이었다. 비주얼 스튜디오 뿐만 아니라 이클립스나 볼랜드의 제품에서도 역시 사용 할 수 있다.

크리스탈 레포트가 뭐하는 프로그램인지 간단히 설명하면, 임의의 데이터 베이스에 접속해서 데이터를 가져와서 가공하고 보기 좋게 보고서를 만들어 주는 프로그램이다. C#이나 VB.NET 그리고 Visual Basic으로 애플리케이션의 이벤트 처리를 할 수 있는 프로그래밍 인터페이스를 제공해서 조금 더 다이나믹하고 유연한 보고서를 만들 수 있다.

회사에서 서비스를 개발하다 보면 기획자들에게 통계 데이터를 보내줘야 할 일이 종종 있는데, 나는 데이터베이스에 대충 쿼리에서 결과를 엑셀 프로그램에 툭 붙여넣어 보내주고는 한다.
나는 국민학교 때부터 그림에는 영 소질이 없었는데, 지금도 프리젠테이션에 관련된 애플리케이션은 다 싫다.(Visio나 파워포인트, 엑셀, 워드 등) 이런 프로그램을 사용할 때 나는 아주 저질적인 결과물을 내놓곤 하는데, 다행히 날 컴맹으로 당연시 하는 우리 여기획자들 덕분에 맘 편하게 보고서를 작성할 수 있다.
하지만 입장을 바꿔서, 내가 상사라면 나처럼 보고서를 작성하는 녀석에게는 '저 새끼가 분명 일할 마음이 없는거야...' 라고 생각이 들지도 모르겠다.

어쨌거나 요즈음에는 그런 면에서도 조금 노력이 필요하다는 생각이 들어서 나는 이 책이 너무 반가웠다. 나도 멋진 보고서를 만들 수 있을테니깐.

몇 일전에 컴퓨터를 포맷할 일이 있어서 VS2008를 새로 설치하면서는 이 크리스탈 레포트를 포함시켜서 설치를 했다.
그리고 이 책과 함께 몇 가지 실습을 따라해보았는데, 프로젝트를 만들자마자 프로그램이 뻗고, 수도 없이 나오는 위자드에서 finish 버튼만 누르면 비주얼 스튜디오가 뻗어버려서 아주 짜증이 났다. 최신 버전인데도 이런데 VS2005 였을 때나 다른 제품은 아마도 더했을 것이다.

어쨌거나 내가 서비스하고 있는 데이터베이스에 연결해서 간단히만 이것 저것 만져보았다.
애플리케이션을 EXE 형태로 만들 수도 있고, 웹 애플리케이션으로 만드는 것도 가능하다.
우리는 지금 하고 있는 서비스를 관리하기 위한 애플리케이션을 ASP.NET으로 만들어서 사용하고 있는데, 크리스탈 레포트를 사용해서 만들 수도 있겠구나 생각이 들었다. 하지만 코드양은 조금 줄일 수 있을지 몰라도, ASP.NET으로 모든 것을 제어하는 것 보다는 훨씬 할 수 있는 것이 적을 것이다.
데이터를 갱신하거나 삭제하는 작업보다는 SELECT 위주의 통계 애플리케이션이 이 프로그램에 더 적절하다.

나는 크리스탈 레포트가 무엇인지 알아보기 위한 용도로 이 책을 읽어서 대충대충만 살펴봤는데, 중간에 Visual Basic은 없는게 낫지 않나 하는 생각도 들었다.
이 책은 Windows via C++과 같은 많은 고급 기술을 담고 있는 책보다 훨씬 낮은 레벨의 지식을 담고 있는 반면에 두께는 더 두껍다. 시대에 맞게 정말 필요한 내용만을 담아 거품을 좀 뺐으면 사용자가 좀 더 부담을 덜 갖고 편하게 이 책을 봤을텐데 말이다.

어쨌거나 이 책은 수요가 그렇게 많지 않은 분야에 대해 저자가 열심히(자료도 별로 없는 가운데) 연구해서 쓴 책일 것이므로 고맙게 생각해야한다.
좋은 애플리케이션에 대해 가르쳐준 저자에게 감사를 표한다.

세상을 바꾼 32개의 통찰 - 8점
제시카 리빙스턴 지음, 김익환 옮김/크리에디트(Creedit)
이 책은 위대한 해커들과의 인터뷰로 구성되어 있다.

인터뷰를 진행하는 사람은 제시카 리빙스턴인데, 어디서 많이 본 이름이다 싶었더니 폴 그레이엄의 에세이 하단에 항상 등장하는 이름이었다.
폴 그레이엄의 글 아래에는 항상 감사 글이 달려있는데(아마도 글을 발행하기 전에 감수해준) 이 여자의 이름은 모든 글에 빠지지 않고 등장에서 기억에 남아있다.
이 책에 나오는 32명의 해커에 역시 폴 그레이엄도 나오는데, 현재는 Y 어쩌구 하는 스타트업 투자 회사에서 이 여자와 함께 일하고 있는 것 같다.

번역자는 GE나 Sun과 같은 화려한 회사에서의 경력을 자랑하는 김익환 선생님이다.
얼마전에는 우리회사에 오셔서 소프트웨어 공학에 대한 강의를 해주셨는데, 아주 좋은 시간이었다.

이 책은 소설이 아니라 그냥 인터뷰만을 담고 있을 뿐인데도 책이 상당히 두껍다.

나는 500페이지가 넘어가는 책을 별로 안 좋아하는데, 모양새도 잘 안나고 가방에 넣고 다닐 때 무겁기 때문이다.
이런 해커들의 이야기들 담은(흥미진진한) 책은 이동하면서 마음 편히 보기에 아주 좋은데, 책이 두꺼워서 집에서만 봤다.
하필이면 32명인가, 32비트 시대라서 그런가. 16명 정도만 골랐으면 더 좋았을텐데 말이다.

어쨌거나,
애플의 스티브 워즈니악
루비 온 레일스의 데이비드 하이네마이어 핸슨
지금은 마이크로소프트의 에이스로 군림하고 있는 레이오지 등.
최고의 제품들과 최고의 해커들에 대한 생각을 엿보는 것은 정말 즐거운 일이 아닐 수 없다.
빌 게이츠, Next Page - 8점
메리 조 폴리 지음, 양승민 옮김/엘도라도
이 책은 빌게이츠의 책이 아니다.
그렇다고 빌게이츠의 업적이나 그에 대한 찬사로 가득 차 있는 책도 아니다.

단지 All about Microsoft 블로그를 운영하고 있는 한 여자의 마이크로소프트에 대한 주관적인 시각을 담은 책이다.

이 책에서 그녀는 MS의 편에 완전히 서지도 않으면서 한편으로는 MS를 옹호하기도 하고, MS를 완전히 지지하다가도 갑자기 욕을 퍼붓기도 한다.

그녀가 MS의 편인지 아닌지는 잘 모르겠지만, 꽤 오랫동안 마이크로소프트에 대해서 연구해온 사람임은 분명한 것 같다.

개인적으로 요즈음에는 오픈소스가 신기하고 재밌어서, 마이크로소프트를 일부러 멀리하고 오픈소스 제품들을 사용해보고 있기는 하지만, 나는 마이크로소프트의 제품들을 아주 좋아한다.

지금까지 쭈욱 MS 제품들을 써왔음에도 불구하고 나는 MS의 소프트웨어 전략에 대해서 심각하게 고민해본적이 한번도 없었다.

이 책은 바로 MS 전략의 과거, 현재, 그리고 미래에 대해서 이야기 한다.
최근에 나온 책이라서 MS와 야후의 협상건 까지도 언급되곤 하는데, 소프트웨어 시장과 그 전략에 대해서 도움을 얻을 수 있으므로 읽어볼만한 가치가 있다.
Speed Java - 8점
한동호/엠플래닝

강컴에서 호평들이 많아 이 책을 선택해서 봤는데, 책 이름과 같이 정말 스피드하게 배워나갈 수 있었다. 필요한 부분만 깔끔하게 설명하고 빨리 진행되는 방식이 아주 마음에 든다.

나는 대학시절에 Java 1.4 책을 한 번 본 것이 전부여서 @ 어노테이션이나 for 문 안에서 : 으로 이터레이팅 하는 문법들이 아주 해괴망칙하게 보이곤 했었는데, 이 책에서는 간략하게지만 내가 궁금해 했던 그런 새롭게 추가된 기능들에 대해서 설명되어 있어 좋았다.

하지만, 스피드하게 배우는 것은 한계가 있는 법.
조금 더 진지하게 Java의 깊숙한 부분을 배워 보려는 사람들은 Thinking in Java와 같은 다른 책을 찾아보는 것이 더 좋을 것이다.


작년 가을 즈음 회사에서, 갑자기 자바로 프로그램을 만들어야 할 상황이 내게 닥쳤다.
이 때 나는 대학 때 만들어본 고작 2000 ~ 3000 줄 정도의 비행기 게임이 자바 경험의 전부였었는데, 아무 것도 모른채로 무작정 프로젝트를 시작했고 그것은 하루 하루 부담스럽고 고통스러운 시간들로서 내게 다가왔다.

우리 회사에는 자바 프로그래머가 전혀 없어서 나는 아주 기본적인 것들까지도 인터넷을 통해 정보를 얻었어야 했는데(애플릿은 뭐고 서블릿은 뭔지, 1.5를 써야하는지 6을 써야하는지, 심지어는 SE를 다운 받아야하는지 EE를 받아야 하는지까지도), Sun의 문서들과 포럼, 그리고 유즈넷을 들락거리면서, 인터넷을 통해 공부하는 것이 책으로 공부하는 것보다 얼마나 어려운 것인지 절실히 깨닫게 되었다. 물어볼 사람이 옆에 있다는 것이 얼마나 행복한 것인지도 말이다.

어쨌거나 급하고 초조한 마음과 함께 나혼자 진행한 프로젝트는 책으로 지식을 쌓지 못한채 인터넷을 통해서 얻은 제대로 익히지도 못한 지식들로, 검색과 질문과 코딩의 반복, 또 삽질과 문제 해결 그리고 새로운 고비의 반복들을 거쳐 힘들게 완성시켰다.

최근들어 Java 세상을 덮친 Eclipse와  이클립스 프로젝트 필수 유틸리티 : subversion, Ant, JUnit, Trac 같이 가볍게 읽어볼만한 책들이 많이 나왔는데 이책과 함께 읽어보고 어느 정도 자바와 그 친구들을 알게 된 후에, 나는 당시 프로젝트의 시작부터 끝까지를 완전히 머리속에 그려놓지 않은채 무작정 덤벼들었던 내 모습을 기억하고는 얼마나 무모했었는지 떠올려보게 되었다.

당시 나는 최신 버전이라는 이유로 별 생각없이 Java 6 플랫폼을 선택해서 개발을 했는데,
서버 프로그램도 아니고 클라이언트에 내려주는 애플릿 프로그램으로서 그것은 참 안좋은 선택이었다.

또, 후에 안 것이지만, SWTJava Web Start 같은 기술도 있었는데, 어떤 것이 나을지 비교도 해보지 않고 바로 스윙애플릿을 선택한 것도 내 무지함이었고 말이다.( 어떤 기술이 있는지 정도는 알고있어야 뭘 비교해볼 것 아닌가. )

프로젝트에 충분한 기술적 검토없이 무작정 덤벼드는 것은 좋지 않다.
그리고 기본기는 인터넷보다 책으로 다지는 것이 좋다.

이 책은 자바의 깊숙한 부분들을 설명하지는 않지만, 꼭 필요한 부분들만을 가볍고 쉽게 읽혀지도록 쓰여졌다는 점이 높이 평가 할만하다.

이 책과 함께 위에서 잠깐 언급한
Java 세상을 덮친 Eclipse
이클립스 프로젝트 필수 유틸리티 : subversion, Ant, JUnit, Trac 역시 추천한다.
내가 잘 알지 못한채로 사용해 왔던 것들의 많은 부분이 위 책들에 담겨있었다.
사실은 위 책들도 각각 서평을 쓰려고 했는데 막상 쓰려니 귀찮아져버려서 그냥 이렇게 넘어간다.

Java는 주위에 배워야 할 잡것들이 너무나도 많아서 날 피곤하게 한다.
구글을 지탱하는 기술 - 8점
니시다 케이스케 지음, 김성훈 옮김, 전병국 감수/멘토르

아름다운 명서에 넣기는 뭐해서 가볍게 읽기 좋은책으로 카테고리를 정하긴 했지만 실제로 이 책이 그렇게 가볍게 읽을만한 책은 아니다.

맨 마지막 장인 6장에 가서야 구글의 시스템, 개발 언어 등 많은 사람들이 원하는 이야기들이 소개되며, 그 전까지는 맘 편히 볼만한 내용들은 별로 없다.

나는 회사에서 가상 파일 시스템을 구현하는 일을 맡고 있는데,
그래서 역시 이 책의 3장에 나오는 GFS(구글 파일 시스템)부분이 가장 인상깊었다.

거기에는 지금까지 우리가 생각은 해왔지만, 구현하기 힘들다는 이유로
그리고 개발 시간이 오래걸린다는 이유로 도망쳐왔던 많은 아이디어들과
심지어는 생각해보지도 못했던 여러 기술들이 구현되어 있었다.

이 책을 읽으면서 줄곧 들었던 생각이 있다.
나는 무엇을 그렇게 무서워 하고 있는가?

이 프로젝트를 과연 내가 해낼 수 있을까?
이 복잡한 알고리즘을 과연 버그 없이 구현할 수 있을까?
다른 방식으로 구현하면 몇몇 단점들이 있긴 하지만,
훨씬 쉽고 빨리 만들수 있으니 그 방법으로 사람들을 설득하자. 하는 썩어빠진 마음가짐.

실제로 이런 어려운 문제들을 멋지게 구현해낸 이들을 보면서, 나는 많은 반성을 했다.
주위에 도움을 받을 수있는 훌륭한 해커들이 있다는 것은 이런 두려움을 없애주는 가장 큰 힘이다.
내가 어려운 문제에 봉착해서 머리를 싸매고 있을 때, 해결책을 제시해주는 그들에게 진심으로 감사한다.

담대하게, 그리고 좀 더 진지하게 문제에 접근하는 태도를 길러야겠다.



나는 파이썬을 리눅스 서버를 관리하는 유틸리티성 목적으로 사용하곤 하는데
그것은 마침 이 책의 제목과 딱 들어맞았다.

파이썬에는 훌륭하고 쓰기 편한 좋은 모듈들이 많이 있는데, 나는 그런 것들을 잘 꾀고 있질 못해서 이미 있는 모듈인지 모르고 간단하게 구현해서 쓰다가 나중에 그런 모듈이 있다는 것을 알고는 다시 코드를 고친 적들이 몇 번 있었다.

이 책은 나같은 프로그래머들에게 도움을 준다.
하지만 파이썬 전문가들이라면 이미 이 책에서 소개하는 모듈들을 잘 알고 있을 것이다.

좋은 라이브러리와 애플리케이션들을 많이 알고 있다는 것은 프로그래머에게 있어서 아주 중요하다.
프로그래밍 테크닉 뿐만 아니라 이런 지식을 얻기 위해서 시간을 투자하는 것은 충분히 가치가 있는 일이다.

나는 주로 라이브러리나 애플리케이션들의 공식 홈페이지, 개인 블로그들 그리고 포럼의 글들을 RSS로 받아보면서 이런 지식들을 얻곤 하는데, 이 책에서 또한 몰랐었던 몇몇 유용한 모듈들을 알 수 있게 되었다.

그러나 이 책이 모듈만을 소개하는 책은 아니다.
시스템 관리자라면 누구나 한 번쯤 데몬이 죽었을 때 혹은 디스크 용량이 부족할 때 알림 문자나 메일을 받을 수는 없을까? 패키징 관리를 좀 더 편리하게 할 수는 없을까?
여러 서버에 동시에 같은 파일을 올리기가 너무 귀찮은데 편하게 할 수 있는 방법은 없을까?
와 같은 생각들을 해보았을 것이다.

이 책에서는 바로 그러한 고민들을 풀어주는 예제 코드들과 유용한 모듈을 소개한다.
시스템 관리자들은 주로 쉘 스크립트와 네트워킹 그리고 트러블 슈팅 정도만을 공부하곤 하는데, 조금 더 시간을 투자해서 파이썬이나 펄과 같은 언어를 익혀둔다면 전보다 훨씬 훌륭한 고급 관리자가 될 수 있을 것이다.

아래는 이 책에서 나오는 내용들이다.
재미있는 내용이 꽤 많이 있다. 최근 책이라 심지어는 Google Apps Engine이 소개되기도 한다.

3장 문자열 장난
아파치 설정 파일 조작
로그 파싱
ElementTree -XML 파싱

4장 문서화와 레포팅
shelve
문서 조작
이메일 다루기

5장 네트워킹
포트 체크
웹서버 체크
Scapy -패킷 조작 모듈

6장 데이터
fnmatch 모듈 -Unix Filename pattern maching.
glob 모듈 -Unix style pathname pattern expansion

8장 OS soup
PyInotify -파일 변경 감시
구글 애플리케이션 엔진

9장 패키징 관리
http://peak.telecommunity.com/DevCenter/PythonEggs
setuptools
easy_install
eggs

10장 Processes and Concurrency
subprocess 와 popen -프로세스와 파이프 조작

11장 building guis
pyGTK - GUI 개발 라이브러리
Django - 파이썬 웹 프레임워크

12장 Data Persistence
Pickle 단순 직렬화 모듈
PyYAML -YAML 파서

13 커맨드라인
optparse -커맨드 라인 옵션 파서
ConfigParser - 설정 파일 파서

와이어샤크를 활용한 실전 패킷 분석 - 6점
크리스 샌더즈 지음, 김경곤.장은경 옮김/에이콘출판


Wireshark는 아주 유명한 패킷 분석 프로그램이었던 Ethereal의 후속 버전이다.
저작권 문제로 Ethereal의 이름을 쓸 수 없게 되어 이름을 Wireshark로 바꾸었다고 한다.

나는 약간 컴맹끼가 있어서 어떤 툴을 처음 접할 때 항상 애를 먹곤 하는데,
그런 이유로 이런 주제의 책들을 보는 것을 좋아한다.

요즈음 패킷들을 분석할 일이 있어서 와이어샤크를 몇 일 쓰다가, 툴 자체를 너무 모르고
좋은 기능들을 못 써먹고 있는 것 같아 조만간 이 책을 꼭 빌려서 봐야겠다고 생각하고 있었다.

하지만 뚜껑을 열고 보니 이 책은 내 기대와는 달랐다.
나는 와이어샤크의 기능들과 그것을 조작할 수 있는 사용자 인터페이스, 그리고 패킷 필터링을 위한 여러 문법 정도를 이 책에서 얻어갈 생각이었는데, 그런 내용은 고작 10페이지 정도밖엔 없었다.

나머지는 네트워크 개론과 프로토콜에 대한 설명 뿐이었다. 다른 네트워킹 관련 책들에서 충분히 자세히 얻을 수 있는 그런 것들 말이다.

와이어샤크 홈페이지에서는 다음 메뉴얼을 제공한다.
이 메뉴얼의 구성이 이 책보다 훨씬 나은 것 같다.

pdf로 되어있어 인쇄해서 보기에도 깔끔하고 좋다.
http://www.wireshark.org/download/docs/user-guide-us.pdf
프로그래밍은 상상이다 - 8점
임백준 지음/한빛미디어


이 책은 경영과 컴퓨터에 임백준씨가 기고한 칼럼들로 구성되어있다.
아마도 잡지나 인터넷 칼럼들을 열심히 본 독자들이라면 어떤 칼럼들은 예전에 보았던 내용들 일 것이다.

개인적으로 임백준씨의 글 들을 참 재미있게 읽고 있다.
그가 지금까지 써온 책들을 모두 읽어 봤는데 이번 책은 가장 재밌었다.

책을 읽다 보면 군데군데에서 그가 참 열심히 공부했구나 하는 느낌을 받게된다.

임백준씨는 해커와 화가의 역자이기도 한데
그는 폴 그레이엄에 대해 그다지 좋은 감정을 가지고 있는 것 같지는 않지만,
책을 읽으면서 글의 주제나 문장 일부들이 폴 그레이엄과 닮아 간다는 것을 느낄 수 있었다.

어쨌든 이 책은 가볍게 읽어볼만한 아주 좋은 책이다. 이전의 책들보다 훨씬 더 좋다.

단지 가격은 기술 서적이 아님에도 불구 하고 꽤 비싼 편이다.

......물론 나는 도서관에 신청해서 공짜로 봤다.



웹 패러다임을 바꾸는 위젯 - 6점
노주환 지음/멘토르


위젯이 정확히 뭔지 궁금해서 이 책을 구해 가벼운 마음으로 읽어봤다.

사실은 위젯보다는 위젯 개발 과정이 더 궁금했는데,
이 책에는 위젯 개발에 대해서는 아주 적은 분량의 내용만 설명되어 있으며, 그 내용은 개발 환경을 구축하는 방법을 가르켜주는 정도의 수준이었다.

위젯은 가젯이라고도 불리는데, 비스타 사이드바에서 볼 수 있는 것들 뿐만이 아니라,
구글의 애드센스같은 코드 스니핏들도 역시 위젯이라 할 수있다. -이 책에서는 웹위젯이라고 말한다.

여러 위젯들을 제공하는 사이트와 재미있는 웹위젯들을 소개해주는 부분이 상당 내용있는데, 이 부분이 가장 재밌었다.

여기를 클릭하면 목차를 볼 수 있다.

Taeyo's ASP.NET AJAX v1.0 - 8점
김태영 지음/한빛미디어


나는 특정 언어나 분야에 상관없이 두루두루 넓게 공부하는 것이 프로그래밍하는 데 많은 도움이 된다고 생각한다.
어떤 사람들은 한 우물만 파서( 예를 들어 C/C++ ) 거기에서 전문가가 되는 것이 진짜 최고라고 얘기하곤 하지만, 내 생각은 그렇지 않다.
내가 본 해커들은 다들 컴퓨터 과학 전반의 분야들을 두루 이해하고 있었다.

GET 메소드와 POST 메소드가 뭔지도 모르는 최고의 C 프로그래머를 본 적이 있는가?
Java와 C#을 못다루는 최고의 C++프로그래머를 본 적이 있는가?
리눅스에서 코딩을 못하는 최고의 윈도우 프로그래머를 본 적이 있는가?

비록 실제 프로젝트에서 사용하지 않을 지라도 다른 분야의 무엇인가를 꾸준히 공부하는 것은 해커의 필수 요건 중 하나이다. 그리고 그렇게 공부하는 것을 즐긴다면 훨씬 좋을 것이다.
 - 논란의 여지는 있지만 아마도 수학적 능력은 필수 요건은 아니다. 공통 수학의 정석을 이해할 수 있는 두뇌라면 STL 컨테이너들의 내부 동작이나 알고리즘과 함수객체 정도를 이해하는 데는 아주 충분하다.
실제로 언어의 설계자들이나 많은 해커들이 수학은 그다지 중요하지 않다고 말하는 것을 보아왔다.( 하지만 우습게도 그들은 하나같이 수학의 천재들이다. 빌어먹을 )

어쨌든 이렇게 다른 언어나 플랫폼에 대해 공부한 경험은 실제로도 많은 도움이 된다.
예를 들어 나는 대학에 다닐 때에 C#의 컬렉션들을 다루는 것이 너무 어려웠는데, C++의 STL을 공부하면서부터 comparer나 predicator들을 이용하여 자료구조를 제어하는 방법을 이해하게 되었다.
또한 다시 STL을 사용하게 되었을 때 C#의 이런 경험들이 예전보다 functor에 대해 좀 더 깊게 이해할 수 있게 만들어주었고, 이런 경험은 또 파이썬에서 lamda 표현식을 공부할 때 나를 찾아와 도움을 주었다.

그래서 나는 새 책이 나오면 이것 저것 닥치는 대로 다 골라서 집 앞에 있는 도서관에 신청 을 한다.

이 책은 작년 겨울에 Ajax를 이해하고 싶어 빌렸었던 읽기 좋은 분량의 얇은 책인데, 김태영씨가 쓴 책이라 역시 좋았다.
사실 다른 두꺼운 Ajax 책도 몇 권 빌려 봤었던 것 같은데 뭐가 그리 딱딱한지 정말 재미가 없었다.

김태영의 책은 정말 소설책 읽듯이 재밌다. 언제나 그렇듯이 심화된 내용은 전혀 없지만 초보자들에게 기본 원리를 이해시키는 데는 아주 좋다.
나는 이 분이 맨날 집에서 놀면서 책만 써줬으면 좋겠다.( 농담이다. )

조엘이 엄선한 소프트웨어 블로그 베스트 29선 - 8점
조엘 스폴스키 지음, 강유.허영주.김기영 옮김/에이콘출판


조엘 온 소프트웨어로 국내에 널리 알려진 조엘 스폴스키의 다른 책이다.
이 책은 조엘이 쓴 책이 아니라 다른 블로거들의 글을 조엘이 소개해주기만 한다.

나는 조엘 온 소프트웨어를 먼저 읽고 이 책을 나중에 읽었는데, 재미로만 본다면 이 책이 더 좋았다.

다음은 이 책의 목차인데 제목만 봐도 벌써 흥미진진한 내용들이 많이 보인다.

1 스타일은 언어 요소다
2 멍청한 사용자 인터페이스 부문 최우수상, 윈도우 검색
3 프로그래머 아웃소싱의 단점
4 엑셀은 데이터베이스가 아니라구요!
5 ICSOC04 강연 한 토막
6 환상 속에 고립된 소셜 소프트웨어
7 비정상적으로 행동하는 애플리케이션을 막지 않는 이유는?
8 환상적인 사용자 인터페이스
9 캐나다 인터넷을 WIPO의 손아귀에서 구출하라
10 EA: 휴먼 스토리
11 타입검사와 테스트
12 프로세싱
13 위대한 해커
14 도스창을 날려 버린 주소창
15 스타벅스에서 2단계 커밋을 사용하지 않는 이유
16 열정
17 C++, 잊혀진 트로이 목마
18 전구 하나 바꾸는 데 마이크로소프트 직원 몇 명이 필요할까?
19 엉망진창 꼬여버린 상황 돌파하기
20 래리의 소프트웨어공학 법칙 제2조: 테스터를 단순한 잣대로 평가하지 마십시오
21 팀 보상 제도
22 맥 워드 6.0
23 소셜 소프트웨어, 내부의 적을 경계하라!
24 사용자 집단 분석: 플레이밍을 방지하는 소셜 소프트웨어 설계
25 간격 좁히기, 제1부
26 간격 좁히기, 제2부
27 직원 채용에 대한 제언
28 파워포인트 재구성
29 (여우 캐릭터와 함께하는) 빠르고 쉬운 루비 강좌

가장 좋았던 내용은 역시13장에서 소개되는 폴 그레이엄의 에세이인 위대한 해커였다.
나는 이 책을 도서관에서 빌리면서 해커와 화가라는 책을 같이 빌렸었는데, 이 책을 먼저 읽고 해커와 화가를 읽으면서 거기에 똑같은 글이 있어서 좀 놀랐었다.

뭐 어쨌든, 이 책에는 위대한 해커 말고도 재밌는 내용들이 잔뜩 들어있다.
조엘의 책은 다 읽어봤는데, 그 중에 똑똑하고 100배 일 잘하는 개발자 모시기:조엘 온 소프트웨어 시즌 2  이 책 만 빼고 나머지 2권은 아주 재밌었다.
이 빌어먹을 책은 회사 돈으로 샀는데, 읽어보고는 돈이 아까워서 미안할 정도였다.
조엘 온 소프트웨어에 이미 다 있는 내용을 그대로 갖다 붙여 놓고는 13000원이나 받아먹다니!

이미  More Joel on Software 라는 조엘의 새로운 책이 출간되었는데( 제목은 스캇 마이어스의 책 제목을 흉내내서 지었음이 분명하다.) 번역서가 나오면 읽어 볼 예정이다. 이 책 또한 기대가 된다.
당신만이 할 수 있는 일을 하라 - 6점
Toshino Hosogai 지음, 김성훈 옮김/성안당


이 책은 심심할 때 가볍게 읽어보기에 아주 좋다.

앨런 튜링, 클라우드 섀넌, 폰 노이만, 존 배커스, 존 매카시, 데니스 리치, 비야네 스트로스트럽, 제임스 고슬링, 다익스트라, 도널드 커누스 등 널리 알려진 훌륭한 해커들의 재밌는 일화들을 소개한다.

폰 노이만의 천재적인 암산 능력, 뭐 이런 것들이 있었는데 읽은지 오래되서 이제는 잘 기억이 안난다.

2005년도에 나왔던 책인데 아직 읽어보지 않았다면 한번 쯤 구해 읽어 보면서 머리를 식히는 것도 좋을 것이다.

전체적으로 내용은 아주 재밌다.
Python Essential Reference (4th, Paperback) - 8점
Beazley, David M./Addison-Wesley


그다지 두껍지도 않으면서 아주 간결하게 파이썬을 잘 설명해주고 있는 책이다.

다음은 이 책 2판의 목차인데, 레퍼런스 용 책 답게 문법 설명은 최대한 간결하게 하고 다양한 부록을 절반 이상이나 할애하고 있다.

1 A Tutorial Introduction 1
2 Lexical Conventions and Syntax 13
3 Types and Objects 19
4 Operators and Expressions 43
5 Control Flow 55
6 Functions and Functional Programming 63
7 Classes and Object-Oriented Programming 71
8 Modules and Packages 77
9 Input and Output 83
10 Execution Environment 93
A The Python Library 99
B Extending and Embedding Python 297
C: Summary of Changes 331

문법 설명이 너무나 간결해서 프로그래밍 언어를 처음 배우려는 사용자에게는 좋지않다.
아직까지도 대부분의 사람들은 파이썬을 자신의 첫 언어로 배우지 않는다.
이 책은 다른 언어를 좀 공부했다가 Python을 배워보려는 프로그래머들에게 효율적으로 파이썬을 가르켜주는 아주 좋은 책이다.
이 책을 보면서 마치 Learn Visual Basic 6.0을 읽을 때와 비슷한 기분이 들었다.
아직까지 읽어본 파이썬 책은 그다지 많지 않지만, 그 중에서 가장 깔끔했다.

2001년에 이 책의 2판이 발행되었고, 비교적 최근인 2006년에 3판이 발행되었다.
파이썬은 버전이 바뀔 때마다 문법이 조금씩 달라지기도 하고 변화되는 부분이 많으므로 최신 에디션으로 구해보는 것이 좋다.
이 책의 저자처럼 파이썬 책을 쓰는 사람이나, 기존 프로젝트를 포팅해야 하는 사람들에게 이런 변화는 어쩌면 울화통 치밀게 짜증나는 일 일지도 모르겠다.( 물론 즐겁게 받아들일꺼라 생각한다. )
나는 파이썬의 이런 발 빠르고 과감한 변화를 너무나도 좋아한다. 사실 파이썬으로 이미 커다란 프로젝트를 만들어 놨다면 귀도 반 로섬을 빌어먹을 개자식이라며 욕할지도 모르겠지만, 뭐 만들어 놓은 것이 없으니깐^^
그저 파이썬 3000이 두근두근 기다려질 뿐이다.

파이썬 시작하기 - 8점
마크 루츠 & 데이비드 애셔 지음, 이강성 옮김/한빛미디어


이 책은 파이썬의 기본서이다.
2007년 10월에 이 책의 3번째 에디션이 나왔는데, 이제 곧 파이썬 3.0이 나오고 나면 금방 4판을 내지 않을까 싶다.
파이썬은 국내 저자가 쓴 책도 별로 없지만, 번역서 또한 거의 없는 것이 슬픈 현실이다.

이 책은 다행히도 번역서가 있다. 이강성 교수가 번역해서 국내에는 '파이썬 시작하기'라는 이름으로 소개되었는데, 아마도 1판일 것이다. 1판은 너무 오래된 책이긴 하지만, 그래도 이 번역서가 파이썬 자체를 공부하는데는 우리말로 된 책 중에서 가장 좋은 책이라고 생각한다.

이 책은 인터넷 스크립팅이나 시스템 프로그래밍을 파이썬으로 어떻게 하는가 같은 내용은 전혀 없으며 오직 파이썬 언어 자체만을 이야기 한다.
파이썬을 좀 더 공부하고 싶다면 같은 저자가 쓴 Programming Python을 참고하면 될 것이다. 이 책도 역시 최근에 3번째 에디션이 나왔고, 파이썬의 거의 모든 부분을 다루며 예제 코드도 엄청 많다.( 하지만 번역본이 없다. )

파이썬을 좀 잘해보고 싶은데, 빌어먹을 영어와 자꾸 부딪히게 되니 죽을 맛이다.
빨리 파이썬이 널리 알려져서 좋은 책들을 많이 번역되었으면 좋겠다.

목차는 다음과 같다.

1부. 핵심 언어1장. 시작
2장. 자료형과 연산자
3장. 기본문
4장. 함수
5장. 모듈
6장. 클래스
7장. 예외

2부. 바깥 층8장. 내장 도구
9장. 파이썬으로 하는 공통 작업
10장. 프레임워크와 응용 프로그램

3부. 부록
A. 파이썬 자원
B. 플랫폼에 따른 자원
C. 연습문제의 해답

돌아보니 회사에 들어와서 MFC로 윈도우 애플리케이션을 만드는 일이 아직까지는 가장 많이 했던 일이었던 것 같다.
5달 쯤 전에, C++로 프로그래밍하는 것이 너무 지겹고 또 어려워서 좀 더 쉬운 방법이 없을까 하고 고민을 많이 했었는데, 그 때 시도해봤던 방편 하나가 Visual Basic 6 이었다.
서버 애플리케이션이 아니라 고객들에게 배포해야 하는 애플리케이션들이었기 때문에 선택의 폭은 그렇게 넓지 않았다. C#이나 VB.NET으로 윈폼을 작성해서 배포하려면 아마 윈도우7이 나올 때 쯤 까지는 기다려야 하지 않을까?

새로운 언어를 배운 다는 것은 어쩌면 프로그래밍을 하면서 가장 신나는 일 일지도 모른다.
뭐 어쨌든 VB6의 사고 방식을 접해보고 싶어서 이 책 저 책 많이도 빌려봤다.
그 때 아쉬웠던 점은 잘 쓰여진 VB6 책을 찾기가 너무 힘들었다는 것이다. 거의 대부분의 국내 책들이 문법조차 얼렁 뚱땅 넘어가고 Visual Studio에서 자동화된 코드를 어떻게 생성하는지에 대한 부분만을 설명하고 있었다.

지금 소개하는 이 책은 우연히 발견했는데, 너무 간결해서 좋았다.
'필수적인', '간결함'. 그것이 이 책을 표현하기 가장 좋은 단어들 이다.

나는 On Error 구문이 어떻게 동작하는지, 그리고 문법은 어떻게 되는지가 궁금 했었는데 이 책에서는 깔끔하게 잘 설명이 되어있다.  -다른 책들에는 On Error에 설명이 전혀 없는 책들도 많다. :(
문법 부터 예제까지 필수적인 것들만 간결하게 설명하고 넘어가는 것이 이 책의 가장 큰 매력이다.

어쩌면 윈도우 프로그래밍을 조금은 해봤기 때문에 이 책의 간결함이 더 읽기 쉽고 좋게 느껴졌는지도 모르겠다.
하지만, 완전 초보자가 VB6을 배운다고 하더라도 이 책이 그저 그런 다른 책들 보다는 훨씬 도움이 될 것 같다.

이 때 VB6으로 간단한 애플리케이션을 만들어 보면서 내가 배웠던 가장 큰 한가지는, 아직까지 배포용 윈도우 애플리케이션을 만드는데 있어서 최고의 선택은 바로 MFC라는 것.
간단한 애플리케이션이라면 문제 없겠지만, 좀 더 정교하고 구조화된 프로그램을 원한다면  VB6은 좋은 선택이 아닌 듯 하다.^^

이 책은 실제로 판매되는 것 같지는 않고, ebook으로만 제공되는 것 같다. -아마존에서 찾아볼래도 나오질 않는다.
아래 링크에서 pdf를 볼 수 있다.
http://www.scribd.com/doc/3488620/ebook-Learn-Visual-Basic-6-0

나는 pdf를 인쇄해서 책으로 이쁘게 만들어서 책장에 꼽아두었다.
책장이 하나씩 차는 것은 나의 행복.^_^
게임 개발자를 위한 C++ - 8점
서진택 지음/민프레스(민커뮤니케이션)

대학교 2학년 2학기 때, C언어에 어느 정도 익숙해지고 C++을 혼자서 조금씩 공부해 가던 때에, 친구의 추천으로 이 책을 읽었다.

당시 C++을 잘 모르던 내게 이 책은 너무나 버겨웠는데, 그럼에도 불구하고 이 정도 고급 주제를 다룬 국내 서적은 찾아 보기 힘들었기 때문에, 이해 될 때까지 연구실 책상에서 보고 또 보고 했던 기억이 난다.

그렇게 여러번 보다 보니 처음에는 전혀 모르겠던 내용들도 어렴풋이 이해하게 되고 나는 C++에 조금씩 익숙해져 갔다.

이 책은 내용은 괜찮았지만, 편집이 엉터리였다. 인쇄가 아마 -> 연산자가 모두 공백으로 나왔었언가? 그런 류의 심각한 결함이 있었다.

하지만 이 책에서 C++의 여러 문법들과, 오버로딩 오버라이딩, 상속 관계에서의 생성자와 소멸자의 호출 순서, 복사 생성자, this 포인터, 가상함수와 가상함수 테이블, 연산자 오버로딩등을 배울 수 있었다.

지금도 기억에 강하게 남아있는 부분은 복사 생성자인데, 이 책의 저자는 복사생성자를 참 중요하게 강조했던 것 같다.

복사 생성자란, 말 그대로 객체가 복사 될 때 호출되는 생성자이다.
CString s1(_T("string"));
CString s2( s1 ); // 또는 CString s2 = s1;


두번째 줄에서 s1을 s2에 복사하면서 복사 생성자가 호출 된다.
그냥 생성자가 아니라 CString::CString( const CString& ) 의 시그내쳐를 가진 복사 생성자 말이다.

하지만 코드를 이렇게 작성한다면,
CString s1(_T("string"));
CString s2;
s2 = s1;


위와 같은 경우에는 s2를 기본 생성자를 통해 객체를 생성한 뒤 operator=() 을 통해서 s1을 s2에 복사한다. 그러므로 위 코드에서는 복사 생성자가 호출 되지 않는다.

간단한 내용이지만, 생성자에서 멤버를 new하고 소멸자에서 그 멤버를 delete하는 경우에 복사 생성자를 정의해주지 않으면 복사 될 때 프로그램은 죽는다.
복사 생성자를 정의하지 않았을 때 컴파일러가 알아서 복사 생성자를 만들어 주지만 멤버에 포인터가 있다면 그 포인터 값을 그대로 복사하도록 코드를 생성한다.

이런 식으로 말이다.
class A
{
public:
    //somemethod();
private:
    int* pPointer;
};

A::A( const A& copy )
{
    this->pPointer = copy.pPointer;
}// 컴파일러는 이런식으로 복사생성자 코드를 만들어준다.


근데 A 클래스 생성자와 소멸자가 다음과 같았다고 하면,
A::A()
{
    this->pPointer = new int();
}

A::~A()
{
    delete this->pPointer;
}


이 클래스를 이런식으로 사용할 때,
{
    A obj1;
    A obj2 = obj1;
}


블락이 끝날 때에 프로그램은 죽는다.
- 사실 죽는다는 표현 보다는 정의되지 않은 동작을 수행한다. 라고 하는 것이 좀 더 정확하다. 하지만 일반적으로 거의 모든 경우에 뒤진다. :)

왜냐하면 obj1을 생성 할 때 불리는 기본 생성자에서 멤버 변수에 메모리를 동적 할당했고,
obj1을 obj2에 복사하면서는 복사생성자를 통해 obj2를 생성했는데, 이때는 pPointer에 새로운 메모리를 할당한 것이 아니라 obj1의 멤버 변수 pPointer의 주소만을 복사했기 때문이다.
블락이 끝나면서 소멸자가 호출 될 때는 각 객체의 소멸자가 모두 호출 되면서 pPointer를 해제하려고 한다.
하지만 2번째 delete할 때 이미 해제한 포인터를 다시 delete하려고 하므로 오류.

이럴 때는 복사 생성자를 컴파일러에 맡기지 말고 다음처럼 직접 작성해주어야 한다.
A::A( const A& copy )
{
    this->pPointer = new int( *copy.pPointer );
}


복사 될 때도 메모리를 동적으로 할당하고 복사본의 값을 가져오면서 deep copy가 되었다.

복사 생성자가 언제 호출되는지 아는 것도 중요하다.
첫번째 경우는 위 코드에서 설명했고,
두번째 경우는 함수 파라메터로 넘길 때이다.
void SomeMethod( A obj );

이런 함수가 있다면,
A obj;
SomeMethod( obj );

이렇게 호출 할때에 객체가 복사되면서 복사 생성자가 호출된다.

만일 함수가 void SomeMethod( A& obj ) 이렇게 참조를 받도록 정의되어 있다면, 이런 함수들은 물론 호출 할때 객체가 복사되지 않으므로 복사생성자도 호출되지 않는다.

마지막은 객체를 리턴할 때이다.
{
    A obj;
    // some codes...
    return obj;
}


이 때 역시 객체를 복사하므로 복사생성자가 호출 된다.

물론 C#이나 자바 등의 언어에서는 참조자만 사용되고 garbage collector 가 자원 해제 몫을 처리해 주기 때문에 이런 종류의 고민은 하지 않아도 된다.