
프로그래머 능률의 원칙을 정의했다. 가속, 집중, 자동화, 정식화는 프로그래머를 능률적으로 만드는 키워드이다.
1부 원리편, 2부 실전편으로 이뤄져 있다. 2부는 소프트웨어 설계와 디자인 방법론들을 이야기하고 있는데 이게 능률적인 프로그래머와 어떤 관계가 있는지 그다지 느껴지지 않았다. 그보다는 능률적인 프로그래머를 만들어 주는 가속, 집중, 자동화, 정식화를 설명한 1부가 마음에 들었다. 1부 내용을 쭉 이어서 해주면 더 배울 게 많은 책이 됐을 텐데, 이게 좀 아쉽다.
숙련된 목조 세공사의 작업실을 찾은 적이 있다면 여기 저기 놓인 많은 특수 도구를 봤을 것이다. 공작물 제조 시 목조 세공사는 바닥의 작은 나무 조각으로 공작물 일부를 임시로 떨어뜨리거나 고정 시키는데 이들 조각을 공학 용어로 '지그(고정구, jig)'나 '심(쐐기, shim)'이라고 한다. 소프트웨어 개발 시 우린 이런 소모성 보조재를 너무 적게 만들어 쓰는데, 이유는 보통 목조 세공사와 같은 개념으로 도구를 받아들이지 않기 때문이다.
다른 프로그래머를 예로 들 필요도 없다. 내가 바로 이렇게 하니깐. 확실히 소모성 보조재를 거의 만들어 사용하지 않는 편이다. 이런 소모성 보조재로는 간단하고 빠르게 만들 수 있는 스크립트가 제격이다. 파이프로 입출력을 엮어서 복잡한 작업을 간단하게 처리해버리는 유닉스 셸 스크립트(shell script)가 부러웠는데, 윈도에도 윈도 파워셸(Windows PowerShell)이란 근사한 게 있으니 소모성 보조재를 만드는데 적극적으로 사용해보려고 한다.

알고리즘, 자료 구조 문제 중에서 프로그래밍 면접에 나올법한 짧은 문제를 수록한 책이다. 알고리즘 및 자료구조 복습이 필요한데, 대학교 때 배운 두꺼운 책보단 이런 얇은 책이 워밍업에 좋을 거라 생각해 책을 펼쳐들었다.
간단해서 짧은 면접 시간에 물어보기 좋은 문제들이 실려 있다. 포인터 개념을 알아보는데 좋은 리스트 문제를 비롯해 사이클이 있는지 판단하는 토끼와 거북이 알고리즘(Tortoise And Hare) 등 쉬운 문제부터 간단하지만 고민해야 하는 문제까지 넓게 다루고 있다.
답을 알려주는 방식이 무척 마음에 들었다. 그냥 문제를 내놓고 "이게 답이다." 딸랑 던져주는 게 아니라 쉽고 바로 생각할 수 있는 해법을 가르쳐 준 다음 조금씩 개선하며 최종 답을 내는 과정을 보여준다. 즉, 보통 O(n^2) 답을 먼저 제시한 다음 좀 더 빠르게 해결할 수 있는 여지를 찾아서 O(logn) 혹은 O(n)으로 문제를 해결한다.
문제를 푸는 과정을 말로 설명하라고 하는데, 과연 생각해보니 그렇다. 면접관 입장에서 문제를 냈는데, 면접자가 꿍하게 아무 말도 안 하고 있으면 무지 답답할 것 같다. 답을 바로 탁 내놓는 것보다 문제를 어떻게 해석하고 접근하는지 과정을 궁금해한다. 단, 여기에 함정 하나. EBS 다큐프라임 동과서에 실험으로도 나왔다. 바로 동양인은 입으로 설명하면서 문제를 풀면 아무 말도 하지 않고 푸는 것보다 더 문제를 못 푼다는 점. 이거 연습 좀 많이 해야 한다.

정말 오랜만에 보는 이산수학. 책을 보는 내내 연습문제 숙제로 시달리던 대학교 생각이 났다. 이 책도 더럽게 연습문제 많더라. 처음엔 연습문제와 같이 있는 프로그래밍 문제도 같이 풀려고 했는데, 보는데 조급해서 풀어보진 않았다. 예제를 열심히 보는 것에 만족.
이런 책은 당장 눈에 띄게 도움은 안 되지만 ‘저 깊은 곳에 내공이 쌓이겠지’하고 생각이 드는 책이다. 원래 책 이름은 Mathematical structures for computer science. 저자가 최대한 컴퓨터 과학에 쓰이는 개념을 끌어서 설명하려는 게 마음에 들었다. 그리고 이론을 설명하고 뒤에 따라오는 예제가 많은 것도 만족. 하지만 너무 난이도가 낮아서 그런지 읽는데 그닥 재미는 없었다.
아꿈사에서 스터디를 한 책이고 발표자료는 위키에서 볼 수 있다.
PS : 편집은 완전 실패. 이론 설명하고 예제가 헷갈린다. 예제가 더 크면 어쩌자는 거…