수요일, 4월 30, 2014

[일상다반사] 원칙 없는 사회

트윗을 읽다가 다음과 같은 아주 핵심을 찌르는 @HyeYunLee님의 글이 눈에 띄여 소개한다.

오늘 미국에서 오래 거주한 한국인과의 대화. "미국은 안 되는건 안 되는데. 한국은 안 되는걸 되게 하거나 될 수도 있게 하는 것이 가장 문제" 세월호 뿐만이 아니라 한국사회 전반적으로 깔려있는 원칙을 어기고 일을 진행하는 것이 능력으로 포장된건 아닌지

이 글을 읽다보니 몇 년 전에 미국에서 오래 거주한 지인(한국 사람이다)이 해준 비슷하지만 조금 다른 이야기가 생각나서 간략하게라도 정리하고 넘어가지 않을 수 없다.

미국에 가보면(뭐 예상하겠지만... EU에 속해 좀 잘 나간다 하는 유럽 국가도 마찬가지다), 공항, 상점, 음식점, 공공기관, .... 등에서 현장 직원들의 서비스 수준에 놀랄 때가 많을 것이다. 외국에 나가서 융통성이라고는 정말 개미 눈꼽만큼도 없는 서비스를 받으며 속이 터진 경험을 누구나 한번씩 해봤을 것이니 여기서 다양한 사례는 과감하게 생략하고 바로 본론으로 들어가겠다. 여기서 현상을 탓하지 말고 이유를 생각해보자. 왜 그럴까? 왜 선진국은 한국처럼 서비스를 번개처럼 멋지게(커피 나오셨습니다?) 하지 못할까?

지인이 분석한 결과는 너무나도 흥미로웠다. 지인의 주장에 따르면, 미국은 철저하게 능력 중심으로 승진이 일어나기 때문에(물론 안 그런 경우도 있지만 일반적으로 그렇다는 말이다) 정말 똑똑하고 싹싹하고 뛰어난 친구들은 승진에 승진을 거듭해 조직의 위쪽에 올라가 있기 때문에 현장에서 볼 수 없기 때문이란다. 이런 능력있는 친구들은 자신들이 아는 바를 총동원해 아주 평범하고 일반적인 사람도 고민하지 않고 일을 할 수 있게 원칙과 절차를 만드는 작업에 투입되므로 융통성을 희생하더라도 어떻게든 일은 진행되는 시스템을 구축할 수 있게 된다. 일을 처리하면서 예상하지 못했던 예외는 예외대로 모아 별도의 전문가(말 그대로 전문가)에게 위임해버리는 방법을 사용한다. 하지만 한국은 미국과 정반대로 현장의 아르바이트 직원은 아무리 똑똑하고 싹싹하고 뛰어나더라도 승진을 기대하지 못한다(아주 드물게 점장까지 하는 사람도 있지만... 창업주의 일가 친척이 아닌 이상 조직이라는 사다리의 꼭대기로는 절대 올라가지 못한다). 생존을 위해 융통성을 극대화하고 필요에 따라서는 규칙과 원칙도 과감하게 위반해야 한다. 그 결과 역설적으로 한국에 살고 계신 여러분들은 (원칙이니 규칙을 잘 지키는지는 아무 관심 없고...) 현장에서 똑똑한 사람들이 제공하는 융통성이 극대화된 최상의 서비스를 받을 수 있는 것이다. T_T

와, 정말 그럴싸한 이야기가 아닐까? 하지만, 여기서부터 파생되는 결과가 더 중요하다. 미국은 일선 직원들에게 매뉴얼에 명기된 권한과 책임을 명확하게 부여한다. 한국은 좋은 것이 좋은 것이므로 권한과 책임을 명확하게 구분하지 않는다. 그 결과 평상시에는 미국보다 한국이 월등히 높은 효율을 낼 수 있다. 현장에서 실행하는 사람들의 수준에서 차이가 날뿐더러 규칙과 원칙대로 하다보면 아무래도 시간도 오래 걸리고 사람도 많이 필요하게 되는 등 간접 경비(overhead)가 커지기 마련이니까. 자, 그렇다면 평상시가 아니라 비상시가 되면 어떻게 될까? 가용한 모든 자원을 집중하기 위해 적극적인 리더십이 필요한 상황이라면 어떻게 될까? 몇몇 똑똑한 비정규직 직원만으로 방어가 가능할까? 피해를 줄이거나 사전에 위험을 최대한 회피할 수 있을까? 답은 이미 우리 모두가 알고 있다. 연일 뉴스와 신문에서 대문짝만하게 사고 소식을 보도하고 있으므로 여기서 더 이상 언급하지 않겠다.

합리적인 선을 넘어서 원칙적으로 안 되는 것을 되게 만든 영웅담이 회자(아니 미화)되지만 정작 이로 인해 심각한 문제가 생겨 누군가 책임질 상황이 닥치면 미개한(응?) 아래 것들만 주리를 틀어 책임을 떠넘기며 꼬리를 자르고 도망가는 행태가 반복되는 상황에서 무엇을 더 기대할 수 있을지 모르겠다. 이번 사고 후에 별의별 희한한 온갖 종류의 대책이 다 나올텐데 백약이 무효라는 데 한 표 던진다. 향후 문제점이 개선될 가능성은 그리 높지 않으며 유사한 재난은 앞으로도 반복되리라는 사실이 사람들을 더욱 암울하게 만드는 진짜 이유다. 원칙대로 해도 융통성 없는 병신이라는 소리를 듣지 않는 사회가 되어야만 제대로 풀릴 문제다. 어떻게 보면 몇 푼 아끼느라, 조금이라도 빨리 하기 위해, 나 하나 편하자고 원칙 없는 사회를 만드는데 직간접으로 일조한 우리 모두가 자초한 결과다. 정말 부끄럽다.

EOB

화요일, 4월 29, 2014

[일상다반사] 아파치 Solr 4 구축과 관리 : 오픈소스 루씬 기반 엔터프라이즈 검색 플랫폼

해 님께서 열심히 작업해주신 덕분에 번개처럼 무사히(!) 번역을 끝낸 아파치 Solr 4 구축과 관리 : 오픈소스 루씬 기반 엔터프라이즈 검색 플랫폼이 절찬리에 예약 판매 중이다. 사회 초년생 때 검색 엔진 팀에 속해 KMS(지식 관리 시스템) 등을 만들고 나서 거의 10년 만에 검색 엔진 관련 서적을 손에 쥐니 기술의 발전사를 온 몸으로 느낄 수 있었다. 기존에 루씬을 사용한 경험이 있다면, 엔터프라이즈에 적합하게 기능과 확장성이 강화된 Solr에 한번 쯤 관심을 보이면 의외의 수확을 거둘 수 있을 것이다.

Solr는 톰캣, Jetty와 같은 서블릿 컨테이너로 배포가 가능하므로, 프로그래밍 지식이 크게 필요하지 않다는 점에서 프로그래밍이 필요한 루씬과 결정적인 차이점을 보인다. 루씬이 엔진이라면, Solr는 자동차다. 검색 기능이 필요한 단독형 애플리케이션을 제작한다면 루씬이 적합하지만, 엔터프라이즈용 검색 기능을 서비스에 추가한다면 Solr가 정답이다. 루씬을 사용할지 Solr를 사용할지 고민하는 분들이라면 답을 정해드리겠다. 십중팔구 여러분이 원하는 해법은 Solr다.

자, 그렇다면 Solr는 루씬에 어떤 기능을 더 추가했을까? 간략하게 추가된 기능을 정리하면 다음과 같다(세부 기능이 궁금하다면 공식 Apache Solr 페이지를 방문하기 바란다).

  • XML/HTTP와 JSON API
  • 검색 결과 강조(highlight)
  • 패싯 검색과 필터링
  • 공간 지리 검색
  • 빠른 점진적인 갱신과 색인 복제
  • 캐시
  • ZooKeeper를 사용한 클러스터 구성(고가용성)
  • 복제
  • 분산 색인/샤딩
  • 모니터링 인터페이스와 AJAX 기반 웹 관리도구

'아파치 Solr 4 구축과 관리'에서는 위에서 소개한 기능에 대해 빠르고 쉽게 접근하는 지름길을 제시한다. 책에 대한 역자의 간략한 소개는 역자 소개를 살펴보시고(분량상 소개는 생략한다), 상세 목차는 목차를 살펴보시면(역시 분량상 정리는 생략한다) 이 책이 추구하는 방향을 알 수 있을 것이다. 아무쪼록 이 책이 Solr 4를 탐험하는 데 있어 도움이 되기를 바란다.

EOB

토요일, 4월 26, 2014

[독서광] 당신은 사업가입니까

계속해서 경제/경영 블로그답게, 오늘도 경영 관련 서적을 하나 소개하고자 한다. 오늘 소개할 책은 '창업 전 스스로에게 물어야할 질문들'이라는 부제가 붙은 '당신은 사업가입니까'라는 책이다. 일반적인 창업 관련 서적들의 특징을 요약하자면 '꿈과 희망'이다. 아주 잘 된 사례를 중심으로 나도 어떻게 하면 저렇게 멋지게 사업을 할 수 있을지에 대한 방법을 나열하므로 '뽐뿌질'을 하기 마련이다. 물론 중간 중간에 어려운 난관이나 역경도 소개하지만 어디까지나 멋진 결과를 얻기 위한 중간 단계에 지나지 않는다. 이런 유형의 책들이 서가에 차고 넘치는 이유는 창업을 마음먹은 사람에게 올바른 말을 해봐야 잔소리로 들릴테고 결국 사람들이 듣고 싶어하는 말만 나열해야 책이 잘 팔릴테니 상업적인 특성을 고려하지 않을 수 없기 때문이다.

그런데, 오늘 소개할 책은... 아마 읽고 나면 내가 정말 창업을 해아할지 말아야할지 심각한 고민에 빠지게 만들어준다는 점에서 기존 서적과 확실하게 스스로를 차별화한다. 창업하고 나서 멋진 사무실로 출근해 고급 커피 한 잔을 마시며 우아하게 비서가 건내주는 하루 일정표를 살펴보며 아침을 여는 따위의 소설은 이 책에 나와있지 않다. 그 대신 화장실 청소부터 시작해 비용을 줄이기 위해 고군분투하며 부모 속을 긁듯 사장님 속을 박박 긁은 직원들을 잘 다독이며 기존 또라이보다 100배는 더 또라이인 주변 이해 관계자들을 통제해나가며, 시어머니보다 더 무서운 고객을 상대하며, 복사 용지 한 묶음을 사더라도 현금 흐름을 생각하지 않을 수 없는 시궁창 같은 현실에 대해 속 시원하게 열거하고 있다. '오늘이라도 당장 회사를 때려치우고 창업을 해야겠다'라는 생각이 드는 분이라면, '멘붕'을 일으킬 정도로 아주 직설적인 표현도 많이 등장하므로 눈에 잘 띄는 곳에 놓아두고(물론 회사가 아니라 집이 안전할 것이다) 틈나는 대로 읽으면 많은 도움이 될 것이다.

이 책에서 가장 마음에 드는 부분은 바로 '창업가'로 나서기 전에 가장 먼저 던저야 하는 다음과 같은 질문이었다.

사업가의 리스크와 보상 사이의 역학 관계를 평가하는 동안 당신은 "내가 사업가가 될 수 있을까?"가 아닌, "내가 사업가가 되어야만할까?"라는 질문을 자신에게 던져야 한다. 베리 몰츠는 '바운스 에서 이렇게 말했다. "많은 사업가들이 부담하는 리스크는 매우 크다. 그들의 잠재적인 수익은 그토록 낮은 성공 확률을 감당할 만큼 크지 않다. 그들은 자신들의 열정에 눈이 멀어 있다."

내가 사업가의 자질이 있는지 없는지의 자질도 무척 중요하지만, 내가 정말 사업을 해야할지 말아야할지에 대한 고민이 더욱 중요하다. 솔직히 이런 근본적인 질문을 던지지 않고서 사업을 시작하면 100전 100패라고 보면 틀림이 없다. 물론 부모의 정보력과 재력을 등에 업거나 엄청난 운이 작용해 엄청난 성공을 거둘 수도 있지만, "나는 운이 좋은 편이고 지금 바보처럼 사업하는 남들과 확실히 달라" 정도의 헛된 희망 고문으로 시작하면 대재앙이 닥치기 마련이다.

본문에 나오는 좋은 이야기를 정리해보겠다.

어떤 사업의 기술적인 업무를 이해하는 것이 곧 그 사업을 이해하는 것이라는 생각은 오해다.
당신이 사업을 시작한다면 당신의 직업은 이제 '사업체를 경영하는 것'이 된다.
당신이 사업체를 소유하면 누군가의 직원일 때보다도 권한이 줄어든다.
사업을 시작한다면 적어도 수백 가지의 이유로 누군가로부터 뼈저린 거절을 경함하게 된다는 사실을 명심하라.
좋은 아이디어도 실패할 수 있고 나쁜 아이디어라 해서 성공할 수 없는 것은 아니다.
사업 아이디어 자체는 아무런 가치가 없으며, 사업 아이디어로부터 보상받으려는 생각은 부질없다.
사업을 하게 되면 좋아하는 일을 즐길 시간이 적어질 수밖에 없다.
만약 당신이 최고 수준의 급여를 약속하지 못한다면 최고 수준의 직원을 채용하기 어려울 것이고, 당신은 보통 수준의 지원자에 만족해야 한다.
직원들은 당신의 모든 것이라 할 수 있는 사업의 성공과 실패를 좌우하는 중요한 패를 가지고 있다.
시간은 돈보다 가치 있는 자원이다. 돈은 모을 수 있지만 우리가 쓸 수 있는 시간은 그저 사라질 뿐이다.
사업을 성공시키는 데 필요한 블록 조각을 얻으려면 먼저 '충분히 경험하라'. 너무 늙어서 배울 기력이 없다는 말은 절대로 하지 마라. 인생이라는 학교는 끊임없이 배우는 과정이다.
만일 아무런 인맥이 없다면 당신은 좀 더 많은 친구들(바라건대 부유하고 인맥이 좋으)을 사귀어야 한다. 당신이 현재의 직장을 그만두겠다고 결심하기 전에 말이다.
사업가가 된다는 것은 일찍이 본 적 없던 최고 난이도의 롤러코스터를 타는 것과 같다. 무엇보다 당신은 당신 돈을 들여 롤러코스터를 손수 만들거나 사야 할뿐더러, 그것을 만들면서도 직접 타기 전까지는 어떤 모양일지 알 수조차 없다.
사업이라는 롤러코스터는 세상에서 탑승 시간이 가장 길고 한 번 올라타면 중간에 빠져나올 수 없다는 말은 굳이 하지 않겠다.
당신이 좋은 상황을 즐기는 동안, 나쁜 상황은 악화되어 당신의 모든 것을 위험에 빠뜨릴 것처럼 보일 것이다.
실제로 사업은 행운에 좌우되는 경우가 많지만, 행운은 신속하게 의사결정을 내리고 직접 팔을 걷어붙이며 일에 전력을 기울일 때만 가능하다. 기적이나 비전 선언문, 그럴싸한 소망이나 바람만으로는 결코 사업을 성공시킬 수 없다.
사업 초기 단계에 있는 사업가들 거의 모두가 사업을 시작하고 운영하는 비용을 과소평가한다는 사실이다.
그들은 사업가들이 사업 개시 후 곧바로 매출을 일으킬 수 있다고 기대한다면 향후에 경악을 금치 못할 거라고 경고한다.
사업이라는 모험이 성공하려면 사업에 관한 재무적인 스토리를 이해하고 파악하는 것이 무엇보다 중요하다.
당신이 어느 정도 참신한 아이디어를 찾아내 사업을 시작했다면, 똑같거나 비슷한 아이디어를 가진 사람들이 이미 시장에 수십 명이나 존재할 가능성이 크다.
당신이 성공할수록, 당신이 더 많은 재능을 가지고 있을수록 사업운영은 더 어려워진다.
당신이 책임을 회피하거나 다른 이들을 자주 비난하는 사람이라면, 혹은 자청하여 모든 책임을 맡기보다 다른 사람들과 책임을 나눠 갖는 것을 더 편안해하는 사람이라면 사업가로 가는 길은 매우 힘들고 불편해질 것이다.
직원을 고용할 때 발생하는 또 다른 부담감은 감정적인 것인데, 당신이 직원에 대해 갖는 책임감이 바로 그것이다.
현금 흐름 관리는 사업운영 시 가장 까다로운 업무라서, 세계에서 가장 크고 가장 성공한 기업들조차 사업의 다른 측면은 잘 운영하면서도 이 부분을 관리하지 못해 발이 꼬여 넘어지는 경우가 있다.
사업 추진을 위해 잠재적 리스크와 보상을 평가할 시에는 반드시 최악의 시나리오를 포함한 모든 리스크를 빠짐없이 검토해야 한다.

결론: 이 책을 읽고 나면 (이 책 저자가 입버릇처럼 이야기하는 후렴구인) "지금 다니는 직장이 훨씬 좋아 보이지 않는가? 안 그런가?"에 대해 어떤 대답을 내릴지는 안 봐도 블루레이다. 창업을 생각한 사람들에게 조건없는 필독서로 추천한다!

토요일, 4월 19, 2014

[B급 프로그래머] 4월 3주 소식 정리

간단한 공지 하나: 혹시 다른 사람들과 나누고 싶은 개발 관련 소식이 있으면 트위터 @jrogue로 mention 부탁드린다.

  1. 웹/앱 개발
  2. 개발/관리 도구
  3. 고성능 서버/데이터베이스
  4. 기타 읽을거리
EOB

수요일, 4월 16, 2014

[독서광] 확신의 덫

간만에 경영/경제 블로그다운 멋진 책 한 권을 독자 여러분께 소개하려 한다. 오늘 소개할 책은 지난번 소개드린 기업을 죽이고 살리는 리더 간의 갈등 관리와 유사한 주제를 다루지만 좀더 기업 현실에 초점을 맞춘 '확신의 덫'이다. 이 책이 다루는 주제는 리더 간의 갈등이 아니라 상사와 부하 직원 사이에서 벌어지는 갈등과 오해 상황이다. 물론 좀더 넓게 봐서 상사와 부하뿐만 아니라 선생님과 학생, 부부, 부모와 자식 사이에도 적용 가능한 내용으로 봐도 좋겠다.

이 책은 뛰어난 관리자와 상사들이 어떻게 부하 직원을 망치기 시작하고 그 결과가 어떤지 다양한 사례와 이론을 들어 설명하고 있다. 대다수 관리자들은 부지불식간에 (어떤 면에서는 선의로) 성과가 나쁜 부하 직원을 돕든다는 명목하게 통제에 들어가는 유혹에 쉽게 빠지는 데, 부하 직원은 자신이 열등하다고 낙인찍은 상사의 기대를 저버리지 않기 위해(응?) 성과를 떨어뜨리는 동시에 관리자의 불공정함과 쪼잔함에 대한 불평불만을 주변 사람들에게 퍼트리기 시작한다. 결국 이런 악순환이 거듭되면서 점차 강도가 높아지며 서로를 나쁜 놈으로 프레이밍한 결과 최종적으로 상사와 부하 직원 모두가 패배자가 되는 결과를 초래한다. 독자에 따라 다르겠지만, 이 책은 아주 지루하다는 느낌이 들 가능성도 있다. 이 책에서 엇비슷한 사례와 비슷한 내용이 반복되는 이유는 관리자들이 자신의 문제점을 깨닫게 만들기 위해 저자들이 거의 필사적으로 설득 작업에 나서기 때문이다. 모두가 패배자로 전락하는 문제는 관리자와 부하 직원이 손에 손을 잡고 함께 만들었지만, 문제를 시작하고 해결하는 열쇠는 관리자가 쥐고 있기 때문에 관리자 입장에서 문제를 인식하느냐 마느냐가 무엇보다 중요하다. 몰라서 생기는 문제가 아니라 안다고 착각하기 때문에 생기는 문제이기 때문에 세상을 바라보는 관점 자체를 바꿔야 한다. 이게 얼마나 어려운지는 더 이상 언급하지 않겠다.

자, 문제의 원인과 미치는 파장을 알았다고 치자. 현 상황을 파악했으면 해결에 나서야 한다. 이 책에서는 현재까지 연구된 다양한 심리학적인 연구 결과를 바탕으로 관리자와 직원 모두가 패배한다는 필패 신드롬에 빠지는 이유와 여기서 벗어나 건설적인 관계를 만드는 해법을 설명하고 있지만, 아니나다를까 책에서 제시하는 실천이라는 난제는 어렵고 험난하기만 하다는 생각이 든다. 책 가장 마지막 부분에 배움을 잃어버린 사람들에게 강력하게 경고하는 다음과 같은 가슴 뜨끔한 경구가 나온다.

반드시 배워야할 필요는 없지만, 반드시 살아야 할 필요도 없다. - 품질 전문가 애드워드 데밍

수 많은 관리자들이 테니스/골프를 비롯한 육체적인 운동에 엄청난 시간을 쏟고 인맥 쌓기와 정보 수집에 엄청난 시간과 노력과 정열을 투자하는 반면, 자신의 부하 직원들과 소통하며 상승작용을 높이기 위해 어떤 노력(아니면 어떤 반대 노력)을 했는지 되돌아보면 거의 절망적인 생각이 들지도 모르겠다. 자기 합리화를 위해 '게으르고, 느리고, 능력이 부족하고, 건방지고, 자기 통제가 안 되는' 직원 탓만 늘어놓고 있다면 해당 관리자나 상사는 '필패 신드롬 상'을 받을 후보로 손색이 없다.

결론: 2014년 상반기 #1 추천 도서로 평가한다. 당신이 또라이 상사 아래에 있다면 이 책을 2번 읽어라. 당신이 부하 직원들에게 지극히 공정하고 합리적인 관리자나 상사라고 생각 착각한다면 이 책을 10번 읽어라.

EOB

토요일, 4월 05, 2014

[B급 프로그래머] 4월 1주 소식 정리

이번 주는 아주 푸짐한 소식으로 여러분들을 찾아 뵐 수 있어 만족스럽다. :)

  1. 웹/앱 개발
  2. 개발/관리 도구
  3. 고성능 서버/데이터베이스
  4. 기타 읽을거리
EOB

금요일, 4월 04, 2014

[독서광] 만화와 함께 하는 즐거운 통계학

간만에 수학책 하나 소개하겠다. 그런데, 일반적인 수학책은 아니고 _만화_로 표현한 _통계학_ 책이다. 만화와 통계학이라는 서로 어울리지 않는 단어가 어떻게 하나로 합쳐지는지 참으로 궁금한 독자를 위해 일단 본문 중 내용을 에이콘 출판사 책 소개 페이지에서 가져와봤다.

따분한(통계 시간에 졸다가 'C'를 받은 기억이 아직도 생생하다. T_T) 통계 관련 내용을 알기 쉽게 풀어 설명하기 위해 만화 형식을 빌었는데, 중간 중간 나오는 위트가 보통이 아니다. 수식만 나오면 '아아악' 비명을 지르며 도망가는 장면은 이 책의 전매 특허로 자리잡아도 될 것 같다. 물론 기분 좋게 읽고 나서 아무 것도 남지 않는다면 허무하기에 부록 '수학 동굴'에서 수학적인 관점으로 본문에 나왔던 용어와 설명을 수식을 사용해 정리하고 있으므로, 본문 중간 중간이나 책을 한번 다 읽고 나서 이론적으로 이해하는 작업을 도와준다.

이 책은 모집단을 모두 알 수 없는 상태에서 표본을 수집하고 해석하기 위한 기초를 쌓는 '통계치 모으기'와, 정규분포와 중심 극한 정리를 시작으로 통계치를 바탕으로 추론하고 신뢰구간을 계산하며, 가설을 검증하는 '모수를 찾아서'라는 두 부분으로 나눠진다. 따분한 공식이나 정리로 이뤄진 일반적인 통계학 교과서와는 달리, 우리가 무엇을 하고 싶은데 어떻게 해야할지를 단계별로 나눠 이해하기 쉬운 예를 들어 설명하므로 일단 이 책을 읽고 나면 일상 생활에서 흔히 접하는 기초적인 통계 용어가 나오더라도 뒤에 숨은 뜻이 무엇인지 파악할 수 있을 것이다(직설적으로 말하자면, 통계의 장난에 덜 속게 된다!).

이 책에서 가장 마음에 들었던 부분은 통계의 본질적인 숙명에 대해 명확하게 설명하는 다음 내용이다.

통계가 목표로 하는 것은 확실성이 아니라 확률이다.

위에서 정리한 문구 하나만 기억하더라도 세상의 많은 오해가 풀리리라 생각한다.

결론: 통계를 처음 접하는 분들이나 기초적인 내용은 알지만 한걸음 더 나가고 싶은 분들께 강력 추천한다. 호기심으로 책을 잡는 순간 내려 놓기가 곤란한 자신을 발견할 것이다. :)

EOB

토요일, 3월 29, 2014

[독서광] 레너드 번스타인의 음악의 즐거움

오늘은 정말 간만에 문화를 다루는 책(출판사에서 선물을 받았다는 사실을 미리 언급한다) 하나를 소개해드리겠다. 음악 애호가라면 레너드 번스타인이라는 이름을 한번쯤 들어봤을텐데, 바로 여러분이 알고 있는 그 번스타인이 지은 책이다. 물론 번스타인의 정치적 성향과 사생활을 고려할 때 한국에서 당연히 금서(응?)가 될 가능성이 높지만 내용 자체가 워낙 훌륭하기에 (특히) 클래식 애호가들이라면 꼭 한 번 읽고 넘어갈 필독서라는 생각이 든다. 물론 '클래식'이라는 단어만 봐도 몰려오는 졸음을 느끼는 분들일지라도 이 책을 읽으면 여러 차례 화들짝 놀랄 정도로 재미있고 이해하기 쉽게 쓰여져 있으므로 음악에 대한 수준과 지식은 문제가 되지 않는다. 이 책 초판이 1959년에 나왔음에도 불구하고 여전히 증쇄를 거듭하고 있으며 심지어 번역서까지 나온 것을 보면 고전의 반열에 올라섰다는 느낌이다. 실제로 다루는 내용이나 전개와 표현 방식이 1950년대 쓰여진 책이라고 도저히 믿기지 않을 정도로 전혀 촌스럽거나 어색하지 않다.

이 책은 크게 두 부분으로 나뉘어지는데, 1부는 '상상의 대화'라는 제목으로 번스타인과 상상의 인물 사이에 주고 받는 편지 형식으로 번스타인이 평상시 생각하던 음악에 대한 이야기 보따리를 풀어놓는다. 2부는 CBS에서 포드 재단의 후원으로 시작한 예술 프로그램인 옴니버스 방송 대본(총 7개)을 그대로 가져왔다. "'악보'를 읽을 수 있으면 얼마나 좋을까?"라는 고민을 평상시 해본 적이 없는데, 이 책을 읽으면서 많이 후회를 하고 말았다. 악보라는 이해하지 못하는 언어의 장벽 앞에서 무릎을 꿇고 텍스트만 읽어야 했으니까 말이다. 혹시 악보를 이해하는 분들이라면 감동이 배가 되리라 확신한다. 뭐 그렇다고 바로 포기하지 마시고, 유튜브에 올라온 방송 내용 발췌본을 보고 들으며 당시 분위기를 느껴보시기 바란다.

베토벤 운명 교향곡

재즈의 세계

지휘의 기술

미국의 뮤지컬 코메디

현대 음악으로의 초대

요한 제비스티안 바흐의 음악

그랜드 오페라의 찬란함

짧은 비디오 클립만 봐도 알겠지만, 뛰어난 지휘자이자 작곡자이자 연주가(피아노)인 번스타인이 각 주제에 대해 아주 적절하게 기존 사례와 이를 뒷받침하는 역사/이론과 _연주_와 자기 경험을 녹여 놓는 기술은 실로 경이롭기까지 하다. 여기에 열정까지 느껴지니 할 말 다한 셈이다.

본문 중 흥미로웠던 부분을 정리해보겠다.

모든 작곡가는 두 가지 면에서 고뇌합니다. 하나는 주제를 이루는 적확한 음들을 찾아내는 것입니다. 다른 하나는 주제를 이어받아 하나의 '교향곡'의 주제로 세울 수 있는 적확한 음들을 찾아내는 것이지요.
운명 2악장의 서두를 위해 베토벤이 공책에 써 둔 선율이 최소 열네 가지 버전에 이른다는 사실이 베토벤의 고뇌를 잘 말해줍니다.
오늘날 운명을 듣는 많은 이들이 이렇게 생각합니다. 이 작품은 처음부터 명료하고 적확하게 베토벤에게서 쏟아져 나와 단방에 완성되었을 게 분명하다고요. 천만에요. 베토벤은 아래 수고와 비슷한 악보를 몇 장이고 썼다 버렸습니다. 그 양이 책 한 권에 달할 정도입니다.
재즈에서는 연주자가 곧 작곡자이고 창작자의 지위, 고로 더 위엄있는 지위를 차지함을 의미합니다.
즉흥 연주, 이것이 모든 재즈 음악의 진면모입니다.
지휘자의 악기는 100명의 '인간'입니다. 자기 의지를 가진 전문 연주자 100명으로 마치 하나의 의지로 하나의 악기를 연주하듯 음악을 만들어 내야 합니다.
템포는 지휘자마다 다릅니다. 같은 작품을 지휘자 여섯 명의 연주로 들어 보면 서로 다른 여섯 가지의 템포를 확인할 수 있습니다.
지휘자는 악보를 눈으로 보는 동시에 머리속으로 듣습니다.
바흐는 가로 낱말과 세로 낱말이 서로 맞물리면서 모든 것이 그 자리에 있음으로써 맞아떨어지는 퍼즐, 즉 '음표'로 이뤄진 최고의 가로세로 퍼즐을 고안한 것입니다.
바흐에게 음표는 단순히 음향이 아니라 작품 그 자체였습니다. 바흐는 음표를 이용해 십자가를 형상화하거나 예수의 손짓을 묘사하거나 천상으로 올라가는 영혼의 움직임을 나타나는 데 기쁨을 느끼는 사람이었습니다.

결론: 클래식 음악에 대해 뭔가 기초를 제대로 알고 싶다면 이 책을 꼭 읽어보기 바란다. 강력 추천!

EOB

토요일, 3월 22, 2014

[B급 프로그래머] 3월 3주 소식 정리

3월 2주 소식을 정리해봤다. 이번 주는 소식이 조금 적다.

  1. 웹 개발
  2. 개발/관리 도구
  3. 고성능 서버/데이터베이스
  4. 기타 읽을거리

좋은 소식을 물고 4월 초에 다시 뵙겠다.

EOB

토요일, 3월 15, 2014

[독서광] The Performance of Open Source Applications

오랫동안 '독서광'을 기다려주신 독자 여러분들께 기쁜 소식 하나 전하겠다. 이번 주부터 격주로 '독서광' 섹션을 다시 열어 독자 여러분들께 좋은 책을 소개하려 계획 중이다. 오늘은 복귀 기념으로 지난 번에 올려드린 The Architecture of Open Source Applications Volume II의 후속 작품인 The Performance of Open Source Applications를 소개드리겠다.

이 책이 나오게 된 배경은 서문에 나오는 다음 한 문장으로 충분히 설명이 가능하다 본다

However, while hundreds of textbooks explain the basics of operating systems, networks, computer graphics, and databases, few (if any) explain how to find and fix things in real applications that are simply too damn slow.

그렇다. 수 많은 책이 운영체제, 네트워크, 컴퓨터 그래픽, 데이터베이스에 대한 기초 지식을 설명했지만, 실제 애플리케이션이 빌어먹을 정도로 너무 느릴 경우 문제를 찾아 수정하는 방법은 설명하지 않았다. T_T

제목을 보면 알겠지만, 이 (전자)책은 오픈소스 소프트웨어의 성능 부분을 집중적으로 파고든다. 처음 목차를 보고서 직전 AOSA 볼륨 I/II에 비해 꼭지도 줄어들고 슬쩍 넘겨보니 페이지도 얼마 되지 않았기에 큰 기대를 하지 않았는데, 하나씩 읽으면서 개발자들의 숨은 고민과 해법이 많이 나와 은근한 재미를 느꼈다. 본문 중 특히 마음에 들었던 내용은 가장 먼저 나오는 'High Performance Networking in Chrome"으로 구글 크롬이 왜 그렇게 다른 브라우저에 비해 엄청나게 빠른지 숨겨진 비밀을 속 시원하게 설명하고 있다. 이 글을 읽고 나서 크롬 창에서 URL을 입력할 때마다 내부 동작이 자꾸 떠오르는 부작용이 생겼지만 덕분에 웹브라우저에 대한 이해도가 아주 조금 올라간 느낌이다.

이 책은 네트워크, 메모리, 실행 속력, 동기화 등 여러 측면에서 성능을 고민한다. 프로그래밍 언어도 C/C++, 자바, 자바스크립트, Erlang, Haskell 등을 다루고 있으므로, 각 언어별 최적화 관련 특성을 비교하며 읽을 수 있다. 애플리케이션 분야도 웹 브라우저, 웹 서버, 빌드 시스템, XML 파서, 테스트 프레임워크, 분산 프레임워크 등 다양한 부문을 망라하므로 자신의 주요 분야가 아닌 다른 분야에서 성능 개선을 위해 어떤 노력을 했고 어떤 성과를 거뒀는지 엿볼 수 있다. 기존 성능 관련 책이 알고리즘이나 프로그래밍 최적화 쪽에 초점을 맞췄다면, 이 책은 실제 오픈소스 아키텍처 설계와 구현 과정에서 성능을 높이기 위한 실무적인 접근 방법을 소개하고 있으므로 상당히 현실적이다. 오픈소스 소프트웨어 설계자와 개발자들의 고충과 고민, 그리고 시행착오를 엿볼 수 있기에 더욱 공감이 갈 것이다.

결론: 성능과 관련해 고민이 많은 개발자라면 이 책을 꼭 읽어보기 바란다. 강력 추천!

EOB

토요일, 3월 08, 2014

[B급 프로그래머] 3월 1주 소식 정리

드디어 봄이 온 듯이 보인다. 봄맞이 새소식 정리~

  1. 웹 개발
  2. 개발/관리 도구
  3. 고성능 서버/데이터베이스
  4. 기타 읽을거리

3주에 다시 찾아뵙기로 하며, 오늘은 여기까지.

EOB

토요일, 3월 01, 2014

[B급 프로그래머] 아주 뛰어난 프로그래머 사이에서 평균적인 프로그래머로 사는 느낌이 어떤가요?

Quora에 다음과 같은 질문이 올라왔다.

Computer Programmers: What does it feel like to be an average programmer among very talented ones?

한글로 번역하자면, "컴퓨터 프로그래머분들께: 아주 뛰어난 프로그래머 사이에서 평균적인 프로그래머로 사는 느낌이 어떤가요?"

여기에 대해 아주 좋은 대답이 올라와 간략하게 소개드리지 않을 수 없다.

Read Quote of Mattias Petter Johansson's answer to Computer Programmers: What does it feel like to be an average programmer among very talented ones? on Quora

음악이든 프로그래밍이든 주변에 뛰어난 사람이 있어야 성장할 수 있다는 말이다. 최고가 되는 순간부터 쇠락을 맞이한 사람이 어디 한둘인가? 자기가 주변 사람들에 비해 바보같다 느끼지 못하면 그렇게 느껴지는 다른 (더 좋은) 곳으로 옮겨가야 성장의 토대를 마련할 수 있게 된다. 물론 "소 꼬리보다 닭 머리가 좋습니다"라는 속담처럼 반대 의견도 있으므로 어디까지나 선택은 개인의 몫이겠지만 말이다.

보충: 본문 중 댓글에 따르면 Pat MethenyBe The Worst라 인터뷰에서 말한 내용이 원본인 듯이 보이며, 참고 자료로 The Passionate Programmer: Tip 4 Be the Worst를 추천해준다. 재미있게 읽어보시기 바란다. :)

EOB

토요일, 2월 22, 2014

[B급 프로그래머] 2월 3주 소식 정리

2월 1주 소식이 엄청난 인기를 끌었기에 기운내어 3주 소식을 정리해보았다.

  1. 웹 개발
  2. 개발/관리 도구
  3. 고성능 서버/데이터베이스
  4. 기타 읽을거리

따뜻한 3월에 다시 독자 여러분들을 찾아 뵙겠다.

EOB

토요일, 2월 15, 2014

[B급 프로그래머] 루비의 해시 기본값은?

한 동안 NULL 관련 글을 올리지 않았더니 손가락이 근질거려 도저히 못 참겠다. 그래서 오늘은 알면 별거 아니지만 모르면 멘붕이 오는 내용을 하나 소개하겠다. 먼저 다음 루비 코드를 보자.

    def initialize(server_info)
      server_default_info = {}
      server_default_info['id'] = 'root'
      server_default_info['name'] = 'root user'
      server_default_info.each() { |k, v| server_info[k] ||= v }
      @server_info = server_info
    end

위 코드가 무슨 일을 하려 드는지 독자 여러분들은 이미 알고 있을 것이다. server_info에서 넘어오는 정보에 id와 name이 없을 경우 기본값으로 채우는 간단한 작업을 한다. 뭐 더 좋은 방법도 있겠지만, 설명을 위해 단순화한 예제이므로 코드 품질에 대해서는 민원을 넣지 않기 바란다.

자, 그렇다면 5분을 줄테니 위 코드에서 문제점을 하나 찾아보자.






문제점을 발견했는가? 힌트가 필요한 독자라면 Ruby Hash Awesomeness – Part 1을 읽어보고 다시 한번 위 코드를 뚫어지게 쳐다보자.

답은 바로 다음 행이다. 어떤 경우에는 정상적으로 동작하지만 어떤 경우에는 || 메소드가 없다고 죽어버린다. 위 힌트를 읽어보면 알겠지만, 이 문제는 해시를 만들 때, 키-값을 초기화하는 방법이 두 가지기 때문이다. 하나는 특정 키에 대해 아예 값이 없는 경우({} 사용)고 다른 하나는 특정 키에 대해 빈 값이 있는 경우(new 사용)다(독자 여러분들은 다시 한번 NULL의 악몽이 떠오를 것이다).

      server_default_info.each() { |k, v| server_info[k] ||= v }

명시적으로 Hash를 만들 수 있다면 아무 문제도 없겠지만, 만일 상위 수준의 라이브러리에서 Hash를 임의로 만들 경우라면 이야기는 180도 달라진다. 구체적으로 예를 들어볼까? 루비의 YAML과 JSON 라이브러리를 사용해 파싱 결과로 Hash를 얻을 경우 Hash 생성을 위해 YAML은 new를 사용하지만 JSON은 {}를 사용한다는 사실을 알면 갑자기 등골이 오싹해질테다.

자, 이제 결론을 내릴 때가 왔다. 위 코드가 안 죽게 만들려면 어떻게 해야 할까? server_info[k]가 {} 인지 확인하는 루틴을 넣어, 참이면 그냥 값을 바로 대입하게 만들면 된다. 힌트를 아주 충분히 줬으므로 정상 동작하는 코드 수정은 독자 여러분에게 맡기겠다.

EOB

토요일, 2월 08, 2014

[B급 프로그래머] 2월 1주 소식 정리

입춘도 지나 슬슬 봄기운이 느껴지는 시점이다. 오늘도 프로그래머를 위한 각종 소식을 정리해보았다.

  1. 웹 개발
  2. 개발/관리 도구
  3. 고성능 서버/데이터베이스
  4. 기타 읽을거리
EOB

토요일, 1월 25, 2014

[일상다반사] 글로벌 페이를 사용해 페이팔로 송금하기

요즘 해외 직접 구매가 유행하면서 페이팔이라는 서비스의 인지도가 급상승했다는 생각이 들었다. 그런데, 구매뿐만 아니라 복잡한 해외 송금도 페이팔을 사용해 처리할 수 있다. 심지어 하나은행과 거래하는 국내 거주자라면 페이팔에 가입하지 않은 상태에서도 페이팔 송금이 가능하므로 팁을 정리해봤다.

이미 사용하고 계신 분들도 있으시겠지만, 하나은행에서 제공하는 글로벌 페이를 사용하면 정말 손쉽게 송금이 가능하다. 여러분이 필요한 정보는 송금 상대국(주의: 받는 분이 페이팔 계정을 열 때 지정한 국가로, 현재 글로벌 페이로는 '한국'으로 보내지 못한다)과 받는 분의 페이팔 ID만 있으면 된다. 기존 해외 송금 과정에서 요구하는 엄청나게 복잡한 정보와 비교하면 얼마나 간편한지 짐작이 가시리라. 게다가 실시간으로 전송되므로 송금 과정에서 은행 사이의 처리가 끝나기를 기다려야 하는 불편함도 없다(물론 페이팔에서 이렇게 송금받은(아니 충전된) 돈으로 바로 물건을 구매하는 대신 페이팔 계정에 연결된 은행 계좌로 돈을 옮길 경우에는 며칠 걸리기는 한다).

송금 화면을 보면 알겠지만 (심지어) 국내 송금 화면보다도 훨씬 직관적이고 단순하다.

하지만 몇 가지 주의 사항이 있다. 앞서 언급했지만, 받는 분의 페이팔 국가가 '한국'이면 안 되며, 한번 송금 시 1000불 이하만 가능(1월 1일부터 12월 31일까지 누적 1만불 이하)하며, 이메일 주소가 틀릴 경우... 다시 돌려받기가 아주 곤란해진다. 뭐 이 정도 문제는 송금의 편의성, 저렴한 수수료, 환율 우대와 같은 강력한 장점 앞에서 충분히 참을만하다는 생각이 든다. 앞으로 소액 송금(심지어 자기 자신에게 해외 송금할 경우에도 국내 거주자로 하나은행 일반 요구불 계좌를 열고 외국 페이팔 계정을 열어 자기 외국 거래 은행을 연결(참고로 은행을 연결해 놓지 않은 페이팔 계정으로는 글로벌 페이를 사용한 송금이 불가능하다는 사실도 알고 있으면 좋겠다)하면 된다)이 필요한 경우에는 글로벌페이 서비스를 추천해드린다.

그리고 페이팔로 받는 분께 이메일이 전달되는데... 위쪽 페이팔 로고 반대편에 하나은행 로고, 아래쪽에 Hana GlobalPay라는 배너가 붙는다. 국제적인(!) 마케팅 효과가 아주 좋을 듯.

EOB

토요일, 1월 18, 2014

[B급 프로그래머] 1월 3주 소식 정리

2014년 첫 소식을 정리하겠다. 연초라 기술적인 이야기거리가 적어서 출발에 의의를 두겠다. :)

  1. 웹 개발
  2. 개발/관리 도구
    • FactFinder Express: Figure out which component is causing slow performance. Using one monitoring tool. 어디서 문제가 생겼을까? 종합적으로 분석한다는 발상이 재미있음.
    • Logentries: 로그 수집 전용 서비스. (크게 기대는 안 하지만...) 성능만 받쳐주면 아주 좋을 듯.
  3. 고성능 서버/데이터베이스
  4. 기타 읽을 거리
EOB

토요일, 1월 11, 2014

[일상다반사] 모든 분야에서 다 잘하려는 생각은 접어라

어쩌다보니 이번 주도 Quora에 올라온 글을 하나 소개해야겠다. 오늘은 What is the most useful thing you know that most people do wrong?이라는 질문에 붙은 대답 중 하나를 정리한다.

본론으로 들어가기 전에 잠시 예전에 올려드렸던 [독서광] 디퍼런트를 읽어보자. 거의 도입부에 "자신의 단점을 극복하려 노력하지 말고 장점을 극대화하려고 노력하라"는 내용이 나오는데, 오늘도 이와 관련이 깊은 내용이다. 다시 질문으로 돌아가 Sandra Naylor(Author and Entrepreneur)가 올려준 답변을 읽어보면 "모든 분야에서 다 잘하려는 생각은 접어라"는 충고로 시작한다. (요즘와서 특히 더 그렇지만) 우리는 학창 시절부터 거의 모든 분야에서 높은 성적을 올리게 교육받아 왔고 심지어 사교, 운동, 봉사 분야에서도 마당발이 되어야 한다는 압박을 받아 왔다. 이러다보니 스펙형 인간 그 자체가 목표가 되어버리는 아이러니가 생기고 말았다. 이러다보니 진짜 자신(as-is)이 아닌 자기가 그렇게 되어야 한다고 믿는 자신(to-be)의 삶을 사는 것이 유행처럼 번지고 있다. 소위 잘나가는 자기타인 계발서에서 너는 잘 될거야, 너는 잘 할 수 있어, 그런데 안 되면 그건 순전히 너 탓이야를 반복해서 세뇌하고 있기에 거품이 더 커졌을지도 모르겠다. 물론 위대하고 원대하고 멋진 일을 하려면 꿈과 포부가 커야 한다는 사실을 부인하고 싶지는 않지만, 그렇다고 해서 가식적인 삶을 사는 것이 정답인지는 잘 모르겠다.

그러면 어떻게 해야하나? Naylor는 사람들이 잊어먹고 있는 두 가지 중요한 사실을 지적한다. 1) 모든 단점은 장점의 반대면이다. 물론 엄청난 단점을 장점이라 우기고 아무 생각없이 산다면 정말 답이 없긴 하지만 관점을 바꿔 단점을 어떻게 장점화할 수 있는지에 초점을 맞추다 보면 의외로 좋은 결과를 얻을 수 있다. 2) 사람마다 모두 성공의 기준이 다르다. 이는 정말로 천만 다행인 소식인데, 자신에게 정말로 중요한 사항만 골라내(남의 기준이 아니라 자신의 기준!) 우선 순위에 따라 핵심에 집중하고 나머지는 전략적으로 버리는 방법을 택함으로써 안 그래도 부족한 시간을 확보할 수 있기 때문이다.

본문 중에서 가장 마음에 와 닿았던 부분을 소개하며 마치겠다. 주인장 마음대로 내린 결론: 자신의 단점만 보려 들면 실제로 단점만 보인다.

Read Quote of Sandra Naylor's answer to Life Lessons: What is the most useful thing you know that most people do wrong? on Quora EOB

토요일, 1월 04, 2014

[일상다반사] 개인적인 성장을 가속화 하려면?

Quora에 Self-Improvement: How can I accelerate my personal growth?라는 아주 좋은 글이 올라와 독자 여러분들께 소개하지 않을 수 없다. 그 중에 가장 인기 있는 답변인 'Get In Over Your Head. Work To Get Your Head Above Water. And Do It Over And Over Again.'를 중심으로 정리해보겠다.

답변의 요지는 불안/염려와 따분함 사이의 균형이다. Csikszentmihalyi에 따르면 도전이 우리의 기량을 능가할 때 불안감을 느끼게 되며, 우리의 기량이 도전을 능가할 때 따분함을 느끼게 된다. 여기서 기량과 도전이 거의 근접하는 지점이 생기는데, 여기가 바로 불안도 따분함도 없는 flow channel(몰입 채널)이다. 위에 제시한 그림에 나와 있는 A1, A2, A3, A4를 보자. A4는 A1보다 더 좋은 위치다. 기량도 높고 도전도 높으니까. 그렇다면 A1에서 A4로 가는 방법을 고안하면 될 것이다. 독자 여러분들께서 이미 짐작하시듯 두 가지 방안이 있다.

  • 1안: 처음에 A1에서 A2로 움직인 다음 A4에 도달한다. 큰 도전 없이 새로운 기량을 계발한 다음 이런 새로운 기량에 자신감을 느끼면서 따분함이 동반될 때 더 큰 도전을 시도하는 방법이다. 수학 공부를 할 때, 쉬운 문제를 여러 개 풀어 자신감을 획득한 다음 따분해질 무렵 어려운 문제를 푸는 전략이다.
  • 2안: 처음에 A1에서 A3로 움직인 다음 A4에 도달한다. 도전에 걸맞는 기량 없이 일단 뛰어든 다음 발생하는 불안감을 사용해 도전에 맞는 기량을 쌓아올린다. 수학 공부를 할 때, 일단 가장 어려운 문제로 바로 뛰어든 다음 이런 문제를 해결하기 위한 기량을 쌓아나가는 전략이다.

조금더 현실적인 예를 들어보자. 어떤 기술에 대한 책이 있다 가정해보자. 1안은 이 책을 모두 다 독파한 다음 지식을 실제 현장에 적용하는 방식에 가깝다. 2안은 실제 현장에 뛰어든 다음 필요한 지식을 선별적으로 책에서 찾아내 읽는 방식에 가깝다. 하지만 맹목적으로 한 쪽만 따라가면 안 된다. 가장 좋은 효과를 보려면 어떻게 해야 하느냐 하면... 책을 가장 중요한 1/3 정도만 읽고(이렇게 하면 수위가 조금 낮아지는 효과가 있다) 실제 현장에 몸을 담근 다음 숨 쉴 공간이 충분한지 아닌지 확인하고 나서 다시 필요한 부분을 선택해 읽어나가야 한다. 이를 반복하다 보면 어느 순간 늘어난 기량을 확인할 수 있을 것이다.

요주의 사항: 개인의 천부적인 소질과 환경에 따라 최종 지점으로 가기 위해 거쳐야 하는 중간 단계와 투입되는 시간이 사람마다 다를 가능성이 아아주우 높다. 따라서 자신의 실제 능력에 대해 충분히 알고 깊이가 적당한 물에 퐁당 뛰어들어야 하는데(안 그러면 죽을 수도 있다), 시도해보기 전에는 절대 모른다는 함정이 도사리고 있다. 따라서 허둥지둥 기량 무리하게 모든 것을 한 번에 다 걸지 말고 때로는 완급을 조절할 필요도 있겠다.

공지 사항: 그런 의미에서 B급 프로그래머도 읽은 책을 토대로 기량을 높이기 위해 잠수(!)탈 계획이다. 2014년 1/4분기에 책을 0권 읽기라는 목표를 세웠으므로 당분간 [독서광] 섹션은 문을 닫는다. 1/4분기에는 서평이나 개인적인 이야기는 완전히 배제하고 기술(특히 프로그래밍)적인 부분 중에서도 스스로 꼭 기억해야 할 내용만 1~2주일에 한번 꼴로 블로그에 요약 정리할 예정이므로 갑자기 프로그래밍 관련 내용만 열거하는 모양새에 놀라지 마시길...

EOB

목요일, 1월 02, 2014

[일상다반사] 클린 코드 이벤트 사연...

지난번 [일상다반사] 클린 코드 복간 기념 이벤트 결과, 무려 세 분께서 응모해주셨다.

첫 사연은 이정*님께서 보내주셨고, 눈물 없이는 ... 도저히 못 읽는다.

----------------------------------------------
같은 책(구판)을 3회나 구매한 경험이 있어서
제 사연은 억울 쪽인듯 합니다. 


1) 첫번째 구매, (+1)
처음 책이 나오고 얼마되지 않아, 
주변의 여러분들이 좋은 책이니 읽어보고 세미나를 하자는 말에
함께 구매했습니다. 그러나 개인적이고 집단적인 문제로 스케줄 정리가 안되어 
책도 못보고, 세미나는 무산되어 채 읽지도 못한채 책장에 잠들도록 두었습니다.

2) 두번째 구매, (+1)
이후 다른 팀에서 세미나를 한다는 말에 교재를 확인하지 못하고,
단체로 구매, 책장에 잠들어 있던 책과 동일한 책이라는 것을 
나중에 책을 받고서야 확인하게 되었습니다. 
이번에도 업무로 인해 파견, 세미나 참석 못하고, 
다시 책은 고이 책장에 잠들었습니다. 

3) 첫번째 나눔, (-1)
두 권있는 책을 모두 볼 수 없어서, 
한 권을 중고책으로 판매, 중고책이고 공부를 위한 도서라서 저렴하게 판매했습니다.
잠들어 있는 것 보다는 누구라도 책을 보는 것이 좋을 것 같다는 
공유의 정신(?) 을 실천했다는 만족감이 있었습니다.

4) 세번째 구매, (+1)
올해 여름, 다시 이 책으로 세미나를 하자는 사람들의 말에, 
책이 있다고 든든해 했던 것도 잠시
책장에 모셔두었던 책에 빗물이 스며들어, 
이 책을 포함 여러권의 책이 망가지는 상황이 발생,
다시 책을 구매하려고 노력했으나, 절판사태 발생
중고서점을 여러날 여러곳 확인해서,
29,000 원짜리 책을 삼만원 넘게 주고 구매,
(저렴하게 판매한 도서가 생각나서 아쉬웠습니다.)
그런데 세미나는 다시 연기 및 무산 


개정판 출간 소식 확인 (12월초)
정가보다 비싸게 구매해서 아까운 마음도 들어 읽기는 했지만, 
매년 다른 사람들과 함께 원했던 세미나는 제대로 되지 않고,
세미나 시도만 했던, 애증의 도서입니다. 

현재는 제 책상옆에 놔두고 가끔씩 열어 보기도 합니다. 
다른 분들의 사연도 궁금한데요 
어쨌든 내년에는 
이 책의 개정판으로 마음이 맞는 여러 분들과 
세미나를 한 번 열었으면 합니다.
----------------------------------------------

다음 사연은 김*문님께서 보내주셨고, 역시 안타까운(?) 사연이다.

----------------------------------------------
클린코드 복간 버전 소식 듣고 이벤트 응모해봅니다.

자기 계발에 돈 쓰는걸 아끼지 말라.
특히 책사는건 아끼지마라라고 후배들에게 늘 얘기했습니다.
저 자신도 책 사는데 인색한 편은 아니였죠.

그런데 최근 후배들에게 도리어 되물음 당하고 있습니다.
'자기 계발에 돈 아끼지 말라며요?'

그들이 알까요? 돈을 제 뜻대로 쓰다 와이프에게  용돈 받으며 살아야함의 슬픔을.

로버트 마틴 형님 저도 참 좋아하는데요.
구판 소장하고 있고요. 근데 쥐꼬리만한 용돈 갖고 복간본 소식 들으니 소장하고 싶은데 부담이되니.. 이 안타까움 금할길 없습니다.
----------------------------------------------

마지막은 신재*님께서 보내주셨고... 인증샷이 모든 것을 설명한다. T_T

세 분 모두에게 클린 코드 복간판을 보내드리며, 이정*님께는 특별히 클린 코드 복간판 이외에 지난번에 나온 '해커스' 또는 이번에 새로 나올 '피플웨어' 중 원하시는 책 한 권을 보너스로 선물드리겠다. :) 당첨되신 분들께서는 저에게 책 받으실 주소와 전화번호(이번에는 분실(!) 위험이 없게 모두 등기 또는 택배로 보내드린다!)를 알려주세요~

EOB

토요일, 12월 28, 2013

[일상다반사] 기술과 환경

몇 년 전, 지하철을 타고 가다 급한 프로그램 수정 요청을 받아 자리에서 노트북을 꺼내 작업을 한 적이 있었다. 프로그램에 몰입한 상태라 몰랐는데, 10분 정도 지난 다음 정신을 차리고 보니 옆에 중년 신사 한 분이 뚫어지게 내가 하는 작업을 지켜보고 있었다. 그리고 어색하게 말을 거셨다.

실례지만 혹시 무슨 일을 하십니까? 지금까지 제가 본 누구보다 _타이핑_을 빨리합니다.

프로그램을 작성하다보면 정해진 키워드, 변수, 함수, 라이브러리는 거의 한 단위로 입력 가능하므로 옆에서 보기에 엄청난(음... 열악한 노트북 키보드로 500타 이상이 나오지 않을까 싶다) 타이핑 장관이 펼쳐지는 것도 당연하지만... 프로그램 작성 = 타이핑이라는 참신한 시각에 무척 놀랐던 기억이 아직도 새롭다. 하긴 어르신들 세대에 프로그래밍은 지극히 이국적인 행위였을테니 둘 사이 구분을 하지 못하는 현상을 충분히 이해한다.

갑자기 이런 이야기를 꺼내게 된 이유는 요즘 한창 마무리 작업 중인 '피플웨어'에 기술과 환경에 대한 이야기가 나왔기 때문이다. 다음 문구를 읽고나서 거의 기절초풍했다.

디즈니 특별 연구원 앨런 케이는 기술을 '지금 있는데 옛날에 없던 것'으로 정의합니다. 케이는 한 걸음 더 나가 옛날에 있던 것은 이름이 있다고 말합니다. 바로 환경입니다. 우리 세대의 기술은 다음 세대의 환경입니다.

그런데, 이와 관련해 고백을 하나 해야겠다. 컴퓨터를 처음 접한지 수십년이 지났지만 여전히 스마트폰과 태블릿을 사용하면서 뭔가 부자연스럽다는 생각이 머리를 떠나지 않는다. 어렴풋이 이유를 알고 있었지만 피플웨어에 나온 문구를 읽어보는 순간 깨달음이 오고 말았다. 바로 스마트폰과 태블릿을 자연스런 환경이 아니라 인위적인 기술로 보기 때문이다. 요즘 젊은 친구들이 스마트폰을 사용하는 모습을 볼 때마다 스마트폰을 마치 몸의 일부처럼 활용한다는 부러움이 들었는데, 중년 신사분이 내게 느낀 감정 그대로다. 나와 달리 젊은 친구들은 환경 그 자체로 받아들이고 있음이 틀림없다.

최근 초등학교부터 프로그램을 가르치자, 10만 프로그래머를 양성하자, 빅 데이터 전문가 수 천명을 배출하자는 둥 IT 업계와 관련된 여러 담론이 사방에서 나오고 있는데, IT 기술이 더 이상 첨단 기술이 아니라 자연스런 환경이 되버린 상황에서 예전 기술 우위에 입각한 사고 방식으로 얼마나 신새대를 설득할 수 있을지 참으로 궁금하다. 피플웨어에서 뒤에 이어지는 글을 계속 살펴볼까?

20세기 말에는 가정과 학교서는 찾아보기 어려우나 회사에는 존재하는 중요한 기술이 있었습니다. 이제는 그렇지 않습니다. 젊은 프로그래머들에게 컴퓨터, 스마트폰, 웹, 프로그래밍, 해킹, 소셜 네트워킹, 블로깅은 이제 기술이 아니라 환경입니다. 젊은 친구들에게 이런 주제를 놓고 제작 기술에 대해 가르치기가 어려울뿐더러 기술 사용에 따르는 윤리에 관해 떠들어 봤자 소 귀에 경 읽기입니다.

그렇다. 이 기술이 중요하다는 둥 저 기술이 중요하다는 둥 사과 심어라 배 심어라 할 시기는 이미 오래 전에 끝난 듯이 보인다. 따라서 설레발치며 다 된 밥에 재뿌리지 말고 그냥 내버려두기를 간곡하게 희망한다. 다 큰 어른들이 알고 있던 기술 시대는 이미 저물어가니까.

EOB

금요일, 12월 27, 2013

[일상다반사] 클린 코드 복간 기념 이벤트

기쁜 소식을 독자 여러분들께 전해드리겠다. 클린 코드 복간 버전이 Yes24 컴퓨터와 인터넷 부분 'YES24의 선택'에 올라 왔다(정말 얼마만인지 기억도 안 난다. T_T). 기분이 좋은 상태에서 어제 밤 출판사에서 보내준 택배 꾸러미를 열어 복간 버전을 읽어보니 예전 버전에 비해 너무 훌륭했기에 독자 여러분을 위한 이벤트를 열지 않을 수 없었다.

혹시 클린 코드 구판을 구입했는데, 너무나 억울한 사연이 있어(또는 너무나 좋은 사연이 있어) 꼭 복간 버전을 선물로 받아야겠다고 생각하시는 분들이 계시면 2014년 1월 1일 밤 11시 30분까지 jrogue 에뜨 gmail.com으로 사연과 함께 응모해주시기 바란다. 1월 2일에 멋진/슬픈 사연을 소개해드리며 당첨자(기준은 B급 프로그래머의 심금을 울리는 정도에 따라 결정된다)를 발표하겠다.

보너스: 클린코드 애독자라면 책 내용을 정말 일목요연하게 정리한 커닝 페이퍼도 꼭 챙기시기 바란다.

EOB

토요일, 12월 21, 2013

[B급 프로그래머] 12월 3주 소식 정리

2013년 마지막 소식을 정리하겠다. 원래 2013년 한 해를 죽 둘러보려 했으나... 블로그 주인장의 컨디션 난조로 인해 아쉽지만 건너뛰도록 하겠다. 대신 오늘은 넉넉하게 다양한 소식을 정리해드린다.

  1. 웹 개발
  2. 개발/관리 도구
  3. 고성능 서버/데이터베이스
  4. 기타 읽을 거리

올 한 해 성원해주신 독자 여러분들께 감사 말씀을 드리며, 2014년도에는 더욱 좋은 소식으로 찾아뵙겠다.

EOB

수요일, 12월 18, 2013

[독서광] Make : Technology on Your Time Volume 07

2013년을 헛되이 그냥 보낼 수는 없으니, 12월은 몰아서 틈나는 대로 엄청난 독서를 하고 있다. 오늘은 이번에 새로 출간된 Make Vol 07을 독자 여러분들께 소개해드리겠다.

어릴 때, 조립식 장난감을 너무나도 좋아했다(여기 투자한 돈을 차곡차곡 모았다면 지금쯤 고사양 컴퓨터를 몇 대 사고도 남으리라...). 지금 돌이켜 생각해보니, 조립되기 전의 부품과 설계도 만으로 조립된 후의 모양을 추정하면서 상상력을 동원하는 과정이 재미있었던 것 같다. 여기에 평면에 흩어진 부품과 블록이 공간에 자리를 잡아가는 모습을 보며 생각한 내용이 현실화되는 기쁨도 한몫 거들었다. 이번 Make Vol 7.의 특집 기사는 크게 로봇과 키트 두 부문으로 나뉘어지는데, 키트 부문에 바로 하트 뿅뿅~ 목차만 봐도 가슴이 뛸 것이다. 키트와 혁명, 키트의 역사, 키트 제작자 선언, 꿈의 자동차 만들기, 힘들게 사업하기, 길버트: 키트의 아버지, 맥가이버식 의료 서비스, 오래된 키트의 혼. 어느 하나 대충 넘어가기 아까운 내용이 아닌가?

그 중에서도 키트와 혁명에 나오는 내용이 가장 가슴에 와 닿았다. 이미 해커스: 세상을 바꾼 컴퓨터 천재들을 읽은 분들이라면 알고 계시겠지만, 50년대 후반과 60낸대에 걸쳐 MIT의 TMRC의 '직접 해보라!' 강령이 해커 정신의 출발점이었고, 2세대 하드웨어 해커들이 등장하면서 알테어와 애플 I을 비롯한 개인용 컴퓨터 키트가 세상에 선을 보이게 되었다. 물론 대량 생산에 밀려 키트가 자취를 감추는 듯 했으나... 최근에 아두이노, 라즈베리 파이를 비롯해 다양한 DIY용 키트 조립 보드가 등장하고 3D 프린터와 스캐너 등이 등장하면서 다시 한번 키트 애호가들을 위한 세상이 펼쳐지고 있다. 기술의 발전은 이론과 실제가 서로 얽히고 섥혀 진행된다는 로버트 L. 글래스의 날카로운 지적처럼 키트를 활용해 원래 제작 의도와 전혀 무관한 기술적인 탐험을 하다 발견된 실증적인 지식이 네트워크를 타고 급속하게 펴저 나가면서 다시 이론적으로 정립되는 선순환 고리는 정부 기관이나 대학 주도가 아닌 소규모 개인 기업에서 먼저 싹트고 있는 기술 혁신이 뒷받침해주고 있다.

기술 혁신 이야기가 나오니 Vol 7.의 특집 기사 중 로봇과 연결시키지 않을 수 없다. 올 하반기 세간의 화제가 된 그래비티를 보면서 지금까지 본 어떤 영화보다 카메라 움직임이 심상치 않음을 느꼈는데, 나중에 알고 보니 봇 & 돌리(구글이 인수했다)에서 만든 로봇 카메라 시스템이 일등 공신이었다. 흔들리지 않는 화면을 찍어주는 스태디 캠이 나온 이후에 물리적인 카메라 이동 제어 부문에 기술 정체가 온 듯이 보였으나 로봇 기술을 총동원해 어떤 각도와 거리에서도 안정적으로 카메라를 움직일 수 있는 훌륭한 도구가 등장한 셈이다. 백문이 불여일견이니 다음 클립을 한번 보기 바란다(중간에 잠깐 그래비티 촬영 장면도 나온다).

이런 엄청난 물건(!)이 하루 아침에 만들어졌을까? 아마 엄청난 실패와 실험을 거쳐 지속적으로 개선되고 보완된 결과물이 아닐까 싶다. 멋진 영상을 얻고자 손수 제작한 작은 카메라와 원격 조정 로봇이 출발점이라 생각하면 용기가 나지 않는가?

결론: 로봇과 키트 애호가라면 이번 호를 절대 놓치지 말기 바란다!

EOB

월요일, 12월 16, 2013

[일상다반사] 클린 코드 복간 소식!

지난번 [독서광] The Clean Coder에서 로버트 C. 마틴의 '클린 코드' 복간 소식을 여러분들께 전해드린 바 있다. 원고를 처음부터 끝까지 재검토하는 바람에 이제서야 독자 여러분들께 선을 보일 수 있게 되었다. 많은 독자분들께서 과연 새 책을 구입해야 할지 말아야 할지 고민하고 계실텐데, 고민을 조금이라도 덜어드리기 위해 개선된 내용을 정리해보겠다.

  1. 코드에 최적화되게 편집 스타일을 변경했다. 이 부분은 책을 펼치자 마자 가장 크게 느낄 수 있는 변경 사항이라 볼 수 있다.
  2. 전반적으로 코드를 다시 읽으면서 잘못된 부분을 고쳤다(조판 과정에서 잘못된 부분은 물론이고 원서에서 잘못된 부분 포함). 아무래도 코드가 많이 나오는 책이다 보니 상당한 개선점으로 강조할 수 있을 것이다.
  3. 혼란을 일으킬 가능성이 있는 용어를 바꿨다. B급 프로그래머도 자바 쪽으로 주종목이 바뀌면서 다시 읽어보니... 수정이 필요한 용어가 눈에 보였다. T_T
  4. 오역을 몇 군데 잡았다. 심각하지는 않지만 의도를 잘못 전달할 가능성이 높은 부분을 수정했다. 이 과정에서 인사이트 출판사 사장님께서 직접 베타리딩을 해주셨다. 정말 감사드린다.
  5. 주석 등을 재검토해 보완했다.
  6. 부록의 교차 참조 페이지가 엉망이었는데(원서부터 잘못되어 있었다), 이 부분을 수작업으로 하나하나 올바르게 만들었다.
  7. 색인을 원서와 동일하게 다단으로 만들었다. 책을 한번 읽고 나서 다음에 찾아볼 때 무척 편리함을 느낄 것이다.
  8. 표지를 멋지게 만들었다. 물론 기존 표지가 더 마음에 드는 분들도 있겠지만... '클린'의 이미지와 딱 맞는 표지를 찾았다는 생각이다.

현재 예스 24알라딘에서 절찬리에 예약 판매 중에 있다. 참고 삼아 말씀드리자면 이 책은 '인세' 형태로 계약을 맺었으므로 날개 돋힌 듯 많이 팔려 대박이 나면 B급 프로그래머도 기분이 아주 좋아질 것 같다. 아무쪼록 독자 여러분의 많은 성원 부탁드리겠다.

EOB

토요일, 12월 14, 2013

[독서광] 코딩 호러가 들려주는 진짜 소프트웨어 개발 이야기

2013년의 마지막 12월에 좋은 책을 독자 여러분께 연속으로 소개하게 되어 무척 기쁘다. 오늘은 지난번에 소개드린 [독서광] 코딩 호러의 이펙티브 프로그래밍에 이어 후속편이 등장했다는 소식을 접하고 출판사에서 보내준 책을 번개처럼 읽고 소감을 정리해본다. 주인공은 바로 '엉터리 개발자에서 벗어나 진정한 개발자로 거듭나라!'는 부제가 붙은 '코딩 호러가 들려주는 진짜 소프트웨어 개발 이야기'다. 이 책 역시 전편과 마찬가지로 코딩 호러에 실린 글 중에서 재미있는 내용을 선별해 묶은 형태다. 전편을 읽고 나서 더 많은 읽을 거리를 원하는 독자에게 제공하는 보너스 팩이라고 할까?

지난번에도 언급했지만, 이 책은 첫 페이지부터 끝 페이지까지 (소프트웨어 개발에 종사하는) 독자들이 처한 환경과 상황을 다시 한번 돌아보게 만드는 좋은 주제와 소재거리가 가득하므로 읽다 보면 여러 가지 다양한 생각을 하게 만든다. 본문 중에 가장 마음에 드는 내용을 뽑으라고 하면 주저 없이 1부의 "당신은 전문가인가?"와 "하룻밤 사이의 성공: 사실은 몇 년이 걸린다"를 선택하겠다.

전문가가 된다는 것은 다른 사람에게 자기가 아는 것을 말하는 것이 아니다. 그것은 바로 어떤 질문을 할지 아는 것, 자신의 지식을 주어진 특정 상황에서 어떻게 적용할지 아는 것을 의미한다. 전문가가 된다는 것은 합리적이고 상황에 매우 적절한 방향을 제시할 수 있음을 의미한다.
하룻밤 사이에 성공을 거둔다는 개념은 상당히 왜곡된 생각이며, 심지어 위험하기까지 하다. 물론 굼뜨게 행동하는 것을 변명하려는 것은 아니다. 그와 반대로 매우 빠르게 움직여야 한다. 그렇게 하지 않으면 그것은 너무나 먼 장거리 여행이라서 목적지에 도달하지 못할 수도 있다! 근검절약 정신이 중요한 것도 같은 이유에서다. 산의 중턱에 도달했을 때 먹을 것이 다 떨어져서 굶어죽기를 바라는 사람은 아무도 없기 때문이다.

'하룻밤 사이의 성공' 따위는 없다는 조언과 맞물려, 비슷한 맥락에서 NHN 이해진 의장이 말하는 내용도 새겨들을만하다.

사업 성공도 그런 것 같다. 한 번의 천재적인 아이디어에서 나오는 게 아니라 수십, 수백 번의 시도에도 성과가 없다가 절박한 심정으로 다시 한 번 시도하는 것에서 찾아오는 것 같다.

그렇다. 소프트웨어 분야에서도 여느 분야와 마찬가지로 "자고 나니 유명해지더라", 일확천금, 로또는 존재하지 않으며 수 많은 시련과 역경과 고난을 넘어서야만 성공할 수 있다는 말이다. 하지만 어느 시점이 되어야 행운의 여신이 다가올지 모르기에 대다수 사람들이 중도에 포기하지 않나 싶다.

요약: 2013년 하반기 현재 가장 눈에 띄는 추천 개발 서적으로 평가한다!

부록: 본문 맛보기는 여기에서...

부록 2: 본문에 나오는 링크는 코딩 호러의 본문 링크를 확인하고 싶다면?에서...

EOB

화요일, 12월 10, 2013

[일상다반사] 소나: 네이버 댄스?

호랑이 담배피던 시절(2000년도 초기)에 구글 검색 엔진이 실시간으로 색인 작업을 하지 않을 때, 구글이 검색 엔진 색인을 갱신하면 사방에서 난리가 났다. 색인 알고리즘 개선으로 인해 사람이 북적거려 장사 잘 되는 목 좋은 곳에서 쫓겨나는 경험은 누구도 원하지 않았기 때문이다. (지금은 더 이상 사용하지 않지만) 이런 검색 엔진 순위 변경을 일컬어 구글 댄스라 부른다. 소상공인들은 자신의 웹 사이트가 구글 첫 페이지에 나오느냐 마냐에 따라 벌어들이는 수입이 완전 달라졌기 때문에, 키워드 광고 등에 들어가는 비용을 조금이라도 아끼기 위해 검색 엔진 최적화(SEO) 관련 꼼수를 부리곤 했는데... 검색어와 관련 없는 엉뚱한 사이트가 첫 페이지를 가득 채우는 현상이 지속될 경우 검색 결과의 신빙성이 떨어지므로 구글도 지속적으로 다양한(수 백여 가지로 추정한다) 매개변수를 조정하며 검색 순위 알고리즘을 변경하는 방식으로 대응해 오고 있다.

갑자기 구글 댄스 이야기를 왜 꺼냈냐구? 지난 주말부터 네이버에서 이 블로그로 유입되는 트래픽이 급격하게 감소되는 현상을 목격했기 때문이다. 주말이라 검색 대신 야외 활동에 집중한다고 생각했으나... 검색 엔진에 들어가 몇몇 키워드를 입력한 결과를 따져 보니 네이버 ‘검색’ 손질…“원본 문서 먼저 뜨도록” 기사에 나온 소나(SONAR, Source Navigation And Retrieval)를 실제 투입한 것으로 추정하고 있다. 뭐 '컴퓨터 vs 책'이라는 B급 블로그야 어차피 방문객 수에 연연하지 않으니(organic search 결과를 타고 오는 사람만큼이나 트위터/RSS 구독자도 많다. ㅋㅋ) 큰 문제가 없으나... 파워(?) 블로그나 홈페이지 운영자들에게는 멘붕이 올지도 모른다는 생각이 살짝 들었다.

자 그렇다면 소나의 위력이 어느 정도일까? 아주 유감스럽지만 아직 상당한 개선이 필요할 것 같다. 원본 문서를 먼저 노출한다고 했는데, 검색 결과를 보면 정말 '원본' 문서를 먼저 노출하는지 확신이 서지 않는다. B급 블로그는 나름 '원본'만 싣는다고 자부하고(응?) 있는데, 멀쩡히 잘 검색되던 색인에서 많이 지워져버렸기에 졸지에 '짝퉁(!)' 블로그가 되어버린 셈이다. 특히 기존에 잘 검색되었던 '책'과 관련된 글이 모두 순위에서 탈락해버린 신기한 현상을 발견했는데, 앞으로 블로그 글을 계속 올리며 소나가 어떤 반응을 보일지 살펴볼 계획이다.

EOB

토요일, 12월 07, 2013

[독서광] 페르시아의 왕자: 조던 메크너의 게임 개발일지 1985~1993

애플 ][ 애호가라면 분명히 '카라테카'라는 게임도 들어봤을 것이다. 공주를 찾아 악당들과 한 판 승부를 벌이는 격투기 게임의 원조인데, 혹시 모르는 분들을 위해 비디오를 첨부해봤다.

뜬금없이 8비트 게임 이야기를 왜 꺼냈는지 알만한 사람은 다 알겠지만, 오늘 소개할 책의 저자가 바로 '카라테카'를 만든 조던 메크너이기 때문이다. '페르시아의 왕자: 조던 메크너의 게임 개발일지 1985~1993'는 애플 ][와 IBM PC 격투기 게임을 한 단계 더 끌어올린 '페르시아의 왕자'를 만들면서 작성한 일기를 정리한 책이며, 부제와 같이 1985년부터 1993년까지 페르시아의 왕자와 관련된 재미있는 개발 일화, 주변 이야기, 게임 회사 분위기를 잘 드러내고 있다. 해커스를 읽다보면 1982년에서 게임 업계의 시계가 똑 멈춰버리는데, (해커스에도 나온 게임 회사인) 브로드번드를 중심으로 그 뒤에 이어지는 이야기가 궁금한 독자라면 1인칭 시점으로 기술한 이 책이 무척 마음에 들 것이다. 한국에서는 전자책으로 먼저 나왔는데, 애호가들의 입소문을 타고 이번에 종이책으로도 출간되었다.

위키피디아의 페르시아의 왕자 페이지를 보면 알겠지만 그 당시 엄청난 인기를 끌어 정말 다양한 기종에 이식되었다. 다음 비디오를 보면 여러 기종에서 돌아가는 화면을 비교할 수 있을테다. 한국에서는 IBM PC의 보급과 맞물려 게임 애호가들 사이에 퍼지기 시작했는데, 약병 색상을 구분하기 어려운 모토크롬 모니터와 암호 표(복제 방지를 위해 특정 스테이지에서 매뉴얼에서 지시하는 특정 약병을 먹어야 계속 진행되게 만들었는데... 매뉴얼 없이 수많은 시행착오로 이를 다 격파한 친구를 알고 있다. 요즘 잘 지내고 있나?)라는 방해물에도 불구하고 엔딩 화면을 볼 수 있었다(끈기의 한국인!).

이렇게 재미있는 게임을 만드는 과정을 차곡차곡 적어놓았다는 사실 하나만으로 이 책은 충분히 읽고 소장할 가치가 있다고 본다. 메크너는 2010년에 개봉한 '페르시아의 왕자: 시간의 모래'의 각본가로도 활약할만큼 글재주가 좋기에 알찬 내용을 독자들에게 선사한다. 대박 게임을 만들고 나서도 초기에 마케팅 팀의 비협조로 인한 판매 부진, 그 와중에 대본을 쓰고 영화를 만들겠다고 결심해 새로운 길을 개척하는 모험, 독자들의 호평 속에 뒤늦게 베스트셀러 게임으로 등극(+ 수 많은 기종으로 이식)하는 스토리가 서로 잘 어울려 재미도 있고 교훈도 주는 일석이조의 목표를 달성하고 있다.

기술적으로도 흥미로운 이야기가 많이 나오며, 이미지 변환, 복제 방지, 박스 패키지, 기종간 이식 등 1980년대 게임 제작 작업의 주요 흐름을 파악할 수 있다. 페르시아의 왕자를 직접 보신 분들은 느끼겠지만, 그 당시 기술 수준으로 놀랄만큼 자연스러운 사람의 움직임을 보여준다. 기술적인 비밀? 실제 사람(메크너의 동생이 주 모델이었다)이 뛰어다니는 모습을 비디오 카메라로 촬영해 이를 디지타이저로 한 프레임씩 읽어 변환한 결과를 사용했기 때문에 지금 봐도 움직임이 상당히 부드럽다. 지금이야 인물의 움직임을 따는 특수 효과 기술이 상상을 초월하므로 우스울지도 모르겠지만 그 당시 열악한 장비로 휼륭한 효과를 낼 수 있는 이면에는 메크너의 창의성이 숨어있다.

결론: 고전 게임(특히 애플과 초창기 IBM PC) 애호가라면 즐겁게 읽어보기 바란다.

뱀다리: '페르시아의 왕자' 애호가라면 애플 ][용 어셈블리 소스 코드도 놓칠 수 없겠지? ;)

EOB

화요일, 12월 03, 2013

[B급 프로그래머] 12월 1주 소식 정리

어느덧 2013년도 12월로 접어들었다. 추위 건강 조심하시고, 트위터를 중심으로 소식을 정리해드리겠다.

  1. 웹 개발
  2. 개발/관리 도구
  3. 고성능 서버/데이터베이스
  4. 기타 읽을 거리

2013년도 마지막 소식은 2013년 내맘대로 총 정리를 해볼 계획이다. 컴퓨터 기술이 어떤 방향으로 흘러왔는지 함께 살펴보기로 하자.

EOB

토요일, 11월 30, 2013

[B급 프로그래머] 루비 slf4r java_logger의 버그 하나

조금 전문적인 이야기가 될지 몰라 적을까 말까 고민하다, 혹시 jruby에서 slf4r을 사용하다 동일한 문제에 부딪힐지도 모르는 개발자분들을 위해 간략하게 팁을 정리하고 넘어가겠다. 다름이 아니라, jruby에서 Java의 slf4j와 연계해 같은 로그 파일에 기록하려면 slf4r에 속한 java_logger를 사용하면 딱인데, 사소한 버그 하나 때문에 애로 사항이 꽃핀다.

java_logger.rb에서 문제가 되는 코드 일부를 가져와봤다. 눈썰미 있는 독자라면 숨겨진 폭탄을 하나 찾을 수 있을테다. 5분을 줄테니 코드를 검토해 벌레를 잡아보자.

    def #{level}(msg = nil, exception = nil)
      if(@logger.is_#{level}_enabled)
        msg, exception = yield if block_given?
        if(exception.type == NativeException)
          @logger.#{level}(msg, exception.cause)
        else
          @logger.#{level}("\#{msg}\#{format(exception)}")
        end
      end
    end

이미 짐작하는 바와 같이, 위 코드는 exception이 nil이 아닌 경우에만 정상 동작한다. 만일 exception이 nil일 경우 nil에서 type을 찾으므로 런타임 오류가 발생한다. 그렇다면 어떻게 수정하면 문제가 해결될까? 다음과 같이 단순하게 exception.nil?을 사용하는 nil 점검 루틴을 넣어보았다.

    def #{level}(msg = nil, exception = nil)
      if(@logger.is_#{level}_enabled)
        msg, exception = yield if block_given?
        if exception.nil?
          @logger.#{level}(msg)
        else
          if(exception.type == NativeException)
            @logger.#{level}(msg, exception.cause)
          else
            @logger.#{level}("\#{msg}\#{format(exception)}")
          end
        end
      end
    end

연이은 null 연재물로 인해 지금쯤이면 B급 프로그래머를 null 애호가로 부르고 싶을지도 모르겠다. 이렇게 null로 이미지를 굳힌 김에... 다음 시간에 또 다른 null 관련 이야기 보따리를 풀어보겠다. 기대하시라~

EOB

화요일, 11월 26, 2013

[독서광] 실패하는 사람들의 10가지 습관

오늘 소개드릴 책은 빌게이츠가 추천했다는 말을 듣고 호기심이 급상승해 바로 질러버린 '실패하는 사람들의 10가지 습관'이다. 원래 유명인사가 추천하는 책은 조심스럽게 접근하는데, 까다로운 워렌 버핏이 추천 서문을 썼다는 사실을 알고 두 번 고민없이 바로 구매했다. 일단 제목에서 주목해야 하는 단어는 '실패'다. '실패'라는 용어 자체가 금칙어인 한국에서는 흥행 여부는 뭐 안 봐도 DVD라고 볼 수 있겠다(초판 _2_쇄라 적혀있는 판권지를 보며 눈물이... T_T). 이 책은 코카콜라의 전설적인 경영인인 도널드 키오가 자신을 우스갯거리로 만들 각오를 단단히 하고 쓴 아주 특이한 책이다. 보통 유명 CEO가 쓴 책을 읽어보면 결함이라고는 찾아보기 어려우며 모든 역경과 곤란을 극복하며 운 따위는 믿지 않는 인물이 등장하기 마련인데, 이 책은 전혀 그렇지 않다. 코카콜라에서 발생한 각종 실수와 실패를 중심으로 어떻게 이를 인정하고 (약간의 행운까지 활용해) 해결해나가는지 자신의 경험담을 위트있게 기술한 책이라 보면 되겠다.

책을 펼치자 마자 성공하는 방법 따위는 없다는 말로 독자들을 맞이한다. 그리고 자기 조언만 따르면 무조건 실패한다는 주장과 함께 좀더 빨리 실패하는 방법에 대해 단계별로 설명하는 내용이 이어진다. 요즘 나오는 경영/경제서의 특징인 빠른 전개, 풍부한 사례 연구, 화려한 미사여구에 익숙한 독자라면 구석기 시대에 나온 책으로 간주하고 읽다 포기할 가능성도 있지만 의외의 상황에서 깨알 같이 재미를 주는 부분이 나오므로 (독자의 내공에 따라) 교훈과 웃음을 동시에 얻을 가능성도 존재한다. 이 책의 목차가 아주 중요하므로 여기에 한번 더 옮겨보기로 하자.

  1. 모험은 하지마라
  2. 입장을 절대 바꾸지 마라
  3. 자기 자신을 격리 시켜라
  4. 한 치의 오류도 없는 사람인 척 하라
  5. 법은 정도껏 지켜라
  6. 생각할 시간을 갖지 마라
  7. 전문가와 외부 컨설런트를 무조건 믿어라
  8. 관료주의를 사랑하라
  9. 헷갈리는 메시지를 전달하라
  10. 미래를 두려워 하라
  11. 완벽한 실패를 위한 마지막 습관: 일에 대한 열정을 상실하라, 영원히

본문을 읽다보면 나오는 사례나 조언이 기업을 이끄는 아주 높으신 분에게 해당하는 내용이므로 나랑 무슨 상관이 있는지 어리둥절한 느낌이 들지도 모르겠는데, '자신'의 삶을 경영하는 개인에게도 그대로 적용되는 부분이 상당히 많으므로 글자 그대로 읽기 보다는 자신의 습관과 태도와 관련시켜 읽어보면 색다른 깨달음을 얻게 되리라는 생각이다. 개인적으로 대미를 장식하는 "완벽한 실패를 위한 마지막 습관: 일에 대한 열정을 상실하라, 영원히"가 가장 마음에 들었다. 지금까지 지치고 피곤하고 힘들 때 내가 무슨 부귀 영화를 누리겠다고 이 난리를 쳐야하는지 의심이 들며 열정을 상실하는 상황을 여러 차례 접했는데, 그러면 완벽하게 실패한다는 조언을 듣고(완벽하게 실패한 과거 사례가 주마등처럼 스쳐지나가며...) 화들짝 놀라고 말았다. 로버트 C. 마틴 큰 형님께서 언급한, 들어올 때보다 나갈 때 더 깨끗하게(좋게) 만들고 나가야 한다는, '보이스카우트 정신'을 이 책 역시 마지막에서 다음과 같은 교훈으로 정리하고 있다.

처음에 그 일을 맡을 때보다 마무리 지을 때의 상태가 더 나아야 한다고 마음먹고 최선을 다하라.

결론: 이 책을 구입하든 구입하지 않든 위에 정리한 10가지 실패 습관 + 완벽한 실패 습관 목록은 잘 보이는 곳에 두고 힘들 때마다 읽어보면 많은 도움이 되리라는 생각이다. 실패의 비밀을 알고 싶은 분들께 추천!

EOB

토요일, 11월 23, 2013

[B급 프로그래머] 11월 3주 소식 정리

11월 3주도 어느덧 끝나가고 있다. 트위터를 중심으로 들어온 새소식을 정리해드리겠다.

  1. 웹 개발
  2. 개발/관리 도구
  3. 고성능 서버/데이터베이스
  4. 기타 읽을 거리

11월 마무리 잘 하시기 바라며, 12월 1주에 찾아뵙겠다.

정보: 트위터에서 @jrogue를 follow/list하시면 실시간으로 새소식(물론 개발과 전혀 무관한(응?) 다른 정보도 뒤섞이긴 합니다만...)을 보실 수 있습니다.

EOB

토요일, 11월 16, 2013

[일상다반사] 독일에서 생활하면 어떨까?

"규제없는 독일로 오라"…獨, 한국게임업체 '러브콜'이라는 기사에도 나오지만 노르트라인 베스트팔렌(NRW) 주에서 한국 게임 업체에 전폭적인 지원을 아끼지 않겠다는 소식이 트위터를 뜨겁게 달궜다. 게임 개발자여, 독일로 가자!라는 글에서는 일곱 가지 조언을 곁들여 독일에서 주의할 사항도 친절하게 짚어주고 있다. NRW 주에 속한 주요 도시(뒤셀도르프, 도르트문트, 에센)를 왔다갔다한 경험을 토대로 과연 어떤 명과 암이 있을지 한번 생각해봤다.

  1. 맛있는 치맥은 꿈도 꾸지 마라. 독일에서 작은 슈퍼마켓에도 다양한 맥주가 진열장을 꽉 채우고 있다. 맥주뿐만 아니라 와인 역시 애주가들을 반기고 있다. 여기까지는 좋다. 맥주에는 당연히 치킨이 떠오르지만, 독일에서 야식 통닭 배달은 꿈도 꾸지 않는 편이 좋다. 배달 음식이라는 개념 자체가 없으니까. T_T 그리고 일반적인 식재료는 아주 저렴하지만(우유, 치즈, 계란, 빵 가격은 아주 낮게 책정되어 있다), 식당에서 뭘 먹으려면 가격표 앞에서 상당한 용기가 필요하다. 커피도 테이크아웃이 아니라 편안한 의자에 앉아서 먹을 경우 한국의 프렌차이즈 가격을 바로 넘어가버린다(물론 할아버지 할머니들이 자리를 다 차지하고 있으므로 젊은 친구들이 끼어들 분위기가 아니긴 하지만 말이다).
  2. 온돌은 꿈도 꾸지 마라. 독일의 겨울 장마는 악명 높다. 겨울 내내 영하를 조금 내려간 상태에서 가랑비가 오락가락하고(물론 독일 사람들은 어지간한 가랑비에는 우산을 잘 안 쓰는 듯이 보였다) 밤에는 체감 온도가 장난 아니게 떨어진다. 문제는 난방 시설인데, 한국의 온돌 문화에 익숙해있다면 바로 멘붕이 올만큼 형편없다. 뜨거운 물로 공기를 사알짝 데우는 히터가 전부이므로 바닥에 카페트를 깔며, 침대에서 자고, 실내에서도 두툼한 실내화를 신고 돌아다녀야 한다. 현지 필수 품목 중 1위 2위를 다투는 품목이 바로 전기 장판이라는 사실을 알고 있으면 되겠다. 건강하게 지내려면 (남쪽 따뜻한 지방으로 가는) 휴가가 필수라는 이야기가 그래서 나온다.
  3. 빨리 빨리는 잊어먹어라. 운전 면허증 발급부터 시작해 전화/인터넷 설치까지 그야말로 무한한 끈기와 인내가 필요하다. 게다가 담당자가 휴가라도 갔다면, 휴가에서 돌아올 때까지 모든 관련 업무는 중지된다고 보는 편이 정신 건강에 이롭다. 융통성이라고는 찾아볼 수 없기에 맡은 자기 업무 이외 다른 업무는 해주지 않는다.
  4. 에누리를 기대하지 마라. 한국처럼 이리재고 저리재고 목소리가 크면 저렴하게 구입할 수 있는 물건이 별로 없어보인다(시장가서 잘 흥정하면 또 모를까...). 하지만 이게 단점이자 장점이다. 온/오프라인 가격이 일정하므로 어떤 물건을 살지만 결정하면 어디서 구입하나 손해를 보지 않고 살 수 있다. 물건 가격은 한국에 비해 대체로 비싸고 A/S 관련 워런티를 별도로 붙여야 하는 경우가 많고 배송/설치비도 제법 든다. 저렴한 가구 집기의 대명사 이케아가 있잖아? 하지만 배송/설치비가 물건값보다 더 든다는 사실을 알고 가기 바란다(적재함이 넉넉한 자동차가 없으면 가구도 못 산다).
  5. 영어가 100% 통하지는 않는다. (어차피 NRW 주에는 서울/부산처럼 큰 도시도 없지만...) 도심에서 벗어나기 시작하면 영어로 의사 소통이 불가능한 경우가 생긴다. 작은 우체국에 간 적이 있는데, 영어를 아는 직원이 한 명도 없었다. 다행히 독일어 숫자 정도는 읽고 쓸줄 아니까 잘 넘겼다. 하지만 택시를 탔는데 터키 운전사가 독일어로 말을 거는 경우라면? 은행에 갔는데 독일어로 서류를 작성해야 한다면? 기차가 조금 연착되어(독일도 종종 기차 연착이 일어난다. ㅋㅋ) 플랫폼이 바뀌고 있는데, 안내 방송을 유창한 독일어로 한다면? 잠시 방문이 아니라 계속 살아야 한다면 독일어를 모르면 큰 낭패다(바로 뒤에 아주 좋은 예가 나온다). 그리고 영화는 기본적으로 독일어로 더빙되어 나온다. ㅋㅋㅋ
  6. 계약은 문서로 한다. 전화 한통화로 모든 것이 처리되는 한국과는 달리 독일은 문서가 아주 중요하다. 전기/가스요금부터 자동차 보험 계약서 등 모든 계약은 명확하게 문서로 주고받아야 나중에 골치 아픈 일이 안 생긴다. 법정에 출두하더라도 관련 레터만 잘 보관하고 있으면 문제가 없는데, 한국처럼 좋은게 좋을거라고 대충 넘어갔다가는 금전/시간 손실을 감수해야 한다. 그런데... 이걸 독일어로 형식에 맞춰 써야 하는 경우가 생긴다.
  7. 독일 사람들이 모두 다 법을 잘 지키고 남들에게 친절할까? 이건 복불복이라... 각자 상상에 맡긴다. 거기서도 무임승차할 사람은 무임승차하고 사기칠 사람들은 사기치고 도둑질할 사람들은 도둑질한다. 따라서 한국처럼 커피숍에 어서 가져갑쇼~ 하듯 노트북을 내려놓고 화장실가는 우를 범하지 말기 바란다.

이렇게 설명하고 나니 독일에 가지마라는 듯이 들리는데, 독일의 절차에 익숙해지기까지가 힘들어서 그렇지 그 이후부터는 정말 규칙대로 움직이므로 복잡하고 번잡한 것을 싫어하는 사람들에게는 딱 좋은 나라다. 하지만 끊임없이 정치/경제/사회/문화 뉴스거리를 제공하는 역동적인 한국 상황에 익숙하고 그걸 즐기는 사람들이라면 권태/지겨움으로 인해 버티기 어려울지도 모르겠다. 다행스럽게도 규칙을 좋아하는 개발자들에게는 독일이 그렇게 나쁜 선택은 아닌 듯이 보인다.

지금까지 _잡생각_을 늘어놓아봤다. 개인의 주관적인 경험이니 사실과 다른 부분이 존재할 수 있으므로, 잘못된 부분은 댓글로 알려주시기 바란다.

EOB

[독서광] 과학자의 관찰 노트

트위터를 열심히 하다보면 종종 좋은 책을 소개받을 경우가 있다. 오늘은 트위터 뽐뿌질에 넘어가 덥썩 구입해버린 '과학자의 관찰 노트'라는 책을 여러분께 소개해드리겠다. 책 제목보다 조금 작게 쓰여진 '자연을 관찰하고 기록하는 12가지 방법'이라는 부제가 무척 중요한데, 자연사학자, 박물학자, 현장과학자, 자연과학자들이 현장 탐사 과정에서 작성하는 '관찰 노트(Field Note)'를 집중적으로 다룬다.

책을 구입하기 전에 떠올린 이 책에 대한 이미지는 필기의 달인이 작성했을 법한 예쁜 동식물 그림(동식물 도감?), 깔끔하고 깨끗하고 가지런히 정리된 텍스트였다. 하지만 실제 책을 배송받고 펼쳤을 때 예상과 다른 내용이 등장했기에 순간 당황했다. 필기체로 급히 갈겨 써 해독하려면 상당히 노력이 필요한 노트 내용을 보고 공책 정리의 달인이 되는 법 따위는 잊어버리기로 했다(물론 본문 중 몇몇 노트는 그림까지 곁들여 깔끔하게 정리되었기에 귀감이 될만하다). 이 책은 개성이 가득한 총천연색 관찰 노트를 곳곳에 배치하긴 했지만 이는 어디까지나 참고 자료이며, 사실상 자연 탐사 과정의 현장에서 일어나는 다양한 이야기를 '관찰 노트' 작성이라는 주제와 연결해 풀어나가고 있다. 사무실에서 벌어지는 따분한 공책 정리 이야기가 아닌 현장 탐사 장면이 대부분이므로 미국 HBO 미니시리즈인 '지구에서 달까지'의 10편 "갈릴레오가 옳았다'에서 지질학 공부를 위한 현장 학습 장면을 연상하게 만들기도 했다.

이 책은 15명의 현장 전문가들이 각자 자신의 주특기(대상은 아주 다양하다. 동물, 식물, 곤충, 사람, ...)에 맞춰 '관찰 노트'를 어떻게 작성하는지를 설명한다. 아름다운 동식물이나 자연 경관에 대한 화려한 볼거리는 없지만 관찰 결과를 자신, 동료, 후대에 전파하기 위해 쏟아붓는 엄청난 노력이 이 책의 미덕이다. 어릴 때 제법 많은 시간을 야외에서 메뚜기랑 매미도 잡고, 풀도 관찰하고 놀았지만 방학 숙제로 곤충 채집할 때를 제외하고는 어떤 정리나 기록도 하지 않았기에 이 책을 읽고 나서 아쉬움이 많이 들었다. 만일 그 때 기록하는 습관이 들었더라면 지금 완전 다른 모습으로 살고 있을지도 모르겠다. 이 책을 읽으면서 무엇을 얻었냐구? 책 날개 표지에 잘 정리된 자연 탐사와 관찰 노트 작성과 관련한 지은이의 10가지 교훈을 옮겨보겠다.

  1. 관찰을 즐겨라. 그러면 많은 것을 배우게 될 것이다.
  2. 어디라도 상관없다. 흥미로운 것이 있다면 그 즉시 적어라.
  3. 동물을 가까이에서 관찰하고 기록하려면 컴퓨터보다는 수첩이 좋다.
  4. 가능한 한 모든 것을 기록하라. 어디에서 아이디어가 나올지 모른다.
  5. 문장으로 자세하게 기록하는 능력을 길러라.
  6. 관찰한 것을 그림으로 그려라. 잘 그릴 필요는 없다.
  7. 그림을 그리면 관찰 대상을 더욱 자세히 보게 된다.
  8. 관찰 노트를 사진과 파일 등 모든 정보를 하나로 묶는 총사령관으로 이용하라.
  9. 식물 표본의 이름표에는 꼭 들어가야 하는 정보가 정해져 있다.
  10. 컴퓨터를 이용하면 기록 과정을 매우 단순화할 수 있다.
  11. 다른 사람이 쓴 노트를 보고 좋은 점을 취하라.
  12. 관찰 노트를 작성하는 목적에 맞게 자신만의 방식을 설계하라.

이 책의 다른 내용도 아주 좋았지만, 개인적으로는 8장 '왜 스케치를 해야 할까?: 과학 일러스트레이터의 그림 도구'가 가장 마음에 들었다(아니 충격적이었다). 개인적으로 손재주가 없어 그림이라면 질색을 하는 바람에 더욱 그림을 못그리게 되고 파워포인트 등으로 발표 자료 등을 만들 때도 엄청난 곤란을 겪고 있다. 그런데 8장에서 기본 구도를 잡고 간단하게 스케치 하는 방법, 색상을 선택하는 방법, 간단한 도구를 활용하는 방법을 전문가가 아닌 과학자를 위해 설명하는 내용을 보고 무릎을 탁 쳤다. 아니 지금까지 초보자를 배려하는 책이 왜 그렇게 나오지 않았는지 그게 더 궁금한 지경이었다(그래서 강남 교보문고 예술 코너를 돌며 나름 신경을 써서 '초보자'용 스케치/그림 입문서를 찾으려 했으나... 만족할만한 성과를 얻지 못했다). 12장 '나만의 관찰 노트를 만들자'가 그 다음으로 마음에 들었다. 11장까지 나오는 내용을 총정리하는 동시에 다시 한번 자연 탐험과 관찰 노트 작성의 즐거움을 배가하는 각종 팁을 제시하고 있기에 마무리로서 아주 좋은 선택이었다는 생각이다.

결론: 어릴 때 과학자가 되고 싶었던 분들이라면 이 책을 읽으면서 옛날 생각이 많이 날 것이다. 오늘도 현장에서 열심히 뛰어다니는 과학자들의 생동감을 느끼고 싶은 분들께 이 책을 강력하게 추천한다.

EOB

수요일, 11월 13, 2013

[B급 프로그래머] 프로그래머와 NULL, 그리고 Optional

지난번에 올려드렸던 [B급 프로그래머] SQL에서 UNIQUE와 NULL 제약 조건을 많은 분들께서 재미있게 읽어주셨기에, 오늘은 신이 난 김에... 프로그래머 관점에서 NULL을 살펴보기로 하자.

데이터베이스 뿐만 아니라 프로그래밍 과정에서도 NULL은 아주 골치 아픈 존재다. NULL은 실패를 의미하기도 하며, 성공을 의미하기도 하며, 둘 다를 의미하기도 할뿐더러... Map과 같은 자료 구조에서 반환된 NULL은 Map에 키로 조회한 결과 값이 NULL인지 아니면 없는지 구분하기 어렵게 만들기에 주의 깊게 사용하지 않으면 대박 버그를 양산할 가능성을 높인다. 특히 C/C++에 익숙한 개발자라면 습관적으로 NULL을 반환하는 함수를 작성해왔기에 NULL 사용을 특히 조심할 필요가 있다.

자 그렇다면 NULL의 대안이 무엇일까? C++ 프로그래머라면 boost에서 제공하는 Optional을 사용하면 되며, 자바 프로그래머라면 구글이 만든 Guava 라이브러리에서 제공하는 Optional을 사용하면 된다. C++나 자바나 기본 사상은 비슷하므로 실제 자바 코드를 보면서 특성을 파악해보자. 아주 간단한 예부터 살펴보자.

package jrogue
import com.google.common.base.Optional;

public class BasicTest {
    @Test
    public void optionalTest() throws Exception {
        Optional possible = Optional.of(5);
        System.out.println("Is possible present? " + possible.isPresent());
        System.out.println("possible is " + possible.get());
    }
}

Optional은 null이 아닌 값을 포함하거나 아무것도 포함하지 않는다. 위 예에서는 Optional.of() 메소드에 인수로 5를 넘겼기에 isPresent() 메소드가 'true'를 돌려주며, get() 메소드는 값인 5를 돌려줄 것이다. 그렇다면 비어있다는 의미에서 null(응?)은 어떻게 표현할까? 다음 예를 살펴보자.

package jrogue
import com.google.common.base.Optional;

public class BasicTest {
    @Test
    public void optionalAbsentTest() throws Exception {
        Optional absent = Optional.absent();
        System.out.println("Is absent present? " + absent.isPresent());
        System.out.println("absent is " + absent.get());
    }
}

Optional.absent() 메소드는 아무것도 포함하지 않는 상태로 만들어준다. 따라서 isPresent() 메소드가 'false'를 돌려주며, get() 메소드는... "java.lang.IllegalStateException: Optional.get() cannot be called on an absent value"라는 예외를 던진다. 음... try catch로 예외를 잡아도 좋지만 뭔가 다른 처리 방법은 없을까? 다음 예를 살펴보자.

package jrogue
import com.google.common.base.Optional;

public class BasicTest {
    @Test
    public void optionalAbsentOrTest() throws Exception {
        Optional absent = Optional.absent();
        System.out.println("absent or " + absent.or(0));
        System.out.println("absent orNull " + absent.orNull());       
    }
}

or 메소드는 만일 null이 아닌 값을 포함할 경우 해당 값을, 아무것도 포함하지 않을 경우 인수로 넘긴 값을 기본값으로 돌려준다(여기서는 Integer 0을 반환하겠지? 기본값을 잘 활용하면 실행 중 null을 참조함으로써 발생하는 끔찍한 NullPointerException을 쉽게 요리할 수 있을 것이다). 그리고 orNull 메소드는 만일 null이 아닌 값을 포함할 경우 해당 값을, 아무것도 포함하지 않을 경우 'null'을 돌려준다. 자 그렇다면 Optional.of()에 인수로 null을 넘기면 어떻게 될까?

package jrogue
import com.google.common.base.Optional;

public class BasicTest {
    @Test
    public void optionalAbsentAssignTest() throws Exception {
        Optional impossible = Optional.of(null);
        System.out.println("Is impossible present? " + impossible.isPresent());
        System.out.println("impossible is " + impossible.get());
    }
}

지금쯤이면 이미 결과를 예상하고 있겠지만 "java.lang.NullPointerException" 예외를 던진다. of() 메소드는 null을 인수로 받아들이지 않으며, 비어 있는 의미에서 null을 지정하려면 absent() 메소드를 사용해야 한다. 그렇다면 null인지 아닌지 모르는 값을 Optional에 대입할 때 매번 번거롭게 orNull로 점검을 해야할까? 다음 예를 살펴보자.

package jrogue
import com.google.common.base.Optional;

public class BasicTest {
    @Test
    public void optionalAssignTest() throws Exception {
        Integer value_five = 5;
        Integer value_null = null;
        Optional possible = Optional.fromNullable(value_five);
        Optional absent = Optional.fromNullable(value_null);
        System.out.println("Is possible present? " + possible.isPresent());
        System.out.println("Is absent present? " + absent.isPresent());
    }
}

결과는 여러분들이 예상한 그대로다. Optional.fromNullable() 메소드에 Nullable Reference를 넘기면 알아서 처리해준다.

지금까지 Guava의 Optional을 신나게 살펴봤다. null을 넘기는 방식에 비해 번거롭다는 생각이 들지도 모르겠는데, 이게 바로 Guava Optional 설계자의 의도다. 원문을 그대로 가져와볼까?

Besides the increase in readability that comes from giving null a name, the biggest advantage of Optional is its idiot-proof-ness. It forces you to actively think about the absent case if you want your program to compile at all, since you have to actively unwrap the Optional and address that case. Null makes it disturbingly easy to simply forget things, and though FindBugs helps, we don't think it addresses the issue nearly as well.

Optional이 있으면 프로그래밍 과정에서 한번 더 생각해야 하므로 null로 인해 흔히 발생하는 오류를 잡을 수 있게 된다. 하지만 Optional이 절대 null을 완전히 없애버릴 만병통치약은 아니므로, 필요한 상황에서 적절히 활용하면 되겠다.

EOB

토요일, 11월 09, 2013

[독서광] Resonate: 공감으로 소통하라

경제/경영 블로그답지 않게 계속해서 '개발' 책만 소개했는데, 독서의 계절을 맞이하여 본연의 자세로 돌아와 보겠다. 오늘은 'slide:ology 슬라이드올로지 - 위대한 프리젠테이션을 만드는 예술과 과학'에 이은 낸시 두아르테의 신작인 'Resonate: 공감으로 소통하라'를 소개해드리겠다. 이미 슬라이드올로지를 읽어보신 분들이라면 잘 알고 계시겠지만, 이 책 역시 단순히 파워포인트를 사용한 예쁜 발표자료 만들기에 대한 책이 아니다. 차라리 세상을 바꾸기 위해 사람들을 설득하고 공감하게 만드는 방법을 설명하는 책으로 보는 편이 타당하다. 이미 짐작했겠지만, 이 책은 발표 자료 형식이나 구성에 대한 내용은 거의 없기에 기대했던 바와 다른 내용에 당황할지도 모르겠다. 하지만, 프리젠테이션의 목적이 단순 정보 전달을 넘어선 동기 부여와 참여라는 사실을 미뤄볼 때, 프리젠테이션의 가장 기본을 다루는 이런 유형의 책이 형식이나 기교를 다루는 책보다 먼저 나왔으면 더 좋을뻔 했다는 생각이 들었다. 만일 좋은 프리젠테이션의 원리/원칙만 소개하는 선에서 끝났다면 구체성이 결여되어 "So what?"이라는 반응이 바로 나왔을텐데, 이 책 자체도 좋은 프리젠테이션의 형태를 그대로 반영하고 있기에 이 책을 정독하고 나면 분명히 과거와는 달리 프리젠테이션을 바라보는 시각이 바뀌어 있을 것이다.

이 책은 신화, 영화, 예술 분야를 오가며 사람들에게 감동을 주고 변화를 일으킨 여러 요인을 분석해 이를 프리젠테이션에 접목하는 방법을 다룬 학제간 연구서라고 봐도 좋겠다. 특히 후반부에 나오는 모차르트(음악), 히치콕(영화), 커밍스(시), 마사 그레이엄(무용), 레너드 번스타인(지휘)의 사례를 보고 있으면 장인들의 눈물겨운 노력을 느낄 수 있다. 인구에 두고두고 회자되는 뛰어난 작품은 천재들이 그냥 잠깐 생각해 나온 결과가 아니라 끊임없는 연습, 개선, 고민의 결과라는 사실은 한방에 뜨거나 또는 일확천금을 노리는 일반 사람들에게 시사하는 바가 크다. 프리젠테이션 역시 다른 모든 위대한 공연/예술/작품과 마찬가지로 치밀한 기획, 연습, 개선, 피드백이 필요함을 의미한다.

이 책의 가장 중요한 특징을 하나만 꼽으라고 하면, 바로 스파크라인(Sparkline)을 사용한 프리젠테이션 분석이다. 스파크라인은 현실과 이상 사이의 대비, 감정과 전달 방식의 변화를 시간의 흐름에 맞춰 패턴화하는 좋은 도구이므로 다른 발표자의 의도를 객관적으로 분석하는 동시에 한 걸음 더 나가 자신의 스토리텔링을 구축하는 과정에 적합하다. 본문에서는 리차드 파인만, 존 오트버그, 스티브 잡스, 마틴 루터 킹 주니어의 발표 예를 분석해 관중들을 어떻게 들었다 놓았다 울렸다 웃겼다 하는지 시간의 흐름에 따라 주의 깊게 설명하고 있다. Resonate by Nancy Duarte에 가보면 관련된 여러 관련 비디오와 이미지가 나오므로 책(원서 또는 번역서)과 함께 참조하면 좋겠다.

본문에 나오는 몇 가지 좋은 이야기를 정리해보겠다(정말 간만이다. ㅎㅎ)

위대한 발표는 청중을 변화시킨다.
건강한 조직을 유지하려면 변화와 개선이 지속되어야 한다.
설득의 최대의 적은 모호함이다.
감정요소를 배제하고 전문용어로 무장하는 것이 편하긴 하다. 하지만 편한 것이 항상 최선은 아니다.
악당을 물리치는 이야기든 대단한 사업 성취를 이뤄내는 이야기든 누구나 자신이 이야기의 주인공이라 느낄 수 있어야 한다고 했다.
발표자가 겸손한 자세를 취할 때에만 청중은 통찰력을 얻게 되며 공감대가 형성될 수 있다.
"어설픈 시작은 어설픈 결말로 이어지기 마련이다." - 유리피데스
"인간은 웃고 울 수 있는 유일한 동물이다. 오직 인간만이 주어진 현실과 실현 가능한 이상 사이의 차이를 놓고 경악할 수 있기 때문이다." - 윌리엄 해즐릿
모든 청중은 반드시 변해야만 하는 이유가 분명해지기 전까지는 꼼짝도 안 하고 자신의 현재 위치에 안주할 것이다.
편집은 청중을 위한 것이다. 그들은 뭐든 다 들어줄 생각은 갖고 있지 않다.
"특출나게 훌륭한 글에 가위질을 하고 싶은 충동이 느껴진다면 그 충동에 따르라. 전심으로 말이다. 그 글이 공개되기 전에 삭제해버려라. 아끼는 부분을 없애버려라." - 아더 퀼러-카우치 경
"청중은 구조가 확실한 발표를 원한다." - 헨리 M. 뵈팅거
"무엇이든 초안은 형편없기 마련이다." - 어니스트 헤밍웨이
규칙을 아는 것이 중요하다. 그래야만 유연하게 그 규칙을 깨뜨리면서 새로운 의미를 창조할 수 있다.

보너스: 이 책을 간략하게 소개하는 발표 자료를 공유해드리겠다.

결론: 단순 지식 전달을 넘어 프리젠테이션을 공감과 소통의 장으로 만들어 사람들과 세상을 바꾸고 싶은 분들께 적극 추천한다.

EOB