[책]뉴욕의 프로그래머

2007. 12. 31. 16:49나의 서재

뉴욕의 프로그래머 - 10점
임백준 지음/한빛미디어

 

지난 2달 동안 루비 책을 들고 다니느라 힘겨워진 어깨를 조금 쉬도록 하기 위해 이번에는 가벼운 소설책으로 한 권 골라 봤습니다.

어제 오후부터 읽기 시작했는데, 소설이어서 그런지 금새 다 읽어 버렸네요.

덕분에, 루비(Programming Ruby)에 대한 서평보다, 이 책의 서평을 먼저 적게 되었습니다(2007년 한 해를 책에 대한 글로 마무리 할 수 있어 기쁩니다.)

 

우선 작가 임백준씨가 참 부럽습니다.

프로그래머로서 소설을 쓸 정도로 글 재주가 좋다는 건 축복입니다.

비록 소설가다운 멋진 문체가 두드러지는 책은 아니지만, 프로그래머를 꿈꾸는 지망생들이나, 현업에 종사하는 사람들이 이 책을 한번쯤 읽고 많은 공감을 했으면 하는 생각이 듭니다.

저 또한 증권가에서 근무하는 초 하수 프로그래머지만, 책을 읽는 동안 소설에 등장하는 프로그래머들과 제 자신을 거울로 비춰보면서 비교할 수 있는 재미있는 기회가 됐습니다.

일부 제가 생각하는 바와 소설 속에 나오는 해결책이 조금 다른 부분도 있었지만, 이런 분야에 근무하는 프로그래머의 하루 하루를 일반인들이 읽기 쉽게 잘 풀어 쓰셨네요.

덕분에 책을 읽으면서, ‘이 친구 나랑 똑 같네’, ‘ 이쿠, 완전 망했네와 같이 내용에 동의하거나, 같이 걱정하는 부분이 상당히 많았습니다.

 

책에 나오는 뉴욕의 프로그래머와, 역시 서울에서 비슷하기엔 너무 다른 금융 프로그램을 개발하고 있는 저 자신을 비교 해 봤습니다.

 

비교항목

뉴욕의 프로그래머

서울의 프로그래머

활동 무대

뉴욕 월 스트리트

여의도.  혹은 서울 어디 전산실

주요 개발 기술

자바

C++

프로그래머의 지위

전적으로 실력, 수평적 관계

학벌, 지위, 연차, 수직적 관계

평생 프로그래머

50대 후반의 리오처럼, 평생을 프로그래머로서 살아 가는 사람들

코딩할 만하면 30대 초반부터 관리직으로 변신(나 자신도 벌써 VS2005 보다 MS-WORD 가 더 익숙하다 --)

주요 고객

주로 은행, 증권사의 전문 트레이더

일반 고객

배포방식

패키지 형식으로 코드 완료 > 코드 프리지 > 배포(CD ) > 2주간 고객사 테스트 > 프로그램 가동(재설치)

프로그램 시작 시 자동 패치 방식(거의 매일 패치가 다운로드 됨)으로 재 설치 필요 없음

등장 인물들의 Skill

최고 수준의 프로그래머(소설이어서 그런지 일반적으로 이런 건지 궁금함)

내 생각에는 책에 나오는 주인공에 비할바가 못되는 평범한 프로그래머 집단 ^^

프로그램외에 잘하는 일

거의 프로수준으로 잘 하는 일이 하나쯤 있다.

나만 그런지 모르겠지만 주변에 다른 재주 있는 사람이 그닥 없어 보임.

주요 Communication

e-mail 사용

메신저 사용

 

물론 책의 내용이 모두 창작의 결과라고 저자의 말에서 작가가 밝혔지만, 책의 내용은 프로그래머가 금융회사에 근무할 경우 겪을 수 있는 다양한 종류의 문제들, 트레이딩과 관련된 전문적인 분야까지 설명하고 있어서 작가가 이미 두루 경험했고, 실전에서도 여러번 겪었던 내용을 극화시킨 거라 생각됩니다.

그래서 비록 소설이지만, 책에 나오는 등장인물들이 겪는 문제와, 문제를 해결하는 방식, 테스트 방식과 QA 팀 운영방식, 장애에 대처하는 방식에 대한 개발팀의 노하우, 한국과 다른 미국만의 개발팀 문화를 더욱 흥미롭게 읽을 수 있었습니다. (소설로 이런 구체적 사실이 명기된 프로그래머의 현실을 보여주는 책이 나올거라고 생각도 못해 봤습니다)

 

책을 읽으면서 조금 의아했던 부분도 있는데 실시간으로 엄청난 데이터를 처리해야 하는 환경에서 왜 최고 수준의 프로그래머들이 자바로 클라이언트를 만들었을까 하는 의구심이 들었습니다.

웹으로 구현된 프로그램도 아니고, 고객 PC 에 설치되는 프로그램인데, 자바를 사용하는 게 현실적으로 잘 와 닿지 않았습니다.

제가 개발하는 금융 프로그램에서도 거래소나 코스닥에서 쏟아지는 엄청난 거래 데이터를 실시간으로 처리 하기 위해 어쩔 수 없이 C++ 을 통해 개발하고 있습니다.  

아무래도 초당 처리해야 하는 데이터가 엄청나다 보니 다른 대안이 없더군요.

제 개인적인 믿음은 가상 머신 위에 올려져 돌아가는 자바로는 Native C/C++ 의 성능을 따라 올 수 없다고 생각하고 있어서, 소설에서처럼 빠른 사용자 응답이 요구되는 클라이언트에 자바가 사용되는 것이 책을 읽는 내내 마음에 걸렸습니다. (하긴, 대규모 웹 트랜잭션을 처리하는 서버의 경우도 이미 자바, 루비와 같은 스크립트 언어를 사용하는 경우가 대세를 이루더군요. 서버의 경우 돈으로 최고 성능의 서버를 도입해 성능부분을 커버하고, 그 보다는 유지보수와 개발시간을 단축할 수 있는 방법을 선택했다고 믿고 싶습니다.  클라이언트의 경우, 사용자마다 PC가 다양해서 돈으로 고객 PC를 모두 구입해 줄 게 아니라면, 성능을 돈으로 살 수는 없으니까요)


만약 C++(제 개발 환경과 같은) 로 이뤄진 클라이언트를 가정한 소설이었다면, 개발팀이 어떤 테스트 유닛을 가지고, 어떤 프로파일링 툴로 성능을 구하며, 고객 오류 Dump 를 어떤 식으로 자동 보고하고 이를 처리하는 지 좋은 조언을 구할 수(엿볼 수)도 있었을 것 같아서 조금 아쉬웠습니다.

 

또한 늘 돈이 걸려 있는 금융 프로그램 성격상 프로그래머의 작은 방심으로 인한 버그 하나가 고객에게 엄청난 금정적 손실을 가져올 뿐더러 잘못하면 이 때문에 회사를 나가야 할 수도 있는, 그래서 매번 새로운 빌드를 배포할 때마다 엄청난 스트레스에 시달리는 저 같은 금융 프로그래머의 애환을 잘 다루고 있다고 봅니다.

 

실용주의 프로그래머나 기타 개발 관련 책들과 달리, 어떠 어떠 해야 한다라는 주입식 내용이 아니라, 소설을 통해 개인의 역할을 다시 한번 되짚어 보는 좋은 시간이 되었네요.


글쟁이 기술자의 허무맹랑한 글이 아닌 실전의 경험이 구구절절 묻어 나는 개발자들이 이런 책들을 좀 더 많이 적어서 각자 다른 분야에 일하는 개발자가 서로에 대해 보다 잘 이해할 수 있는 계기가 되었으면 합니다.


책에서 건진 기억할만한 내용들

 

페어프로그래밍이 의미를 갖는 것은 물론 공평한 규칙이 지켜지는 것에 한해서이다. 공평한 규칙의 요소는 실력이 아니라 열정이다. 프로그래밍 실력은 차이가 나도 페이프로그래밍을 수행하는데 아무 상관이 없다. 그렇지만 열정의 수준은 동등해야 한다.

(p17)

 

실력이 조금 나은 개발자는 우쭐하기 쉽고, 실력이 모자란 개발자도 자존심이 강해서 섣불리 잘못을 지적하기가 힘든 경우가 많습니다. 실력이 차이는 있을 수 있지만, 팀웍을 위해 서로 협력하고, 실력을 커버할 수 있는 열정이 있다면 개인과 팀을 위해 꼭 필요한 개발자가 될 수 있을거라 생각됩니다.  개인적으로 실력도 있으면서 겸손하고 늘 성실한 개발자가 제일 좋습니다 ^^;

 

소프트웨어 안에 피는 잡초를 제거하기 위해서 반드시 뿌려야 하는 약이 있거든. 그것에 대해서 말하고 있는 거야. 그 약이 뭔지 알겠어?”

그게 뭔데?”

유닛테스트야

(p47)

테스트 주도 프로그램에서도 유닛 테스트를 귀가 따갑게 들었는데, 이 소설에서도 잡초에 뿌리는 약처럼, 일상화 되어야 하는 중요한 도구임을 얘기해 주고 있습니다. 다시 한번 유닛 테스트 도입을 심각하게 고려해 볼 생각입니다.

 

사용자, 현장 지원팀, 테스트가 전하는 버그의 내용을 아무런 의심 없이 덥석 믿어 버리는 것이다.

(p88)

 

오류가 발생했을 때 그 오류 내용을 전달하는 사람 때문에 얼마나 많은 삽질을 했는지 모릅니다. 동일 사이트에 모든 사용자가 문제라고 큰 소리 치더니 확인해 보면 본인 pc 에서만 문제가 있는 경우도 있고, 방금 전에 자기 pc 에서 발생한 현상에 대해서도 엉뚱하게 전달하는 사람들의 말을 곧이곧대로 믿고 전혀 엉뚱한 곳에서 원인을 찾은 경우가 어디 한 두번이라야지요. 어느 정도 적응이 되었다 싶은데도 아직도 가끔은 헤메는 경우가 많습니다. 당할 때마다 분노 게이지는 ㅠㅠ;;

 

너 같은 사람이 존재한다는 사실을 차라리 몰랐더라면 얼마나 좋았을까. 그럼 요즘처럼 밤마다 뜬 눈으로 지새우지 않아도 되었을 텐데

(p143)

 

굿윌헌팅이라는 영화에 나온다는 대사인데..정말 소설에서 처럼 엄청난 천재와 같이 경쟁해야 하는 위치에 있다면 그로 인한 좌절감은 상상을 초월할 듯 합니다. 아직 다행인지 불행인지 제 주변에는 그 정도 천재는 없네요

 

소프트웨어 출시를 둘러싼 이러한 번거로움 때문에 최근에는 월 스트리트에서도 웹을 기반으로 하는 웹 어플리케이션을 추가하는 경향이 많아지고 있다.

(p18)

 

대세가 웹으로 가고 있다는데는 무조건 동의 --;; 하지만, 아직은 웹 브라우저 창에서 제대로 된 실시간 데이터를 처리할 수 있는 메커니즘 따윈 없습니다. RIA 인들 엄청난 성능 저하를 가져올 뿐이고……
배포 문제가 늘 관건이지요.
C/S
프로그램은 설치와 업데이트가 전제 조건이어서 자리를 자주 옮겨다니면서 여러 pc 에서 작업해야 하는 사용자의 경우 설치와 업데이트를 번거러워하고, 클라이언트 프로그램에 버그라도 발견되는 날이면, 해당 모듈을 내리고 패치로 업데이트 하기 위해 발바닥에 땀나도록 뛰어다녀야 하는 경우가 많습니다. 웹의 경우에는 서버프로그램만 잠시 내렸다 다시 올리는 정도로 끝날 수도 있어서 결국 웹으로 가야 이 모든 게 해결 될 거 같네요.

  • 프로필사진
    BlogIcon 괴ㅈ2007.12.31 18:01

    자바를 사용하는 이유는 multi-platform app의 개발을 위해서가 아닐까요?
    프로그래머가 아니라서 잘 모르겠지만 말이죠.

  • 프로필사진
    BlogIcon object2007.12.31 19:11

    멀티플랫폼적인 요소가 아무리 중요하다고해도 저도 자바를 이용한 것을 잘 이해를 못하겠네요. 서버쪽은 사실 대부분이 non-GUI 코드이다보니 실제 계산 위주의 코드로 가면 JIT가 워낙 좋아져서 큰 차이가 없는 것이 사실입니다만, 클라이언트 쪽에서 자바는 거의 망한 것 아니던가요. 요즘 자바로 만들어져서 팔리는 클라이언트는 없잖아요. 좀 의외이긴 합니다~ 오히려 서버에서 C#이나 자바를 쓰는 것은 고개를 끄덕이는데 클라이언트는 글쎄요입니다 아직까진.

    과연 웹어플리케이션이 아닌 일반 어플리케이션의 배포와 업데이트를 쉽게 할 수 있는 방법은 없을까요. 그래도 자동업데이트만 제대로 이루어져도 큰 불편함은 없어보입니다만. 워낙 사람들이 웹 브라우저에 익숙해져서 그걸 벗어나서 무언가 하는 것을 두려워하기 때문은 아닐까 생각합니다.

    좋은 서평 잘 읽었습니다. 저도 한 번 읽고 싶네요.

    • 프로필사진
      BlogIcon esstory2007.12.31 21:07 신고

      서버도 증권관련 서버는 말 그대로 어마어마한 시세를 받아 처리해야 해서 일반 웹 서버와는 비교가 안 될정도로 하는 일이 많습니다. 근데 모 회사의 호스트 시스템 인프라를 자바 엔터프라이즈로 간다는 얘기도 있고 해서 사실 모가 뭔지 잘 모르겠더군요. 그 회사가 망하는지 지켜 보는 중입니다^^;

      배포 문제는, 일반적인 경우 네이트 온과 같이 접속시에만 배포되어도 좋은 점수를 줄 수 있는데, 배포한 모듈에 버그가 있어 즉시 회수하고 새 버전을 내려야 한다면 문제가 조금 달라집니다.
      프로그램에 문제가 있어 잘못된 프로그램으로 주문을 낼 경우 큰 손해 배상이 우려 된다면, 즉시 실행중인 바이너리를 중단하거나, 적어도 고객에게 재접속해 달라고 공지를 해야 하거든요.
      동적으로 로딩한 dll 이면 메인프로그램을 내리지 않고 해당 dll 을 내리도록 서버에서 명령을 내리고 다시 다운로드 받아 실행하도록 할 수도 있는데, 메인과 관련된 모듈일 경우에는 메시지 박스라도 띄어 고객에게 양해를 구하는 수 밖에 없더군요.. 간단치 않은 복잡한 문제가 많습니다 :)

      아직은 한국 사람들 성격이 워낙 급해서 실시간이 거의 안되는(ActiveX 를 제외하고는) 웹으로는 거래를 거의 하지 않기 때문에 어플리케이션이 그나마 살아남아 있지만, 웹에서 구동가능한 빠르고 가벼우면서, 실시간도 문제 없는 그런 기술이 언젠가는 나오지 않을까요:-) 세상은 참 빨리 변하네요..

      object 님 내년에도 학점 잘 따시고 희망하는 결실 얻으시길 바라겠습니다.

  • 프로필사진
    BlogIcon 체강2007.12.31 20:55

    좋은 서평 잘 읽었습니다.^^
    저도 며칠 전에 이 책 읽어서 블로그에 서평이나 남길까 했는데..
    님 글을 링크 시켜야 되겠는데요.

    • 프로필사진
      BlogIcon esstory2007.12.31 21:08 신고

      다시 제 글을 읽어 보니 초등학교 글 같아서 부끄러워 하는 중인데^^; 잘 읽으셨다니 그저 감사할 따름입니다.

  • 프로필사진
    BlogIcon object2008.01.01 01:22

    친절한 답변 감사합니다. 그런 어려움이 있군요. 말씀하신 주제도 참 재밌는 거네요. 사실 저도 2001년에 증권전산원이 보내는 데이터를 받아서 블랙숄즈 알고리즘을 돌려 선물옵션 넣는 프로그램을 만들어 본 적이 있어서... 그 데이터가 얼마나 많이 왔다갔다하는지 감은 잡고 있습니다 -_-; 그리고 버그가 나면 바로 $$$ 인것도 덜덜덜... (물론 저는 옆에서 프로그램만 짜주고 공식과 알고리즘은 선물옵션하는 분들이~)

    @@ 대학원생은 학점은 중요하지 않습니다 ^^

  • 프로필사진
    BlogIcon Hwan2008.01.22 00:24

    제가 일하는 병원도 OCS(order communication system, 처방전달시스템)/EMR(electrical medical record, 전자의무기록)을 쓰는데 Java 기반입니다. 저 역시 왜 java 기반으로 만들었는지 의문입니다. 전형적인 C/S 프로그램이지만, 병원 내부에서만 사용되므로 네트워크에 대한 신뢰성이 높고, client 쪽도 단일 플랫폼(Windows XP)에 하드웨어 사양조차 거의 통일되어 있는 상황이라 개발 환경만 따지면 증권 쪽보다는 훨씬 좋은 편일 것 같은데, 제가 직접 개발하는 입장이 아니라 뭐라 그러긴 그렇지만, 퍼포먼스도 떨어지고 인터페이스도 별로입니다. 결정적으로 안정성도 떨어지죠. 병원 특성상 병동이나 응급실은 24시간 업무가 진행되므로 계속 PC가 켜져 있고 OCS가 실행되는데, 하루에 1, 2번은 PC를 리부팅해야 하는 상황이 옵니다. 잘은 모르겠지만 Java는 메모리가 새거나 할 여지가 없지 않나 싶은데... 뭐 기술적으로 어떻든간에 물론 증권과 같이 실시간으로 데이터를 처리하지 못한다고 손실이 발생하는 것도 아니고 떨어지는 퍼포먼스는 사용자의 인내심으로 커버해도 별로 claim도 없으니 그냥 쓰고 있죠... 병원급 OCS 개발에 투자할 수 있는 인력과 시간이 한정적이라는 것은 이해가 가지만, 유능한 C++ 개발자보다 유능한 java 개발자가 더 흔한 건 아닐 것 같은데...

    쓰다 보니 길어지네요... 나중에 기회되면 부족한 지식으로나마 병원 OCS에 대해 포스팅을 해서 트랙백 남기겠습니다. 여유 되시면 개발자 입장에서 날카로운 의견을 좀... ^^

    • 프로필사진
      BlogIcon esstory2008.01.22 08:26 신고

      병원 같은데서 클라이언트를 자바로 쓴다 --;;
      잘 이해가 안가네요
      속도는 둘째치고, 일반적인 c/s 처럼 자유롭지도 않을텐데 ㅠㅠ;
      제가 C++ 쪽만 개발해서 그런지 자바나 C# 같은 중간코드 언어들은 특히 성능쪽에 의심이 아주 많습니다.
      메모리는 새지 않겠지만 메모리를 자동으로 관리해서 청소하기 때문에, 필요없는 메모리가 아주 오랫동안 상주할 가능성도 있고, 복잡한 수식에는 쥐약일테고 --;;

      클라이언트를 자바로 쓰는 경우를 사실 거의 보질 못해서요. 어떤건지 구경하고 싶어졌습니다 :)
      하루 2번 재부팅이면 그거 정말 심각한거 아닌가요 :)

  • 프로필사진
    BlogIcon 철이2010.05.24 23:44

    안녕하세요. C++를 정말로 잘하고 싶은 학생입니다.
    다름이 아니라 궁금한게 있어 이렇게 글 올립니다.
    C++ 금융관련 개발을 하신다고 했는데, GUI는 뭘로 구현 하는지 정말로 궁금합니다.
    MFC, WIN32, 그리고 QT 뭐 이정도로 알고 있는데요.
    어떤걸로 구현 하는지 궁금하네요, 아니면 C#로 해서 DLL로 사용하시는가요?
    아직 초보라서.. 이정도 밖에 모르겠네요

    • 프로필사진
      BlogIcon esstory2010.05.25 18:46 신고

      제가 하는 프로그램은 처음에는 C 였다가 MFC 와 함께 C++ 로 개발하고 있습니다. VC6 부터 VC 2008 까지 다 이용해서 하구요 ^^;
      금융 특히, 증권쪽은 클라이언트가 C++ 로 만든 경우가 많은데 역시 실시간 처리 속도 때문인 경우가 많습니다.
      그외 웹쪽으로는 자바가 많구요
      도움이 될래나요 :)

  • 프로필사진
    BlogIcon 철이2010.05.24 23:44

    안녕하세요. C++를 정말로 잘하고 싶은 학생입니다.
    다름이 아니라 궁금한게 있어 이렇게 글 올립니다.
    C++ 금융관련 개발을 하신다고 했는데, GUI는 뭘로 구현 하는지 정말로 궁금합니다.
    MFC, WIN32, 그리고 QT 뭐 이정도로 알고 있는데요.
    어떤걸로 구현 하는지 궁금하네요, 아니면 C#로 해서 DLL로 사용하시는가요?
    아직 초보라서.. 이정도 밖에 모르겠네요