|
이 책을 다 읽어본 것은 아니지만 몇 문제들을 보고 나서 감상문 하나 적어본다. 나는 탑코더나 ACM 프로그래밍 대회에서 우수한 성적을 거둔 사람이 꼭 훌륭한 프로그래머 혹은 소프트웨어 엔지니어라고 생각하지 않는다. 극히 좁은 범위로 한정된 문제를 빠른 시간에 푸는 능력이 복잡하고 규모가 큰 소프트웨어 설계에 그대로 적용되지 않기 때문이다. 지엽적인 문제에 대해 코딩을 재빨리 하는 능력이 과연 뛰어난 프로그래머를 가리는데 좋은 수단인지는 여전히 의문이다. 이 책을 처음 봤을 때도 좀 부정적으로 들여다봤다. 이 책은 ACM 문제와 같은 작은 코딩 문제를 수단과 방법을 가리지 않고, 컴파일러의 괴상한 특징까지 이용해, 가독성과는 안드로메다만큼이나 떨어져있는, 그야말로 짧은 코드를 만들어내는 것 자체가 목적이다. 여기에 쓰인 테크닉이 실제 개발에 쓰이기는 솔직히 쉽지 않다. 팀원 중 한 명이 코드 짧게 한다고 이 책에서 나오는 괴상한 for 루프 방식으로 코드 짜면 한 방 쥐어 박을 것이다. 한 마디로 "이 짓거리를 왜 하는거야?" 라고 중얼 거리며 부정적으로 책을 보기 시작했다. 그러나 어느 정도 읽고 나니 이런 부정적인 생각이 상당히 많이 가셨다. 이 책은 Short Coding 보다도 앞에 수식어로 붙은 '알고리즘 트레이닝'에 훨씬 더 큰 중점이 있는 책이다. 이 책은 주어진 문제를 가지고 일단 직관적으로 코딩을 한다. 그리고 여기서 코딩 테크닉을 이용하거나 더 나아가 새로운 알고리즘을 개발해 코드를 줄인다. 이 과정이 자세히 잘 나와있고 매우 흥미롭다. 이 책의 초점은 여기에 있는 것이다. 이 생각하는 방법을 엿 볼 수 있고 앞으로 나가기 전에 따로 생각할 수도 있어 그야말로 '알고리즘 트레이닝'이 된다. 비록 최종 결과물로 나온 괴상하고 알아보기 매우 힘든 짧은 코드 자체는 실제 개발 현장에서는 거의 쓰일 일이 없지만, 여기까지 도달하기까지의 사고 과정은 충분히 볼 가치가 있다. 원래 이 책은 일본인 저자가 쓴 책이다. 일본어와 한국어가 많이 닮아 있어서 그런지 번역도 매끄럽고 마치 우리나라 저자가 바로 쓴 것 같다. 요즘 경기가 불황이다보니 책도 많이 팔리지 않는다고 한다. 2만 7천원이면 저렴한 가격도 아니다. 그래도 피자 두 판 가격이면 된다. 늘 느끼지만 음반 한 장, 책 한 권을 피자 가격과 생각하면 별로 비싸다는 생각이 안 든다. 이 책이 피자 두 판 보다는 가치가 있는 것은 확실하니까. 정말 오타쿠가 연상될 정도의 기가막힌 테크닉과 잔머리를 보면서 웃음이 떠나지 않는 책이다.
몇 가지 기가 막혔던 부분들 1. 숫자 30000을 코드로 쓰면 5바이트가 필요하다. 저자는 이걸 줄이기 위해 기상천외한 방법을 동원하는데, 이 3만을 16진수로 바꾸면 7530h가 되고 75는 소문자 u에, 30은 숫자 0의 아스키코드가 된다. 그래서 이 30000을 'u0'로 표현해서 1바이트를 줄이고 있다. 예를 들어, A[30000]을 A['u0']으로 줄이는 것이다. 2. scanf로 값을 읽다가 EOF를 만나게 되면 -1을 반환한다. 그래서 파일 끝까지 읽는 for 루프를 for(;scanf("%f",&a)!=-1;) 정도로 표현할 수 있을 것이다. 그러나 ~ 연산을 이용하면 코드를 3바이트나 줄일 수 있다. -1에 대해 ~ 연산을 하면 0이 된다. -1은 모든 비트가 다 켜져있고 이것의 1's complement를 구하는 ~를 취하면 0이 된다. 그래서 for(;~scanf("%f",&a);) 로 줄일 수 있다. 이 정도 테크닉은 테크닉 축에도 들어가지 않는 일상적인 코드가 된다. 3. 피보나치 수열을 푸는 코드(237 페이지)도 무척이나 재밌다. 일단 처음 보게 된 것은 피보나치 수열을 행렬 곱셈을 통해 구할 수 있다는 사실이었다. 난 이거 처음 봤는데... 놀라웠다. ![]()
아쉽거나 부족한 점 1. 한가하게 이 책을 처음부터 정독할 시간이 부족해서 띄엄띄엄 발췌해서 보고 있다. 그러다보니 약간 이해에 애로를 겪는 부분이 많다. 242 페이지에 있는 피보나치 코드를 보면 for(;scanf("%d",&n),~n;) 과 같이 괴상한 루프가 보였다. for에서 루프 탈출문을 검사하는 코드가 ,로 연결되어 있었다. 이런 테크닉은 이미 앞 부분에 설명이 되어 이 챕터에서는 설명을 빠뜨리고 있다. 그래서 처음부터 책을 읽지 않았다면 여기에 쓰인 테크닉을 이해하기 위해서 책 앞 부분을 들춰야하는 번거로움이 좀 있었다. 여기에 쓰인 테크닉을 정리해서 색인으로 만들었으면 좀 더 좋았을 것 같다. 2. 코드의 폰트가 썩 맘에 들지 않는다. 한빛 웹블로그에 관련 글을 보면 폰트에 대한 고민을 읽을 수 있었다. Myriad Pro라는 가변폭 글꼴을 그것도 볼드체로 해서 나와서 처음에는 당혹스러웠다. 특히 가변폭 글꼴이라 "코딩에는 무조건 고정폭이지!" 라는 선입관과 충돌하여 적응하는데 좀 시간이 걸린다. 3. 책의 종이 재질에 대한 글도 잘 나와있는데, 나는 Short Coding에 쓰인 백색모조지를 별로 좋아하지 않는다. 너무 프린트 A4 용지 같은 느낌이 와서 그냥 프린트로 쓱 출력한 느낌이라고 할까?
p.s. 한빛 출판사 홈페이지의 전문가 Zoom In에 어떤 분이 이 책을 평하길:
이 의견에는 동의할 수 없다. Short coding에 나오는 코드는 건강한 코드와는 거리가 매우 멀다. 변태스럽고 편집증스러운 코드이다. 나는 긴 변수명과 긴 함수명을 좋아한다. 코드를 줄인다고 속도를 더 빠르게 하겠다고 /4를 >>2로 바꾸는 것도 안 좋아한다. 어차피 이 정도는 컴파일러가 알아서 해준다. 가독성과 짧은 코드는 거의 무관한 독립적인 관계이다. Short coding에서 최종적으로 만들어낸 짧은 코드는 전혀 직관적인 알고리즘도 아니고 (나쁘게 말하면 정답만 뱉어내는 특화된 코드) 리팩토링과도 전혀 관계 없다. 이 책의 가치는 위에서 이야기 했듯이 짧은 코드 자체가 아니라 거기까지 도달하는 과정에 있다.
최근 등록된 덧글
개발자 입장에서의 수많은 ..
by Jiyoon at 02/04 저도 아들 돌잔치때 돌잡이 .. by 박상욱 at 01/18 미국 대학원 원서 작성중에 p.. by 태클사이야 at 01/13 TO: 박PD 로그인 하지 않아.. by 박응용 at 01/10 http://gigglehd.com/zbx.. by dhunter at 12/28 우와.. 좋네요. 태반이 .. by 윤광배 at 12/17 항상 좋은 글 잘 보고 있습니.. by y2k at 11/23 글이 좋아서 제 블로그에 담.. by 쏭섭 at 11/23 최근 등록된 트랙백
메뉴릿
이글루 파인더
|