사용자 삽입 이미지

Ozy, 『알고리즘 트레이닝으로 배우는 코드 단축기법 Short Coding』, 한빛미디어, 2008


알고리즘 트레이닝으로 배우는 코드 단축기법

ACM/ICPC류의 문제 풀기에 관심 있는 분들이라면 "알고리즘 트레이닝" 이라는 제목이 붙어 있는 책을 알고 있을거다. 이 책과 같은 출판사에서 번역본을 낸 Programming-Challenges가 그것일텐데, Short Coding은 Programmig Challenges와는 조금 다른 성격을 가지고 있는 책이다.

처음엔 ACM/ICPC대회를 준비하는데 도움이 되지 않을까 하는 생각에서 이 책을 읽기 시작했다. 대회에서 가장 중요한것은 코드를 남들보다 빠른 시간내에 정확히 작성하는 것 이며 Short Conding이라 하면 그만큼 코드의 길이가 적으니 타이핑 수가 적어지고 코드 작성이 빨라서 유리한 위치에 있을 수 있다는 말이기 때문인데, 책을 받아 보고 첫장을 읽는 순간 피싯 웃음이 나올 수 밖에 없었다. 이 책에 담겨져 있는 내용은 코딩을 빨리 하기 위한 짧은 코드 작성방법이 아니기 때문이라는걸 알았기 때문.

처음에 책에 실린 소스코드를 보고 "뭐 이런 변태적인 소스가 다 있어" 라는 생각을 했다. 가장 처음 나온 코드인 34bytes짜리 소스코드를 보고 말이다. 그리고 메신져에 접속해 있는 프로그래머 지인들에게 그 코드를 보여주며 내가 느낌 감정을 공유해 보았다. 그 코드는 내가 알고 있는 C언어 지식으로는 컴파일조차 되지 않았다!

이렇게 처음엔 두뇌 컴파일러 에서 에러를 토해내던 소스코드를 책을 읽으면서 점점 컴파일이 가능해 지기 시작했으며 점점 이 책에 빠져들게 되었다.

책에는 PKU에 있는 문제와 그에 대한 간단한 풀이, 그리고 저자가 Short Code를 위해 생각한 사고를 그대로 적어 두었으며 마침내 가장 짧은 코드에 도달할 수 있도록 독자들을 잘 인도해 준다. 극한의 Short Code까지 도달하는 동안의 저자의 생각을 기술한 책이기 때문에 책의 두께는 두꺼운 편이지만 44문제 밖에 다루지 못했다는것은 아쉬움이 남을 수 밖에 없는데, 일본어를 잘 할 줄 안다면 저자의 홈페이지( http://www.4dm.org )에서 더 많은 내용을 볼 수 있다.

책을 읽던 최초의 목적인 '빠른 코딩으로 ACM/ICPC에서 유리한 위치에 가 있기' 에서는 멀어지긴 했지만 이책, 생각하는 즐거움을 알려줬다. Short Coding은 한번에 되는게 아니다. 문제를 읽고 분석을 하며 그 안에서 규칙성을 찾고 언어의 특성을 이용하며 필요 없는 개행까지 줄여가며 코드를 극한으로 압축시키는 기술이다. 책을 읽으면 C언어의 유연성과 저자의 생각에 감탄을 하게 될 수 밖에 없다. 어느정도 책을 읽은 후 부터는 내가 생각할 수 있는 최대한의 방법으로 Short Code를 작성해 보았지만 저자는 어김없이 더 작은 코드를 마지막에 내 놓는다.

비록 여기에서 알려준 Short Coding기술은 현업에서 사용할수는 없다. 다른 사람과 협업을 하기 때문에 타 프로그래머가 읽기 힘든 프로그램을 작성하는 프로그래머는 환영받기 힘들다. 그렇다고 해서 이 책에 있는 변태적인 코드 압축 기법을 쓸모 없는 짓 이라고 폄하 하는건 옳지 못한 생각이다. 깊은 사고력과 문제를 해결하는 끈기를 알려줄 수 있는 책이기 때문인데, 특히 학생이라면 이 책의 452페이지에 나와 있는 글귀를 소개해 주고 싶다.

『"장래 도움이 되니까, 안되니까."라는 합리성을 추구하는 공부는 실제로 그렇게 중요하지 않습니다. 일생에서 아이 시절, 학생시절만큼 멋지도록 쓸모없는 일을 할 수 있는 시간은 없습니다. 도움이 되는 일밖에 시키지 않는 사회인의 슬픔을 알게 될 때는 이미 늦었습니다.』

Yes24 컴퓨터와 인터넷 리뷰 도서
http://club.yes24.com/computerevent

크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by Mastojun
임베디드 프로그래밍 C코드 최적화

김유진,『임베디드 프로그래밍 C코드 최적화』,한빛미디어, 2008


임베디드라는 단어가 붙어서, 일반 PC에서 돌아가는 소프트웨어를 작성하는 나에게는 그다지 상관없을꺼 같은 책 때문에 읽지 않으려 하다가, C코드 최적화라는 말과 일반 프로그래머도 읽으면 도움이 되는 내용이 있다는 말에 솔깃해서 보게 된 책.
 
C언어 코드 최적화라는 제목을 달고 나온 책은 시중에 많지 않다. 다만 내용을 달리해서 나온 책이 몇권 있을 뿐이다. 더군다나 임베디드 C 최적화라는 책은 처음 본다. 이러한 점을 볼때 이 책이 존재하는 의미는 충분하다.
 
책의 내용은 초보도 알아두어야 할 내용 부터 다소 어려운 내용까지 포괄하고 있다. Blog2Book시리즈의 의도가 블로그에서 포스팅을 읽는 편안함을 책으로 옮겨 책을 편하게 읽을 수 있도록 만든다는 거였는데, 그 노력 덕분인지 가벼운 마음으로 책을 읽을 수가 있었다. 근래에 읽었던 책 중에서 가장 마음 편히 읽은 책인듯.
 
책을 쉽게 읽게 하기 위한 배려중 하나로 책의 크기를 콤팩트하게 만들었다. 하지만 그 사이즈 덕분에 내용도 압축 할 수밖에 없었다. RR스케쥴링이나 문맥교환, 어셈블리어, 리눅스에서 컴파일을 하는 방법 등에 대한 내용에 아무런 설명없이 단어가 튀어나왔다가 넘어가는 부분이 몇군데 있어서
컴퓨터구조나 운영체제, 어셈블리어 그리고 리눅스를 전혀 모르는 개발자는 읽기에 어려움이 있을 수 있다. (더군다나 중소기업의 개발자 평균 실력은 하향화 되고 있는 추세여서 개발 1~2년차에게도 어려울 수도 있지 않을까? 하는 괜한 걱정도 든다)
 
이 책은 초보자에겐 적합한 책은 결코 아니다. 대학에서 컴퓨터를 전공하지 않고 학원에서 6개월~1년 공부하다 이쪽업계로 뛰어든 개발자에겐 특히 위험하다. 그들에게는 올바른 프로그램 작성
능력과 머리속에 있는 알고리즘을 소스코드로 구현하는 것을 공부하는게 더 좋으며 이런 테크닉적 기술은 좀더 스킬을 쌓은 후에 익히도록 하자. 괜히 책에서 대리가 임베디드 최적화 작업하느라 쩔쩔매는게 아니다.
 
코드 최적화라는것은 가독성을 떨어트리는 행위다. 이 책에서 설명된 코드 최적화도 예외일 수 없다. 문학적 프로그래밍과 같은 우아한 프로그래밍 패러다임을 지향하며 실제 개발에서 적용하고 있는 프로그래머들이 보면 본인이 PC에서 프로그래밍을 하고 있다는게 다행이라고 생각할 수도 있다. 그들은 적어도 협소한 리소스때문에 몇바이트 아낄려고 코드를 고치거나 우아함을 해치진 않기 때문에.
 
리소스가 풍부한 PC에서는 전혀 필요없는 내용이 될 수도 있을 법 하지만 PC쪽에서도 충분히 이 책이 빛을 볼 수가 있는 부분이 있다. 게임의 엔진같은 빠른 속도를 요구하는 프로그램을 만들경우, 어셈수준에서 어떻게 코드가 작성되고 어떤 데이터 형식을 사용해야 속도가 더 빠르냐는 중요한 부분이다. 심지어 속도를 위해서 어셈코드를 직접 작성해 놓는 경우도 있으니... 이 책에서 언급된 for루프 횟수 줄이기, static 지역변수 사용하기 등은 이미 지난 1년간 회사 일을 하면서 적용해봤던 내용들이다.
 
어느정도 최적화를 수행하느냐는 프로그램을 개발하는 환경에 따라 다르겠지만, 자기가 훌륭한 개발자가 되겠다고 생각한다면 적어도 이 책에 있는 내용은 모두 숙지해야 하지 않을까?

이 책을 읽으며 생각해본적도 없는 최적화 팁이 당신을 즐겁게 해줄 지도 모른다. 내가 느꼈던것 처럼 :D

/*
지난 5월에 작성했던 리뷰, 역시
Yes24컴퓨터와인터넷 리뷰 클럽에서 작성한것이다.
서문을 읽다가 지도교수님 성함이 나와서 깜짝 놀랐었는데 알고보니 학과선배가 쓴 책!
*/
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by Mastojun