
마이크로 소프트(MS)가 어떻게 프로젝트, 사람을 관리하는지 살짝 엿볼 수 있는 책이다. 어떤 책인고 하니 MS에서 개발 혁신 부서장을 맡은 에릭 브레히너가 사내 웹진에 올린 글들을 묶어 놓은 책이다. 이 사람도 미지근하게 글을 안 쓴다. 한 마디로 깔건 확실하게 까는 스타일이지.
MS가 앞서 있는 건 분명하지만, 우리와 크게 다르지 않구나. 규모가 더 커서 우리와 다른 고민을 하기도 하지만 우리와 똑같은 고민을 하는 게 대부분이었다. 프로젝트, 사람 관리에 대한 고민과 해결은 얼핏 보면 별로 차이가 안 나지만 아주 조금씩 전진하는 밀리미터 싸움인지도 모르겠다. 15년 전에 나왔지만, 현재 상황과 차이가 별로 없는 소프트웨어 컨플릭트 2.0 처럼 15년 후에 이 책을 보고서 “에잉? 15년 전이야? 별로 달라진 게 없네”라고 말하는 상황이 될까 봐 살짝 걱정이 되기도 한다.
재미있었거나 곱씹어 봐야 할 내용을 정리해본다면
class Base
{
public:
Base()
{
WriteLine("Base::Base()", typeid(*this).name());
f();
}
void f()
{
WriteLine("Base::f()", typeid(*this).name());
virt();
}
protected:
virtual void virt() { WriteLine("Base::virt()"); }
};
class Derived : public Base
{
public:
Derived()
{
WriteLine("Derived::Derived()", typeid(*this).name());
f();
}
protected:
virtual void virt() { WriteLine("Derived::virt()"); }
};
// main
Derived d;
Base::Base() - class Base Base::f() - class Base Base::virt() Derived::Derived() - class Derived Base::f() - class Derived Derived::virt()
HARD CODE는 미지근한 글이 없어서 토론할 꺼리를 참 많이 던져준다. 명세서와 노는 손 얘기로 1시간 30분이 훌쩍 지나버렸다.

그래! 벌써 밑천이 다 떨어져 할 말이 없을 리가 없다. '조엘 온 소프트웨어' 다음 편인 ‘조엘 온 소프트웨어를 넘어서’가 나왔다. '조엘 온 소프트웨어'와 '조엘 온 소프트웨어를 넘어서' 사이에 책이 2권 나왔지만, 진짜 후속편이라 부를만한 책은 아니었다. 좋은 블로그 글을 골라서 실어 놓은 '조엘이 엄선한 소프트웨어 블로그 베스트 29선'과 새로운 글은 하나도 없고 '조엘 온 소프트웨어'에서 프로그래머 채용에 관련된 글만 모아놓은 듯한 그래서 참 개인적으로 별로였던 '똑똑하고 100배 일 잘하는 개발자 모시기'였기 때문이다.
조엘 글은 통찰력이 보여서 좋다. 글을 재미있게 쓰고 적당히 시니컬한 생각과 태도가 마음에 든다. 여기서 재미란 게 글을 쓰면서 섞는 유머를 가리키는 게 아니다. 사실 양키 유머.. 이해 안 돼. 그런 유머보다도 신선한 주제와 조엘 내공이 담긴 해석, 그리고 소프트웨어에 대해선 아무것도 모르는 관리자가 하는 짓을 마구 까주는 데서 재미를 느낀다. 조엘이 참 꾸준히 강조하는 것 중에 하나는 개발자 환경을 개선이다. ‘뉴욕 타임즈에 실린 조엘(Joel)의 Fog Creek 사무실’ 처럼 신문 기사를 내기도 하는데, 저번 책과 마찬가지로 이번 책에도 관련 얘기를 실었다. 개발 환경을 개선하는 건 아직 이쪽에 제대로 된 개념을 가진 경영자가 없어서 계속 강조를 해도 ‘오케이’ 이지만, 계속 반복해서 강조하다 보니 읽는 사람 입장에선 사실 좀 지루해져 가는 주제이다.
역시나 실망을 안 시키는 조엘. 이번 책에도 재미있는 얘기가 많았다. 그중에 정말 ‘23. 틀린 코드를 틀리게 보이도록 만들기’는 충격적이었다. 헝가리언 표기법 얘기가 나오는데, 것 참. 이렇게 좋은 걸 이제까지 오해한 채 억지로 욕을 하며 사용하다가 던져버렸구나! ‘20. 증거 기반 일정 세우기’도 접근 방법이 흥미로워서 재미있게 읽었다. 예측 일정과 실제 걸린 시간을 쌓아두고 이걸 바탕으로 일정이 완료되는 날에 대한 확률을 얻는다. 그리고 이런 확률을 바탕으로 소프트웨어 출시일 예측도 한다. 확률을 이용한 예측 방법이 참신해 보이고 꽤 그럴듯해 보였다.
이번 책도 재미있는 글들이 가득!

아꿈사에서 '프로그램은 왜 실패하는가?'라는 디버깅 책을 공부했었다. 이 책이 끝나고 난 뒤, 너무 이론에 치우쳐 있어서 아쉬우니 실전에서 쓸 수 있는 경험들이 담긴 디버깅 서적을 공부하자고 했다. 고르고 고르던 중에 걸린 이 책. 윈도우 시스템에 관한 이야기도 많아서 참 어려웠던 책이었다.
각 장마다 모두 직접 해볼 수 있는 예제들이 실려 있다. 이 예제를 가지고 책에서 설명하는 대로 따라가며 실습하는데, 감염(infection)된 상태를 구별하고 결함(defect)을 찾기까지 생각하고 의심하는 방식을 잘 다뤘다. 버그를 수정하는 자체로는 배울게 그닥 없지만 그걸 해결하는 과정에서는 참 배울 게 많은 법이다.
이 책에서 windbg를 사용해 설명하지만 이게 큰 상관이 있겠나 싶다. 결함(defect)을 추적하는 과정에서 감염(infection)된 상태를 구별하는 방법과 생각하는 방법을 배우는 게 디버깅에 있어서 가장 큰 지식이기 때문이다.
그냥 windbg로 "뚝딱뚝딱, 짠~ 이렇게 디버깅하는 것이란다."로 끝나지 않고 디버깅에 필요한 기초 지식도 충실하게 설명해 준 것도 마음에 들었다. 보안 같이 설명이 좀 아쉽고 교통정리를 안 해줘서 더 헷갈린 챕터도 있었지만, 전반적으로 충실하게 설명한 것 같다. 그 중 설명도 좋고 여러 사례가 있었던 스택과 힙 메모리 손상이 제일 재미있었다.
난 13. 포스트모템 디버깅을 발표했다.

간략한 shadow volume 소개와 여러 shadow mapping 알고리즘을 소개한 아티클이다. 프로그래머뿐만 아니라 게임에 관심이 있는 사람들도 읽을 수 있도록 쉽게 써서 그림자를 구현하기 전에 살짝 읽기에 좋은 글이다.
용어 정리가 조금 아쉽다. 어떤 말이고 하면 깊이 그림자 기법으로 PSM, LiSPSM 등을 소개하는데, PSM과 LiSPSM은 어떻게 shadow map texture를 그리는지에 대한 알고리즘이다. 사실 그림자 back-projection 신경 안 쓰고 셸프 섀도(self shadow)도 관심 없다면 depth map을 안 쓰고 이런 알고리즘대로 그림자 컬러 값을 그리고 지형에 매핑해도 된다. 하긴 요즘 shadow mapping이라 하면 저장한 깊이 값을 비교해서 그림자인지 아닌지 가리는 depth map test를 사용하는 걸로 고정되어 있어서 젠지씨보고 뭐라 하기도 그렇다. 사실 논문 자체 구현도 depth map을 사용하고 있다.