Programming in Scala

Programming in Scala 2nd EditionProgramming in Scala, Second Edition

2013년이 시작하고 얼마 지나지 않아 트위터에서 개발자 저마다 개인적으로 2012년의 프로그래밍 언어를 꼽는 것이 유행한 적이 있다. 조금 늦었지만, 내게 2012년 한 해의 언어를 꼽으라면 Scala가 될 것 같다.

가장 큰 이유는 두가지로, 첫번째는, (정확히 세어보지는 않아서 모르겠지만 아마도) 2012년 동안 가장 많은 라인을 코딩한 프로그래밍 언어가 Scala라는 것, 두번째는, Programming in Scala를 읽었다는 점이다.

“The Scala Programming Language”

이 책의 주 저자라고 할 수 있는 Martin Odersky는 바로 Scala 언어의 설계자로, 즉 이 책은 흔히 “The XXX Programming Language”에 해당하는 책이라고 할 수 있다. 책의 내용은 Scala의 전반적인 특징들을 예제를 통해서 익히는 튜터리얼 성격의 도입부와 주요한 문법들을 설명하는 부분, 클래스 라이브러리에 관한 부분으로 나누어져 있다고 볼 수 있는데, 지루해 보이는 예제 프로그램을 여러 장에 걸쳐서 계속해서 써먹고 있다는 것을 빼고는 잘 쓰여진 프로그래밍 언어 서적이라고 생각한다. 따라서, Scala 언어를 공부하고자 한다면 이 책을 읽는 것을 추천해도 무리가 없으리라 생각한다.

Scalable Language

이 책을 읽으면서 Scala 언어를 좋아하게 된 가장 큰 이유 중 하나는, 매우 일반적인 문법 토대를 세우고, 다른 문법 요소나 클래스 라이브러리, Java 언어와의 호환성을 그 위에 일구어 냈다는 것이다. 예를 들어, 패턴 매칭(match…case 구문)이 예외 처리나 Actor에서도 사용되는 것이라든지, 기본형이나 컬렉션 클래스들의 Java 호환성을 implicit conversion을 이용해서 해결하는 것과 같은 것들이다. Java 언어를 공부할 때, 특정한 클래스들이 문법의 요소로 사용되는 것이 마음에 들지 않았는데, Scala는 그런 면에서는 오히려 C++ 언어 template을 이용한 확장성 있는 문법을 보는 듯한 느낌이다. 물론 이 언어의 이름인 Scala도 Scalable Language를 의미하는 것이다.

The Throne Threatened

한편, 최근 몇 년간 나의 과제 중 하나는 JVM 환경에서 적절한 glue language를 찾는 것이었다. 그 과정에서 물망에 올랐던 JRuby는 Java와의 호환성 면에서 프로그래머를 괴롭게 만드는 여러가지 문제들이 발견되어 포기했고 (지금은 해결되었을런지도 모르겠다), Groovy는 초기의 기대에 비해 너무나 인기를 끌지 못해서 다른 사람들을 설득하기가 어려웠는데, 반면, Scala 언어는 Java의 기본형이나 시스템 클래스들, 클래스 라이브러리들과의 호환성이 위에서 언급한 것과 마찬가지로 매우 세심하고 우아한 형태로 준비되어 있는 동시에, 어느 정도는 사람들의 이목을 끌었다는 장점이 있다. 오히려 Java의 개선 방향을 제시해주는 것은 아닐까 생각이 들 정도로 JVM 환경의 언어 수준을 한층 더 끌어올린 것 같다.

Closing

이 책을 읽은 것은 몇 달 전의 일이지만, 이제 Pattern matching과 Actor를 쓰기 시작하는 정도에 익숙해진 정도로 대체로 아직은 Java 코드 수준과 크게 다르지 않은 수준의 코드를 쓰고 있기 때문에, Scala 언어로 쓰인 오픈소스 프로젝트의 코드를 통해 좀 더 Scala다운 스타일의 좋은 코드들을 경험해보는 것이 좋을 것 같다.

Further Reads

 

 

 

Jolt Awards 2012

2012년에도 어김없이 Jolt Awards가 발표되었었는데, 최근에야 생각이 나서 찾아보았습니다. 모두 흥미로운 책들로 보입니다만, Google의 개발 환경을 어느 정도 엿볼 수 있는 How Google Tests Software를 Kindle로 사서 읽고 있습니다.

The Best Books

http://www.drdobbs.com/joltawards/jolt-awards-the-best-books/240007480

Jolt Award

Jolt Productivity Award

Jolt Finalist

Jolt Awards 2011

Excellence Award는 Continuous Delivery, Productivity Award는 Seven Languages in Seven Weeks와 Mining the Social Web이 수상했다. 이들 Top 3 이외에 당장 관심이 가는 책은 Martin Fowler의 DSL 책, Scalability Rules 정도.

The Best Books

http://drdobbs.com/joltawards/231500080

  • Domain-Specific Languages, by Martin Fowler
  • The Art of Computer Programming, Volume 4A: Combinatorial Algorithms, Part 1, by Donald E. Knuth
  • The Joy of Clojure: Thinking the Clojure Way, by Michael Fogus and Chris Houser
  • Seven Languages in Seven Weeks: A Pragmatic Guide to Learning Programming Languages, by Bruce A. Tate
  • Mining the Social Web: Analyzing Data from Facebook, Twitter, LinkedIn, and Other Social Media Sites, by Matthew A. Russell
  • Continuous Delivery: Reliable Software Releases through Build, Test, and Deployment Automation, by Jez Humble and David Farley

The Rest of the Best

http://drdobbs.com/joltawards/231600815

  • Arduino Cookbook
  • CLR via C#, 3rd Edition
  • Data Analysis with Open Source Tools
  • Eloquent Ruby
  • High Performance JavaScript
  • Scalability Rules: 50 Principles for Scaling Web Sites
  • The Software IP Detective’s Handbook: Measurement, Comparison, and Infringement Detection
  • The Rails 3 Way
  • The RSpec Book: Behavior Driven Development with Rspec, Cucumber, and Friends

위대한 리더의 위대한 질문

8994382100_f

위대한 리더의 위대한 질문 | 요코야마 타로 지음 | 홍성민 옮김 | 예인

탄성이 나오는 경영의 성공을 일궈낸 리더들의 질문이라고 해서 그 질문이 정말로 누구에게나 해답을 주리라고는 생각하지 않는다. 하지만, 요즘 방향을 잃고 헤매고 있는 나를 위해 내가 스스로에게 어떤 질문을 해야 하는가에 대해서 적절한 대답을 들을 수가 있었던 것 같다.

자세한 서평은 사족에 불과할 듯 하고 인상 깊은 구절들을 발췌해 보았다.

GE 잭 웰치 전 회장

아무도 실적에 의문을 갖지 않을 때, 게다가 우량기업에서는 종신고용이 당연했던 1980년대 초반에 웰치는 구조조정을 단행했다.

CEO의 지위에 올라 잡다한 사업을 정리할 때 그는 피터 드러커가 던진 질문이 떠올랐다.

"이제까지 이 사업을 안 하고 있었다면, 지금 새로 시작하겠는가?"

웰치는 깊이 생각해봤다. 우리는 과거의 경험에서 벗어나기 어렵다. 전망이 없는 사업에 자본을 계속 투입하다가는 한순간에 모든 기회를 잃게 된다. 이것이 경영이 실패하는 전형적인 과정이다. 웰치는 그렇게 되기 전에 미리 손을 쓰고 싶었다. 당시 GE의 많은 사업군을 재편성하지 않으면 반드시 벽에 부딪힐 때가 온다는 것을 웰치는 확신하고 있었다. 드러커의 질문에 대한 대답이 ‘노’라면 그 사업은 철수해야 한다. ‘예스’라면 다시 드러커의 두 번째 질문으로 넘어가야 한다.

"그럼 그 사업을 어떻게 시작해야 할까?"

웰치는 장래성이 높은 사업군을 중심으로 자사의 영역을 재정리하고 구조조정을 단행했다. GE가 손을 대는 사업은 시장점유율에서 1, 2위가 되어야 한다고 그는 생각했다. 그래서 전망이 없는 사업이나 1, 2위의 지위를 차지했어도 부가가치가 적은 사업은, 드러커의 질문에 ‘참여할 의사’가 없다고 대답해야 했다. 이렇게 해서 장래성이 희박하다고 예상되는 수십 개의 사업이 매각 또는 폐쇄되었다. 이적이나 해고를 당한 종업원 수는 십 수만 명이나 되었다.

유니클로 야나이 다다시 회장

"가장 좋은 회사는 ‘사장이 말한 그대로는 실행되지 않는 회사’가 아닐까?"

모험적인 기업가가 얼마나 더 멀리 나갈 수 있는지는 회사가 성장했을 때 이런 사고방식을 가질 수 있느냐 없느냐에 달려있다. 같은 시각에서 보면 "경영자는 철학적인 본질만을 말해야 한다, 경영자가 일일이 참견을 하면 혼란이 일어난다"라는 지적도 있을 수 있다. 그러나 현실에서는 철학적인 본질만을 말할 수는 없다. 중요한 문제가 발생했을 때 철학적으로 처리하라고 하면 기업은 순식간에 좌초한다. 경영자가 아무리 철학적인 본질만을 이야기한다고 해도 위급한 상황에서는 결국 직원에게 "이렇게 하라!"하고 스스로 책임을 지고 말하게 된다.

NTT 도코모 오보시 고지 회장

"휴대전화와 인터넷을 결합시키는 건 어떨까?"

오보시는 직원들과 상의를 했다. 직원들은 모두들 ‘사장이 또 이상한 이야기를 꺼내는군’하는 반응이었다. <…> 오보시가 기술 담당 임원에게 지시를 내리자, 이는 아주 어렵고 무리한 도전이라는 소극적인 대답이 돌아왔다. 그러자 오보시는 기술 담당 임원에게 이렇게 물었다.

"어려운 일을 하는 사람이 프로가 아닌가요?"

도토루 커피 도리바 히로미치 창업자

"커피숍 사업이 이 세상에 존재하는 의의는 무엇일까?"

우리도 자신의 일이 세상에 존재하는 이유가 무언지 한 번쯤 진지하게 생각해볼 필요가 있다. 물론 그런 자문을 했다고 해서 바로 달라지는 것은 없다. 상사가 좋게 봐주는 것도 아니다. 그렇더라도 스스로에게 자신의 일이 존재하는 이유를 물어보면 마음이 깨끗해지고 미래에 좋은 결과를 가져오게 하는 힘이 될 것이다.

"요즘 코스트 병에 걸렸습니까?"

제품의 질을 떨어뜨려 가격을 인하하는 것은 누구나 할 수 있다. 그러나 그것은 결국 망하는 지름길이다. 경영사에는 그런 사례가 얼마든지 있다.

<…> 사업을 성공시켜 개혁을 이뤄내는 사람은 현실과 현실에서 이끌어낸 가설을 직시한다. 선견성을 갖고 있는 것이다. 따라서 사업에 성공하려면 가설에 맞춰 변하지 않으면 안 된다. "150엔이라면 고객들이 언제든 마셔줄 것이다. 그렇게 하기 위해서 우리는 어떻게 해야 할까?"하고 생각하게 되는 것이다. 변화는 쉽지 않다. 변화에는 혹독한 제약이 있기 때문이다. 그래서 대부분의 사람들은 이 단계에서 사고를 멈춰버린다.

그러나 도리바와 같은 위대한 질문자는 달랐다. 그는 반대로 "어떻게 하면 제약을 제거할 수 있을까?"하고 자문했다. 방법은 찾으면 얼마든지 있으며, 해결책도 발견할 수 있다. 이후에는 일관되게 자신의 의지를 관철시키면 된다. 제약을 제거할 때는 비용만을 생각하는 ‘코스트 병’처럼 본질을 놓쳐서는 안된다.

스즈키 모터스 스즈키 오사무 회장

스즈키 오사무도 기술 쪽은 자세히 아는 것이 없었다. 그래서 고민하고 있는 기술자 옆에서 "스페어타이어는 필요 없다, 재떨이는 빼라"하면서 지시했다. 당시 기술자들은 그의 말에 질린 표정으로 "그런 것으로는 원가를 35만 엔에 맞출 수 없습니다"라고 맞받아쳤다. 스즈키 오사무는 "그렇게 전부 안 된다면, 몸체를 종이로 만들면 어떨까?"라고 끝까지 밀어붙였다. 그러고는 마지막에는 이렇게 물었다.

"그럼 엔진을 떼어버리면 어떨까요?"

세븐 일레븐 스즈키 도시후미 회장

"실패를 왜 두려워하지요?"

그리고 이렇게 덧붙였다.

"실패도 공부입니다."

1990년대 후반 무렵, 그는 볶음밥 상품을 시식하던 중 "이것은 볶음밥이라고 할 수 없다"라고 딱 잘라 말했다. 하지만 이미 점포에서 어느 정도 판매가 되고 있던 상품이었다. 담당자는 그럭저럭 팔리니까 괜찮지 않느냐고 변명을 했다. 그러자 스즈키는 담당자를 호되게 질책하며 물었다.

"그럭저럭 팔리니까 이 정도로도 괜찮다는 겁니까?"

"어떻게 그 제약을 제거할 것인지를 고민해야 소기의 목적을 달성할 수 있지 않을까요?"

내가 사람들을 모아놓고 강의를
할 때마다 자주 느끼는 점은 많은 사람들이 자신의 성공 체험을 말할 때 가장 활기가 넘친다는 것이다. 누구나 자신감을 가져야 하고 의지할 곳이 필요하기 때문에 당연한 모습이다. 그러나 중요한 것은 그 다음 생각이다. 나는 그들에게 종종 묻는다.

"그때의 경험과 현재의 문제에서 무엇이 같고 무엇이 다른가요?"

대부분은 바로 답변을 하지 못하고 오랫동안 생각에 잠긴다. 이것은 그들이 무의식적으로 자신의 경험에 전적으로 의지하고 있기 때문이다. 다시 말하면 자신의 경험에서 빠져나와 문제를 바라보려고 한 적이 전혀 없었다는 얘기다.

혼다 후지사와 다케오 전 부사장

"이런 상태로 평온하게 일에 몰두할 수 있을까?"

승진에 무관심한 사람은 없을 것이다. 후지사와는 연구소를 독립 회사로 만들어 피라미드 구조가 아닌 문진형으로 평평하게 만들어버렸다. 이렇게 되면 과장이 몇백 명이 되어도 이상할 게 없었다. 이러한 구조는 혼다의 성장에 큰 효과를 발휘했다. 기술자들은 기술 개발에만 몰두하는 것이 그들의 역할이라고 생각했다.

맥킨지 아태지역 오마에 겐이치 전 회장

"당신이 그 문제 해결에 관한 모든 권한을 갖고 있다면 무엇부터 시작하시겠습니까?"

대부분의 사람들은 자신의 경험과 권한 범위 내에서 할 수 있는 일만을 생각한다. 이렇게 하면 될 거라는 믿음이 있어도 그 여정이 너무 멀게 느껴지면 생각하기를 멈춰버린다. 그럴 때 이런 질문을 던져보면 그 자리에서 대답하는 사람이 거의 없다. 결국에는 문제를 잘못 이해하는 것을 제외하면, 해결을 위한 아이디어가 떠오르지 않거나 아이디어를 실행할 힘이나 권한이 없는 것 중 하나로 좁혀진다.

이 질문은 양쪽 모두에 작용하는 매우 좋은 질문이다. 어떤 것을 선택해도 자유로운 입장이 주어진다면 누구나 아이디어를 떠올릴 수 있다.

"사장에게 1분밖에 시간이 없다면 당신은 무엇을 말할 것인가?"

강한 인상을 주는 사람은 거의 예외 없이 중요한 이야기를 먼저 꺼낸다. 그것도 자신이 선택한 가장 짧은 단어로 간결하게 말한다. 그들은 그렇게 말하기 위한 준비를 남들보다 많이 한다. 그 정도 준비하면 누구나 할 수 있다.

경영 컨설턴트 후나이 유키오

"당신의 생각은 어떻습니까? 그 일을 진정으로 하고 싶습니까, 하고 싶지 않습니까?"

고객이 "사실은 그다지 하고 싶지 않지만 사정이 있어서……"라고 말하면 후나이는 "그럼 그만두세요"라고 단호하게 말한다. 고객이 "그 일을 하고 싶다"라고 말할 때 다음 질문이 이어진다.

당신은 위기에 처했을 때 스스로에게 이렇게 솔직한 질문을 던져본 적이 이쓴ㄴ가? 하고 싶지 않은 일을 억지로 하는데 성공적인 결과가 있을 수 없다.

자바 성능을 결정짓는 코딩 습관과 튜닝 이야기

자바 성능을 결정짓는 코딩 습관과 튜닝 이야기, 이상민 지음, 한빛 미디어

어떤 것에 대한 지식을 효율적으로 습득하는 방법에는, 그 지식에 관해, 체계적으로 분류하고 정리해 놓은 권위 있는 책을 읽는 방법도 있지만, 잡지와 같이 지식들을 그저 늘어놓은 형태의 정보를 접하는 방법도 있다.

이 책은 후자에 해당하는 책이다. 자바의 코딩 습관에 관한 책이나 자바 성능 튜닝에 관한 문서는 있지만,  경험이 부족한 사람들에게 필요한 것은 정보 자체가 아니라 정보에 대한 좋은 레퍼런스가 필요한 경우가 있다.

잡지의 형식의 특성 중 하나는 필자의 경험에 따른, 시간이나 상황, 독자에 맞는 정보들을 보여 주려고 시도한다는 것이다. 권위가 있는 서적에서는 특성상 시간이나 경험에 따라 변할 수 있는 정보를 보여 주려고 하지는 않는다. 그럼에도 불구하고 현실에 살고 있는 우리들은 시간에 따라 변할 수 있는 정보를 필요로 한다. 예를 들어, 최소한 필자 또는 삼성 SDS에서 자주 쓰는 프로파일링 도구는 무엇인가와 같은 정보가 그러한 정보에 해당하는 것이다. (어떤 성능 튜닝 책에서는 프로파일링 도구를 모두 정리해 놓을 수 있지만, 이 책은 그런 것을 시도한 것 같지는 않다.)

이 책의 다른 미덕 하나는 ‘이야기’와 ‘실제 사례’를 들려주려고 시도했다는 점이다. 필요한 정보만 정리되어 담겨 져 있는 책이나 문서가 아니라, 나 같은 경우에도 ‘이야기’가 담겨 있는 책은 훨씬 접하기가 편안하다. 말하자면, 주말에 편한 의자에 앉아서 시간 때우기 용으로 읽거나 심지어는 화장실에서 읽을 수도 있다는 것이다.

최소한 이 책은 초보자를 위한 자바의 기본적인 코딩 습관, 성능 튜닝에 관한 지식 등으로의 참고 자료 또는 잡지가 되는 것에는 성공했다고 생각한다. 다만, 숙련자가 읽기에는 정보의 깊이라든가 정확성 등은 약간 부족한 면이 있다.

용의자 X의 헌신

용의자 X의 헌신 – 히가시노 게이고 지음, 양억관 옮김, 현대문학

추리물은 원래 좋아하는 편이지만, 책 읽는 양은 요즘 많이 줄어서, 추리 소설을 읽을 기회가 별로 없었는데, 오랜만에 눈에 띄는 소설이 있길래 골랐다.

이야기는 초반부에 독자들에게 살인 사건을 보여 주고, 이 때, 범인 (야스코)과 범행을 감추어 주기 위해 완벽한 계획을 세우는 수학자(이시가미)가 등장하며, 형사(구사나기)와 그의 물리학자 친구(유가와)가 사건을 해결해 나가는 방식이다. 초반부에서는 범행을 감추기 위한 작업, 중반부에서는 수사의 전개가 이어진다. 중반부까지 읽다 보니, 수사의 진척을 통해 범행이 거의 드러나면서, ‘유명세 치고는 시시하군.’이란 생각을 했는데, 문제는 후반부였다. 그야말로 예상치 못한 놀라운 반전이었는데, 중반까지도 평이하다고 생각했던 제목이 드디어 이해가 가던 대목이었다.

사건의 전개 상으로는 두 천재, 이시가미와 유가와의 대결 구도인데, 실제로 유가와는 이시가미의 친구이기 때문에, 유가와는 입을 다물고 묵묵히 지켜 보는 편이고, 이시가미의 역할이 많이 부각되는 편이다. 그리고, 꼭 천재적이어서 라기보다는 수학자나 물리학자의 성격이나 습관에 대한 묘사도 많이 눈에 띄는데, 흔히 그런 것과 달리, 크게 위화감은 없는 정도라서 만족스러웠다.

눈에 자주 띄는 책이라서 고른 것이었는데, 마음에 들어서, ‘히가시노 게이고’의 다른 소설, 그리고 나오키상 수상작들도 골라서 읽어 봐야겠다.

미국 헌법과 인권의 역사

미국 헌법과 인권의 역사, 장호순 지음, 개마고원

우리가 현재 당연하다고 생각하며 누리고 있는 기본권의 혜택들이, 실은 20세기 초에도 제대로 확립되지 않았다는 사실은, 보통 사람들에게는 의외로 잘 알려지지 않은 사실이다.

대한민국이 근대적인 헌법을 기초한 것은 1948년의 일이고, 사회적인 논의나 합의의 과정을 거쳐서 만들어진 것이 아니라, 주어진 것이나 다름없는 헌법이었기 때문일 것이다. 그렇다고 해서, 현대의 미국이나 유럽의 정치사를 접할 기회가 많이 있었던 것도 아니기 때문일 것이다.

일단 나만 해도, 고등학교 교육과정에서도 역사 과목이라고는 ‘국사’ 밖에 없었으며, 공과대학이었던 대학교에서도 ‘한국 근현대사’, ‘정치학’ 정도 수준이 다였기 때문이다.

‘정치학’ 수업에서 본 비디오를 통해 막연히, 영국이나 미국은 오랜 민주주의의 전통을 가진 정치 선진국이라는 이미지를 가지고 있었는데, 처음으로 이러한 이미지가 깨어지기 시작한 것은, ‘포레스트 검프’나 ‘미시시피 버닝’, ‘말콤 X’ 등의 영화를 보면서 알게 된, 남북전쟁 이후에도 지속된 백인들의 강력한 유색 인종 차별이었다. 여성투표권이 주어진 것도 20세기의 일이라는 것은 가히 충격적이었다.

그렇다면, 20세기 동안 무슨 일이 있었기에, 미국 시민들은 현재와 같은 권리를 누리고 있는 것일까? 그동안 미국의 사법제도를 다룬 글이나 책 (미국 헌법과 민주주의)을 통해 약간씩은 알게 되었지만, 미국의 역사를 제대로 알지 못하기 때문에, 내 질문에 초점이 맞춰진 이 책을 가벼운 마음으로 고르게 되었다.

이 책에서는 현재 우리나라의 헌법재판소의 지위에 해당하는 미국의 최고 사법 기구인 연방대법원들의 주요한 판례를 중심으로, 우리가 당연하다고 생각하며 누리고 있는 권리들, 또는 현재도 논란이 되고 있는 이슈들이 어떠한 과정을 통해 논의가 되고 결정되어 왔는가를 읽기 좋게 분야 별로 정리해놓았다.

미국 연방대법원은 역시 오랜 민주주의의 전통을 가진 나라 답게, 헌법을 초안한 국부들의 생각을 존중해, 어떤 헌법 조항이 애매할 경우, 학자들에게 그 조항이 어떠한 배경에서 나왔는지 조사를 요구하는 경우도 있다. 1948년과 1987년의 ‘주어진’ 헌법을 가지고 있는 대한민국으로서는 이해하기 어려운 문화다.

연방대법원은 이러한 헌법에 비추어 해석을 할 가치가 있을 경우에만 사안을 받아들이는데, 미국은 대한민국과는 달리 판례중심주의이고, 이에 따라 연방대법원도 기존의 판례들에 벗어나지 않고, 일관성을 지키는 것을 매우 중요시하며 보수적인 편이다. 그럼에도 불구하고, 이 책에는 기존의 판례를 뒤엎고 새롭게 인권을 보호하기 위한 해석을 내놓은 사례들이 많이 등장한다.

상식적으로, 사법의 과정에서, 정치적, 경제적, 사회적 환경과 독립적으로, 판례 (또는 법 조항의 해석)의 일관성을 지키는 것은 매우 중요한 일이고, 실제로도 미국의 법조계는 그러한 점들을 중요하게 여겼다.

그럼에도 불구하고, 백인과 유색인종 사이의 평등권 문제나, 노동시간 제한 등과 같은 당연해 보이는 문제도, 그러한 환경의 변화에 따라, 연방대법원의 판단은 180도로 달라졌다는 것을 우리는 이 책에서 볼 수 있다. 결국은 정치적, 경제적, 사회적 환경의 변화에 따라, 법의 적용도 달라질 수 밖에 없었다는 것이다. 물론 그러한 일이 자주 일어나서도, 바람직하지 못한 방향으로 일어나서도 안될 것이다. 다만, 기존 법이나 판례 등을 지키는 것만이 중요하지는 않다는 보수주의자를 일깨우는 교훈일 것이다.

판례의 일관성을 깨는 일은 당시의 사회로부터 많은 비판을 받았으며, 기득권 세력으로부터도 많은 비난을 받는다. 그로부터 수십년 후에 태어난 우리는 그러한 결정이 옳았다는 것을 알지만 (그렇게 생각하지만), 그러한 결정을 하는 시점에서 어떤 결정이 역사적으로 올바른지는 어떻게 판단할 수 있을까? 그리고, 올바른 결정을 하기 위한 사법 시스템을 확립하기 위해서는 어떠한 환경과 조건이 필요할까? 미국의 국부들에 의해 쓰여진 국가의 철학, 이를 지켜나가는 것을 전통으로 확립하기 위한 역사, 도그마와 무관하게 자유롭게 의견을 개진해 올바른 방향을 찾아나갈 수 있는 민주주의의 문화 모두가 필요한 것이 아닐까 싶다.

이 책이 다루고 있는 각각의 사안에 대해서, 사회적 분위기 뿐만 아니라, 역사적인 측면, 정치, 경제적인 사건들도 자세히 설명을 하고 있어서, 따로 찾아보지 않아도 될 정도로, 읽기가 매우 편리했다.

다음 번에는 미국의 현대사에 관한 책을 읽어보고 싶다.

Ship It

Ship It by Jared Richardson, William Gwaltney

Ship It은 소프트웨어 개발에 관한 가이드라인을 담은 책이다. ‘도구와 인프라스트럭처’, ‘실용주의적 프로젝트 기술’, ‘예광탄 개발’, ‘일반적인 문제와 해결방법’의 네 부분으로 나뉜다.

‘도구와 인프라스트럭처’는 CVS 또는 Subversion과 같은 코드 저장소, 빌드의 자동화, 이슈 및 기능 추적, 테스트 자동화와 같은 이슈를 다루고 있다. 사실 이러한 도구들을 사용하라는 가이드라인은 흔히 들을 수 있는 이야기지만, 이 장의 마지막 가이드라인인 ‘실험하지 말아야 할 때’에서는 ‘핵심적인 기술을 기술 실험 대상으로 삼아선 안 됩니다’라는 중요한 교훈을 얘기하고 있다. 의욕에 찬 하지만, 경험은 부족한 개발자들이 흔히 하는 실수다.

‘실용주의적 프로젝트 기술’에서 소개하는 목록 사용은 오래 전부터 나나 내가 일하던 팀, 내 주변의 사람들이 실제로 활용하면서 훌륭한 습관임이 증명된 프랙티스다.

일일 회의나 모든 코드의 검토, 코드 변경 통지 등은 내겐 약간 적용하기 힘들어보이는 프랙티스들인데, 각각의 프랙티스는 나름의 장점들을 갖고 있다는 것에 동의하기 때문에 조금씩 적용해 볼 생각이다.

내가 맡고 있는 조직에 주간 회의를 적용하기 시작한지가 수개월 지났고, 현재는 어느 정도 정착이 되어가고 있다. 하지만, 어차피 작업이나 문제 관리를 위한 의사 소통이 매일 일어나는 것을 생각하면, 일일 회의는 의사소통이 예측 가능하게 일어나게 해주고, 때문에 효율적인 의사소통이 가능하게 해주리라 생각한다. (이는 주간 회의를 포함한 ‘정기적인 회의’의 장점일 것이다.) 하지만, 일일 회의를 시행하기 위해서는 주간 회의라는 익숙한 프랙티스를 포기해야 한다. 이와 같이, 어떤 프랙티스가 좋고, 현재의 프랙티스를 대체하자는 얘기는 너무나 쉽지만, 이것을 적용하기 위한 사람들의 지지를 얻고, 대체 과정의 비용을 줄이고, 실제로 잘 적용하는 것은 여러 고민과 많은 노력이 필요한 일이다.

코드 검토의 경우, 이 책에서는 변경을 포함한 모든 코드를 검토해야 한다고 나와있지만, 그보다 온화한 (덜 진보적인) 단계로, 새로운 모듈이나 프로그램, 시스템이 완성되었을 때, 코드 검토를 하는 프랙티스가 경험적으로는 상당히 좋았던 것 같다. 아마도 이를 코드 검토를 시작하는 팀의 마지노선으로 잡으면 될 것 같다. 코드 검토는, 이 책에서 얘기하는대로, 작은 단위로 할 수록 효율과 정확성이 높아지는데, 작은 단위로 리뷰하는 문화를 정착시키는 것은 또 다른 과제다.

현재 팀에는 기술 리더라고 할만한 사람들이 몇 명 있는데, 팀의 한 파트를 책임지고 있는 나도 그 중의 한명이라고 볼 수 있다. 간단하게 말해서, 기술 리더는 기술 업무와 관리 업무를 수행해야 하는데, 둘 다를 수행하는 것은, 한가지만을 수행하는 것에 비해 절대 쉬운 일은 아니다. 가장 중요한 책임 중 하나는 역시 우선 순위의 조정이다. 업무의 목록은 팀원들 각자가 결정할 수 있지만, 우선 순위의 문제는 항상 기술 리더의 책임이다. 요즘 내가 생각하고 있는 것은, 우선 순위 결정을 주간 보고나 주간 회의와 같은 과정에 자연스럽게 연결해 프로세스화 하는 것이다.

‘예광탄 개발’은 일반적인 애자일 개발과 얼마나 크게 차이가 있는지 모르겠고, 굳이 ‘예광탄 개발’이라는 이름표를 달아주어야 하는지 의문인데, 이 글에서는 설명을 생략하도록 한다.

‘일반적인 문제와 해결 방법’은 분류하기 힘든 가이드라인을 모아놓은 부분이라고 볼 수 있는데, 그 중 ‘불한당 개발자’에 대한 대처 방법을 다룬 항목이 흥미로웠다. 고삐를 채울 수 없는 불한당의 경우, ‘불한당의 행동을 문서화하고, 반항적 행동을 문제 삼아 해고해야 한다’는 것이다. 그리고, ‘대부분의 경우엔, 문서화 과정을 시작하는 것만으로도 충격받아 제자리로 돌아온다’라고 한다. 실제로도, 문제를 일으키는 팀원의 경우, 문제점을 지적당하면, 그 근거를 제시하라는 답이 돌아오기도 한다. 이에 대한 정당한 답변은 다른 사람에게 어떻게 얘기했는가, 어떤 예절 바르지 못한 행동을 했는가 등이 아니라, 잘 문서화된 작업 목록 뿐이다. 이런 수단이 악의적으로 사용되어서는 물론 안되겠지만 말이다. 한편, Jeff Atwood의 ‘Dealing With Bad Apple‘이란 글에서는 불한당 또는 Bad Apple은 팀 전체에 악영향을 미치며, 어떤 사람의 능력은 발전할 수 있어도 태도는 변하기 어렵다는 이유로, 빨리 제거하는 방법밖에 없다고 얘기하고 있다.

이 책 전체에서 드러나는 실용주의적 태도 – 어떤 프랙티스가 절대적으로 옳다고 주장하기 보다는 적합한 것을 적용해나가자는 태도 – 는 상당히 마음에 드는 편이다.

내용이나 태도 뿐만 아니라, 구성 면에서도, 하나의 가이드라인마다 마지막에 ‘어떻게 시작하면 될까요?’, ‘제대로 사용하고 있는 걸까요?’, ‘경고 신호’와 같은 섹션을 두어, 이 책에 나온 가이드라인을 실제로 행동에 옮길 수 있는 지침으로 활용하기 좋게 만들어져 있다.

번역은 따로 언급할 필요가 없을 정도로 잘 되어 있는 편이다. 최근에 출판되는 해외에서 유명한 기술 서적들은 평균적인 번역 품질이 예전보다는 많이 좋아진 것 같다.