이 책의 저자 서문을 읽다 보면, 아래와 같은 문장을 찾을 수 있다.
"일을 하는 것도 중요하지만 그에 못지 않게, 일을 어떻게 하느냐도 중요합니다." ... "일을 어떻게 했느냐는 일을 해낸것만큼이나 중요하다."
책을 다 읽은 현재, 저 두 문장이야말로 이 책 내용 전체를 아우르는 핵심적인 한 문장이라고 생각된다. 저자는 끊임없이 소프트웨어 장인, 장인정신 등의 단어를 언급하며 우리에게 다양한 관점의 이야기들을 해주고 있다. 개발자는 점점 더 해야할 일이 많아지고 있다는 것은 알고 있었지만, 결국 코딩이 가장 중요하다고 여겼던 내 생각을 박살내주었다. 물론 코딩을 잘하는 것은 중요하지만, 저자는 "코딩은 개발자가 해야 하는 많은 일들 중에 하나일 뿐이다"라고 말하고 있다. 실제로, 개발자로써 소프트웨어 회사에 잠시 몸을 담아보니 이 말이 격하게 공감되었다. 그리고 책을 읽다보니 위트있다고 느껴지는 표현이 하나 있었다. 그 표현은 아래와 같다(리펙토링에 대한 이야기였다).
보이스카웃에는 캠핑 장소를 처음 발견했을 때보다 더 깨끗하게 남겨두라는 규율이 있다. 이는 소프트웨어에도 똑같이 적용할 수 있다. 코드도 처음 발견했을 때보다 더 깨끗하게 관리해야 한다.
(중략)
보이스카웃 원칙에서는 '처음 발견했던 것보다 더 깨끗하게' 캠프를 남겨 둘 것을 이야기하고 있지 '캠프 전체를 혀로 핥아도 될 정도로 반짝반짝하게 만들라'는 뜻은 아니다. 그렇게 하는 것이 나쁘다는 것은 아니지만 실용적인 관점에서는 그저 시간 낭비일 뿐이다.
또한, 책에서는 애자일에 대해서도 지속적으로 언급하고 있는데, 아마도 이는 소프트웨어는 계속해서 변화하기 때문에 빠르게 피드백 루프를 갖는 애자일이 소프트웨어의 생애 주기에 잘 어울린다고 말하는 것 처럼 느껴졌다. 다만, 우리 개인의 삶에 있어 일이 전부가 아니기에, 장인이 되려면 부단한 노력이 필요하다는 것 또한 말해준다. 전반적으로 애자일에 대해서 굉장히 많은 이야기들이 나오고 있는데, 추후에 정리를 한번 해야겠다.
면접, 커리어 등.. 여러가지 도움이 되는 이야기들이 정말 많았다. 전체적으로 개발자로써 소프트웨어 산업을 견지하는 태도, 마음가짐에 대해서 말하고 있지만, 사실 이는 반드시 개발자가 아니더라도 스스로가 가진 직업에 대해 애정이 있는 사람들 모두에게 필요한 이야기라는 생각이 들었다. 다만, 대상 독자가 개발자이기에 개발에 관련된 내용이 다소 많으므로 모든 이들에게 이 책을 추천하기는 다소 무리가 있지 않을까 싶다. 그래도 면접과 채용, 커리어에 대한 챕터는 한번쯤은 읽어보라고 말하고 싶다. 그 외에, 본인이 개발자로써 삶을 살아갈 계획이라면 이 책을 추천하고 싶다.
많은 좋은 문구들이 있는데, 그 중에서 특별히 인상 깊었던 것들을 꽤 많이(?) 추려봤다.
해가 가면서 '고참'이라는 것이 '일시적'이고 '상대적'임을 알게 되었다.
애자일은 어떤 단일 개념이 아니다. 애자일은 서로 다른 여러 맥락에 따른 방법론과 테크닉의 조합이다. 소프트웨어 프로젝트는 변화 자체가 기본 속성이다. 애자일은 개발팀과 기업들이 그러한 변화에 적응할 수 있도록 변화와 관련된 위험들을 줄인다.
자동화한 테스트에 투자하지 않는다면 지속적인 코드 통합(integration)은 크게 의미가 없다. 컴파일이 된다는 것 정도만 확인할 수 있을 뿐이다. 설계를 단순화하고 코드에 공동의 오너십을 갖는 것도 힘들어진다(오류를 빨리 발견할 수 없어서 다른 사람의 코드에 손대기가 부담스러워진다).
같은 일을 반복하면서 다른 결과를 기대하는 것은 미친 짓이다.
- 앨버트 아인슈타인(Albert Einstein)
오래 전에 작성했던 코드를 지금에 와서도 고칠 부분이 없어 보인다면, 그것은 그동안 배운 것이 없다는 뜻이다.
"네 커리어와 프로페셔널로서의 미래는 누구의 책임인가?"
나는 아테네에서 가장 똑똑한 사람임에 틀림없다. 왜냐하면 나는 내가 아무것도 모른다는 사실을 알기 때문이다.
- 소크라테스(Socrates)
진실은, 우리는 항상 시간이 있다는 것이다. 시간을 최적화하지 못할 뿐이다.
배움과 훈련이 멈추는 순간 우리의 커리어도 멈춰버린다. 더 많은 지식과 기술을 가질수록 더 쉽게 커리어를 관리할 수 있다.
전통적인 관리자들과 비즈니스 컨설턴트들이 절차와 문서의 중요성을 아무리 강조하고 싶어하더라도 소프트웨어 프로젝트에는 소스 코드 그 자체만큼 중요한 것은 없다. 나머지는 모두 부차적이다.
프로그래밍은 집을 짓는다기보다는 정원을 돌보는 것에 더 가깝다.
- 『실용주의 프로그래머』 인용
태도는 큰 차이를 가져올 수 있는 작은 요소다.
- 윈스턴 처칠(Winston Churchill)
무언가가 마음에 들지 않는다면 바꾸어라. 그것을 바꿀 수 없다면, 그에 대한 당신의 생각을 바꾸어라.
- 마리 엥겔브레이트(Mary Engelbreit)
엉망인 코드가 많을수록 엉망인 코드가 늘어나는 속도도 빨라진다. 이것은 '깨진 유리창 법칙'으로도 알려져 있다.
애당초 코드를 수정할 필요가 없다면, 리펙토링해야 할 이유도 없다. 리펙토링은 더 자주 변경되는 부분을 대상으로 시작해야 한다.
무언가를 절대적인 진리로 바라보는 것은 바람직하지 않다. 항상 우리가 무엇을 하고 있고 그것을 왜 하고 있는지 질문해야 한다.
어디로 가고 있는지 모르고 있다면, 결국 가고 싶지 않은 곳으로 간다.
- 요기 베라(Yogi Berra)
거쳐가는 모든 직장, 프로젝트들 하나 하나를 투자로 인식하는 것이 중요하다. 직장은 단순히 돈을 버는 곳이 아니라 큰 목표를 향해 다가가는 단계중 하나다.
커리어에서 옳고 그른 것은 없다. 지식은 영원하고 돈과 안정은 영원할 수 없다는 것만은 마음에 새기고 있어야 한다. 어떤 이유에서든 직장을 떠날 때 남는 것은 오로지 지식과 경험뿐이다.
다니엘 핑크(Daniel Pink)의 저서 『원동력: 동기부여에 대한 놀라운 진실(Drive: The Surprising Truth about What Motivates)』돈은 충족되어야 할 기본 조건이고, 지식 노동자를 움직이는 것은 자율성, 통달, 목적의식 이렇게 세 가지라고 이야기하고 있다.
면접은 쌍방향이다. ... 면접을 볼 때, 일자리를 구걸하는 입장이 아니라는 것을 기억해야 한다.
면접 테크닉은 지원자와 면접관 모두 숙달해야만 한다.
좋은 개발자는 나쁜 개발자를 채용하지 않는다.
애자일 전환이 피드백 루프를 빠르고 짧게 하고, 프로젝트의 상황을 투명하게 만드는 데는 긍정적이지만 개발자들을 성장시키는 데는 도움이 되지 않는다. ... 애자일 도입 이전에도 동기 부여가 되어 있지 않았다면 애자일 도입 이후에도 마찬가지다.
잘못된 테스트는 아예 테스트가 없는 것보다 못하다.
진정으로 당신을 둘러싼 것들을 바꾸고 싶다면 몇 가지 꼭 갖춰야 할 것들이 있다. 가장 중요한 것은 용기다. ...(중략)... 자기가 하는 말이 무엇인지 스스로도 제대로 모르면서 다른 사람을 설득할 수는 없다.
두려움이 있는 데다가 자신감이 부족하면 회사는 관료적이고 정치적으로 변한다.
나의 상사를 어떻게 하면 설득할 수 있을까? 이에 대한 답은 '설득할 수 없다'이다. 용서를 구하는 것이 허락을 구하기보다 쉽다.
작업을 구현과 테스트로 나누어서는 안 된다. 한 시간은 서비스 클래스를 구현하고 다른 한 시간은 테스트를 작성하더라도 둘은 서로 독립된 작업이 아니다. 두 시간 분량의 한 가지 작업일 뿐이다. 서비스 클래스의 구현 작업 하나다. 테스트는 형태에 상관없이 한 코딩 작업의 요소일 뿐 별개의 작업이 아니다.
상세사항을 많이 노출하면 할수록 관리자가 당신에게 더 세세하게 업무 지시를 하고 싶게 만든다.
상사를 내편으로 만들려면 상사의 언어로 이야기를 해야 한다.
권한을 갖고 싶다면, 책임질 수 있는 준비를 해야 한다. 이미 책임이 주어져 있다면, 관련된 의사결정에 권한도 가질 수 있도록 해야 한다.
품질은 선택사항이 아니다. 일부러 낮은 품질을 원하는 사람은 없다.
가장 훌륭한 코드는 작성할 필요가 없는 코드다.
"당신의 커리어 목표는 무엇입니까? 몇 년 안에 어떤 위치에 있기를 바랍니까?"
내가 원하는 것을 나도 모른다는 것을 인정하고 나면 나의 길을 찾는데 좀 더 객관적으로 집중할 수 있다. ... 그런 상황에 빠졌을 때 할 수 있는 것은 한 가지 밖에 없다. 마음을 열고 사람들을 만나는 것이다. 껍질을 벗고 뛰쳐 나와 할 수 있는 한 최대한 많은 문들을 열어 보아야 한다.
추구하는 가치는 말이 아니라 행동에 의해 규정된다.