josephjang

Effective Java Programming Language Guide

Effective Java Programming Language GuideEffective Java Programming Language Guide, by Joshua Bloch

Effective Java Programming Language Guide (이하 Effective Java)는 Java 프로그래밍 언어를 잘 쓰기 위한 책에 속한다. 이 책은 Effective C++ 시리즈나 Exceptional C++ 시리즈처럼 하나의 조언과 그것에 대한 설명을 담은 57개의 항목들로 구성되어있다. 형식 뿐 만 아니라 내용을 보더라도 Java의 Effective C++과 같다고 봐도 무방할 것 같다.

Effective Java의 각 항목들은 반드시 Java 언어에만 국한되는 것이 아닌 일반적인 프로그래밍 원칙들 또는 객체 지향 프로그래밍에서 일반적으로 통용되는 프로그래밍 원칙들도 포함하고 있다. 그래서, Effective/Exceptional C++ 시리즈와 중복되는 항목들도 있다. (예를 들어, ‘Item 14: Favor composition over inheritance’ 와 같은 경우)

이런 종류의 책들은 한번만 읽는다고 해서 그 책들의 조언들을 완전하게 응용하기는 어렵다. 그래서, 단지 각 항목들의 리스트만이라도 주기적으로 보면서 조언들을 상기시켜주는 것이 좋다. (Effective Java의 항목 리스트) 특히, 거의 기계적으로 적용할 수 있는 항목들은 항상 기계의 도움을 받을 수 있도록 자동화해두는 것도 좋은 방법일 것이다. (지난 글에서 언급했던 FindBugs와 같은 이클립스 플러그인들이 도움을 줄 수 있을 것이다.) 한편, 각 항목들로부터 도출되는 보다 일반적인 프로그래밍 원칙들은 마음에 잘 새겨두는 수 밖에는 없을 것이다.

이 책이 출판된지 (2001년) 꽤 오래되었기 때문에, 현재 Java (특히 Java 5.0)의 상황을 반영하지 못하는 항목들이나 언급들이 약간씩 보인다. (예를 들어, type-safe enum 항목이나 doug lea의 concurrency 라이브러리에 대한 언급)  하지만, 반영하지 못하는 점들은 대체로 Java가 개선되었기 때문에 발생하는 것이어서 여전히 그 충고들 자체는 유효하다고도 볼 수 있다.

C++ 프로그래밍 언어에 관한 유명한 책들의 저자들이 해당 언어의 커뮤너티에서 상당히 유명하고 중요한 역할을 수행하고 있는 것을 보면, 분명히 이 책의 저자에 대해서도 알아두는 것이 도움이 될 것이다. Effective Java의 저자인 Joshua Bloch는 Sun Microsystems의 Distinguished Engineer 였고, Java 5.0 명세의 개발과정에도 중요한 역할을 했으며, 현재는 Google의 Chief Java Architect이다. 그는 이 책 이외에 Java Puzzlers도 썼는데, 국내에는 번역되지 않았기 때문에, 아마존에서 주문해서 읽어볼 예정이다.

Effective Java의 내용은 상당히 기본적인 내용에 해당하기 때문에, 실제로 Java 프로그래밍 언어를 사용하면서 깨닫게 되는 문제들을 고려하면 부족한 것이 사실이다. 최근에, 이 책과 같은 스타일의 또다른 책을 찾아보고 있는데, 아직은 없는 것 같다. Effective C++ 시리즈의 Scott Meyers나 Exceptional C++ 시리즈의 Herb Sutter와 같은 훌륭한 저자들이 Java 쪽에는 없는 것일까. Java 쪽의 유명인들이 부족한 것도 아닌데 말이다.

Effective Java Programming Language Guide 더 읽기"

The Java Programming Language, 4th Edition

The Java Programming Language, 4th Edition, by Ken Arnold, James Gosling, David Holmes

Java를 처음 쓰기 시작한 것은 대학교 시절의 숙제나 프로젝트들을 통해서였다. 기억이 나지 않는 과목에서 applet을 만든 (아마도 지금까지도, 앞으로도 applet에 대한 유일한) 경험, Software Engineering 과목에서의 UML로 모델링하고 그것을 구현하는 프로젝트 (도메인은 Parking Lot이었던 걸로 기억한다), Software Project 과목에서의 웹 애플리케이션 경험을 제외하고는 Java를 사용해 본 것이 전무하다.  사실, Java 부문이 워낙 넓고 배울 내용이 방대하기 때문에, 그동안 습득해야할 기술 목록에서 고의적으로 빼놓은 상태였으며, 그동안 Java에 대한 나의 인상은 성능에 대한 미신과 높은 수준의 추상화에 대한 부러움 같은 것들이 섞여있었다고 볼 수 있다. 그러던 중, 작년 2월 경 입사한 회사 ‘첫눈’에서 시작한 프로젝트에 참여하게 되었고, 초기 셋업 과정에서 Java를 사용하기로 결정되었기 때문에 (당시까지는 나는 C++ 프로그래머였다), Java 프로그래머로서의 이력을 시작하게 되었다.

Java에 대한 경험은 있긴 하나 일천한, 어설픈 초보의 상태에서 가장 필요한 것은 언어와 표준 라이브러리에 대한 정확한 지식들이다. Head First Java가 Java 입문서로는 상당히 유명하지만, 내게 ‘입문’이 필요한 상태는 아니라고 생각했고, 입문서는 표준 명세를 대체할만한 엄격한 언어 정의를 포함하고 있지 않기 때문에 선택 목록에서 제외되었고, 역시 유명한 Thinking in Java 4th Edition의 경우에는 Java 5.0을 반영하는 새 판이 나올거라는 소식은 알고 있었으나, 당시에 출판되지 않았던 상태라고 생각하고 있었기 때문에 (지금 보면, 2006년 2월 10일에 출판된 것으로 보인다.), Java 프로그래밍 언어에 관한 가장 권위있는 저자들이 쓴 이 책을 선택하게 되었다.

책의 내용은 크게 문법과 표준 라이브러리의 두가지 부분으로 나뉘는데, Java 5.0의 문법을 대부분 커버하고 있으나, 표준 라이브러리는 핵심적인 부분(Collection과 Stream)에 집중하고 있다. 따라서, Java의 표준 라이브러리에 대해서 책을 통해서 공부하고 싶다면, 다른 책을 보아야할 것이다.

평이하게 쓰여졌으며, 중요한 부분에는 항상 예제를 덧붙여서 설명하고 있어서, 그 문법이나 라이브러리가 어떠한 용법을 가지고 있는지도 알 수 있기 때문에, 어느 정도는 잘 쓰여진 책이라고 평할 수 있을 것 같다. 어느 정도 Java에 대해 알고 있는 상태에서 그 예제를 설명하는 부분을 보면 상당히 지루하기 때문에, skimming할 것을 권장한다. 책의 성격상 상대적으로 덜 중요한 내용들에 대한 설명들도 많이 들어가기 때문에 입문서로서는 이 책은 약간 무거울 것 같다. (살짝 본 것 뿐이지만, 입문서로는 Java 언어의 중요한 사항들만 쉽게 설명하고 있는 Head First Java를 추천한다.) 특히, Stream과 Collection을 다 읽고 난 후 ‘기타’ 성격에 해당하는 라이브러리 부분을 읽을 때는 너무 지루해져서, 다른 책 (Effective Java)을 읽고 나서야, 다시 이 책을 잡을 수 있었다.

한편, 기대했던대로 문법의 각 요소들에 대한 정확한 semantic과 이 책이 커버하고 있는 라이브러리 부분에 대해서는 완전하게 설명하고 있기 때문에, Java 프로그래밍 언어에 대한 지식에 어느 정도 자신감이 생겼다. 당연히 옆에다 두고 Java 문법 레퍼런스로도 사용할 수 있다. 라이브러리를 레퍼런스 해야할 경우에는, (Java 개발자라면 누구나 알다시피) 사실 Sun의 문서화가 너무나 잘되어있으므로, 그것을 참조하는 것이 효율적이고 더 정확할 것이다.

전체적으로 Java의 The C++ Programming Language라고 해도 손색은 없을 것 같다. The Java Programming Language는 serious한 Java 개발자라면 반드시 읽고 넘어가야할 책이다.

The Java Programming Language, 4th Edition 더 읽기"

Communication

노무현 대통령은 “참여정부를 이끌어오면서 참 어려웠던 것은 소통의 문제”라며 “대화가 안되더라도 타협이 안되더라도 말귀는 서로 통해야 되지 않느냐. 말귀가 서로 안통하는 것이 요즘 너무 많다 ”고 말했다.

노 대통령은 지난달 28일 정책기획위원회 위원들과 가진 오찬간담회에서 저는 대화를 말하지만 사람들에게 그것이 잘 받아들여지지 않는 것 같다”면서 이같이 말했다. 이같은 내용은 2일 국정홍보비서관실에서 당시 노대통령의 발언을 정리해 청와대 브리핑에 올린 글을 통해 알려졌다.

노 대통령은 이어 “그만큼 대화와 타협이 어렵다”며 “그러나 그 대신 단결의 한 요소인 희생과 헌신, 그것은 하겠다”고 말했다.

‘노대통령 “한국사회, 말귀 안 통해 참 어렵다’, 조선일보

Communication 더 읽기"

한국 IT 블로거스피어의 비생산적인 추측

최근 들어, 한국 IT 관련 블로거스피어(blogosphere)에서 소위 어피년 리더 (opinion leader)라고 할 수 있는 사람들마저, IT 업계에 대한 비생산적인 추측을 블로그 글로 쏟아내고 있는 것 같다. 블로그 글은 기존 대중매체 상의 언론에 비해, 정확성 등에서 느슨해질 수 있기 때문에 얻어질 수 있는 이익도 많지만, 그 반대도 확실히 존재한다. 이런 문제의 해결은 어디까지나 블로거 개개인의 규범(indivisual discipline)에 호소할 수 밖에 없다.

덧붙여, PR에는 별로 관심이 없지만, 회사의 입장에서는 회사에 불리하면서도 잘못된 추측이 돌아다니는 것에 대해서 어떻게 대응할까 궁금하다. 아마도 회사 또는 그 회사 PR 부서의 문화에 따라 그 방식이 많이 달라질 것 같다.

한국 IT 블로거스피어의 비생산적인 추측 더 읽기"

The Joel Test

2004년 즈음에 The Joel Test를 처음 알게되고 나서부터 daily build의 중요성을 깨닫게되었다. 만들어진 지 무려 6년이 넘은 테스트지만, 여전히 현실은 암울하다. 다음은 현재 일하고 있는 팀의 Joel Test 결과.

  1. Do you use source control? yes.
  2. Can you make a build in one step? yes.
  3. Do you make daily builds? yes.
  4. Do you have a bug database? no.
  5. Do you fix bugs before writing new code? no.
  6. Do you have an up-to-date schedule? no. (barely)
  7. Do you have a spec? no. (barely)
  8. Do programmers have quiet working conditions? yes. (could be no)
  9. Do you use the best tools money can buy? no.
  10. Do you have testers? no.
  11. Do new candidates write code during their interview? no.
  12. Do you do hallway usability testing? no.

4 points

그나마 2번과 3번 항목은 비공식적으로 혼자서 작업해놓은 결과다. 그 전엔 2점이었단 얘기.

강문식 군이랑 얘기하다보니, ‘지금 Joel Test를 보니 찌질하다’는 평을 해주었다. 특히 Team Room 환경에서 근무하고 있는 그가 보기에 ‘quiet working condition’은 그렇게 보일 수 밖에. 내가 보기에도 Agile method를 적용하고 있는 환경 하에서는 몇가지 항목들이 상치될 수도 있을 것 같다. 또한 우리 팀처럼 시스템 프로그래밍 계열의 프로덕트를 만들고 있는 경우에는 ‘Usability testing’ 같은 것들은 불필요하거나 중요하지 않을 수도 있다고 생각된다. 게다가, 10점 얻기도 너무나 힘든 현실을 보면, Joel Test 자체가 찌질하다고 얘기하고 싶어지는 점도 있다. 하지만, Joel Test의 항목 하나하나를 살펴보면 여전히 중요하교 유효한 것들이다. 찌질하다고 얘기할 수 있으려면, 기본은 하고나서의 이야기다. 한번이라도, 내가 처음으로 daily build를 만들지 않아도 되는 팀에 가보고 싶다.

The Joel Test 더 읽기"

My brand-new 24 inch LCD



My brand-new 24 inch LCD, originally uploaded by Joseph Jang.

회사에서 쓰던 17인치 LCD가 답답해서 24인치 LCD를 구입했습니다.

구입한 제품은 Richwell의 RW2040DA입니다. Apple 쪽은 비싸서 일찌감치 포기했고, Dell을 사려다가, 디자인은 좀 구려도 약간 더 나은 스펙의 삼성패널을 쓰고 있는 중소 기업 제품을 사기로 했습니다. 24인치 중소 기업 제품들은 모조리 동일한 삼성 패널을 쓰고 있는 것이 재미있었습니다. (들리는 소문에 의하면 삼성은 내년부터 LCD부문 OEM은 줄이고 자체 브랜드를 추진한다죠.) 회사에서 사용하기 때문에 TV 기능은 포기했습니다. 전엔 업체에 직접 문의해서 불량화소 체크를 해달라고 했었는데, 지금은 ‘무결점’이라는 꼬리표가 달려서 4만원 정도 비싼 값으로 팔더군요. 사실 불량화소는 실제 사용에 전혀 문제가 안되지만, 무결점이 아닌바에야 불량화소가 걸릴 확률이 훨씬 높을 거란 판단에, 역시 꺼림찍해서 ‘무결점’ 제품을 샀습니다.

3GATE의 2410WV도 디자인이 그나마 간소해서 구입을 고려하고 있었는데, 비슷한 가격에 pivot 기능이 있고, Xbox이랑 연동이 잘 된다는 철호군의 확인 때문에 Richwell의 제품을 선택했습니다. (3gate의 제품도 잘될런지도 모릅니다만 확인이 안되니까요.)

블랙 색상을 골랐습니다만, 아쉽게도 재고가 없는 관계로 화이트 모델을 골라서 주문했는데, 블랙 모델이 왔군요.무슨 조화인지.

폰트를 크게 해놓고도 넓직한 환경에서 프로그래밍할 수 있어서 매우 만족스럽습니다. 구입한 가격은 약 60만원입니다.

My brand-new 24 inch LCD 더 읽기"