사용자 삽입 이미지

트랙백 주소 :: http://www.epapyrus.com/blog/jeong/trackback/32

댓글을 달아 주세요

최근 서점에 갔다가 놀라게 된 일이 있었다. 직업이 직업인지라 컴퓨터 관련 서적들을 습관처럼 훑어 보게 되는데, 버전 관리 시스템(이하 SCM)에 대한 책들이 꽤 많이 나와 있는 것이다.


놀란 이유는 두 가지다. 하나는 왜 SCM 사용법이 책으로 나와야 하는 것이고, 다른 하나는 왜 요즘에 저런 책이 나오는가 하는 것이다. 아, 그랬던 것이다. 책을 몇 권 뒤져보니 지금까지도 버전 관리 없이 살아온 개발팀이 많았던 것이다.


여기서, 버전 관리의 중요성을 논하고 싶지는 않다. 그 보다는 널리 사용되는 두 종류의 SCM, 마이크로소프트 SourceSafe와 오픈 소스 프로젝트인 CVS에 대한 담론을 해보려고 한다.


SourceSafe(이하 SS)는 어떤 파일에 대해 작업을 하기 위해 체크아웃이라는 절차가 필요하다. 체크아웃을 통해 내가 이 파일을 수정할 예정이니 다른 사람들은 손대지 말라는 선언을 하는 것이다. 수정이 끝나면 체크인을 해서 중앙 저장소에 기록을 하게 되고, 이제 모든 사람들이 이 수정을 자신의 로컬로 가져올 수 있게 된다.


이 방식의 가장 큰 특징은 하나의 파일을 동시에 한 사람만 수정할 수 있다는 것이다. 즉 main.c 파일을 김군이 수정하고 있으면, 이양은 김군이 수정을 마칠 때까지 수정할 수 없다는 것이다. 여러 사람이 작업할 때, 생길 수 있는 충돌을 원천 봉쇄하는 것이다.


CVS는 훨씬 자유롭다. 아무 파일이나 마음 내키는 대로 수정하면 된다. 그리고 수정이 끝나면 커밋(SS의 체크인과 비슷한 개념)을 하면 된다. 그러면 동시에 여러 사람이 같은 파일을 수정하고 커밋하면 어떻게 되냐고? 이런 상황을 충돌이라고 하는데 그런 경우는 동시에 일어난 수정들을 손으로 해결 하거나, 자동에 맡기면 된다.


위의 두 방식은 예전부터 격렬한 논쟁 거리가 되어 왔었지만, 이 이야기를 또 들고 나온 것은 저 물건들의 정치적, 사회적 특성에 대해 재미있는 것을 발견 했기 때문이다.


SourceSafe의 방식은 안전하다. 절대 혼란이 발생할 수가 없다. 어떠한 작업을 하기 위해서는 SCM이라는 중앙 기관의 허락을 받아야 하고, 이 허락 없이는 작업이 불가능 하기 때문이다. 그야 말로 계몽주의의 전형이다. 누가 어떤 파일을 사용하는지 중앙에서 통제한다. 사회의 혼란을 막기 위해서 모든 것을 통제 하는 시스템. 형식의 아름다움이 느껴지지 않는가?


하지만, CVS는 이 형식을 깨버린다. 작업을 하기 전에 중앙의 승인을 받아야 하는 절차를 무시한다. 그저 아무 때나 작업을 하면 된다. 작업을 하기 위한 중앙 저장소의 허락이 필요 없다. 작업이 끝나면 커밋 만 하면 되는 것이다. 더 이상 관리의 주체는 SCM이 아니라, 개인이 된 것이다. 오바를 해 보자면, 개인과 사회의 해방을 이룩한 것이다.

종종 충돌 과 혼란도 일어난다. 하지만, 구조나 형식을 통해서 이 문제를 해결하지는 않는다. 자유와 해방을 위해서 이러한 혼란을 감수한다.


사회, 문화, 예술에 이어 엔지니어링 세계에서도 포스트모더니티가 나타나고 있다.

(이 글은 2006/04/25일 네이버 블로그에 올렸던 글입니다.)

트랙백 주소 :: http://www.epapyrus.com/blog/jeong/trackback/29

  1. Subject: 버전관리 - 작업영역에 대한 오해

    Tracked from 머샤의 인생과 웃기는 고양이 2008/09/17 11:41  삭제

    이글은 이파피루스 대표이신 모던보이님의 글에 트랙백하기 위해서 씁니다. 이파피루스 대표께서 운영하는 블로그에 "버전관리시스템과 포스트모더니즘"이라는 글이 올라왔습니다. 물론 글의 내용은 본인도 상당히 공감하는 통제와 자유화의 관점에서 느끼는 소견이라 사족을 달고 싶지는 않습니다. (동감한다고 해야 할까요?) 하지만, CVS와 SourceSafe의 비교에서 일반 사용자(버전관리 시스템을 개발하는 사람은 아닌)분들이 조금 헷갈려 하시는 부분이 있어 언급..

댓글을 달아 주세요

  1. clue 2008/09/17 04:29  댓글주소  수정/삭제  댓글쓰기

    CVS가 sourcesafe보다 훨씬 먼저 만들어진 소프트웨어죠. sourcesafe는 그래도 90년대일 텐데.

  2. youlsa 2008/09/17 14:01  댓글주소  수정/삭제  댓글쓰기

    CVS를 거쳐 SVN을 쓰고 있는데요, 별로 생각해보지 않은 내용을 지적하셨네요. 그러고 보니 또 그렇다는 생각이 듭니다. 통제의 틀을 다소 넓힌거라고 볼수도 있겠고요.

  3. clue 2008/09/17 15:39  댓글주소  수정/삭제  댓글쓰기

    sourcesafe가 사용하고 있는 lock-modify-unlock 모델은 CVS 전부터 RCS, SCCS 따위시절부터 오랫동안 쓰던 방식입니다. CVS나 SVN은 이런 전통과는 다르게 working copy를 만들어 merge하는 모델을 택했고 매뉴얼을 보면 lock을 하는 것에 대해 문제점과 불필요함을 논하는 부분이 있죠. sourcesafe는 더 나중에 만들어졌음에도 불구하고 lock을 하는 모델을 택했구요.

  4. 모던보이 2008/09/17 16:47  댓글주소  수정/삭제  댓글쓰기

    CVS와 SourceSafe의 앞뒤는 논점은 아닙니다. Clue님이 말씀하신것 처럼 lock-modify-unlock 모델이 더 오래 됬고, 모던 하다는 이야기 이지요. ㅎㅎ

리눅스용 오픈소스 테니스 게임 하나를 소개하겠습니다.

사용자 삽입 이미지사용자 삽입 이미지

요즘 나오는 상용 게임 기준으로 보면 비주얼이 별로라고 생각하실 수 있지만 두가지 재밌는 점이 있습니다.

1. 테니스 선수 출신 프로그래머가 개발한 오픈 소스 소프트웨어 입니다.

테니스 선수와 프로그래머. 꽤 재밌는 두가지 직업이죠? 실제 테니스에서 사용되는 전술들을 직접 적용할 수 있으며, 인공지능이 꽤 똑똑합니다.

2. OCaml로 작성된 소프트웨어 입니다.

2007년말 기준으로 Flying Flog Consultancy에서 발표한 가장 인기있는 OCaml 프로그램 톱10에 들었던 소프트웨어입니다. 선정 기준은 우분투와 데비안에서 인스톨 된 시트수 기준인 것 같습니다. http://ocamlnews.blogspot.com/2007/12/top-10-most-popular-ocaml-programs.html 

아래 링크에서 자세한 설명과 다운로드를 받을 수 있습니다.
http://freetennis.sourceforge.net/

트랙백 주소 :: http://www.epapyrus.com/blog/jeong/trackback/28

댓글을 달아 주세요

일전에 개발 언어 관련해서 KLDP에 글을 포스팅한 적이 있습니다.
http://kldp.org/node/96655

결국 OCaml로 한 번 가보자는 결론을 내렸고 작은 프로젝트 부터 실험적으로 시작해 보고 있습니다.

그나저나 가장 큰 문제는, OCaml에 대해서 별로 경험 없는 사람들끼리 모여서 프로젝트를 하려니 책이나 자료 부족이 가장 큰 문제네요. 한글 책은 없어 보이고요.

혹시 ML 또는 functional language을 배우고 싶은 분들을 위해 책 한권 소개 하겠습니다.

The Little MLer
Matthias Felleisen and Daniel P. Friedman

 
with a foreword by Robin Milner
and drawings by Duane Bibby

사용자 삽입 이미지

이 책은 어려운 개념을 쉽게 잘 설명한다는 점에서 가장 큰 점수를 주고 싶습니다. 왼쪽과 오른쪽으로 나누어져 질문과 답변의 형식에 약간의 유머가 들어 있어 쉽게 읽을 수 있고요.
특히 함수형 언어에 대해 경험이 없는 프로그래머들에게 ML의 타입 시스템, 표현식, 고차 함수, 람다 캘큘러스 등을 잘 설명해 줍니다. 특히 Imperative language에 익숙한 독자들이 재귀적으로 생각하는 틀을 만들어 주는데 많은 도움을 줍니다.
또 한국 독자들에게는 쉬운 영어로 쓰여져 있다는 점도 큰 메리트이겠군요.

책은 SML을 기본으로 사용하고 있지만, 복잡한 문법이 없고 책 앞부분에서 OCaml의 경우에 대한 언급이 있으므로 별다른 문제는 없습니다.

참, Lisp에 관심이 있는 독자라면 The Littler Schemer도 추천합니다.

트랙백 주소 :: http://www.epapyrus.com/blog/jeong/trackback/27

댓글을 달아 주세요

어떤 프로그래밍 언어가 가장 인기 있는지 (널리 사용되는지)에 대한 비교가 여러가지 있는데 TIOBE programming community index 가 그 중 하나 입니다. TIOBE라는 회사에서 내는 인덱스로 검색엔진을 이용해 인기도를 측정하는 것 같습니다.

사용자 삽입 이미지

2008년 7월 기준으로 역시 1위는 Java입니다. 21.345%의 점유율이네요. 2, 3위는 C, C++로 16%, 11%를 차지합니다. Powershell이 15위를 차지했네요.

패러다임별로 보자면 객체 지향 언어가 압도적으로 56.6%를 차지했습니다. Functional language들은 다 합쳐서 1.7%입니다.

출처: http://www.tiobe.com/

트랙백 주소 :: http://www.epapyrus.com/blog/jeong/trackback/21

댓글을 달아 주세요

  1. roylory 2008/08/05 15:00  댓글주소  수정/삭제  댓글쓰기

    한국 내의 인기 순위와는 큰 차이가 있는 것 같네요. 흥미롭군요.

  2. 산호세.칩.개발자 2008/09/05 08:50  댓글주소  수정/삭제  댓글쓰기

    프로그램 언어를 쓰는것은 컴퓨터로 워드나 파워포인트를 자유자재로 사용하는것이나 별반 차이가 없다는 것을 encapsulation이라는 개념을 배운 컴퓨터과학도들은 잘 알것이다.

    이 그래프를 보다가 이런 설문조사표가 떠우르는건 왜일까?
    노가다 연장중 어느 스타일의 곡갱이가 좋은지에 대한 설문조사표.

    우리 한국 컴퓨터과학도들은 외국의 무수한 투어링 어워드를 받는 분들을 닮아야 하지 않을까?

15년 정도 됬나요? 헝가리안 표기법이 인기를 끌기 시작한 것이. 헝가리안 표기법은 헝가리 출신의 프로그래머 찰스 시모니(Charles Simony)가 발명해서 헝가리안이라는 이름이 붙었습니다. 찰스 시모니는 MS에서 Chief Architect로 근무하며 억만장자가 되어 우주 여행도 갔다 왔지요.

사용자 삽입 이미지


윈도 프로그래밍으로 경력을 시작한 프로그래머들은 거의 대부분 헝가리안 표기법을 사용하는 것 같습니다. Win32 API를 비롯해서 MFC 까지도 모두 헝가리안을 사용하고 있으니까요. .NET Framework에서는 별로 쓰이지 않는 것 같네요.

다이나믹 타이핑을 지원하는 언어들에서는 도움이 될 수도 있다고 생각하지만, C/C++에서 헝가리안이 무슨 도움이 되는지 모르겠습니다. 가독성만 떨어질 뿐입니다.

변수 이름만 봐도 타입을 알 수 있다고 합니다만, 안보면 모르냐고 말하고 싶습니다. 변수명 pszName을 보면 zero-terminated string을 담고 있는 포인터라는 뜻이겠지요. 명확하기는 합니다. 그런데 그냥 name이라면 타입이 무엇일까요? 설마 float 또는 integer일 리는 없고 스트링일 것이라는 것이 명약관화합니다. char *, char [512], string, CString, QString 여러가지 타입이 가능하다고 항변할 수 있겠지만, 최소한 C++라면 컴파일러가 체크해 주기도 하고, 타입의 종류도 모르고 변수를 사용하는 경우는 거의 없습니다. 특히 최근의 IDE들은 포인터를 가져다 대기만 해도 타입을 알려주기도 하고요. dwCount, iLength 같은 변수명들은 정말 너무 한다는 생각도 듭니다. ㅎㅎ

또 만약에 타입을 바꿀 필요가 생겼을 경우에는 변수 이름을 모조리 바꿔야 하는 문제도 생깁니다.

리누스 토발즈가 한 말로 마무리 짓겠습니다.

"Encoding the type of a function into the name (so-called Hungarian notation) is brain damaged - the compiler knows the types anyway and can check those, and it only confuses the programmer."

ps. btnCancel 같은 의미적인 접두사들은 괜찮다고 생각됩니다. 또 g_ 와 같은 접두사도 글로벌 변수를 눈에 띄게 만들어 준다는 점에서 의미가 있어 보이고요.

트랙백 주소 :: http://www.epapyrus.com/blog/jeong/trackback/20

댓글을 달아 주세요

  1. 사실 그건 다 2008/08/15 03:48  댓글주소  수정/삭제  댓글쓰기

    C++이 후져서.. 진심입니다.

    name이라고 하면 char*인지, char[100]인지, wchar*인지, std::string인지, std::wstring인지, CString인지, boost::string인지 알 수 없잖아요?

    pszString 아니면 szString이라고 하면 뭐 LPSTR이나 LPTSTR, LPWSTR이겠구나 싶은거죠 뭐..

  2. zelon 2010/02/22 12:35  댓글주소  수정/삭제  댓글쓰기

    저도 윈도우로 프로그래밍을 시작한 서버 프로그래머지만, 요즘 남아있는 습관은 std::string 은 strXXXX, char[] 는 szXXXX 정도만 남아있는것 같네요. 이 2개는 혼용해서 쓰면 치명적인 경우(cin, cout, printf 등이 었던걸로 기억합니다)가 생겨서 좀 구분을 해서 썼었습니다. 나머지는 좀 번거롭기도 하고, 실효성이 생각보다는 많지 않더라구요.

늘 부족하다고 생각하고 있습니다만, 우리 회사의 개발 환경을 소개해 보겠습니다.
더 좋은 방법이라던지 새로운 방법을 제안해 주시면 PDF-Pro 한 카피를 정성스럽게 포장해서 보내드리겠습니다. ^_^

1. 소스 콘트롤 서버

이파피루스는 SVN을 사용하고 있습니다. 초창기에는 CVS를 사용했습니다만, 소스들의 무결성(integrity; 무결성이라는 말이 적당한지 잘 모르겠네요 ㅎㅎ)을 위해 Atomic check-in이 가능한 Subversion으로 이주한지 2년 정도 되었습니다. 로깅을 잘하자고 늘 강조하고 있지만 늘 부족한듯이 느껴집니다.

사용자 삽입 이미지


2. 버그 트랙킹 시스템

버그질라를 사용하고 있습니다. 버그질라를 외부에 오픈하는 것이 어떻겠느냐고 프로그래머들을 설득하고 있지만, 아직은 반대가 많네요. (자신이 없냐고 놀리고는 합니다. ㅎㅎ) 버그가 고쳐지면 SVN과 연계해서 어떤 버그를 고치기 위해 어떤 패치가 일어났는지를 알 수 있습니다.
아래 스크린샷을 보면 오늘 날짜로 142개의 버그/이슈가 살아있는 것을 알 수 있습니다. (내부에서 관리하는 버그 개수로 이 정도는 많지는 않다고 우기면 믿어주시려는지 ㅎㅎ)
사용자 삽입 이미지

3. 데일리 빌드 서버

사내의 모든 프로젝트들을 소스 컨트롤에서 받아와, 빌드하는 서버입니다. NT 기반에서 돌아가고 있으며 파이썬으로 작성된 스크립트입니다. 빌드 시간이 만만치 않기 때문에 새벽시간과 점심시간에 한번씩 수행됩니다. 빌드에러는 로그로만 남겨지는데, 빌드 에러 발생시 이메일 등으로 통지하는 기능을 만들려고 마음먹은지 1년쯤 되었습니다. ㅎㅎ

4. 회귀 테스트 (Regression test) 서버

데일리 빌드 서버와 같은 하드웨어입니다. 역시 NT 기반이며 펄로 만들어진 스크립트입니다. PDF 렌더링 엔진에만 적용되고 있으며, 대량의 PDF 문서를 열고, 렌더링 해서 전날 까지의 작업과 달라진 점이 있는지를 (잘 나오던 글자가 사라진다던가와 같은) 체크해서 리포트로 만들어 줍니다. 새벽 3시에 시작하면 5시경에 끝이 납니다.

5. 테스트용 워크스테이션

코어가 4개로 사내에서 제일 짱짱한 시스템입니다. 가상 머신을 동시에 4개 까지 돌릴수 있으며, 모든 테스트는 가상 머신 위에서 진행합니다. 저희 제품이 동작할 수 있는 모든 환경을 가상 이미지로 만들어 놓고, 신제품 출시 또는 패치 출시 전에 테스트를 진행합니다.

6. 위키

여러가지 잡다한 내용들을 위키에 등록해 놓고 사용합니다. 예를 들자면, 복합기 드라이버 설치법이 헛갈릴 때도 사용하고, tar 압축 해제하는 법이 갑자기 생각이 나지 않을 때, 회의록 작성 양식이 필요할 때 등 여러가지로 사용하고 있습니다.

7. 문서 관리 서버

Alfresco를 문서 관리 서버로 사용합니다. 개발부 뿐만 아니라 전 부서가 함께 사용하고 있으며, 여러가지 개발 관련 문서들을 저장합니다. 특히 자동 버전 관리 기능이 좋습니다.

8. 파일 서버

2테라 NAS를 사용합니다. 특별히 사용 용도는 없습니다만, 늘 용량이 부족한 것으로 봐서 동영상이 가득찬 것이 아닌가 의심을 하고 있습니다. ㅎㅎ

9. 백업

시대에 뒤떨어져 보이기는 하지만, 테이프 백업을 합니다. 테이프 5개를 돌려가며 매일 백업을 하고 있으며, 주 단위 백업과 월 단위 백업 테이프는 회사 바깥의 안전한 곳에서 장기간 보존을 합니다.

트랙백 주소 :: http://www.epapyrus.com/blog/jeong/trackback/19

댓글을 달아 주세요

  1. 김재훈 2008/08/02 17:35  댓글주소  수정/삭제  댓글쓰기

    KLDP에서 글을 보다 여기까지 왔습니다. 좋은 정보 얻고 갑니다. 오픈소스에 관심을 가진지 얼마되지 않지만 수혜자의 역할에서 벗어나 기여자로서 역할을 어떻게 하면 좋을까 고민하고 있습니다. 한번 시간이 되시면 만나뵈면 좋겠습니다. 저는 www.polypix.com을 98년부터 운영하고 있습니다. jaison63@naver.com

  2. Kenny 2008/08/03 19:42  댓글주소  수정/삭제  댓글쓰기

    와.. 꽤 정리가 잘 되어 있네요..
    음.. VCS 관련으로 개인적인 추천을 하자면...

    1. Branch 활용에 대한 언급이 없으시네요... 활발하게 이용하고 계신가요? 저희 회사에서는.. 수정사항이 생길때 Branch를 이용하고는 있습니다면... 아무래도 Subversion의 Branch 기능은 좀 불편한 부분이 있어서.. 개인적으로 Git - Subversion 연동을 통해 로컬 Branch를 활용하고 있습니다. 배워야 한다는 단점만 제외하면... 아직까지는 제일 편한 방법이네요.

    2. http://www.infoq.com/articles/agile-version-control 글을 꼭 한번 봐 주시기 바랍니다. VCS 활용을 극대화 하려면.. 아무래도 VCS "이용"에 대한 전략이 필요하다는 생각을 오랜기간 하고 있었는데... 상당히 정리를 잘 해 놨더라고요.

  3. 모던보이 2008/08/03 19:52  댓글주소  수정/삭제  댓글쓰기

    1. Branch를 쓰고 있습니다만, 사내에 불편해 하는 프로그래머들이 많더군요. 한번도 다른 대안에 대해 생각해 본 적이 없는데, Git + Subversion 검토해봐야 겠네요. 감사합니다.

    2. 정리가 잘 되있네요. 좋은 자료 감사합니다.

    메일로 주소 알려 주시면 PDF-Pro 4 한개 보내드리겠습니다. ㅎㅎ
    jeong@pdfpro.co.kr

  4. LispHacker 2008/08/06 21:31  댓글주소  수정/삭제  댓글쓰기

    vcs 는 어떤 것이든 유사한 문제가 있는 것이 대부분입니다(변경을 관리할 때 공통적으로 생길 수 밖에 없는 근본적인 문제들). cvs 10년 이상 사용하다가 약 3개월 전부터 mercurial 사용하고 있는데, 공통된 문제점도 있고, 더 나은 점도 있더군요. 하나 이상의 vcs를 사용하는 것은 그리 좋은 아이디어는 아닌 것 같습니다. (참고로 저와 동료들은 꼭 필요한 변경은 주저않고 수행하지만, 그렇지 않은 경우 최대한 보수적 관점을 유지합니다. 즉, 뭔가 해결할 수 없는 문제가 없는 한 절대 툴을 바꾸지 않습니다. 반면 개발 프로세스는 쉽게 바꿉니다)

    tracking system을 오픈하는 것도 그리 좋은 생각은 아닌 것 같습니다. 물론, 이메일로 버그보고를 받으면 ts에서 id부여후 답장을 자동으로 보내는 등의 자동화 정도는 괜찮을 듯 합니다. jira 쓰고 있는데, 기본적 기능만 사용하므로 별 어려움 없이 씁니다.

    빌드와 테스트는 거의 동시에 일어나야 하지 않나 생각합니다. 즉, 개별 작업의 change set이 vcs의 메인라인에 커밋되기 전에 머지후 빌드 및 테스트가 돌아간 후 메인라인에 커밋되는 프로세스라면 데일리 빌드는 큰 의미가 없어집니다. 물론 이렇게 되려면 각 개발자가 언제든 돌려볼 수 있는 테스트 케이스가 있어야 합니다(개별 코드라인 전략은 위의 링크에 이미 있는 것과 유사하면 되겠죠. 제 기억이 맞다면, mercurial로 바꾸면서 동료가 알려준 perforce ppt(pdf?) 파일 내용과 유사하네요. tofu scale 만 기억나네요)

    저는 개인용 위키도 사용합니다. http://www.tiddlywiki.com/ USB 메모리 스틱에 truecrypt로 무장한 위키 갖고 다니면서 잡동사니 들을 기록합니다.

    개발툴이 양이면, 프로세스가 음인데, 프로세스에 대한 언급은 없어서 약간 아쉽네요. (적고나서 보니 거의 '프로세스' 이야기가 되버렸네요)

    건승하시길...

  5. youlsa 2008/09/17 14:11  댓글주소  수정/삭제  댓글쓰기

    남의 개발환경을 훔쳐보는 기분이네요. 저 있는 곳과 거의 비슷한 환경이네요. 다만 저희는 문서 관리도 SVN을 쓰고 있습니다. 복잡한 툴 배우게 하기가 쉽지 않아서요... alfresco는 처음 봤는데 한번 검토해봐야겠습니다.

    좋은 글 감사합니다.

프로그래머하면 어떤 이미지를 떠올리시나요?

사용자 삽입 이미지
IT 세상 바깥에서는 어떻게 생각하시는지 잘 모르겠지만, "노가다에 매일 밤샘하며 월급도 적고, 대우 못받는 직종이다." 정도가 가장 일반적이지 않을까 합니다.

저 역시 프로그래머 출신으로 이러한 상황이 몹시 답답하고 안타깝습니다. 많은 프로그래머들이 기회만 있으면 전직을 하겠다고 합니다. 똑똑한 학생들은 엔지니어가 되는 길 보다는 의사, 변호사와 같은 안정된 직장을 원합니다.

어쩌다 이 지경이 됬을까는 여러 사람들이 이야기한 적이 있으니, 이것 보다는 어떻게 하면 이 상황을 바꿀 수 있을까를 이야기 해 보고자 합니다. 또 제가 몸 담고 있는 이파피루스의 몇가지 목표중의 하나가 이 문제의 해결이기도 합니다.

이파피루스의 계획은 2년 내에 억대 연봉의 프로그래머를 탄생시키는 것입니다. (2년간 엄청난 인플레이션이 발생하기를 기대하는 것은 절대 아닙니다. ㅎㅎ)

프로그래머는 흔히 이야기하는 지식 노동자 입니다. 지식 노동자의 특징은 개인별 성과의 편차가 매우 크다는 것입니다. 즉 어떤 프로그래머가 한 달동안 머리를 싸매고 겨우 해결할 일을, 다른 프로그래머는 한 시간 만에 끝내는 경우도 있을 수 있다는 것입니다.

지식 노동자는 노동에 투입한 시간에 비례해 보수를 받는 것이 아니라 산출물의 양과 질에 따라 보수를 받아야 합니다. 이런 관점에서 현대 대부분의 노동자들, 특히 IT 업계 종사자들은 부서를 불문하고 지식노동자입니다.

따라서 회사의 입장에서는 충분한 결과가 나온다면 이 정도의 보수를 줄 수 있다고 생각합니다. 사실 연봉 5천만원을 받는 프로그래머 두명의 일을 혼자서 해 낸다면 1억 2천만원을 줘도 됩니다. 컴퓨터, 소프트웨어, 차지하는 공간의 임대료 등등은 절반이니까요. :-)

그런데 중요한 것은 똑같은 품질의 일을 하더라도 상황에 따라서 가치가 달라질 수 있습니다. 예를 들어 새로 개발된 소프트웨어가 매년 200억원의 매출 총이익을 낸다고 하고, 여기에 프로그래머 A의 기여가 5%라고 한다면 10억원의 기여를 하게됩니다. 하지만 여러가지 문제로 인해 같은 제품이 10억원의 손실을 냈다면 A의 기여는 음수가 됩니다.
회사가 돈을 잘 벌어야 억대 연봉을 줄 수 있다는 말이지요.

이파피루스에는 두 가지 과제가 생겼습니다.

1. 경영진은 모든 노력을 기울여 개개인이 노력한 결과물의 가치가 최대화 될 수 있도록, 훌륭한 전략을 세우고, 빈틈없이 회사를 운영하여 시장에서 성공해야 합니다.

2. 프로그래머들은 자신의 가치를 업그레이드 하여 억대 연봉에 걸맞는 실력을 갖추고자 끊임없이 노력하고 공부해야 합니다. 회사 역시 자기 계발이 가능한 여건을 조성하고 지원하여야 합니다.

우리가 이 과제를 성공한다면, 세상에 작지만 의미있는 영향을 줄 수 있을 것입니다.

먼저 억대 연봉을 받는 프로그래머는 흔하지 않기 때문에 신문 기사 또는 잡지 기사화 될 수 있을 것입니다. 이 프로그래머가 옷도 잘입고 멋지게 생겼다면 스포츠 신문에도 나올겁니다. :-)

또 관련 업계부터 몸값이 오르기 시작하고, 억대 연봉 프로그래머들이 좀 더 생겨나게 될 것입니다.

선순환이 잘 이루어 진다면, "프로그래머는 노가다다"가 아니라 "프로그래머는 억대 연봉자다"가 조금씩 세상 사람들의 인식에 자리를 잡을 것입니다. 결혼 정보업체의 신랑감 순위에서도 10위권에 들어올 수 있습니다. 학생들은 프로그래머가 되고 싶어할 테구요.

어떤가요? 뭐 돈이 최고다라고 이야기 하는 것은 아닙니다. 하나의 수단이지요.
과연 이파피루스가 이 프로젝트를 성공할 수 있을지 지켜봐주시면 고맙겠습니다.

PS. 영업부에서도, 마케팅부에서도, 관리부에서도 모두 억대 연봉이 나왔으면 좋겠습니다.

트랙백 주소 :: http://www.epapyrus.com/blog/jeong/trackback/16

댓글을 달아 주세요

  1. Help by Grace 2008/07/25 02:57  댓글주소  수정/삭제  댓글쓰기

    아 PDF-Pro 만드시는 분이군요. 이 프로그램 정말 잘 사용하고 있습니다. 워낙 깔끔하게 pdf를 뽑아줘서 주변사람들에게 불법 아크로뱃 쓰지말고 이거쓰라고 권해줄 정돕니다. 항상 pdf 만들때마다 감사하게 생각하고있습니다.

  2. 억대 연봉자 2008/07/25 03:31  댓글주소  수정/삭제  댓글쓰기

    10년동안 미국에서 웹개발 업무를 해오고 있습니다. 예전에는 한국계 회사에서 일을 했었는데 지금은 미국 회사에서 근무하고 있습니다.

    제가 느낀점은... 한국계 회사일 경우 규모가 큰 회사던지 작은회사던지 간에 미국회사들과는 다른 아주 몹쓸(?) 사고방식이 있더군요... 직원들에게 투자한다는 개념보다 뽑아 먹는다는 생각이 강합니다. 적은 돈으로 많이 부려 먹으려는.... 적은 Input으로 많은 Output을 바라는... 장사꾼 마인드죠... 중/장기적 관점에서 사업을 바라보지 않고 단기간에 실적을 높이려다 보니 장사꾼 마인드에서 벗어나질 못하는 것 같습니다.

    회사에서... 특히 IT 기업에서는 유능한 인재의 양성이 아주 중요하다고 봅니다. 하지만 한국 회사들의 경우 인재를 양성하고 투자한다는 느낌보다는 어떻게든 괜찮은 사람 좀 더 적은 돈으로 데려다가 쓸까.. 하는 생각만 하는것 같습니다.

    한국회사에서 1억이 아니라 2억을 준다하더라도 전 갈 마음이 없습니다. 그거주고 얼마나 부려 먹을까... 하는 생각이 딱 드니까요.. 적어도 미국에서... 저같은 한국 사람들은 한국회사 안들어 갑니다. 멋모르고 들어갈 수는 있겠지만 한번 겪고나면 치가 떨리니까요...

    현재 저는 억대 연봉을 받고 있습니다.
    하지만 지금회사가 좋은 이유는
    억대 연봉 보다 아... 이런 회사라면 은퇴할 때 까지 있어도 좋겠다라고 생각되는 회사 분위기, 비전, 보람, 복지, 개인생활 존중, 자기개발 지원 뭐 이런것들 때문입니다.

    자본이 충분치 못한 회사는 당연히 불가능한 일입니다.
    하지만 그건 경영진이 풀어야 될 문제지
    개발 인력들이 짊어져야 될 짐은 아니라는 것입니다.

    헝그리 정신으로 개천에서 용나는 식의 벤처 신화는
    일선 개발자들에게는 로또 복권 당첨과 마찬가지로 희박한 소망일 분입니다.

    처자식이 딸린 한 가정의 가장들에게 헝그리 정신으로 무장하여 신화를 일구자며 고통분담을 요구하는 것은 그 사람의 개발자로써의 자존심을 짓밟는 것이며 잔인한 처사라고 생각합니다.

    무에서 유를 창조할 수는 없습니다.
    (정말 운이 좋은 경우가 아니라면...)
    만약 그런 생각을 하고 있는 CEO가 있다면
    복권을 사거나 투자자를 찾으러 나가라고 하고 싶네요.
    괜히 밑에 사람들만 쥐어짜지 말고....

    혹자는... 그런 책임감 없고 자기 자신만 생각하는 정신상태로... 여기에 내 모든걸 걸어보겠다는 마음가짐없이 무엇을 할수 있겠냐? 라고 말할 수도 있겠지만.. 전 그렇게 얘기하는 사람이 있다면 이렇게 대답해 주고 싶습니다.

    "IT 하지말고 그냥 길에서 핫도그 파세여...."

    IT는 지식 집약 산업입니다.
    무엇으로든 직원들의 사고를 얽메이게 만드는 회사라면 가능성 없다고 봅니다.

    • 모던보이 2008/07/25 03:47  댓글주소  수정/삭제

      저 역시 미국회사에서 일했던 경험이 있습니다만 미국내의 한국계 회사에서 근무해본 적은 없는지라 한국계와 미국계의 차이에 대해서는 딱히 드릴 말씀이 없네요 ㅎ

      미국 회사 중에도 프로그래머들에게 악명 높은 회사들은 꽤 많습니다. 이름을 거론하기 몹시 곤란한 산호세의 그래픽 소프트웨어 전문회사 라던가, 모 유명 게임 업체라던가... 물론 이직율이 매우 높고요.

      장사꾼 마인드라고 하셨지만, 장사꾼은 나쁜 사람이 아닙니다. 줄 것 주고 받을 것 정확하게 받으니까요. 아마도 사기꾼을 말씀하셨겠지요. ㅎㅎ

      제 관점은 선생님과 약간 다릅니다. 억대 연봉을 주는 회사라면 당연히 그 이상의 결과를 내기 바라야 합니다. 그렇지 않다면 회사가 운영될 수 없을 테니까요.

      억대 연봉을 주면서 당사자가 "부려 먹히고 있다"라고 느끼도록 만들 바보같은 장사꾼은 없을 것이라 생각합니다. 그리고 억대 연봉을 받는 사람이 자신을 "부려 먹기나 하는"회사에 붙어 있을리 만무하고요.

      지식 노동자에 대한 언급을 했습니다만, 지식 노동자의 특징 중 하나가 회사에 대한 개인의 교섭 능력이 굉장히 강력하다라는 것입니다. 이것이 지식 노동자들이 별로 노조에 관심이 없는 이유이기도 하고요.

      누구라도 할 수 있는 단순한 일을 하는 사람이라면 회사측에서 언제라도 내 보낼 수 있겠지만, 프로그래머와 같은 지식 노동자는 대체가 매우 어렵기 때문에 회사측이 불리한 경우가 더 많습니다. 억대 연봉자라면 더더욱 중요한 업무를 맡고 있을 테고요.

      따라서 억대 연봉자들을 감당 할 수 있는 회사라면, 말씀하신 분위기, 비전, 보람, 복지 등과 같은 이슈에 관심이 있을 수 밖에 없는 충분한 동기를 가질 수 있습니다.

      제 생각들 역시 제 경험에서 나오는 것들입니다.

      미국회사에서 일할 당시 제 연봉이 20만불 정도였었고, 최고참 시니어 중 한 사람이 250만불을 받는 (전산학 교과서에 이름이 나오는 분입니다) 분도 계셨습니다. 물론 다른 혜택들도 좋았고요. 많은 것을 느낄 수 있었습니다.

      제가 원하는 것은 국내 프로그래머들의 낙후된 처우와 인식을 바꾸는 것이며, 그것에 대한 실천적인 대안이 연봉입니다. 연봉 문제야 말로 가장 직접적이고 실질적인 처우 개선 방법이라고 생각합니다.

      제 글에 관심 가져 주셔서 고맙습니다.

    • 엘라니 2008/07/25 11:08  댓글주소  수정/삭제

      억대 연봉 받는 사람이 쥐여짜일 걱정은 왜 하며(그건 2~3천대 사람들이 해야할 걱정), 억대 연봉을 줄 정도인 회사가 사람을 쥐어짜려고 열을 올릴 일이 뭐 있을까요?(몇 천만 주고 쥐여짜야 뽑아먹는 맛이 있지 않나요?)

      억대 연봉을 받을 자격이 있는 인재라면 그건 쥐여짜고 말고의 문제가 아닌거 같은데...

      급여(연봉)의 가치와 의미가 단순한 주고받기나 회계상의 의미로 정의되어서는 안되겠지요. 급여(연봉)의 의미를 새기기 위한 다양한 스펙트럼이 존재하는 것도 분명한 사실이고...

      모던보이님의 글에는 한국에서의 프로그래머들, 넓게는 IT 업계의 지식노동자들의 가치를 더 키우고자 하는 신념이 저한테는 보이는데, 억대연봉자님께는 그저 사람을 쥐여짜려는 수단으로 밖에 안보이시나 보네요. (물론 앞에서 얘기했든 사람 쥐어짜는 수단으로서는 가치가 별로 없는 것 같습니다만...)

      미국에 10년 계셨다고 하신 걸로 봐서는, 아마 10년 전에 한국에서 경험하신 것으로 현실을 일반화하신게 아니신지...한국의 모든 회사가 사람을 쥐어짜려고 혈안이 되어 있지는 않을 겁니다...

      IT 업계 종사자들 힘빠지게 하지 마세요...-.-

    • FH1ㄹ 2008/08/06 20:23  댓글주소  수정/삭제

      한국에서 심적고민을 하고있는 개발자입니다.
      연봉7천에 전공분야에선 자부심을 갖고 인정받으며 일했지만..한국에선 미래가 안보입니다. 연차가 오르니 슬슬 엉뚱한 업무 시킬려고 하고..심적으로 고민입니다. 님과 같은 사고방식을 가진분이 어떤 미국회사 일하시는 알고싶고..거기 사람 안뽑습니까?

  3. 샘처럼 2008/08/04 22:06  댓글주소  수정/삭제  댓글쓰기

    멋진 글 감사합니다. 읽으면서 몸에서 짜릿한 전류가 흐르는 느낌이었습니다. 저는 비 IT계열에서 일을하고 있고, 공대출신입니다. 물론 제가 일하고 있는 분야도, 낮은 임금과 학생들의 기피현상으로 걱정을 하고 있구요. 저도 이같은 현실에 개탄을 하고 있었지만, 언제부터인가, 제가 있는 회사의 매력을 좀더 높여서, 임금으로 혹은 직원들에 대한 비젼으로 매력있는 회사가 되도록 하여야 하겠다는 생각을 하고 있었습니다.
    좋은 글 감사합니다. 좀더 노력하는 제가 되어야 겠다는 생각을 다시 한번 다지게 되었습니다. (어떻게 보면 이글을 읽고 있는 것과 같은 웹서핑도 끊어야 겠네요. ^^; )

  4. 산호세.칩.개발자 2008/09/05 08:21  댓글주소  수정/삭제  댓글쓰기

    1. 미국인 엔지니어들은 이성적인 판단을 하는것에 익숙하고, 회사에서도 그 사실을 잘 알고 있다.

    2. 한국에서 엔지니어링이 커질려면 새로운 시도를 받아들이기에 쉬운구조로 바꾸어야한다.

    엔지니어링은 철학적 엔지니어링(5%)와 노가다 엔지니어링(95%)이라고 부르는 두가지가 있는데.
    한국은 전자에 투자가 미흡하다.
    회사에서 일하는 대부분의 일들은 나는 후자라고 본다.

많은 프로그래머들이 컴파일러가 내는 경고(Warning)를 무시하고는 합니다.

가장 큰 이유는 경고가 있더라도 바이너리를 만들 수 있기 때문이겠지요.
또 나중에 고치지 하면서 미루다 보니, 프로젝트가 커지면서 점점 더 경고들이 많아 지기 시작하고, 나중에는 주루룩 쏟아 지는 경고들을 아예 보지도 않게 됩니다.

하지만 컴파일러 경고를 무조건 무시하면 안됩니다.
프로그래머들이 디버깅을 할 때 가장 어려운 케이스가 디버깅 툴이 전혀 힌트를 주지 않는 경우 입니다. 컴파일러 경고는 거저로 컴퓨터가 알려주는 디버깅 힌트입니다.

또한 경고를 잡다 보면, 마음가짐 때문이라도  전체적인 버그 발생 빈도가 줄어듭니다.

컴파일러 경고

우리가 주로 접하는 컴파일러 경고들은 다음과 같습니다.

unreferenced local variable: 변수를 선언하고 한번도 사용하지 않았습니다. 아주 위험하지는 않지만 다른 스코프에서 같은 이름의 변수를 설정하는 경우 등에 혼란이 생길 수 있습니다.

uninitialised variable: 변수를 초기화 하지 않고 사용했습니다. 이는 아주 위험합니다. 심각한 런타임 에러를 낼 가능성이 큽니다. 특히 VC++에서 디버그 모드와 릴리즈 모드의 실행이 다른 경우 이러한 문제에 기인 하는 경우가 많습니다.

conversion from 'XXX" to 'YYY': 묵시적 캐스팅을 하였으나 좌항에 있는 변수의 표현 능력이 우항보다 떨어지는 경우 입니다. 이 경우 역시 심각한 문제를 종종 일으킵니다.

이 외에도 컴파일러에 따라 if (a = 3) {} 과 같은 경우, 경고를 통해 (a == 3)의 오기(誤記)가 아닌지를 확인해 주기도 합니다.



깨진 창문 이론

범죄학자 제임스 윌슨(James Q. Wilson)과 조지 켈링(George Kelling)의 '깨진 창문 이론 (Broken Window Theory)'에 따르면, 깨진 창문을 수리하지 않고 놓아 두면, 그 근처를 지나는 사람들이 '이 집에는 아무도 책임지는 사람이 없구나'라고 결론을 내리게 되고, 이 결과 더 많은 창들이 깨지기 시작하면서 마침내 거리 전체가 무정부 상태가 된다는 것입니다.

이른바 낙서, 무질서, 구걸과 같은 사소한 문제들이 심각한 범죄를 일으킨다는 것이지요.

소프트웨어 개발에서도 이 이론이 적용될 수 있습니다. 컴파일러 경고와 같은 사소한 문제들이 심각한 소프트웨어의 불안정성을 일으킬 수 있다는 것이지요.



실천 방안

가장 쉬운 방법은 경고 에러가 보이면 보이는 즉시 고치는 것입니다. 미루다 보면 경고들이 쌓이게 되고, 나중에는 꽤 큰일이 됩니다.

그리고 이미 작업중인 코드에 경고들이 많이 나온다면 날을 잡아서 모두 해결하는 것이 좋습니다. 이 작업은 모든 팀원이 함께 하는 것이 좋으며, 같은 코드베이스에 대해 다른 개발 작업과 병행하지 않는 것이 좋습니다.

주의해야 할 것은, 경고를 모두 잡은 후에는 꼭 전체 제품에 대한 회귀 테스트(regression test)를 실시하여 새로운 문제가 나타나지 않았다는 것을 확인해야 합니다.

또한 컴파일러 옵션을 이용해, Warning이 있으면 컴파일을 중단하도록 하는 것도 좋습니다.

트랙백 주소 :: http://www.epapyrus.com/blog/jeong/trackback/13

  1. Subject: 리팩토링 - gcc 모든 경고메시지를 제거하라

    Tracked from yundream의 프로그래밍 이야기 2007/07/19 09:19  삭제

    이 문서는 수정될 수 있습니다. 최신글은 Joinc Wiki를 참고해 주세요. 나 같은 경우 일단 돌아가는 코드를 만들고 돌아가는지 눈으로 확인한다음 손을 보는 스타일이라서, 나중에 많은 잔손질 - 거창하게 리팩토링 -을 하게 된다. 이때 모듈화와 함께 가장먼저 손쉽게 진행할 수 있는게 경고메시지를 제거하는 것이다. 이 문서는 gcc 4.0.x 를 기준으로 작성되었다. gcc라면 다음과 같은 옵션을 이용해서 경고메시지를 출력하도록 할 수 있다. #..

댓글을 달아 주세요

  1. 지나가는사람 2009/07/25 10:06  댓글주소  수정/삭제  댓글쓰기

    http://www.pdfpro.co.kr/blog/jeong/entry/Warning-무시하지-맙시다

    이 주소로 오니깐...바이러스가 감지되네요...ㄷㄷㄷ

    • 모던보이 2009/11/21 15:49  댓글주소  수정/삭제

      죄송합니다. 수정했습니다. 도대체 어떻게 저런 코드들이 들어갈 수 있는지 모르겠네요. 해킹이라는 것인지 -_-a

예전 현역으로 활동할 때 소스 코드에 가끔씩 시조를 지어서 (정확히는 패러디 ㅎㅎ) 집어 넣고는 했었습니다. 간만에 기억이 나서 몇개를 올려 봅니다. 현장감을 살리기 위해 /* */ 는 그대로 놓아 둡니다.

사용자 삽입 이미지

/*
하여가(何如歌)

이리쨘덜 엇더하며 져리쨘덜 엇더하리
윈도우 소스코드 얼거진들 긔 엇더하리
우리도 이같이 얼거져 데드라인 지키리라.
*/

/*
 단심가(丹心歌)

코드를 고쳐고쳐 일백 번(一百番) 뜻어 고쳐
밤낫을 작업하야 넉시라도 잇고 업고
완벽한 코드 향한 마음 가실 줄이 이시랴.
*/

/*
딴따라 코더들아

딴따라 코더들아 수이짬을 자랑마라
버그창궐하면 다시 짜기 어려오니
책한권 다시 읽고 배워간들 엇더리.
*/

/*
백만(百萬) 줄 소스코드

백만 줄 소스코드 에디터로 살펴보니
주석은 엄청나되 핵심은 간 듸 업다.
어즈버 대박히트가 꿈이런가 하노라.
*/

/*
열시가 되었느냐

열시가 되었느냐 회의시간 다 되었다
프로그래머 녀석 상기 아니 출근했냐
저 많은 버그 리스트 언제 수정 하나니.
*/



트랙백 주소 :: http://www.epapyrus.com/blog/jeong/trackback/10

댓글을 달아 주세요

  1. 에이르 2007/07/17 00:03  댓글주소  수정/삭제  댓글쓰기

    웃어야 할지 울어야할지 모르겠군요.

  2. 모던보이 2007/07/17 00:15  댓글주소  수정/삭제  댓글쓰기

    웃으면 되죠 뭐 ㅎㅎ

  3. Helllo 2007/07/17 11:22  댓글주소  수정/삭제  댓글쓰기

    재밌네요, ㅋ
    IT 계열 나름대로의 관련 개그가 많이 있죠.
    근데 그런 개그는 그 분야 사람들만 알아듣기 쉽다는..!ㅋ

  4. 가을이 2007/07/21 16:24  댓글주소  수정/삭제  댓글쓰기

    공감 백번하고 침튀겨가며 웃고 갑니다. 크핫핫핫핫..

  5. bups 2007/10/26 17:45  댓글주소  수정/삭제  댓글쓰기

    우연히 링크 따라 여기까지 오게 되었습니다.
    재밌고 느낌이 팍팍 오는 시조들이네요^^

    제 블로그에 담아가도 될런지요?

  6. Jinnovator 2008/07/26 05:56  댓글주소  수정/삭제  댓글쓰기

    우연히 들르게 되었는데, 너무 재미있네요~
    저도 담아가겠습니다 ^^
    번창하세요~

  7. JustAFeelinG 2008/11/13 18:07  댓글주소  수정/삭제  댓글쓰기

    시조 내용은 서글픈 프로그래머들을 노래하지만,
    유쾌해져서 돌아갑니다. ^^

  8. skkong 2008/11/14 08:28  댓글주소  수정/삭제  댓글쓰기

    너무 재미있어서 퍼갑니다. (출처 밝히구요)
    좋은 하루 되세요. ^^;