토요일, 6월 16, 2012

[B급 프로그래머] 당신이 좋은 프로그래머라는 징표

트위터를 읽다보니 Signs that you're a good programmer라는 링크가 눈에 들어왔다. 혼자 읽기 아까워(라고 쓰고 점점 나빠져가는 기억력을 돕기 위해라고 읽는다) 내용을 간략하게 정리해봤다.

좋은 프로그래머 특성

  1. 실험을 먼저하려는 본능
    • 과외 프로젝트를 몰래한다.
    • (절차형, 스택 기반, 병렬형 등) 다양한 프로그래밍 언어를 장난삼아 접해본다.
    • '아두이노'가 뭔지 안다.
    • 회의에서 익살스러우면서도 비현실적인 해법을 제시하는 경향이 있다.
    • 오덕스러운 장난감으로 큐비클이나 책상을 채운다.
  2. 코드와 설계로부터 감정을 분리한다.
    • 주석 처리된 코드를 거의 커밋하지 않는다.
    • 다른 프로그래머의 뛰어난 코드를 쓰기 위해 여러 주나 여러 달에 걸쳐 작성한 코드를 기꺼이 버린다.
    • 코드를 바라보는 동안 결함을 지적당할 때 손가락을 입술에 가져가며 눈썹을 찌푸리며 '음'이라고 말한다.
    • IDE가 자동으로 코드를 맞추는 방식이 거슬리지 않으며, '탭 vs 공백' 논쟁에 관심이 없다.
    • '내 코드'가 아니라 '이 코드'라 지칭한다.
    • 성공적인 프로젝트에서 기존에 사용했던 설계를 버린다.
    • 지난 몇 년 동안 작성해온 결과물의 대안으로 기성품을 찾아라는 상사의 명령에 방어적인 태도를 보이지 않는다.
  3. 망가지지 않는 코드도 손 본다.
    • 명세를 글자 그대로 받아들이지 않고 누가 작성했고 뭘 생각했는지 찾으려 노력한다.
    • 프로그램을 매일 사용할 사람들을 쫓아다니며 이야기를 나눈다.
    • 마틴 파울러라는 사람이 쓴 책이 책장에 있다.
    • XML, ORM, REST와 같은 인기 있는 기술에 대해 호불호가 확실하며, 과거에 이들 몇 가지 기술로 전환해본 경험이 있다.
    • 추상화 계층을 활용하기를 좋아하지만, 언어나 플랫폼에 이미 존재하는 상위에 뭔가를 추가하는 방식은 좋아하지 않는다.
    • '약한 응집력'에 대해 이야기한다.
    • 새로운 기능을 추가하지 않고서도 코드의 행수를 줄이기 위해 최소 10%의 커밋 노력을 기울인다.
    • 새로운 기능을 추가하기 앞서, 더 나은 방법으로 완전히 대체하거나 두 과업을 동시에 수행하기 위해 기존 설계를 다시 뒤집을 필요가 있는지 점검한다.
  4. 이해 못하는 뭔가에 열광한다.
    • 'Lambda The Ultimate'를 주기적으로 방문한다.
    • ATP 분석이효소가(Seo Sanghyeon님께 감사. 대학교 교양 Biology 배운지 20년이 지나 모든 용어가 다 가물가물합니다. T_T) 뭔지 안다. 부엌에 있는 바나나에서 DNA를 추출해봤다.
    • 컴파일러를 작성하지 않더라도 표지에 용이 그려진 책이 책장에 있다.
    • 근처에서 '베이지안'이라는 단어를 막 언급한 사람을 찾기 위해 파티 장에서 사람들을 밀치고 가본 적이 있다.
    • 다른 산업게에 일하는 사람들에게 맥주를 사주며 기꺼이 공장 이야기를 나눌 의향이 있다.
    • 에어버스 330의 조종실 레이아웃과 같이 일상적인 뉴스에 무관한 뭔가를 설명하는 바람에 사람들을 따분하게 만드는 버릇이 있다.
    • 아이포드에 외국 팝송을 넣고 다닌다.
    • 자신들이 모르는 뭔가에 전문적인 지식이 있는 사람들에게 화내는 대신 부러워한다.
  5. 가르치고 싶어한다.
    • 자신의 작업에 대한 내용을 블로그에 올린다.
    • 위키피디아에 활성 계정이 있다.
    • 마커를 집어들고 화이트보드에 무심코 다가선다.
    • 주석만 담겨 있는 저장소에 변경 내역을 커밋한다.
    • 100달러짜리 책을 신입에게 빌려준다.

환상적인 프로그래머 특성

  1. 불굴의 인내
    • 화재 경보음에 당황하는 대신 짜증이 난다.
    • 헤드폰이나 라디오에서 막 연주된 노래가 뭔지 구분하지 못한다
    • 옆 동료가 몇 차례 커피를 마시러 갔는지 화장실에 갔는지 병원에 갔는지 모른다.
    • 사내 정치에 무관심하다.
    • 코드가 동작하기도 전에 버그를 예측할 수 있다.
  2. 집요한 완벽 주의
    • 타협하느니 죽는 편을 택한다.
    • 출시 날짜에 개의치 않는다.
    • 데드라인 직전에도 대규모로 리팩터링한다.
    • 사리 추구를 위해 보너스, 승진, 스탁 옵션을 받으려 하지 않는다.
    • 스탠리 큐브릭 감독 작품을 좋아한다.
  3. 플랫폼을 확실히 꿰차고 있다.
    • C 표준 라이브러리의 인크루드를 모두 기억하고 있다.
    • 책장에 "OpenDoc Programmer's Guide" 사본이 있다.
    • 반지의 제왕, 스타워즈, 몬티 파이썬에서 대사가 어떻게 흘러가는지 암기하고 있다.
    • TCP의 슬라이딩 윈도우가 초래하는 동기화 버그를 잽싸게 찾아낼 수 있다.
    • 실험 중인 CPU의 마이크로코드가 초래한 버그를 인식한다.
    • Knuth 교수가 보낸 $2.56짜리 수표를 액자에 넣어뒀다.
  4. 코드로 생각한다.
    • 일상 대화에서 프로그래밍 구성 요소를 사용해 은유적인 표현을 자유자재로 한다.
    • 대다수 시간을 "빈둥거리지만", 동료들보다 매일 버그가 훨씬 적은 코드를 커밋한다.
    • 어깨 넘으로 흘깃 보며, 손가락으로 코드에 있는 버그를 지적한다.
    • 취했거나 취침 중에도 걸려온 전화를 받으며 버그를 올바르게 진단한다.
    • 샤워를 하면서도 코드를 작성한다.
    • 난감한 버그에 직면했을 때, 본능적으로 자리에서 일어나 산책하러 간다.
    • 대화 도중에 갑자기 조용해지며 허공을 응시한 다음에 자초지종도 말하지 않고 터미널로 급히 뛰어간다.
  5. 로마에 가면 로마인이 된다.
    • 교차 플랫폼 프레임워크에 관심을 보이지 않는다.
    • '언어 전쟁'을 경멸한다.
    • 여러 언어로 동일한 프로그램을 유지하기 위한 전략적인 불이익을 생각하지 않는다.
    • 컴파일러, 라이브러리, 운영체제에 앞서 자신의 코드를 문제 근원으로 가정한다.
    • 특정 플랫폼을 대상으로 하는 프로젝트를 할당받으면 큐비클에 턱스 펭귄이나 안드로이드 인형을 갖다 놓는다.
    • 휴대폰이나 테블릿 브랜드를 바꾼다.
    • 새로운 디바이스에서 double이나 decimal과 같은 자료 유형이 무엇인지 가정하기 앞서 기술 매뉴얼 더미를 뒤진다.
  6. 자신의 도구를 직접 만든다.
    • 자동화된 빌드 서버글 구축한다.
    • 전용 벤치마크나 특화된 프로파일러를 작성한다.
    • GitHub에서 오픈소스 프로젝트를 운영한다.
    • 최소한 한 번은 LISP를 새로 작성해봤다.
    • 도메인 특화 언어가 무엇인지 알며, 해석기를 설계하고 구현해봤다.
    • 전용 매크로로 IDE/편집기를 확장한다.
    • 버그 추적기에 할당된 이슈 숫자를 보여주는 7 세그먼트 디스플레이로 책상을 꾸며놓았다.

프로그래머를 넘어서는 특질에 대한 소개 내용도 있었지만, 프로그래머를 위해(응?) 여기까지만 정리했다. 각자 한번 재미삼아 체크해보기 바란다. ㅋㅋ

EOB

댓글 6개:

  1. 박재호님의 부러운 능력은 역시 적절한 번역입니다.
    "과외 프로젝트를 몰래한다"라고 번역하신 것보고, 전 사실 빵터졌습니다. --;
    저만 그런가요?. 경험에서 우러나오는 번역이겠죠? ^^;

    답글삭제
  2. 말씀 듣고 나서 다시 한번 본문을 살펴보니 급하게 번역해 올리느라 오탈자가 많이 나와서 갑자기 죄송스러운 모드입니다(잽싸게 폭풍 업데이트 :)).

    격려 감사드리며, 계속해서 좋은 글 올릴 수 있도록 앞으로도 잉여력을 많이 축적하겠습니다.

    - jrogue 올림

    답글삭제
  3. 다른 산업게에 일하는 사람들에게 맥주를 사 주며 기꺼이 공장 이야기를 나눌 의향이 있다 --> 여기도빵

    답글삭제
  4. 너무 재미나게 읽었어요 - 대화중에 멍때리다 설명없이 달려가는 좋은 프로그래머가 되야할텐데...털썩 ㅋㅋ

    답글삭제
  5. "ATP synthase"는 "ATP 분석"이 아니라 "ATP 합성효소"에요~

    답글삭제
  6. 너무도 좋은내용이라
    퍼가도 괜찮은가요?
    물론 원본 링크 달겠습니다!

    답글삭제