2016년 5월 14일 토요일

2016.5월까지 읽은 책들

grunt (원서)

Product Details
자동화 프레임워크인데, 상당히 회사에서 내가 경험한 부분과 유사함을 느꼈다.
우리회사도 잘하고 있다는건가. 솔직히 말하면 이 책보다 더 진보된 부분도 있다.
Grunt는 makefile 이나 rakefile 등에서 생기는 지저분함(?) 을 제거하고 target의 reuse를 극대화 하기위해서 아래 방법을 도입한다.

  • data의 분리 (jason)
  • tarket(task)의 재활용 (plugin 이라고 부름)

위에것을 보니 내가만든 makefile이나 rakefile이 갈수록 지저분해지는 이유를 알게된것 같다. 하여간 많은 도움을 얻게 된 책이고.
자동화에 있어서는 최근에서 가장 진보된 방식으로 하는것 같다.
그런데 경험이 없으면 이책을 읽어도 별반 도움이 되지 않는다.
아는게 있어야 보인다고...


오픈소스 소프트웨어 아키텍처 


오픈 소스 소프트웨어 아키텍처
상당히 해석이 잘되어있어 번역자의 레벨을 높게 평가하게 되었다. 다른 오픈소스 성능 최적화 보고서 (류광번역) 보다 훨씬 쉽게 읽혔다. 역시 전문 번역가 보다는 현업에 종사하는 사람이 변역한것이 읽기 쉽다.
사실 open소스는 구조를 잘 설명한 책이 없고 스스로 소스를 분석해야한다.
그런데 이책을 보면 여러가지 open소스들에 대한 구조를 잘 이해할수 있도록 설명해 두었다.
특히 지금까지 잘 모르고 사용했던것들을 쏙쏙 이해할수 있게 설명하고 있어서
전반적으로 많이 도움이 되었다.
특히 이클립스는 여러가지 책을 봤지만, 도통 이클립스의 역사적 철학이나, 역사적변화에 대해서 모르다 보니, 이퀴낙스 가 뭔지 이런걸 도통 알수가 없었는데, 이책을 보니 너무너무 잘 설명을 해주고 있었다.
그리고 오픈소스쪽에 새로운 툴들을 많이 소개받는 기회가 되어서 저자들에게 매우 감사하는 마음이 들었다.




chef Solo

Chef Solo 입문
회사에서 자동화 프레임웍을 구축하는것은 영원히 끊이지 않는과제이므로
힌트를 얻기위해서 보고있다.
솔직히 말하면 chef Solo 스타일보다는 grunt쪽이 도움이된다.
chef는 클라우딩 컴퓨팅용 install을 도와주는 도우미 정도로 보면 되겠다.
ruby로 만든 DSL에 가깝다 보니 Grunt처럼 jason을 사용하는게 더 낫지 않나 싶다.
나는 DSL보다는 Data Driven이 더 바람직하다고 본다.
결국 DSL도 스크립트이기 때문이다. Data Driven은 명세다.
나는 아래와 같은 철학을 가지고 개발하고 있다.
"궁극적으로 모든 스크립트는 없애고 실행가능한 명세만으로 개발 되어야한다."


대체 뭐가 문제야 ? 

대체 뭐가 문제야
프로그래밍 심리학의 저자가 내어놓은 책인데, 정말 좋다.
(돌아가셔서 슬프다. 나는 이분에 책에서 가장 많은 가르침을 받았다.)
정말 생각하게 하는 부분이 많다.
읽어보고나서 나의 문제점을 알것같다. 나는 너무 문제를 돌직구로 해결하려고 한다.
(왜냐하면 나는 정통파 우완 투수.... 스타일이라서 그렇다.)
하지만  문제를 해결하면 다른 문제가 나온다.
하지만 이 책에서는 아래와 같이 말한다.
"과연 나의 문제인가? 그들의 문제인가?"
과연 내가 원하는게 문제의 해결인가? 를 다시한번 고민해 보았다.
이책을 읽고나서 말하고 행동하는게 좀 달라졌다.
역시 끝내주는 책이다.
마지막으로 아래와 같은 말이 가장 마음에 와닸는다.

"문제를 이해하고 해결할때, 해결책으로 인해 유발되는 3가지 이상의 문제를 떠올릴수 없다면 그 문제를 완벽히 이해한것이아니다."

이제부터 면접볼때도 지원자들에게 어떤 문제를 아는지 물어보지만 말고,
3가지 이상의 문제를 떠올리라고 해야겠다. 우리회사의 면접 시험문제가 점점 어려워 지는중이다. (욕심 같아서는 구글 입사 수준으로 맞추고 싶지만... 사장님이 싫어하신다..)

질문이 있는 식탁 유대인 교육의 비밀

질문이 있는 식탁, 유대인 교육의 비밀
아이를 교육시키다 보니 한국식 공부방법이 맞는지 자꾸 의문이 들어서
유대인식 공부방법을 보고 있다.
유대인이 너무너무 부럽다. 그들의 가정에서의 토론은 전통적으로 해오지 않으면
실행하기가 매우 어려운데, 우리나라에서는 하고싶어도 여건상 상당히 힘들것 같다.
성적에 연연하지 않고 아이의 사고방법을 키워주는 방식이다.
어떻게 보면 이런 방식으로 사고하는 법은 구글의 면접문제와도 상통한다고 보인다.
"이책을 읽고 아빠들이 아이들과 좀더 대화할 시간을 가졌으면 좋겠다."

당신은 구글에 갈만큼 똑똑한가 


당신은 구글에서 일할 만큼 똑똑한가?
구글 면접관들의 마음가짐을 알게됬다.
나는 면접관으로서 지원자를 시험해오면서, 여태까지, 나는 내가 아는 답만 물어보았던것 같다.
하지만 구글은 면접관도 모르는 답이 없는 질문을 한다는 사실을 알았다.
"나는 모르지만 너는 대답해봐. 그것도 끝내주게... 나를 감동시키면 채용시켜주지"
나도 지원자들의 한계를 시험해보도록, 답을 모르는 문제를 물어봐야겠다.


컴파일러 구조와 원리 

컴파일러 구조와 원리
역시 컴파일러를 만들고 싶어서 보았다. 여태까지 보았던 컴파일러 책중에는
가장 설명이 잘되어있다.
기존에는 lex,yacc밖에 몰라서 답답했었는데
이책을 읽으니 컴파일러의 backend까지 컨셉을 알게됬다.
아주 쉽게 말하면 추상트리(node)를 만들어놓고, visitor 패턴을 돌려가면서 optimize 하면 된다.
이제 LLVM만 공부하면 컴파일러를 만들수 있겠다.!!!


LLVM Core Library (원서)


Product Details


컴파일러를 한번 만들어보고 싶어서 공부중이다.
LLVM의 신기한점 하나가 JIT-compile (just in time) 이라는데 이게 컴파일러 자체를
실시간으로 만드는 기능이다.
아마도 nvidia의 cuda를 이전에 공부할때 한가지 이상한점이있었다.
register 의 갯수를 마음대로 바꿀수가 있었다. (그것도 자동으로 바뀌는것 같았다.)
어떻게 하는지 몰랐는데 JIT를 사용하면 되는구나...
역시 사람은 공부를 해야한다.