한국에선 <실용주의 프로그래머>라는 제목으로 번역 출간된 책.
컴퓨터과학을 전공한 사람이라면, 끊임없이 코드로 실험과 증명을 해야하는 연구자라면, 개발과 프로그래밍으로 밥벌이를 하는 직장인이라면, 어느 누구든 열 번이고 백 번이고 읽어도 모자랄 책. 같이 일하는 동료 중 이 책을 단 한 번도 읽지 않은 사람이 있다면, 우리의 행복을 위해 그들의 책상 위에 몰래 이 책을 선물로 올려놓도록 하자.
앞으로 몇 개의 포스트에 걸쳐 시리즈로 <Pragmatic Programmer>의 핵심 아이디어와 인상 깊었던 부분들을 내 나름의 경험과 생각들을 곁들여 정리하고 공유한다.
Pragmatic Philosophy: 프로그래밍 기본 철학
Topic: The cat ate my source code
어, 코드 다 날아갔는데요
프로젝트를 진행하다보면 (특히 소규모 프로젝트의 경우) 피치 못할 사정으로 Development, Staging, Production 서버를 따로 두지 못할 때가 있다. 이 때 모든 데이터와 주요 환경 변수와 소스코드들이 하나의 볼륨에 저장되어 있다고 하자. 만약 서버 머신룸 유지 보수 중 갑작스런 사고로 볼륨이 다시 마운트가 되지 못하고 통째로 날아가버린다면? 헌데 아차, 바쁜 일정과 여러 가지 프로젝트 일정이 겹쳐 백업 조차 준비해두지 못했다면?
나의 잘못이다. 온전히 100% 나의 잘못.
머신룸과 인스턴스, 인프라를 관리하는 동료의 잘못도 아니고, 오래된 워크스테이션과 볼륨을 새 것으로 교체해주지 않는 매니지먼트의 잘못도 아니다. 변명은 필요 없다. 이럴 땐 나의 잘못임을 온전히 인정하고 상황을 명확히 설명한 뒤 구체적인 해결 방안을 제시하도록 하자.
물론 최선은 저런 끔찍한 일이 생기지 않도록 코드와 데이터는 수시로 여러 곳에 백업을 해두는 것이다. 가끔 다루는 시스템이나 데이터셋의 사이즈가 홀로 백업을 감당하기에 벅찰 정도로 클 때가 있다. 그럴 땐 매니저나 IT 인프라를 담당하는 동료에게 도움을 요청하면 생각보다 쉽게 여러 개의 백업 볼륨을 확보할 수도 있다. 잊지말고 항상 백업, 백업, 백업하자.
TOPIC: software entropy & Don’t Live with Broken windows
코드를 썩게 내버려두지 마라
소프트웨어도 “상하고 썩는다”.
한 연구 그룹이 깨끗하고 아름다웠던 동네가 우범지역으로 변화하는데 어떤 매커니즘이 작용하는 지 연구한 바 있다. 흥미롭게도 아주 단순한 하나의 요인이 근사하고 멋진 동네와 건물을 흉물스런 동네로 변모시키는 데 일조했다. 그건 바로 깨진 창문 (A broken window) 이었다.
하나의 깨진 창문이 고쳐지지 않은 채 남겨지게 되면, 그 건물은 아무도 신경을 쓰고 있지 않고 있다는 인상을 모든 사람들에게 주게 된다. 사람들이 쓰레기를 버리기 시작하고, 불량배들의 아지트가 되고, 창문들은 더 깨져나가기 시작한다.
절대 깨진 창문을 그대로 내버려 두지 말자. 구린 디자인, 잘못된 의사결정, 급히 짜여진 임시방편 코드들을 발견하는 즉시 고치자. No broken windows!
Topic: Your knowledge Portfolio
새로운 기술을 끊임없이 배우고 익혀라
프로그래머로써 나의 지식-기술 포트폴리오를 관리하는 건 펀드 매니저가 자산 포트폴리오를 관리하는 것과 다를 바 없다.
- 진정한 투자자들은 마치 습관처럼 정기적으로 투자한다.
- 장기적인 성공을 위해 포트폴리오 다각화는 필수다.
- 현명한 투자자는 보수적인 자산과 고위험-고수익 자산에 고루 투자한다.
- 저점에 사서 고점에 팔기 위해 노력한다.
- 주기적으로 포트폴리오를 점검하고 리밸런싱한다.
이를 프로그래머 버전으로 보면,
- 정기적으로 나의 지식-기술 포트폴리오를 발전시켜라.
- 다양한 지식-기술을 많이 알수록 나의 가치도 올라간다. 또한 여러 기술에 익숙해질수록 새로운 변화에 적응하는 능력 또한 향상된다.
- 지식-기술 포트폴리오도 리스크 관리가 필요하다. 절대 한 가지 기술에 몰빵하지 마라.
- 막 주목받기 시작하는 좋은 기술을 익혀두면 상상 이상의 보상을 얻을 수 있다.
- 주기적으로 나의 실력과 포트폴리오를 점검하고 방향성을 다잡아라.
그리고 저자들의 몇 가지의 제안,
- 매년 새로운 프로그래밍 언어를 하나 배워라. 생각의 지평이 넓어지고 스킬셋의 유연함이 생긴다.
- 매달 새로운 테크 책을 읽어라
- 매달 새로운 논테크 책을 읽어라
- 온라인 코스, 학회 등을 활용해라
- 직장 사람들 외의 내 분야의 다른 그룹, 사람들과 소통해라.
- 다양한 환경에서 실험해라 (OS, IDE, workflow manager, etc.)
Please do not copy or use any part of this content without permission or proper attribution.
본 콘텐츠의 무단 복제 및 사용을 금합니다. 사용 시 출처를 명확히 밝혀 주시거나 허가를 받아 주십시오.