[책 리뷰] 가지고 싶지만 쉽게 가질 수 없는 이상형 : 만들면서 배우는 리스프 프로그래밍

TV에 나오는 연예인과  사귀는 것을 꿈꿔본 적이 있을겁니다.  내 여자친구가  소녀시대라면 내 여자친구가 김태희, 혹은 한가인이라면… 하지만, 현실은 그렇지 않습니다. 이상형은 이상형일 뿐이라는 것을 알게 되죠 ^^, 저에겐 Lisp이라는 언어가 그런 이상형입니다. 절차형 언어와 함수형 언어는 동양 철학과 서양 철학의 개념처럼 멀리 떨어져 있습니다.

그런데 절차형 언어를 배우던 사람이 함수형 언어를 배우기가 쉽지가 않습니다. 얼마전에 “당신이 영어를 못하는 진짜,이유” 라는 다큐멘터리를 보았는데, 그 와 비슷한 것 같습니다. 몇 년을 공부해도, 자신감과 뇌속의 깊숙한 곳에 넣어서 절차 기억으로 만들지 못하면, 제대로 쓸 수 없다라는 것. 혹자들은 Lisp는 쉽다고 하시는데, 엄청난 연습이 필요할 것 같습니다. 절차형 언어를 배울때도 마찬가지입니다.

저의 Lisp에 대한 도전은 사실 큰 노력이 없었습니다. SICP, How To Design Programm, Clojure, Haskell 등 책을 사고, 스터디도 했지만, 사고를 Lisp 적으로 바꾸는 것, 항상 이것을 제대로 하지 못했습니다. 결국 연습이 부족했다는 것이죠.

“만들면서 배우는 리스프 프로그래밍” , “Land of Lisp” 은 Lisp 입문서 입니다. 쉽게 스여있고, 아직까지도, caddr, cadadr 같은 것은 좀 더 고민해야 하지만,  간단한 예제들 부터 시작해서, 좀 더 복잡한 예제까지, 약간 규모가 있는 예제들을 보여줍니다. 제 개인적으로도 아주 작은 예제들이 있는 것과, 꽤 끈 규모가 있는 것들 중에서, 작은 규모에서는 문법을, 큰 규모에서는 어떻게 사고해야 하는가를 배웠던 것 같습니다.(아 Lisp 얘기는 아니고, 다른 언어들에 연관된 책들 얘기입니다.)

Lisp 이라는 얘기를 들으면, 일반적으로 Side Effect 가 없다라고 많이 생각합니다. 여러 변수들의 값이 Set 후에 바꿀 수 없기 때문인데, 책을 보면서, 시작과 동시에 defparameter 를 가르쳐 줘서, 잠시 당황하기도 했습니다. ^^

이 책은 지금까지 나왔던, SICP나 scheme을 다루던 책들과는 달리 Common Lisp을 다룹니다. (뭐, 그래도 별 차이는 없습니다. 둘 다 이해 안되요. T.T)  어떻게 보면 이제 새롭게 인기를 끌고 있는 함수형 언어로써, Erlang, Clojure 등을 배워야 하지 않을까 라는 생각도 듭니다만, 아까 말한 대로, Lisp으로 가기 위해서는 우리의 뇌를 함수형에 익숙해지도록 하는 것이 필요합니다. 그럴려면, 쉬운 책을 보면서 계속 반복학습 하는 것이 좋을 꺼 같습니다. Land Of Lisp은 국내에 번역된  Lisp 책 중에서, 가장 쉽습니다.( 국내 번역된 Lisp 관련 책은 전부 사서 봤습니다만, 제 머리속에는 아직 하나도 안남아있습니다. ) 그렇다고, 이 한 권 읽어서 Lisp을 과연 마스터 할 수 있을까는 또 의문입니다. 결과는 열심히 연습해야지만 가능하겠죠.

제 개인적인 2012년의 목표는 Lisp 관련 함수형 언어를 하나 정도 마스터 하는 것입니다. 일단 이 책을 반복해서 보고, 연습하는 걸 그 목표로 하려고 합니다.  여러분도 Lisp 나라로 함께 여행을 떠나보는게 어떨까요?

[책 리뷰] 인생은 속도가 아니라 방향이다.

웬지 제목이 멋있어서 읽게 되 책, 지은이는 한국인이 아니지만, 한국에 오래 산 미국인, 임마누엘 페스트라이쉬 라는 경희대 교수님이시다.

 

외국인의 눈으로 우리 사회를 본다는 것이 독특한 시각일 것 같지만, 도리어, 의외로 깊은 곳까지 제대로 들여본 것 같다.

 

자신이 생각하는 교육의 모습과,  자신이 받은 교육, 그리고 자식들에게 하고 있는 교육의 방식을 보여주는데, 애기도 없는 나지만, 꽤 공감이 간다고 할까나?

 

그러면서 나도 의문이 들었다. 한국의 대학생이나 대학원생들은 MT를 가면 왜 술만 마시고 노는걸까?, 저자의 경험으로 미국의 대학생( 상위 10%는 미국이 훨씬 낫고, 하위 40%는 한국이 낫다라는 저자의 의견이 있다. ) 들은 MT를 가면, 철학적 인문학적, 기술적  내용에 대한 깊은 토론을 하면서, 시간을 보낸다고 한다. 왜 이런 차이가 나는 것일까?

 

동양의 문화는 서양을 경외시하고, 서양의 문화는 동양의 문화를 경외시하는 그런 부분도 흥미롭다.  기억에 남는 몇가지가, 우리의 문화를 누군가에게 설명할 때, 이게 국보다,  보물이다는 중요하지 않다는 것, 백제 시대의 유물에 코끼리가 있는 것을 보여주며, 이 시대에 코끼리는 국내에 없었지만, 외국 어디와 교역을 해서, 선물로 받았거나, 해당 동물에 대한 지식을 얻었고, 이 지식이 다시 일본으로 전파되었다 등의 이런 내용에 더 관심을 가진다는 것… 정말 중요한 본질을 우리는 도리어 신경쓰지 않고, “타이틀” 이라는 것에만 관심을 가지는 건 아닐까? 그리고 이 모습이 현재 우리의 모습에 여전히 남아있는 것처럼 보인다.

 

인문학, 인문학 하지만, 인문학이란, 노자가 어떻고, 장자가 어떻고, 러셀이 무엇을 말했는가가 아니라,  그들이 어떻게 사유하게 되었고, 의문을 가졌는가를 배우고, 나는 어떻게 사유해야 하는지에 대한 “영원한 물음” 이 아닐까라는 생각을 들게 해준 책이다.

[책 리뷰] 카산드라 완벽 가이드 – 원서보다 최신의 번역서

현재 NoSQL 카산드라 책은 원서로 딱 2권이 있습니다. 한권이 Cassandra High Performacne Cookbook (http://www.amazon.com/Cassandra-Performance-Cookbook-Edward-Capriolo/dp/1849515123/ref=sr_1_2?s=books&ie=UTF8&qid=1321701626&sr=1-2) 이라는 책이고 나머지 한권이 O’relly에서 유명한 Cassandra The Definitive Guide 바로 이 책의 번역서 입니다.

사실 원서의 내용은 0.7 베타 버전을 대상으로 작성이 되어있어서( 최신버전 1.0.3이 바로 어제(2011/11/18) 릴리즈되었습니다.  사실 카산드라의 버전을 단순히 높은 것이 좋다라고 말하기는 힘들지는 현재 대세가 0.8.6( 0.8.7 까지 나오고 있고, 현재 0.7 버전은 0.7.10 까지 계속 나오고 있습니다. 버전이 높을 수록 새로운 기능이 들어가긴 하지만, 다른 버전이 무조건 나쁘다고 할 수 없는 구조입니다.) ) 원서의 내용을 그대로 역자분들이 번역을 하셨다면, 별 의미가 없는 책이 될 뻔 하였지만, 역자분들이 예제와 책의 내용을 0.8.x 버전대로 다시 바꾸고 수정하셔서 원서보다 더 최신의 번역서라고 감히 말씀드릴 수 있을 듯 합니다.

사실 0.7 베타까지는 Secondary Index(0.7에 추가) 와 CQL(0.8에 추가, Cassandra Query Language <– 일종의 SQL like) 가 없었기 때문에 이쪽 부분이 추가되는 건 쉽지 않은 번역이었을 것 같습니다. 역자분들에게 박수를~~~

일단 내용 자체는 “The Definitive Guide” 답게, 메뉴얼 같은 느낌입니다. 다만, 카산드라를 도입하고자 하는 사람들은 꼭, 3장 5장을 주의깊게 읽어보시길 바랍니다. (그렇게 심도 있게 있지는 않지만, SSTable이라든지 블룸필드라든지 기본적으로 알고 넘어가야할 내용들이 나옵니다.)

NoSQL 의 경우 현재 mongodb와 hbase가 강력한 텃세를 부리고 있긴 하지만, Cassandra도 Netflix 등의 대형 업체에서 엄청 잘쓰고 있기 때문에, 굉장히 좋은 솔루션입니다.( P2p 모델이라 hbase 와 는 또 다른 장점이 많습니다.)

이 책을 다 읽고 숙독한다고 해서, 카산드라를 완벽하게 다룰 수 있는 것은 아닙니다. 다만, 이 책의 내용 정도는 알아야, 이제 삽질할 준비가 되어있다라고 말할 수 있습니다.

[책 리뷰] “기분 좋은 한 권” – 자바 스크립트 최적화

먼저, 솔직하게 말을 하자. 나는 자바스크립트는 이름이 자바 스크립트라는 것과, alert로 창을 띄워주거나, onClick 이벤트를 주거나, 이정도 밖에는 모르는 사람이다.(사실 아예 모른다고 말해도 틀린 말은 아니다.)

“자바스크립트 성능 최적화” 라는 멋진 이름을 보면서, 과연 이걸 내가 읽고 이해할 수 있을까 라는 생각을 했었지만, 다 읽고 나니, 내가 좋아하는 만화책에 나오는 “기분 좋은 한끼” 를 먹은 것 같은 느낌을 가질 수 있었다.

일단, 자바 스크립트는 인터프리터이고, 컴파일러와 다르다. 구글의 V8이 나오면서 JIT 기술이 들어갔다고 하더라도, 일반적인 C 컴파일러 최적화와 자바스크립트의 그것은 다르다고 할까? 이런 느낌으로 초반부를 읽었다면, 뒷 부분은 또, 비슷하구나 싶은  느낌을 주는 책이었다.

자바스크립트의 초보자인 내가 읽고, 아, 그렇군,이라고 말 할 정도로 이해하기 쉬워서, 전문가들은 대부분 알고 있지 않을까라는 생각이 들긴 해서, 전문가의 의견도 필요할 것 같지만, 일단 이 책을 읽고나면, 처음부터 자바스크립트로 어의 없는 실수를 줄여 줄 수 있을 것이라고 생각한다.

다만, 자바스크립트의 문법이라든지, 이런 예보다는, DOM을 접근하는 것보다는 자바스크립트 쪽에서 동작하라. 파일은 어떻게 분리하라, Variable의 Scope는 어떻게 찾고, 어떤 순서로 접근하는 가에 대한 내용이 많아서, 자바 스크립트 책이라는 느낌이 조금 덜 들 수도 있을 것 같다.

하지만, “기분 좋은 한끼” 가 아닌 “기분 좋은 한권” 이라고 부르고 싶을 정도로 멋진 책이다.

[책 리뷰] iOS4 Programming Cookbook

잠시 아이폰 프로그래밍을 한 적이 있지만, 벌써 1년 반 정도 지난일이라, 기억이 가물가물하지만, 관심의 끈을 놓고 싶지는 않아서, 이 책을 보게 되었다.  처음에는 135개의 Tip 이 있는 것으로 생각을 했는데, 구성이 주제별로 모아서 그런것인지, “Cookbook” 과 “Hack” 의 차이를 내가 몰라서 그런것인지, 그 주제에 대한 Tip 의 나열이 아니라, 하나의 장은 하나의 주제로 쭈욱 이어진다는 느낌이 들었다.

 

6장의 네트워크 연결과 XML 만 봐도, Tip 들이라고 하기 보다는 Network 연결을 이용하는 방법과 XML 을 어떻게 이용하는지, 기본적인 NS 관련 함수들을 들어가면서 설명을 해주고 있다. Tip 이라면 사실 DOM 보다는 SAX만을 이용하라 이런식으로 나올 것으로 생각했었다. 왜냐하면, 아이폰에서 기본적으로 사용할 수 있는 메모리가 20M가 정도인데 DOM의 경우, 최초에 데이터가 적을 때는 상관없지만, 어느 순간, 20M를 넘어서 데이터 파싱하다가 프로그램이 종료될 수 있기 때문이다. (사실 프로그래밍을 해본 사람들 한테, 어느 정도 기본적인 사용법을 이용하면, 그 플랫폼의 특성에 대해서 이해를 하는 것이 이런 제한들에 대해서 알게 되는 것이기 때문이다.)

 

보통 이런 류의 책은 기본적인 부분은 파악이 되었을 때, 읽는 것이 좋은데,  그래서, 자신에게 필요한 부분이 있을 때, 그 장 부터 읽는 것을 추천해주고 싶다. 내용을 보면, 각 장의 내용에 대해서, 초보적인 수준보다는 좀 더 개발자가 많이 고민하고 확인해야 하는 내용들이 있는데, 9장의 어드레스 북 부분을 보면, 예전에 주소록 관련 함수들을 애플 개발자 문서를 보면서, 열심히 찾아서 이것 저것 테스트 하던 내용들이(영어를 몰라서), 들어 있는 것을 보고 좀 분개했다.(뭐, 그 때는 몇년 전이고, 이 책은 원서가 올해 2월에 나온 책이니 T.T)

 

마지막으로 원서 자체가 올해 2월에 나온 책이라, 내용 자체는 꽤 최신(?) 내용인데, 이제 iOS5 가 나오고 애플에서 가이드 하는 내용들이 조금 바뀐 내용들에 대해서는 가이드 되어 있는게, 살짝 아쉽긴 하지만, 초보에서 좀 더 심도 있게 아이폰 개발 내용을 알고 싶은 독자들에게 도움이 될듯 하다.

[책 리뷰] MongoDB 완벽 가이드

  먼저 우리는 MongoDB를 몽고 디외쿡 노란머리 아저씨들은 망고 디비 라고 읽는다는 걸 말하고 싶다. 뭐,  어떻게 읽는지는 상관 없지만 ^^. MongoDB는 현재 NoSQL 진영에서 가장 hot 한 프로젝트라고 해도 과언이 아니다. 10gen 이라는 곳에서 만들었고 현재 최고의 레퍼런스는 위치 정보를 저장해 주는 포스퀘어 입니다.

MongoDB가 각광 받는 이유는 MySQL과 같은 기존 RDBMS 대비 빠른 처리 속도와 위치 정보 처리, 타 NoSQL 대비 설치 및 사용의 간편함이 있습니다.

반대로, 언어별 드라이버에 따른 사용법이나 기능의 차이는 MongoDB를 약간 꺼려하게만드는 원인입니다.

이런 MongoDB에 대해서 전체적으로 한번 훝어주는 책이 MongoDB 완벽 가이드입니다. 즉, 이 책 한권으로 MongoDB의 설치/시동/사용법 까지 한번에 배울 수 있습니다.

다만, 이 내용만으로는 실서비스에서 완벽하게 운영하기에는 많이 부족합니다. 쿼리를 사용할 때, 인덱스를 어떻게 사용해야 제대로 사용할 수 있는지, 또는 비슷한 쿼리라도 어떻게 써야 성능이 더 좋은지 등은,  조금 부족한게 아쉽습니다. 또, 번역도, 전체적으로는 순탄하지만, 가끔씩, 열심히 고민해야 하는 부분이 한두 군데 있어서, 혼자보는 것 보다는 스터디로 공부하는 것을 추천해 드립니다.

뭐, 이렇게 많이 아는 척을 했지만, 실제로 NoSQL 이나 대용량 처리쪽은 운영을 직접 해보지 않고, 책만으로 알 수 있는 부분이 적은 분야입니다. 항상 책은, 처음 시작하는 방법만을 알려주는 것들이라, 깊은 부분은 실제로 운영해보고, 직접 장애를 만나봐야, 진정 알게됩니다.

MongoDB에 대한 자세한 한글 서적은 유일하게 이 책 뿐이므로, 일단 이 책과 함께 MongoDB를 시작하시길 추천드립니다.

[책 리뷰] 디퍼런트 – More가 지배하는 세상에서 사람들은 Less를 원한다.

 More가 지배하는 세상에서 사람들은 Less를 원한다. 웬지 이 책에서 가장 감명 깊게 기억나는 구절이다. 이 책 역시, 차별화를 외치는 다른 책들 처럼, 약점을 강화하는 것보다는, 강점을 차별화시켜, 1st 가 아닌 Only one 을 택하라는 이야기를 하고 있다.

그러면서 수많은 사례들을 들고 있는 데, 많은 사람들이, 자신의 약점을 채우고, 강점은 강화하려는 생각들을 가지고 있다. 그렇다면, 먼저, 자신의 장점과 약점은 어떻게 파악해야 할까?

그런 생각을 하면서 책을 읽으니, 가슴 한 구석이, 답답해져왔다. 나의 강점은 무엇일까? 이 책을 읽으면서, 한 카테고리 안에서 제품들이 모두 어느 정도 수준 이상으로 올라오게 되면, 고객들은 그 제품을 보는게 아니라, 그 카테고리로 인식해 버린다는 것이다. “아, 햄버거나 먹자!” 라고 한다면, 맥도널드나 롯데리아 등이 아니라, 그냥 햄버거이다.  하지만, 각각의 개별 업체들은 자신들이 경쟁사 보다 우월하거나 독특하다가 믿고 있다. 이런 부분에서, 나 역시 내 자신을 카테고리 안에서 고객들이 보기에는 모두 동일하지만, 나 스스로만 다르다고 생각하는 건 아닐까 하는 생각이 들었다.

애플은 다르다. 이런 얘기를 많이 하듯이, 애플 역시, 카테고리 안에서 비슷해지기 보다는, 새로운 시장을 만들어 버렸다. 이 책에서는 이렇게 자신만의 새로운 시장을 찾자고 말하고 있다. 그렇다면, 이 새로운 시장은 어떻게 발견하는 것일까? 아직의 나는 이 부분을 잘 모르겠다.

[책 리뷰] 33M 소셜 네트워크 성공스토리

33M 소셜 네트워크 스토리, 제목이 뭔가 독특하지 않은가?

33M의 뜻이 무엇일까 고민했었는데(사실 처음에는 3M의 오타인줄 알았다. 그래서 3M 내부의 소셜 네트워크 성공기인 줄 알았다는)

33 Milion People 의 약어였다.

이 책에서는 소셜미디어를 활용하는 다양한 예를 보여준다. 페이스북, 트위터, 링크드인,  심지어는 골드코프라는 캐나다의 금광 업체까지 예로 나온다. 일반적인 우리의 입장에서는 트워터나, 페이스북, 아직 국내에서는 많이 사용하지는 않지만, 인력 공유 사이트와 같은 링크드인 정도가 전부라고 생각했는데, 골드코프나, 디자인 1위의 제품만 생산해서 판매하는 그런 업체, 이 책에서는 단순히 소셜이라는 것이 유명한 소셜미디어가 아닌, 소셜을 어떻게 실제로 이용했는지에 대해서 소개를 하고 있다.

소셜에서 사실 가장 중요한 부분은, 어떻게 관계를 만들고, 피드백을 주고 받을까 인데,  아직, 이런 부분에 대해서는 잘 이해하지 못했다. 사실 이런 부분을 잘 알게 되면, 이런 책이 필요 없을지도…

결국, 소셜에서도 성공하는 사람은 착실하게 자신의 평판을 관리하고, 새로운 그리고 특별한 컨텐츠를 계속 생성해내야만, 성공할 수 있다는 것을 보여주고 있다. (뒷부분의 이런 소셜 미디어가 아닌 소셜 자체를 잘 이용하는 방안은 꼭  읽어보면 좋을듯 하다는 )

[책 리뷰] 초보자를 위한 새로운 시작 Head First Programming

처음에는 이 책이 파이썬 책이라고 생각하고 고르게 되었다. 파이썬에 관심도 있었고, 또한 좌절한 경험도 있는지라, 파이썬 책이라 괜찮겠군이라는 생각을 가지고 거기다가 목차에 트위터 관련 내용도 있는지라, 책을 고르게 되었는데, 거기다가, 내가 좋아하는 Head First 시리즈라는 것!!!, 선택을 미룰 이유가 없었다.

그러나 그래서, 그리고 !!! 부제를 간과해 버렸다. “파이썬으로 처음 배우는 프로그래밍” 이라는 것!!!, 즉, 내가 파이썬 초보자긴 하지만 프로그래밍 초보자가 아니라는 부분, 기본적인 파이썬 문법은 알고 있다는 점에서 나에게는 적합하지 않은 책인 것이다.

그러나, Head First 의 소개 방식 자체가, 처음 접하는 사람들에게 상당히 좋은 형식이라( 개인적으로, Head First Design Pattern 과 Head First Software Development 는 정말 명품 책이라고 생각한다. ) 초보자의 입장에서는 일반적인 딱딱한 프로그래밍 서적으로 공부하는 것보다는 괜찮지 않을까라는 생각이 든다.

특히, 초보시절에 신경쓰면 좋은, 코드 재사용, Copy & Paste 대신에 함수를 쓰자는 부분과, Python의 기본적인 부분에 대해서 열심히 설명하고 있습니다.( 일단, 저는 아는 내용이라 T.T ), 반대로 책 내부에 Twitter 에 Posting 을 하는 예제가 있는데, 책이 번역되는 중에 Twitter 의 인증 방식이 기본 인증에서 OAuth 로 바뀌는 바람에 책의 예제를 바로 이용할 수 없다라는 단점이 있긴 합니다. 그래서 Appendix로 OAuth 로 Twitter 에 접근하기라는 장이 추가되어 있습니다. (사실 제가 여기에 낚인 거라는 ㅋㅋㅋ)

최초의 언어를 배우는 것은 사실 굉장히 중요한 것입니다.  “언어가 사고에 영향을 주기 때문입니다.”,그 언어로 인해서 사고는 해당언어에 종속되어 집니다. 즉 C를 배운 사람은 문제를 풀 때, C기반으로 생각하고, Python 을 처음 배운 사람은 Python 형태로, Lisp 같은 함수언어로 배운 사람은 또, 그렇게 문제를 풀려고 합니다.

Python 라는 언어는 문제를 쉽게 풀 수 있는 사고적인 기반을 제공해줍니다. 이런 언어로 프로그래밍을 시작해 보는 건 어떨까요?