에이콘에서 특이한 책이 출간되는데, 다른 프로젝트 관련서와 달리 망해가는 프로젝트를 살리는 방법에 대해 다룬다.

이 책에 대한 내용을 살펴보니 같은 출판사에서 나온 또 다른 특이한 책이 떠오른다.















드리밍 인 코드
원대한 비전, 뛰어난 사람들, 막대한 자금.  그러나 수렁으로 빠지는 프로젝트...

망해가는 프로젝트에서 나올 수 있는 경우는 거의 다 나오지 않았나 하는 생각이 든다.












 두 책을 같이 펼쳐놓고 읽어보면 (수렁으로 빠지는 프로젝트 이야기와 프로젝트를 수렁에서 건지는 이야기) 상당히 재미있을 것 같다.

현재 에이콘에서 트랙백이벤트 중이다.

도서정보페이지

Posted by lispholic
,

Scala에서의 리스트

Scala 2009. 8. 22. 17:52

Scala 는 기본적으로 Lisp과 유사하게 head - tail 스타일의 LinkedList 를 사용한다. 그런데 Scala의 immutable주의와 리스트가 혼합되면서 약간 특이한 구조가 되었다.

일반적으로 대부분의 언어에서는 리스트와 유사한 자료구조는 뒤에 데이터를 넣는 것이 효율적이다 (C++의 vector , java의 ArrayList , python 의 리스트 등). 그리고 다른 자료구조 (C++ 의 deque 등)도 뒤에 넣는 것이 앞에 넣는 것에 비해 특별히 비효율적이지는 않기 때문에 대부분 아무생각없이 뒤에 넣는 방식을 쓴다. 그리고 뒤에 넣으면 나중에 넣은게 뒤에 있게 되므로 좀 더 자연스럽다.

그런데 Scala의 기본 List 는 정반대이다. List 를 immutable 로 만들기 위해 리스트에 데이터를 넣을 때 원래의 리스트를 수정하지 않기로 결정했고, 그래서 새로 만든 노드를 원래 리스트의 앞에 붙인다. (head - tail 구조인 리스트에서 원래의 리스트를 수정하지 않고 뒤에 자료를 추가하는 방법은 없다.)

그래서 리스트를 붙이는 연산자인::는 약간 특이하게 동작하는데 오른쪽 매개변수에 대해 메소드를 호출하는 식으로 동작한다. 즉

        "abc" :: Nil

위의 코드는 실제로는 아래처럼 동작하고, 새로 만든 노드를 리턴한다.

        Nil.::("abc")

이해는 하겠는데 뭔가 사파스럽다.

Posted by lispholic
,

Pro Git

프로그래밍 2009. 8. 6. 23:56
일단은 Git 관련 책이다. 그런데 책의 전체 내용을 웹에 공개해놓았다. http://progit.org/
게다가 책의 소스파일도 github에 공개했다.
Creative Commons Attribution-Non Commercial-Share Alike 3.0 license로 공개해서 내용을 수정하거나 pdf를 만들어 배포하는 것도 가능하다.
pdf를 만드는 방법도 나와있기는 한데 해보면 에러가 난다. 어차피 소스를 docbook으로 변환하여 pdf로 만들면 되기 때문에 크게 문제되지는 않는다.

훌륭한 저자와 출판사에 박수를...

 
Posted by lispholic
,

원서 제목은 Javascript The Good Parts 이다. 적은 분량에 꽤 깊이 있는 내용을 다룬다. (대신에 너비가 넓지 않다.) DOM 이나 브라우저간의 차이 등에 대한 것은 전혀 다루지 않고 오로지 자바스크립트 언어 자체에 대해서만 다룬다. 자바스크립트의 특색이 뭔지, 다른 언어와는 어떻게 다른지 , 자바스크립트를 자바스크립트답게 쓰려면 어떻게 해야 하는지에 대한 내용이 많이 나온다. 가볍게 읽어볼 책은 아니고 여러번 내용을 음미하며 읽어야 할 책이다. 

다만 일부 챕터에서는 프로그래밍 책이라기 보다는 마치 저자의 에세이를 읽는 듯한 느낌을 받게 된다(주로 후반부). 그리고 책 분량에 비하면 가격이 센 편이다. (아마존에도 이러한 것을 언급한 서평이 있다.)

하지만 내용을 놓고 보면 책 값이 그리 아까운 편은 아니다. 빠르게 자바스크립트 언어의 핵심만 알고 싶다면 이 책만큼 좋은게 없다.

앞에서도 이야기했듯이 이 책에는 자바스크립트 언어 이외의 부분은 안 나오기 때문에 PPK 등의 다른 자바스크립트 책과 함께 보는 것이 여러모로 좋을 것이다.

출판사 페이지
Posted by lispholic
,

junit 4.4 부터 hamcrest를 이용하여 좀 더 읽기 좋은 assertion 코드를 쓸 수 있게 되었다.

    int a = 2 + 3 ;
    assertThat( a , is(5) ) ;

다만 에러메시지를 따로 지정할 때 쓰는 방식은 별로 마음에 들지 않는다.

    assertThat("error message", a , is(5) ) ;

에러 메시지를 첫번째 매개변수로 받게 되어있는데 이것 때문에 코드의 가독성이 떨어진다. 에러 메시지가 없으면 일반 영어 문장처럼 읽을 수 있는데 에러 메시지 때문에 그렇게 할 수 없다. 에러 메시지를 세번째 매개변수로 하면 훨씬 나아진다.

    assertThat(a , is(5) ,
               "error message") ;

좀더 욕심을 내자면 slf4j에서 하는 것처럼 에러 메시지 포매팅도 지원하면 좋을 것 같다. (slf4j에서 코드를 좀 복사해서 이런 걸 만들어 사용하는 중이다.)

    assertThat(a , is(5) ,
               "{} should be {}", "a" , 5) ;
Posted by lispholic
,