트위터를 읽다보니 Signs that you're a good programmer라는 링크가 눈에 들어왔다. 혼자 읽기 아까워(라고 쓰고 점점 나빠져가는 기억력을 돕기 위해라고 읽는다) 내용을 간략하게 정리해봤다.
좋은 프로그래머 특성
- 실험을 먼저하려는 본능
- 과외 프로젝트를 몰래한다.
- (절차형, 스택 기반, 병렬형 등) 다양한 프로그래밍 언어를 장난삼아 접해본다.
- '아두이노'가 뭔지 안다.
- 회의에서 익살스러우면서도 비현실적인 해법을 제시하는 경향이 있다.
- 오덕스러운 장난감으로 큐비클이나 책상을 채운다.
- 코드와 설계로부터 감정을 분리한다.
- 주석 처리된 코드를 거의 커밋하지 않는다.
- 다른 프로그래머의 뛰어난 코드를 쓰기 위해 여러 주나 여러 달에 걸쳐 작성한 코드를 기꺼이 버린다.
- 코드를 바라보는 동안 결함을 지적당할 때 손가락을 입술에 가져가며 눈썹을 찌푸리며 '음'이라고 말한다.
- IDE가 자동으로 코드를 맞추는 방식이 거슬리지 않으며, '탭 vs 공백' 논쟁에 관심이 없다.
- '내 코드'가 아니라 '이 코드'라 지칭한다.
- 성공적인 프로젝트에서 기존에 사용했던 설계를 버린다.
- 지난 몇 년 동안 작성해온 결과물의 대안으로 기성품을 찾아라는 상사의 명령에 방어적인 태도를 보이지 않는다.
- 망가지지 않는 코드도 손 본다.
- 명세를 글자 그대로 받아들이지 않고 누가 작성했고 뭘 생각했는지 찾으려 노력한다.
- 프로그램을 매일 사용할 사람들을 쫓아다니며 이야기를 나눈다.
- 마틴 파울러라는 사람이 쓴 책이 책장에 있다.
- XML, ORM, REST와 같은 인기 있는 기술에 대해 호불호가 확실하며, 과거에 이들 몇 가지 기술로 전환해본 경험이 있다.
- 추상화 계층을 활용하기를 좋아하지만, 언어나 플랫폼에 이미 존재하는 상위에 뭔가를 추가하는 방식은 좋아하지 않는다.
- '약한 응집력'에 대해 이야기한다.
- 새로운 기능을 추가하지 않고서도 코드의 행수를 줄이기 위해 최소 10%의 커밋 노력을 기울인다.
- 새로운 기능을 추가하기 앞서, 더 나은 방법으로 완전히 대체하거나 두 과업을 동시에 수행하기 위해 기존 설계를 다시 뒤집을 필요가 있는지 점검한다.
- 이해 못하는 뭔가에 열광한다.
- 'Lambda The Ultimate'를 주기적으로 방문한다.
- ATP
분석이효소가(Seo Sanghyeon님께 감사. 대학교 교양 Biology 배운지 20년이 지나 모든 용어가 다 가물가물합니다. T_T) 뭔지 안다. 부엌에 있는 바나나에서 DNA를 추출해봤다. - 컴파일러를 작성하지 않더라도 표지에 용이 그려진 책이 책장에 있다.
- 근처에서 '베이지안'이라는 단어를 막 언급한 사람을 찾기 위해 파티 장에서 사람들을 밀치고 가본 적이 있다.
- 다른 산업게에 일하는 사람들에게 맥주를 사주며 기꺼이 공장 이야기를 나눌 의향이 있다.
- 에어버스 330의 조종실 레이아웃과 같이 일상적인 뉴스에 무관한 뭔가를 설명하는 바람에 사람들을 따분하게 만드는 버릇이 있다.
- 아이포드에 외국 팝송을 넣고 다닌다.
- 자신들이 모르는 뭔가에 전문적인 지식이 있는 사람들에게 화내는 대신 부러워한다.
- 가르치고 싶어한다.
- 자신의 작업에 대한 내용을 블로그에 올린다.
- 위키피디아에 활성 계정이 있다.
- 마커를 집어들고 화이트보드에 무심코 다가선다.
- 주석만 담겨 있는 저장소에 변경 내역을 커밋한다.
- 100달러짜리 책을 신입에게 빌려준다.
환상적인 프로그래머 특성
- 불굴의 인내
- 화재 경보음에 당황하는 대신 짜증이 난다.
- 헤드폰이나 라디오에서 막 연주된 노래가 뭔지 구분하지 못한다
- 옆 동료가 몇 차례 커피를 마시러 갔는지 화장실에 갔는지 병원에 갔는지 모른다.
- 사내 정치에 무관심하다.
- 코드가 동작하기도 전에 버그를 예측할 수 있다.
- 집요한 완벽 주의
- 타협하느니 죽는 편을 택한다.
- 출시 날짜에 개의치 않는다.
- 데드라인 직전에도 대규모로 리팩터링한다.
- 사리 추구를 위해 보너스, 승진, 스탁 옵션을 받으려 하지 않는다.
- 스탠리 큐브릭 감독 작품을 좋아한다.
- 플랫폼을 확실히 꿰차고 있다.
- C 표준 라이브러리의 인크루드를 모두 기억하고 있다.
- 책장에 "OpenDoc Programmer's Guide" 사본이 있다.
- 반지의 제왕, 스타워즈, 몬티 파이썬에서 대사가 어떻게 흘러가는지 암기하고 있다.
- TCP의 슬라이딩 윈도우가 초래하는 동기화 버그를 잽싸게 찾아낼 수 있다.
- 실험 중인 CPU의 마이크로코드가 초래한 버그를 인식한다.
- Knuth 교수가 보낸 $2.56짜리 수표를 액자에 넣어뒀다.
- 코드로 생각한다.
- 일상 대화에서 프로그래밍 구성 요소를 사용해 은유적인 표현을 자유자재로 한다.
- 대다수 시간을 "빈둥거리지만", 동료들보다 매일 버그가 훨씬 적은 코드를 커밋한다.
- 어깨 넘으로 흘깃 보며, 손가락으로 코드에 있는 버그를 지적한다.
- 취했거나 취침 중에도 걸려온 전화를 받으며 버그를 올바르게 진단한다.
- 샤워를 하면서도 코드를 작성한다.
- 난감한 버그에 직면했을 때, 본능적으로 자리에서 일어나 산책하러 간다.
- 대화 도중에 갑자기 조용해지며 허공을 응시한 다음에 자초지종도 말하지 않고 터미널로 급히 뛰어간다.
- 로마에 가면 로마인이 된다.
- 교차 플랫폼 프레임워크에 관심을 보이지 않는다.
- '언어 전쟁'을 경멸한다.
- 여러 언어로 동일한 프로그램을 유지하기 위한 전략적인 불이익을 생각하지 않는다.
- 컴파일러, 라이브러리, 운영체제에 앞서 자신의 코드를 문제 근원으로 가정한다.
- 특정 플랫폼을 대상으로 하는 프로젝트를 할당받으면 큐비클에 턱스 펭귄이나 안드로이드 인형을 갖다 놓는다.
- 휴대폰이나 테블릿 브랜드를 바꾼다.
- 새로운 디바이스에서 double이나 decimal과 같은 자료 유형이 무엇인지 가정하기 앞서 기술 매뉴얼 더미를 뒤진다.
- 자신의 도구를 직접 만든다.
- 자동화된 빌드 서버글 구축한다.
- 전용 벤치마크나 특화된 프로파일러를 작성한다.
- GitHub에서 오픈소스 프로젝트를 운영한다.
- 최소한 한 번은 LISP를 새로 작성해봤다.
- 도메인 특화 언어가 무엇인지 알며, 해석기를 설계하고 구현해봤다.
- 전용 매크로로 IDE/편집기를 확장한다.
- 버그 추적기에 할당된 이슈 숫자를 보여주는 7 세그먼트 디스플레이로 책상을 꾸며놓았다.
프로그래머를 넘어서는 특질에 대한 소개 내용도 있었지만, 프로그래머를 위해(응?) 여기까지만 정리했다. 각자 한번 재미삼아 체크해보기 바란다. ㅋㅋ
EOB
박재호님의 부러운 능력은 역시 적절한 번역입니다.
답글삭제"과외 프로젝트를 몰래한다"라고 번역하신 것보고, 전 사실 빵터졌습니다. --;
저만 그런가요?. 경험에서 우러나오는 번역이겠죠? ^^;
말씀 듣고 나서 다시 한번 본문을 살펴보니 급하게 번역해 올리느라 오탈자가 많이 나와서 갑자기 죄송스러운 모드입니다(잽싸게 폭풍 업데이트 :)).
답글삭제격려 감사드리며, 계속해서 좋은 글 올릴 수 있도록 앞으로도 잉여력을 많이 축적하겠습니다.
- jrogue 올림
다른 산업게에 일하는 사람들에게 맥주를 사 주며 기꺼이 공장 이야기를 나눌 의향이 있다 --> 여기도빵
답글삭제너무 재미나게 읽었어요 - 대화중에 멍때리다 설명없이 달려가는 좋은 프로그래머가 되야할텐데...털썩 ㅋㅋ
답글삭제"ATP synthase"는 "ATP 분석"이 아니라 "ATP 합성효소"에요~
답글삭제너무도 좋은내용이라
답글삭제퍼가도 괜찮은가요?
물론 원본 링크 달겠습니다!