능률적인 프로그래머 (닐 포드, 2009) 독후감
프로그래머 능률의 원칙을 정의했다. 가속, 집중, 자동화, 정식화는 프로그래머를 능률적으로 만드는 키워드이다.
1부 원리편, 2부 실전편으로 이뤄져 있다. 2부는 소프트웨어 설계와 디자인 방법론들을 이야기하고 있는데 이게 능률적인 프로그래머와 어떤 관계가 있는지 그다지 느껴지지 않았다. 그보다는 능률적인 프로그래머를 만들어 주는 가속, 집중, 자동화, 정식화를 설명한 1부가 마음에 들었다. 1부 내용을 쭉 이어서 해주면 더 배울 게 많은 책이 됐을 텐데, 이게 좀 아쉽다.
숙련된 목조 세공사의 작업실을 찾은 적이 있다면 여기 저기 놓인 많은 특수 도구를 봤을 것이다. 공작물 제조 시 목조 세공사는 바닥의 작은 나무 조각으로 공작물 일부를 임시로 떨어뜨리거나 고정 시키는데 이들 조각을 공학 용어로 ’지그(고정구, jig)’나 ’심(쐐기, shim)’이라고 한다. 소프트웨어 개발 시 우린 이런 소모성 보조재를 너무 적게 만들어 쓰는데, 이유는 보통 목조 세공사와 같은 개념으로 도구를 받아들이지 않기 때문이다.
다른 프로그래머를 예로 들 필요도 없다. 내가 바로 이렇게 하니깐. 확실히 소모성 보조재를 거의 만들어 사용하지 않는 편이다. 이런 소모성 보조재로는 간단하고 빠르게 만들 수 있는 스크립트가 제격이다. 파이프로 입출력을 엮어서 복잡한 작업을 간단하게 처리해버리는 유닉스 셸 스크립트(shell script)가 부러웠는데, 윈도에도 윈도 파워셸(Windows PowerShell)이란 근사한 게 있으니 소모성 보조재를 만드는데 적극적으로 사용해보려고 한다.
컴퓨터는 단순 반복 처리를 아주 빠르게 할 수 있도록 설계됐다. 이상한 건 컴퓨터가 할 일을 사람이 하고 있다는 점이다. 사용자는 삽질하고 컴퓨터는 논다. 어쩌다 이렇게 됐을까?
내가 쓸데없이 반복 처리를 많이 한다는 걸 깨달은 게 이 책에서 얻은 가장 큰 수확이다. 시작 관리자, 다중 클립보드, 여기에 프롬프트 창 열기, 단축키를 알려주는 플러그 인, 키보드용 매크로 프로그램, 야후 파이프 등 반복 처리를 사람이 아닌 컴퓨터가 하게 해주는 좋은 프로그램도 알아낸 것도 추가적인 수확이다. 그러고 보니 예전에는 유틸리티에 참 관심이 많아서 정보도 많이 수집하고 했는데, 언제부터인가 갑자기 관심이 뚝 떨어진 것 같다. 작업을 하다가 이거 분명히 편하게 할 방법이 있겠다 싶은 생각이 들면 메모를 하고 쉽게 해주는 유틸리티를 찾게 됐다. 난 프로그래머니 정 없으면 내가 만들어도 되니깐. DRY(Don’t repeat yourself)가 딱 소스코드에만 존재하란 법은 없다.
자동화할 기찬 방법을 연구하다 보면 계속 배우게 돼 점점 똑똑해진다. 앞의 루비 프로그램을 짜는데 시간이 오래 걸린 이유 중 하나는 루비로 저수준 파일을 조작하는데 서툴렀기 때문이다. 이제는 알고, 다른 프로젝트에 써먹을 수도 있다. 프로젝트 인프라 일부를 자동화할 방법도 찾았으니, 간단한 작업 자동화는 더 쉽게 할 가능성이 높아졌다.
난 손이 빨라서 좀 더 쉽고 빠르게 처리하는 걸 생각하는 게 게을러졌다. 손이 느리고 이런 걸 지독하게 싫어했다면 어떻게든 다른 도구들을 사용해서 해결했을 텐데 말이다. 최근 가장 큰 변화는 정규식을 꾸준히 사용한다는 것이다. 간단한 변경도 메뉴얼을 펼쳐가며 찾느라 처음엔 늦었지만, 시간이 지나서 익숙해지니깐 훨씬 더 빨라지더라. 확실히 처음에 힘들고 귀찮더라도 그것만 이겨내면 뒤에 꿀이 줄줄 흐르게 된다. 영리하게 게을러지는 방법을 배워야 한다. 생각하는걸 게을리 하는 게 아니라 손으로 처리하는 걸 게을리해야 한다.
지금 너는 능률적이지 않다. 분명 더 능률적으로 할 방법이 있다. 이런 자각을 이 책에서 얻을 수 있다. 2부 실전편이 1부에 비해 정말 별로였지만 이런 자각을 여기에서 얻었으니 값어치를 제대로 한 책이다.