공부/읽은책2010/11/22 00:16
Google | Nexus One | 4.3mm | 2010:11:21 22:23:28

김익환, 『글로벌 소프트웨어를 꿈꾸다』, 한빛미디어, 2010


한빛리더스 마지막 미션 책으로 선택했던 글로벌 소프트웨어를 꿈꾸다.

국내 소프트웨어 회사가 수익을 더 확보하기 위해서, 더 많은 사용자를 늘리기 위해서는 글로벌 소프트웨어 회사를 꿈꿀 수 밖에 없다. 그만큼 국내 시장은 한계가 있고 이미 커질만큼 커졌다. 그래서 오래전부터 많은 회사들이 해외 진출을 노렸으나 성공했다는 이야기는 안타깝게도 아직까지 들어보지 못했다.

실리콘밸리 회사에서 근무한 경험이 있고, 현재는 ABC Tech의 대표이며 카이스트 겸직교수를 맡고 있는 김익환님이 자신이 직접 경험 했거나 수년간의 컨설팅 경험을 바탕으로 씌여진 이 책은 우리나라에서 글로벌 소프트웨어 회사라고 불리울만한 회사가 나오길 바라는 마음을 볼 수 있다.

책의 내용은 새로운것이 없다. 소프트웨어 개발에 관심을 가진 분들이라면 목차만 봐서도 책에 어떤 내용이 들어 있을지 짐작을 충분히 해볼만한 내용이다. 하지만 그렇다고 책의 의미가 없어지는 것은 아니다. 초등학교 도덕교과서에 있는 내용이 기초이고 중요하지만 이를 행하기는 매우 어렵듯이, 모두가 다 알고 있을 법한 내용이긴 하지만 이를 행하는 것은 매우 어렵다.

책을 읽고 나서 다시 한번 제대로된 소프트웨어 공학을 개발 프로세스에 적용해보려는 노력을 해본다면 저자가 책을 쓰는데 들인 수고에 대한 보답을 하는 길이 아닐까 한다. 단, 책에서 소프트웨어 공학의 중요성에 대해서는 얇은 책인데도 못이 박히도록 언급해 주셨지만 그 방법에 대하서는 설명이 안 되어 있으므로 이 부분은 염두해두자. (경우에 따라서는 필요 없는 책이 될수도 있겠다)

이번 학기에 소프트웨어공학이 개설되어 있긴 하나 지금까지 학교 다니면서 전공을 사랑한 덕분에 전공학점을 다 채워 수강과목에 넣지를 않았다. 소프트웨어 공학에 대한 중요성을 잘 모르기 때문이기도 했는데 랩실 옆자리 책장에 있는 소프트웨어 공학 교재를 읽어봐야겠다. 
저작자 표시
Posted by Mastojun
공부/읽은책2010/10/19 16:53
Google | Nexus One | 4.3mm | 2010:10:19 16:27:27

아오키 미네로우 저, 이영희 역, 『컴파일러 구조와 원리』, 한빛미디어, 2010


이번 한빛 리더스 5번째 리뷰 도서로 선택한 책은 "컴파일러 구조와 원리". 이번 학기에 학교에서 "컴파일러" 과목을 수강하며 컴파일러에 대해서 더 알고 싶어서 선정한 책이다. 어려울 거라는 생각은 전혀 하지도 못했던 지라 이번에도 책을 모두 다 읽진 못했다(ㅠ.ㅠ) 전공 관련 책을 볼 때 일본에서 출간된 책을 번역한 것을 보면 확실히 번역이 다른 언어권 국가의 책을 번역 한 것 보다 깔끔하다. 이번 책 역시 그랬다.

저자의 홈페이지를 찾아가 보니 일본에서 소개된 책의 제목은 "보통의 컴파일러를 만들자"란다. 한빛미디어에서는 "구조와 원리" 라는 다른 책들과 돌림자 맞추기를 한 모양인데, 어쩐지 좀 더 딱딱하게 다가온다. 책의 내용도 C언어 컴파일러를 완전히 구현하는 것이 아닌 몇 가지 기능을 제거하고 몇가지 기능은 구현하기 더 쉽게 바꾼 C♭을 만드는 것이기 때문에 "보통의 컴파일러를 만들자"가 더 와 닿고 센스까지 느껴지는 제목이다.

현재 수강하고 있는 컴파일러 과목에서 교수님이 선택하신 교재는 "컴파일러 입문" 이라는 책 인데 벌써 중간고사 (오늘 오전에 중간고사를 보았다. ㅠ.ㅠ)가 지났음에도 불구하고 언어형식에 대해서만 이야기하고 있다. 이해하기 어렵고, 이해한다고 해도 이게 컴파일러를 만들기와 무슨 상관인지 바로 연관시키기 어렵다. 시험기간 이란 것이 존재해서 교재를 정독 할 기회를 주지 않았다면 영원히 이해하지 못 했을 거다.

이 책은 보통의 학부 커리큘럼에서 다루는 이러한 컴파일러 이론은 다루지 않는다. 대신 컴파일러 제작의 실제적인 모든 내용을 다루고 있다. 컴파일러는 논리적으로 크게 두 가지로 나누어지는데, 어휘 분석과 구문 분석, 중간코드를 생성하는 전단부와 최적화, 목적코드를 생성하는 후단부가 그것 이다. 목차를 확인하면 알 수 있듯이 모든 내용이 이 책에 집약되어 있다. 

책은 컴파일 과정의 앞부분, 어휘 분석하는 단계부터 시작하여 실제 컴파일러를 제작하는 과정에서 어떻게 생각을 하고 왜 저런 코드를 썼는지, 왜 이런 제약사항을 두었는지, 왜 저런 제약사항은 고려하지 않았는지에 대한 설명과 함께 javaCC를 활용한 코드를 보여주기 때문에 책을 읽어나가며 하나하나 배우는 재미를 느낄 수 있다. 딱딱한 이론이 아닌 실제적인 코드를 이용하여 진행하기 때문에 더욱 수월한 느낌. 더군다나 C♭을 제작 하며(비록 C언어 에서 일부 제약을 둔 언어이지만) C언어의 사소한 문법을 이해하는데도 도움이 될 수 있는 책이다.

책을 여러권 번역을 했던 역자여서 그런지 번역은 매우 잘 되어 있다. 하지만 책을 읽으며 아쉬운 점이 있었는데, 번역이 너무 그대로 되어 있다는 점 이다. 한빛미디어의 도서 사이트에서도 예제 소스를 받을 수 있지만 일본어 사이트인 저자 사이트에 가서 소스를 받으라는 설명이 있는 부분이나 일본어 처리에 대한 설명은 있지만 한국어 처리에 대한 설명은 없는 점이 아쉽다. 역자 중에서 이러한 부분에는 역주를 두어 많은 설명을 해주는 분도 있는데, 이 책의 역자가 이런 부분을 배려해 줬다면 더 좋은 번역서가 되었을 꺼라 생각한다. 이 점이 0.2% 아쉬운 부분이다.
저작자 표시
Posted by Mastojun
공부/읽은책2010/09/15 17:13

한빛리더스 4번째 리뷰 도서로 선택한 책은 윈도우 프로그래밍(개정판) 입니다. 이번 리뷰도서는 모두 IT Cookbook 시리즈 였는데요, 개인적으로 이 시리즈를 자습용도로는 적당하지 않다고 생각하여 가장 익숙한 분야인 윈도우 프로그래밍 관련 책으로 선택을 하였습니다.

학부 2학년때 자료구조및 알고리즘을 IT Cookbook으로 수업을 한적이 있습니다. 그 책에 있는 엄청난 오타와 개인적으로 부족하다고 생각되었던 설명들로 인하여 IT Cookbook에 대한 인상은 그다지 좋게 가지고 있지 않습니다. 때문에 이 책도 별 기대는 하지 않았지요.

그러나, 이 책은 괜찮았습니다. 교재용의 책이지만 연습문제의 정답을 제공해주지 않는다는 것 빼고는 자습용으로 활용해도 큰 손색이 없을 정도로 내용이 알차다고 생각합니다. MFC내용 뿐만 아니라 어쩔 수 없이 API를 써야 하는 부분에 대한 설명과, 단순 컨트롤의 사용에 대한 내용만 다루는게 아니라 어느 정도 깊이의 MFC내부 구조도 설명 해주고 있습니다. 윈도우즈 프로그래밍을 잘 몰라도 이 책에서 설명해주고 있는 내용을 공부하고 책의 내용이 부족하다고 생각하면(이정도의 두깨에 모든 내용을 담는 것은 사실 무리가 있습니다) 관련 내용을 인터넷 등으로 검색한다면 윈도우즈 프로그래밍을 하는데 필요한 대부분의 지식은 습득 할 수 있다고 생각합니다.

책을 읽으면서 개발할때 이해 하지 않고 사용했던 코드들을 이해할 수 있는 부분도 있었고 아직 모르고 있는 내용에 대한 글을 읽으며 새로운 지식을 쌓을 수 있었습니다. 현장 팁을 통해서 교재용 책에서는 잘 다루지 않지만 유용한 방법에 대한 정보도 추가로 얻을 수 있습니다.

단지 많이 아쉬운 점이 있다면, 책이 Visual Studio 6.0을 기준으로 씌여져 있다는 것 입니다. Visual Studio 6.0은 지원할 수 있는 범위나 디버깅의 기능의 한계와 부정확성, C/C++의 표준을 준수하지 않는다는 점 등에서 대학교에서도 산업 현장에서도 그다지 쓸만한 프로그램이 아님에도 불구하고 아직도 많은 대학에서 Visual Studio 6.0을 기준으로 교육을 하고 있다는걸 안타깝게 생각하며, 잘못되었다고 생각합니다. 때문에 대학 교재부터 최신 컴파일러를 이용하여 탈 Visual Studio 6.0을 유도해야 한다고 생각합니다.


저작자 표시
Posted by Mastojun
공부/읽은책2010/08/09 02:45
RICOH | Caplio GX100 | Normal program | Pattern | 1/30sec | F/2.5 | 0.00 EV | 5.1mm | ISO-141 | Off Compulsory | 2010:08:08 22:02:17

개리 로스트 비라드스키, 에이드리안 캘러 저, 황선규 역, 『OpenCV 제대로 배우기』, 한빛미디어, 2009


한빛리더스 3번째 미션 도서로 선택한 책인 OpenCV 제대로 배우기. 컴퓨터 비전에 대해서 궁금함 때문에 선택을 했었습니다. 컴퓨터 그래픽스와 영상처리는 학부과정에서 수강을 해봤지만 컴퓨터 비전은 배워본적이 없었기 때문이였는데요, 먼저 밝히지만 사실 이 책을 다 읽지 못하였습니다. 개인적인 사정도 있었고 오라일리 책이 거의 그러하든 책의 난이도가 제법 있었던 점도 핑계가 될 수 있을려나요. ^.^;

이 책은 OpenCV의 배포처 에서도 공식으로 알리고 있는 책입니다. 하지만 최신 버전이 2.0이 넘었지만 이 책에서는 1.0을 기반으로 다루고 있습니다. 이는 원서가 나왔을때, 심지어 번역서가 나온 시점(2009년 9월)에서도 OpenCV의 버전이 1.x대 였으므로 어쩔 수 없긴 합니다. 

전부 읽지 않아 감히 뭐라 평가하긴 힘들겠지만, 이 책의 가장 훌륭한 점은 꼼꼼한 역자의 배려라고 생각합니다. 서문에서 번역의 품질을 높이기 위해 노력을 했다고 밝힌 것 처럼 많은 역주와 잘못된 소스코드의 수정, 그리고 소스의 이해를 돕게끔 호출부가 있는 main함수을 포함한 전체 소스를 제공해주려고 일부 노력한 것과, 예제 소스를 다른 방법으로 더 간단하게 하는 방법을 설명해 주기도 하였고, 프로그래밍 초보자들도 Visual Studio에 OpenCV로 개발 할 수 있도록 세팅을 할 수 있는 방법을 설명해 놓은 2개 분량의 부록을 추가해 주었습니다. 이런 역자의 배려는 책을 더 쉽게 이해하는데 도움이 된다고 생각합니다.

컴퓨터 비전에 대한 지식이 없다면 책을 읽기가 수월하진 않을듯 합니다. 이 책은 컴퓨터 비전에 대한 이론을 제공해 주기 위한 책이 아닌 OpenCV를 설명하기 위한 책 이기 때문에 OpenCV로 컴퓨터 비전 프로그래밍을 하기 위한 레퍼런스 용의 책으로 이용하기 가장 적당한 책이 아닌가 생각이 듭니다.


저작자 표시
Posted by Mastojun
공부/읽은책2010/07/07 23:53

김민장, 『프로그래머가 몰랐던 멀티코어 CPU 이야기』, 한빛미디어 2010



한빛리더스 2번째 미션 도서로 선택한 책은 김민장님이 저술한 "프로그래머가 몰랐던 멀티코어 CPU 이야기" 라는 책입니다. 이번에도 책을 쉽게 골랐는데, 리뷰 도서로 선택할 수 있는 책 중 "데이터베이스 관리와 실습"은 데이터베이스는 크게 관심이 없으며 IT CookBook은 정답이 제공되지 않은 대학용 교재라 패스했고 "쾌속 TDD"는 왠지 자바 위주로 될것 같다는 편견을 가지고 있어서 패스 했으며(실제로도 그렇답니다) 선택한 도서의 "프로그래머가 몰랐다"는 프로그래머에겐 약간 도발적인 제목과, 내가 실제로 모른다는 현실 때문에 바로 선택 했습니다.

지난 리뷰 도서였던 "루비 프로그래밍 언어"를 끝까지 다 읽지 못해서 이번엔 모두다 읽고자 제대로 계획을 세웠습니다. 워낙 책을 읽는 속도가 느린데다가, 미션으로 오탈자 까지 찾아야 하기 때문에 최대한 꼼꼼히 읽고 기왕 읽는 김에 책에서 전해주는 내용을 모두 습득 하려는 마음을 단단히 먹고 읽어나가기 시작했습니다. 결국 리뷰 마감날 하루 전인 오늘까지 읽었지요.

Blog2Book 시리즈는 이번이 두번째 보는 책입니다. 지난번에 읽었던 책은 이 시리즈의 4번째 였던 "임베디드 프로그래밍 C코드 최적화"라는 책 이였어요. 어려운 주제를 쉽게 잘 풀어 썻고 내용 중간 중간에 있었던 대화 형식의 구성 덕분에 더 편안하게 책을 읽었던 기억이 있어서 이번 책도 그러한 느낌이 들 것이라는 기대를 가지고 책을 받아 보았습니다.

책 제목이 '멀티 코어'지만 처음부터 멀티코어에 대해서 이야기 하지 않습니다. 대부분의 컴퓨터전공 학부 과정 때 컴퓨터 구조 수업등의 수업을 통해 배우지만 프로그래밍을 하는데에 그 내용중 크게 필요한 것은 얼마 없기 때문에 잊고 살아갈, 기초적인 프로세서에 대한 이야기 부터 친절히 알려줍니다. 때문에 기존적인 싱글코어 구조도 기억 나지 않는데 멀티코어는 무슨~ 하고 생각하시는 분들도 걱정하지 말고 책을 읽으셔도 됩니다.

이 책에서 가장 좋았던 점은 딱딱한 하드웨어 인줄만 알았던 CPU의 내부 동작은 순수히 소프트웨어 적인 알고리즘을 바탕으로 작동 한다는 것을 알려주고, 실제 적용 되어 있는 알고리즘을(간략화 해서) 소개해 주고 있다는 것 입니다. 학부 저학년 때 AND, OR, 플립플롭, 7-Segment을 가지고 브래드 보드 가득히 소자를 꼽고 복잡하게 점프선을 연결해 계산기를 만들었던 기억이 있는데, 이 역시 소프트웨어적인 알고리즘을 하드웨어로 구현한 것 이였습니다. 크게 생각해 보면 하드웨어의 내부 구현이 소프트웨어적인 알고리즘 이라는 것은 당연한 것입니다. 하지만 실제로 동작하는 방식을 알게 되는 것은 색다른 경험 이였습니다.

싱글코어 CPU에서의 처리 속도 증가를 위해 도입한 파이프라인부터 현재도 활발히 연구 중인 프리펫칭까지 CPU에서의 다양한 최적화 기법과, 컴파일러가 프로그램 실행속도의 증가를 위해 수행하는 최적화 작업이 얼마나 복잡한지 엿볼 수 있는 이야기가 책 전반에 걸쳐 소개되고 있습니다. 마지막 부분은 멀티코어CPU로 인해 발생할 수 있는 버그들과 그 해결책, 그리고 보다 쉽고 완벽한 해결을 위해 연구중인 내용이 소개되어 있습니다. 멀티코어CPU 환경에서의 개발에 잔뼈가 굵은 개발자 들이 보면 이 부분은 시시한 내용일 수 있으나 경험이 풍부하지 않은 독자라면 자신이 저질러 고생해 본적이 있는 버그와 해결방법을 확인하며 왠지 모를 반가움을 느낄 수도 있습니다. (전 그랬어요 ^.^;)

평소에 잘 인지하지 않은 하드웨어에 관한 이야기가 내용에 비해 적은 페이지에 걸쳐 이야기 되고 있기 때문에 이해하는데 만만하진 않습니다. 리뷰로 이렇게 주저리 주저리 써 놓았지만 책 내용중 일부를 자세히 설명해 달라고 하면 설명할 자신이 없습니다. 그만큼 저에겐 한번에 받아들이긴 쉽지 않은 내용들 이였습니다. 대부분의 용어가 한번 소개되고 약어로만 적혀 있어서 읽어 내려가는 것도 수월하지가 않았습니다.

무엇보다 이 책에서 아쉬운 부분은 전반적으로 오탈자와 오류가 있다는 것과 번역서에서 볼 수 있는 어색한 문장들이 눈에 띈다는 점 입니다. 하지만 다행히도 이달에 이 책을 리뷰하는 한빛리더스 분들이 오탈자를 열심히 찾아 준 덕분에 2쇄에서는 보다 읽기 편하고 오류가 거의 없는 책이 될겁니다.

끝으로, 

이 책에서 알려주는 하드웨어의 내부 구조와 동작 방식을 제대로 이해 한다면 현재 개발중인 프로그램(멀티 코어 환경에서 돌아가는 프로그램을 작성한다면 더욱)의 성능을 좀 더 끌어 올릴 수 있는 힌트를 발견 하실지도 모릅니다. 이 점에서의 이 책의 가치는 분명합니다.

저작자 표시
Posted by Mastojun
공부/읽은책2010/02/12 01:33


뉴욕의 프로그래머 임백준씨의 신간. 한빛 미디어에서 예약 배송을 할 때 구입을 해서 여태까지 읽었다.

이 책에서는 다양한 퀴즈들, 쉽게 인터넷에서 접할 수 있는 류의 문제들 부터 오랜 역사를 가지고 있는 퀴즈 거장들이 만들어낸 다양한 퀴즈들을 담고 있다. 그중 일부는 한빛 미디어 홈페이지 에서   확인해 볼 수 있도록 공개 되어 있으니 이 책에서 담고 있는 내용이 어떤 형식의 퀴즈 들인지 확인해 보고 싶은 분들은 일 부 라는 글을 하나 하나 클릭해 보시길..

임백준씨의 책은 너무 어렵지도 그렇다고 아주 쉽지도 않은 책으로 공부를 하다가 혹은 일을 하다가 가끔 머리 식힐겸 보기 딱 안성 맞춤인 책들 이기 때문에 나올 때 마다 찾아 보고 있는데, 이 번 책 역시 만족 스럽다. 단, 평소에 퀴즈를 좋아 했던 분들은 이 책이 다루고 있는 대부분의 퀴즈를 본 적이 있거나 심하면 정답을 이미 알고 있는 내용 일수 있으니 구입하기 전에 살짝 떠들어 봐주는 센스도 필요 할 듯 싶다.

이 책을 읽는 동안에 책에 잘못된 점을 발견하여 임백준 씨께 메일을 보냈는데 하루도 안되서 친절한 답변이 날라오는 걸 보고 깜놀. 내가 지적해 드린 내용은 2쇄에 반영한다고 한다. 조그만하게 내 이름이라도 씌였으면 싶지만 이 책을 읽는 다른 독자들도 지적했을꺼 같으니 기대는 하지 않는 편이 낫겠다 =_=..

너무도 쉬운 문제도 있었으며 도저히 생각을 해도 해법이 떠오르지 않은 문제도 많았다. 해법을 읽어도 와닿지 않는 내용도 있었으며 해법을 읽고 그 기막힘에 감탄을 하여 한동안 멍하게 감상에 젖어 있었던 문제도 있었다. 핑계일지 모르지만 이런 덕분에 책의 두께에 비해서 생각보다 진도가 더디게 나가게 되었다.

누워서 읽는 퍼즐 북 밑에 있는 책은 Q.E.D. - BEAUTY IN MATHEMATICAL PROOF 라는 책으로 퍼즐북 내용에서 소개 되어 있길래 찾았는데, 처음 구입을 할 때는 원서 이긴 하지만 수학 증명이 주된 내용일 꺼라 생각을 하여 별 어려움 없이 읽을 꺼라 여겼다. 하지만 받아서 펼처보니, 왠걸, 증명이 거의다 서술형이다. ㅠㅠ. 몇페이지 되지 않은 얇은 책임에도 불구하고 난 읽는데 오래 걸릴듯 하다. 아니, 지금 하고 있는 영어 공부로 영어와 어느 정도 친해져야 읽기 시작할듯.
저작자 표시
Posted by Mastojun
TAG 임백준
공부/읽은책2009/02/25 22:52

설득이라는 단어를 사전에서 찾아보면 [명사 - 상대편이 이쪽 편의 이야기를 따르도록 여러 가지로 깨우쳐 말함. ] 이라고 나온다. 하지만 설득의 심리학에서는 이처럼 "말함" 에 해당하는 내용만 있는게 아니다. 더 넓은 개념으로 말로든 상황으로든 무엇으로든 간에 "마음을 움직이는"방법을 설명하는 책이다.

혹시 이런 경험이 있지 않은가? 내가 인식하지도 못한 사이에 상품에 대한 호감이 생긴다던지 왠지 거절하기 힘든 요청을 받을때가. 당신은 십중팔구 설득의 원칙에 지배당했다.

이 저자도 '내가 왜 설득을 당한거지?' 라는 의문에서 연구를 시작했다. 그래서 각 설득의 법칙을 서술한 장의 마지막엔 "자기 방어 전략" 이 같이 실려있다. 그 설득의 법칙에 당신은 당하지 않기 바라는 마음으로.

무언가 장황하고 길게 이 책에 대해서 글을 남기고 싶어서 1월 22일부터 글을 쓰려 노력했지만 검색엔진에 책 제목만 입력하면 수많은 훌륭한 서평이 있으니 참고하길 바란다. 절대 책 읽은지 오래되어 기억 안나 말하는게 아님.

......... 다시 읽어볼까..
Posted by Mastojun
공부/읽은책2008/10/15 22:07


제랄드M. 와인버그, 『프로그래밍 심리학』, 인사이트, 2008


프로그래밍 심리학

올 초에 번역되어 나온 책으로 번역서가 나온지 얼마 안되어서 구입했는데 이제야 다 읽었다. 회사 책장에 두고 시간날때마다 틈틈이 (가끔 일 안하고 책읽는다고 혼나기도 했던 ㅠㅠ)읽느라 이렇게 오래 걸린듯.

프로그래밍을 하는 프로그래머에 초점을 맞추어서, 그들의 행동이나 프로젝트 진행에 있어서 일어나는 여러가지 사건들을 심리학적(관리자나 프로그래머나 머신 운영자등의) 인 측면에서 분석한 내용이 담겨져 있는 책이다. 인간을 다루는 심리학이란 측면에서 다루었다는 점에서 값어치가 있는 책. 이 책 이전에 그런 시도를 했던 책은 물론 없을테고, 이 책 이후에도 이정도로 프로그래밍이라는 행위를 심리학적인 측면으로 다룬 책이 별로 없다(사실 그렇게 알고만 있을뿐이다)프로그래머로 일하고 있는 사람이라면 읽으면서 공감과 재미와 감동을 동시에 느낄 수 있는 책.

놀라운 점은 이 책이 처음 쓰여진게 1971년도 라는 것. PL/1이라던지 천공카드에 구멍을 뚫어 프로그래밍을 하는 내용이 많은것도 그 때문이다. C언어가 세상에 나오기도 전에 쓰여진 책이므로 지금 많이쓰이는 언어들중 하나이면서 제법 오래된 C언어에 대한 언급조차도 없다.(출간한지 25년 뒤에 25년 기념판을 내면서 각 장마다 보태는 글을 추가 했는데 거기에선 잠깐 C언어를 언급한다) 그렇게 오래된 책인데도 불구하고 내용이 오래되어 쓸모 없거나 현 시대에 너무 맞지 않아 문제가 되는게 없다는 것이다. 이는 바로 프로그래머 라는 사람 자체에 초점을 맞추고 이를 분석한 책이기 때문이다.

비록 초판이 나온지 40년이 다 되어가기 때문에 일부분 지금과 맞지 않는 내용이 있는건 사실이지만 그렇다 치더라도 이 책은 앞으로도 몇십년은 더 읽힐 수 있는 책임에 분명하다.
Posted by Mastojun
공부/읽은책2008/07/15 12:42
사용자 삽입 이미지

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

Posted by Mastojun
공부/읽은책2008/06/03 23:07
임베디드 프로그래밍 C코드 최적화

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


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

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

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