15년 정도의 회사 경력 중 가장 어려웠던 순간은 2009년과 2010년입니다.
디바이스 드라이버 프로그래밍을 할 때.
윈도우용 파일 시스템 필터 드라이버.

매일이 고통스러웠습니다.
프로그래머라는 건 이렇게 힘든 직업일까?
앞이 잘 보이지 않았습니다.
내 역량으론 해낼 수 없을 것 같은 느낌.

문서도 코드도 책도 별로 없었습니다.
영어공부를 이때 시작했습니다.
스택오버플로우에 질문을 하고 싶어서.
물어봐도 답을 얻지 못하는 경우가 많았습니다.
하는 사람이 세상에 별로 없으니까.

윈도우 빠였던 내가 윈도우가 조금씩 싫다고 생각이 들었던 건 어쩌면 이때가 아니었을까?
소스코드를 꽁꽁 감춰놓으니깐 어디가 문제인지 알 수가 없잖아.

커널에서는 C언어를 사용해야만 했습니다.
변수들을 함수의 맨 처음에 선언해야만 하는 구닥다리 할아버지 컴파일러.
진짜 이런 걸로 코딩을 해야 한다고?
참나, 이런 컴파일러는 데니스 리치나 켄 톰슨이 쓰는 거 아니야?

커널 세상에서는 코드 한 줄만 틀려도 여지없이 블루스크린이 발생했습니다.
블루 스크린을 보는 것이 너무 무서웠습니다.
덤프파일을 WinDbg에 넣어도 어디가 문제인지 모를 때가 있었거든요.

그럴 땐 이런 생각이 들었습니다.

일시적으로 그런 거였으면 좋겠다.
더 이상 재현도 안 되잖아.
내 코드가 문제가 아닐 거야.

물론 이런 생각이 맞은 적은 한 번도 없었습니다.

아니, 그런데 덤프를 봐도 별 정보가 없고 재현도 안 되는데 어쩌라고.
프로그래머라면 이 두려움과 우연에 기대고 싶은 마음을 공감할 겁니다.

다행히도 제 곁에는 팀장님이 있었습니다.
제가 만난 가장 똑똑한 프로그래머.

해커와 화가라는 책에서 폴그레이엄이 그의 동료인 로버트 모리스를 보고 한 말.

He is never wrong.
그는 절대 틀리는 법이 없어.

저는 이 말이 무슨 말인지 공감했습니다.
팀장님과 어떤 문제를 놓고 답을 다툴 때면 항상 팀장님이 옳고 제가 틀렸습니다.
제가 옳았다고 생각 들더라도 시간이 지나고 나면 결국은 팀장님이 옳았습니다.

팀장님과 저 단 둘 뿐인 팀이었지만 얼마나 든든했는지.
아마 제가 배운 프로그래밍 기술의 5할 이상은 이 팀장님에게 배웠을 겁니다.
덕분에 꾸역꾸역 앞으로 나아갈 수 있었습니다.

돌아보니 이때의 경험이 큰 자산이 되었습니다.

유저모드 세상과 커널 모드 세상이 어떻게 다른 건지.
스핀락이 뭐고 왜 써야 하는지.
페이지 폴트, 페이지드 코드는 뭐고 논페이지드 코드는 뭔지. 이딴 걸 왜 알아야 하는지.

커널 세상에서는 듣도 보도 못한 방법으로 링크드 리스트를 만들어 쓴다는 것도 알게 되었습니다.
CONTAINING_RECORD 매크로FIELD_OFFSET 매크로도 이때 배웠습니다.

그리고 무엇보다… 포기하지 않으면 결국 답을 찾을 수 있다는 소중한 경험을 많이 했습니다.

며칠 전 윈도우를 쓰다가 오랜만에 만난 블루스크린. 이제 그린스크린인가?
옛 생각이 났습니다.


덤프가 쓰이고 있는 중. 이게 뭐라고 반갑냐.

이제는 다 추억으로 남았습니다.
성장하는데 밑거름이 된 소중한 날들이었습니다만…
다시 돌아가고 싶진 않습니다.(웃음)

함께 읽으면 좋은 글: