"이 책을 번역하기로 결정한 과정은 다소 우연이었지만, 번역을 하는 과정에서 내가 평소에 생각하던 부분들이 이렇게 책으로 정리되어 나왔다는 사실에 안도감과 고마움을 느꼈다. 내가 지금까지 경험한 바에 의하면, 이 책을 읽지 않아도 좋은, 원래부터 간결하고 효율적인 코드를 작성하는 능력을 가진 프로그래머는 열에 하나에 불과하다. 자신이 그 하나에 속한다는 확신이 없으면, 이 책을 꼭 읽어보기 바란다"
나는 15년 이상 자바로 프로그래밍을 수행해왔다. 중간에 회사를 옮기면서 C#과 스칼라를 순차적으로 익히게 되었는데, 자바와 다른 언어를 공부하면서 전과 다른 프로그래밍의 맛을 알게 되었다. 그런데 이 '맛'이라는 것이 개인의 흥취하고만 연관된 것이 아니라 어느 정도 시대의 흐름을 반영하고 있다는 생각을 하게 되었다. 이 책은 이러한 나의 생각과 경험을 바탕으로 해서 쓰게 되었다.
오늘날 프로그래밍 언어는 진정한 의미에서의 춘추전국시대를 구가하고 있다. 범위를 JVM으로만 좁혀서 생각해도 (대학이나 연구실에서 만들어내는 실험용 언어를 제외하고) 실제로 현장에서 사용되는 언어 수가 50개가 넘는다. 그중에서 스칼라(Scala), 클로저(Clojure), 그루비(Groovy), 팬텀(Fantom) 등이 자바의 후계자로서 많은 관심을 받으면서 발전하고 있고, 동적언어인 루비나 파이썬 등을 JVM용 언어로 수정한 제이루비(Jruby)나 제이썬(Jython) 등도 심심치 않게 사용되고 있다.
마이크로소프트 닷넷 진영의 CLR 위에서도 비슷한 양상이 펼쳐지고 있다. 앞에서 언급한 언어들이 대부분 CLR에서 동작하는 것은 물론이고 함수형 언어인 F#이 많은 주목을 받고 있다. 요즘은 함수형 프로그래밍 언어에 대한 관심이 상당히 크게 일어나서 해스켈(Haskell), 얼랭Erlang), 오캐멀Ocaml)과 같은 언어들을 이용해서 소프트웨어를 제작하는 사례도 많다. 물론 자바스크립트도 있다. 자바스크립트가 조잡한 HTML 렌더링 도구에 불과하던 시절은 오래전 이야기다. 자바스크립트를 비롯해서 마이크로소프트의 타입스크립트TypeScript)나 구글의 다트Dart를 빼놓고 프로그래밍 언어를 이야기할 수는 없다. 매쓰메티카(Mathematica)라는 작은 성안에서만 안주하다가 최근 들어서 세상 밖으로 머리를 내밀고 있고 울프람(Wolfram) 언어도 있다. 이러한 언어의 나열에는 끝이 없을 정도다.
이러한 상황에서는 단순히 언어를 선택하는 것이 문제가 아니다. 정적타입 시스템 vs 동적타입 시스템, 혹은 객체지향 패러다임 vs 함수형 패러다임과 같이 패러다임을 선택하는 것이 문제가 되는 경우가 많다. 실전 프로그래밍에 대해서 깊고 풍부한 지식을 쌓지 않은 사람에게 패러다임의 선택은 쉽게 내릴 수 없는 어려운 결정이다. 물론 일반적인 프로그래밍을 수행하는 사람들이 이러한 언어와 패러다임을 모두 알아야 할 필요는 없다. 그렇게 하는 것은 가능하지도 않다.
모든 것을 알 필요가 없다고 해서 어떤 하나의 언어와 평생을 함께해도 좋다는 뜻은 아니다. 좋은 프로그래머가 되려면 기본적으로 능숙하게 다루는 언어가 두세 개 정도는 되어야 한다. 그 밖에 다른 언어들에 대해서도 개략적인 흐름 정도는 의식하고 있어야 한다. 자기가 다루는 언어 하나만으로 평생을 '우려먹으려는' 생각을 가지고 있는 사람은 언젠가 도태될 수밖에 없다. 예컨대 C 언어나 자바를 사용하는 프로그래머 중에서 자기 것 이외에 다른 도구는 바라볼 생각조차 하지 않는 사람이 적지 않은데, 어떤 의미에서 이 책은 그러한 사람들에게 새로운 인식의 지평을 제공하기 위해서 쓰였다고 봐도 좋을 것이다.
이 책은 새로운 언어의 문법이나 프로그래밍 테크닉을 학습하기 위한 책이 아니다. 그런 책은 이미 시중에 충분히 많다. 글을 쓰다가 문득 언어의 문법적인 측면을 설명하는 데 집중하고 있는 자신을 발견하고, 쓰던 내용을 모두 삭제한 적이 여러 번 있었다. 언어에 대해서 이야기하려면 구체적인 문법 이야기를 완전히 피할 수는 없지만 이 책에서는 구체적인 문법이나 테크닉과 관련된 내용을 최소한으로 줄이기 위해서 노력을 기울였다. 그렇기 때문에 독자가 사용하는 언어가 자바든, C 언어든, C++든 상관없이 이 책을 즐길 수 있을 것이다.
그동안 팟캐스트, 블로그, 책, 인터넷 사이트 등을 통해서 보고 들은 흥미로운 이야기 중에서 자바, C#, 스칼라에 대한 이야기를 추리고 정리하여 이 책에 담았다. 여기서 이야기라고 함은 내가 생각하기에 재미도 있고 의미도 있을 거라고 생각하는 내용을 두서없이 풀어가는 '잡설'이다. 나는 그런 식으로 흘러가는 이야기를 읽는 것을 좋아해서, 그런 식의 이야기를 쓰는 것도 좋아한다. 그래서 내가 지금까지 써온 책들이 모두 다 그랬듯이, 이 책 또한 도서관에서 자세를 가다듬고 읽는 것이 아니라 버스나 전철 안에서, 화장실이나 식탁 위에서, 잠자기 직전에 침대에서, 읽다가 던지고 읽다가 던지는 가볍고 경쾌한 내용일 거라고 믿는다.
오라일리 헤드 퍼스트 시리즈의 장점을 살린 통계학 입문서
통계는 우리의 일상생활 모든 곳에 존재합니다. 선거일이 다가오면 후보들이 '오차범위' 내에서 경합을 벌이고 있다는 식의 표현이 사용되는 것이 대표적입니다. 전국의 고등학생들은 자신의 등수가 상위 몇 %에 속하는지 의식을 하면서 지내고, 주식투자를 하는 직장인들은 각종 지수의 등락폭이 몇 %인지 확인하면서 시간을 보냅니다. 수없이 이루어지는 설문조사, 마트나 백화점에서 펼치는 할인세일, 인터넷에서의 구글 검색은 모두 통계를 근간으로 하고 있습니다. 무수히 많은 예를 일일이 언급할 것도 없습니다. 통계는 대학에서 통계학을 전공한 사람이나 공학도들의 전유물이 아니라 세상을 살아가는 모든 사람에게 필수과목이 된지 이미 오래인 것입니다. 간단합니다. 통계를 읽지 못하면 세상을 읽을 수 없습니다.
컴퓨터 프로그래밍을 본업으로 삼고 있는 저에게도 통계는 유용한 도구를 제공해 줍니다. 시스템의 성능을 분석해서 결과를 리포트로 작성할 때 평균이나 편차를 구하는 방법, 이상치를 제거하고 결과를 그래프로 나타내는 방법 등이 일상적으로 사용되기 때문입니다. 똑같은 데이터를 이용해서 똑같은 결과를 얻는다고 해도, 통계적 지식을 활용해서 결과를 일목요연하게 정리할 수 있는 사람과 그렇지 못한 사람의 차이는 큽니다. 반대로 어느 사람이 방대한 양의 데이터에 통계를 적용해서 어떤 감춰진 사실을 발견했을 때, 그런 사실이 담고 있는 의미를 제대로 이해하는 사람과 이해하지 못하는 사람의 차이도 큽니다. 그러한 차이는 직장에서의 성공여부에 무시할 수 없는 영향을 줄 것입니다. 특히 현대의 매스미디어는 통계를 이용해서 모종의 이미지를 만들어내는 작업에 능숙한데, 통계에 대한 기본적인 이해가 없는 사람은 그러한 이미지 조작의 주된 대상이 됩니다. 그러한 이미지는 그 자체로 거짓은 아니지만, 어떠한 목적을 위해서 의도적으로 왜곡되어 있기 때문에 진실과 거리가 먼 경우가 많습니다. 그렇지만 통계라는 무기를 제대로 갖추고 있는 사람은 그와 같은 왜곡된 조작을 어렵지 않게 간파할 수 있습니다.
통계가 이렇게 유용하고 필요한 것이긴 하지만, 불행하게도 말랑말랑하고 재미있는 대상은 아닙니다. 통계적 지식을 습득하는 과정은 돌로 만든 빵처럼 딱딱하고, 건조한 수학공식과 전문용어의 산을 넘는 과정을 포함합니다. 그렇기 때문에 통계에 대한 지식을 새로 습득하거나, 고등학교나 대학교 시절에 공부했던 통계학을 다시 한 번 복습하려는 사람은 많은데, 손에 잡은 통계학 책을 끝까지 읽는 사람은 거의 없습니다. 평균을 구하는 방법까지는 어떻게 참고 읽어나간다고 해도, 분산과 표준편차가 등장하고 깨알 같은 그리스 문자가 들어 있는 수식이 나타나면 급격하게 흥미를 잃어버립니다. 통계학 책을 읽는 것 말고도 달리 해야 할 일, 혹은 하고 싶은 일이 너무나 많은 현대인의 삶을 생각해 보면, 지루하고 무심한 통계학 책을 끝까지 읽지 못하는 것을 나무랄 수는 없습니다.
헤드 퍼스트는 이러한 문제를 단숨에 해결해 주고 있습니다. 굳이 설명할 필요는 없겠지만, 헤드 퍼스트 시리즈는 다루고 있는 내용이 알찰 뿐만 아니라, 그 내용을 전달하는 형식이 무척 재미있어서 지루함을 느낄 틈을 주지 않습니다. 건조한 내용에 스토리를 부여해서 책을 읽는 것이 마치 누군가의 이야기를 듣는 것 같은 착각이 일어나도록 하고, 어려운 내용이 나오면 그것을 여러 번 반복해서 독자의 머리 속에 확실히 각인시킵니다. 더구나 이 책의 내용은 (통계를 전공하지 않는 일반인인) 우리가 통계에 대해서 알아야 하는 거의 모든 내용을 망라하고 있어서 일상생활에 많은 도움을 줍니다. 책이 두툼한데다가, 역자가 통계학을 전공한 사람이 아니라서 전문용어를 선택할 때 어려움을 겪긴 했지만, 책의 내용 자체가 재미있어서 번역하는 과정도 즐거웠습니다. 아마 이 책을 읽는 독자들도 틀림없이 즐거움을 맛볼 수 있으리라고 생각합니다. 다만 엉뚱하게 번역된 곳이 있어서 독자들의 즐거움을 방해하지 않았으면 하는 바람뿐입니다. 헤드 퍼스트가 마련한 통계의 잔치에 초대받은 여러분을 환영합니다.