사내 필독서(?)로 추천받아 읽게 된 책. 워낙 유명해서 이전부터 알고 있었기에, 기대감과 함께 읽기 시작했다. 공감하는 내용도 있고 이해가 되지 않는 부분도 있었지만 대부분은 좋은 내용이었다. 프로답게 일하기 위한 지침으로서 몇 가지 기억하고 싶은 내용이 있어 메모한다.
1. 프로의 마음가짐
- 완벽한 소프트웨어를 만드는 일은 사실상 불가능하지만, 그것이 완벽하지 않아도 괜찮다는 것은 아니다.
- 결함이 있는 코드란 어떤 코드일까? 확신을 갖지 못하는 코드는 모두 결함이 있는 코드다.
2. 아니라고 말하기
- 프로는 관리자에게 아니라고 말할 용기를 가져야 한다. 노예에게는 아니라는 말이 허락되지 않는다. 하지만 프로는 아니라고 말해야 마땅하다. 아니라고 말하는 일이야 말로 작업을 완료하는 유일한 길이다.
3. 예라고 말하기
- 프로는 모든 업무 요청에 '예'라고 대답할 필요가 없다. 하지만 '예'라고 대답할 수 있는 방법을 찾는 데 고심해야 한다.
- 프로가 '예'라고 대답할 때는 약속을 뜻하는 언어를 사용해서 내뱉은 말에 모호한 부분이 없도록 해야 한다.
4. 코딩
- 쉽게 도움을 받을 수 있는 데도 계속 막힌 상태를 유지하는 일은 프로답지 않다.
- 젊은 프로그래머를 보살피고 멘토링하는 데 시간을 들이는 일은 프로로서의 윤리 문제다. 마찬가지 맥락에서 젊은 프로그래머는 선배에게 멘토링을 구하는 일이 프로로서의 의무다.
5. TDD
- 단위 테스트는 문서다. 시스템의 가장 낮은 단계의 설계를 알려준다. 명확하고 정확하며 독자가 이해하는 언어로 만들어져 실행 가능한 형식을 갖춘다. 낮은 단계에 대한 문서 중 가장 훌륭한 형태다.
- 테스트 코드를 만들려면 코드의 의존관계를 고립시켜야 한다는 어려움이 있다. 다른 함수를 호출하는 함수는 테스트하기 어려운 경우가 많다. 이 경우 테스트를 만들려면 함수를 다른 부분에서 떨어뜨리는 방법을 찾아야 한다. 다른 말로 표현하면 테스트를 먼저 만들기 위해서는 좋은 설계를 고민해야 한다.
6. 연습
- 직원의 기술 연마를 돕는 일은 회사가 꼭 해야만 하는 일이 아니다.
- 연주회 참석자는 음악가가 음계 연습하는 소리를 들으려고 돈 내지 않는다. 마찬가지로 프로그래머를 고용한 회사는 연습 시간에 급여를 지불하지 않는다.
- 모든 프로는 어떤 식으로든 연습을 한다. 연습을 하는 이유는 가능한 한 최고의 기량으로 업무를 수행해야 한다는 사실에 신경을 쓰기 때문이다.
7. 인수테스트
- 프로 개발자에게 완료에 대한 정의는 단 하나 뿐이다. 완료란 다 됐다는 뜻이다. 완료란 모든 코드를 작성했고, 모든 테스트를 통과했음을 말하는 것이고, QA 전문가와 이해당사자들이 이를 인수했다는 뜻이다. 이게 완료다.
8. 시간 관리
- 회의 참석을 요청한 사람은 참석자의 시간 관리에 책임이 없다. 자신의 시간 관리는 자신만이 할 수 있다. 따라서 회의 참석을 요청받으면, 자신의 참석이 지금 처리 중인 업무에 당장 크게 필요치 않다면 회의 참석을 거부하라.
- 프로는 어떤 개념에 너무 확고한 생각을 가진 나머지 포기하지 못하거나 냉정하게 돌아보지 못하는 일이 없어야 한다. 다른 여러 개념에 마음을 열어두면 막다른 길에 몰렸을 때도 여전히 다른 선택의 여지가 보인다.
9. 압박
- 프로라면 언제나 사업부를 도와 목표를 달성하는 법을 찾아내야 한다. 하지만 사업부에서 멋대로 한 약속은 받아들이지 않아도 된다. 이는 말로 하기는 쉽다. 하지만 약속을 못 지키는 바람에 사업이 실패하고 월급을 못 받게 된다는 압박감을 떨치기 힘들다. 하지만 프로답게 처신한다면 적어도 당당히 머리를 들고 새로운 일터를 구하면 된다.
- 마감일을 지키면서 빠르게 움직이는 방법은 언제나 깔끔한 상태를 유지하는 것이다. 프로는 빨리 움직이려고 마구잡이로 어지르고 싶은 유혹에 굴하지 않는다.
- 시스템, 코드, 설계를 가능한 한 깔끔하게 유지함으로써 압박을 피할 수 있다. 이는 코드를 정리하느라 끝없이 시간을 소모한다는 뜻이 아니다. 그저 엉망으로 어질러진 모습을 견디지 못한다는 뜻이다.
- 위기에 처했을 때 훈련과 규율을 따른다면 진정으로 그 규율을 믿는다는 뜻이다. 반대로 위기 때 행동이 바뀐다면 평소 행동을 진심으로 믿지 않는다는 뜻이다. 평소에는 코드를 깔끔히 관리하다가도 위기가 닥쳤을 때 코드가 엉망이 된다면, 마음속 깊은 곳에서는 엉망진창 코드가 발목을 잡아 더 느리게 만든다는 사실을 믿지 않는다는 뜻이다.
10. 함께 일하기
- 프로 프로그래머의 첫 번째 책임은 회사가 필요로 하는 일을 처리하는 것이다. 이는 관리자, 사업 분석가, 테스터, 팀 동료와 힘을 합쳐 사업 목표를 속속들이 이해해야 한다는 뜻이다. 사업 공부에 온 몸을 던지라는 소리는 아니다. 다만 왜 이런 코딩을 해야 하고 그 코드로부터 회사가 어떤 이득을 얻을지 알아야 한다는 뜻이다.
- 프로 프로그래머가 절대 피해야 할 일은 기술더미에 파 묻혀 정신을 못 차려 주변에서 사업이 무너지고 불타는 사실을 알아채지 못하는 것이다. 우리 업무는 사업이 순조롭게 나아가도록 만드는 일이다.