그냥 웃어, 이 친구야

클린 코더를 읽고

의사소통과 책임감에 관한 것들이 흥미롭게 다가왔다. 자주까진 아니여도 2~3년에 한번쯤은 이 책을 다시 꺼내보면 좋을것 같다.

덧) 2-3년이 지났다. 프로의 마음가짐도 좋지만, '그냥 웃어, 이 친구야'가 가장 마음에 드는 구절. 단단해지기 위해 열심히 하는 것도 좋지만, 과하게 몰입하면 쉽게 지친다. 치열하게 일하고, 목표가 어긋나면 그냥 웃어보는 것도 좋겠다.


책 갈무리

1장 프로의 마음가짐

  • 무엇보다도 해를 끼치지 마라

    • 소프트웨어 개발자는 어떤 해를 끼칠까? 소프트웨어 관점으로 보자면 기능과 구조 양쪽에 해를 끼친다.
    • 사람들은 동작 중인 소프트웨어를 계속 바꾸는 일이 위험하다고 생각한다. 아니다! 정말 위험한 일은 소프트웨어를 고정된 상태로 두는 일이다. 소프트웨어를 구부리지 않는다면, 정말 변화가 필요할 때, 소프트웨어가 단단히 굳어있을 것이다.
    • 왜 개발자들은 코드 바꾸기를 무서워할까? 코드를 망가트릴까 봐 겁이 나서다. 왜 코드를 망칠까 봐 겁이 날까? 테스트가 없기 때문이다.
    • 코드 바꾸기가 무섭지 않다는 사실을 어떻게 증명할 수 있을까? 항상 코드를 바꾸면 된다.
    • 결국 제일 걸리는 문제는 테스트다. 자동화된 테스트 묶음의 커버리지가 거의 100%이고, 내킬 때마다 재빨리 돌려볼 수 있다면, 코드를 바꾸는 일은 전혀 무섭지 않다.
  • 직업 윤리

    • 자신의 경력은 자신이 책임저야 한다.
    • 어떤 회사는 기꺼이 책을 사주고, 교육과 컨퍼런스에 보내준다. 좋은 일이다. 회사에서 호의를 베푸는 것이다. 하지만 이런 일이 회사 책임이라고 생각하는 함정에 빠지면 안된다.
  • 전산 분야 지식을 익혀라

    • 과거를 기억하지 못하는 자. 그 과거를 반복하는 저주를 받을지니...
  • 회사와 고객에 동질감을 가져라

    • 회사의 문제가 자신의 문제다. 문제가 무엇인지 이해하고 최선의 해결책을 만들기 위해 일해야 한다. 제품을 개발할 때는 회사의 입장에서 개발 중인 기능이 회사의 요구사항을 만족하는지 확인해야 한다.
  • 겸손

    • 프로는 자신이 극도로 오만하다는 사실과 언젠간 불운이 닥쳐 목표가무너질지도 모른다는 사실을 안다. 목표가 무너졌을 때, 가장 좋은 방법은 하워드의 충고를 따르는 것이다. "그냥 웃어, 이 친구야"

2장 아니라고 말하기

  • "한다. 하지 않는다 둘 뿐이야. 해본다는 말은 없어. - 요다 "
  • 팀플레이어는 항상 "네"라고 하지 않는다.
  • 노력하겠다(trying)는 약속은 계획을 바꾼다는 약속이다. 지금의 계획은 불충분하다고 인정한 셈이다. 노력하겠다는 약속은 새로운 계획이 있다는 말이다. 도대체 새로운 계획이 뭔가? 어떻게 행동을 바꿔야 한단 말인가? 지금도 '노력'중이라면 뭘 바꿔야 하는가? 새로운 계획도 없고, 어떻게 행동을 바꿔야 할지도 모르고, '노력'하겠다고 약속하기 전 그대로 일한다면, 도대체 노력하겠다는 게 무슨 의미인가?

    • 나는 회사에 들어와 '해봐야 알 것 같아요. 한번 해볼게요.' 따위의 여지를 남기는 말을 많이 했다. 한다/못한다를 이야기 하자. 하기로 했으면 시스템 요구사항을 조율해서라도(중요한 태스크와 그렇지 않는 것을 나누고 선택하는 일) 해야 하는 것이다. 설령 최악의 경우 하지 못할 것을 두려워 하지 말자. 나는 더이상 아마추어가 아니다.

3장 예라고 말하기

  • 우리는 아무 책임도 지지 않으려 아주 바쁜 척 하는 경향이 있다.

  • 진심으로 하는 약속인지 아닌지 구별하는 비법은 문장에서 "나는 언제까지 할 것이다."라는 말을 찾아보는 것이다.

    • 나만 돌아보더라도 여러 경우가 있다.
  • 다음 상황을 보자

    마지: "금요일 까지 끝낼 수 있나요?"
    피터: "노력해볼게요."
    

    보다는

    마지: "금요일 까지 끝낼 수 있나요?"
    피터: "문서작업은 몇 시간 걸리니까 월요일에 끝낼 수도 있어요. 하지만 화요일까지 늦어질지도 몰라요."
    

    이정도 불확실함은 마지가 감당할 수 있다. 불확실함을 숨기면 오히려 감당하기 힘들다. 그러나 예/아니오로 대답하는 것이라면 금요일까지는 아니오로, 화요일까지는 예라고 대답해야 한다.

  • 원칙을 가지고 의사소통하기.

    • 때로는 원칙을 깨고 싶다는 유혹을 받는다. 가령 테스트를 작성하지 않으면 빨리 끝날지 모른다는 식의 생각말이다.
  • 프로는 자신의 한계를 안다. 효과적으로 일할 수 있는 초과 근무 시간이 어느 정도인지, 그 대가가 뭔지 안다.

  • 모든 업무 요청에 대답할 필요가 없다. 하지만, "예"라고 대답할 수 있는 창의적인 방법을 찾는 데 고심해야 한다. 프로가 예라고 대답할 때에는 약속을 뜻하는 언어를 사용해서 내뱉은 말에 모호한 부분이 없도록 해야 한다.

4장 코딩

  • 수많은 문제를 풀었던 장소 중 하나는 회사에서 집으로 가는 차 안이었다.
  • 엄청난 수의 문제를 샤워하면서 풀었다.
  • 열흘 안에 끝내리란 희망을 갖지 마라! 희망은 프로젝트의 살해자다.
  • '완료' 정의

    • 프로그래머가 저지르는 여러 가지 프도답지 못한 행동 중에서도 가장 최악은 아마 끝내지도 않았는데 끝냈다고 말하는 짓이다. 명백한 거짓말이고 아주 나쁜 짓이다. 하지만 더 교활한 경우도 있는데, '완료'의 뜻을 새롭게 정의해 합리화할 때다.
    • 수 없이 교활했다. 스코프를 제 정의하는 것과 완료의 정의를 다르게 하는 것은 종이 한장 차이다. 완료를 위해 스코프를 정의하는 것은 정말 중요하다. 그러나 그것이 그럴듯하게 완료하기 위함이 아닌지 경계하자. 소프트웨어에 완료라는 표현이 적합하지 않지만, 이건 순전히 개발자의 입장이고 분명 요구사항엔 완료가 있다.
    • 가장 좋은 방법은 업무 분석가와 테스터가 자동화된 인수 테스트를 통과해야 하는 방법이다.
  • 도움

    • 프로그래밍은 어렵다. 젊을수록 이 말이 믿기지 않을 것이다. 어찌됐건 프로그래밍은 수많은 if와 while 문장의 덩어리다. 하지만 경험을 쌓다 보면 어떤 식으로 if와 while 문장을 결합하는지가 결정적으로 중요하다는 사실을 깨닫기 시작한다.두 문장을 듬뿍끼얹어 놓고 최고가 되기를 바라면 안 된다. 그보다는 시스템을 작고 알기 쉬운 단위로 주의깊게 쪼개야 한다.
    • 사실 프로그래밍은 너무 어려워서 한 사람의 능력으로는 잘 해내기가 어렵다. 아무리 기술이 뛰어나도 반드시 다른 프로그래머의 생각과 아이디어에서 도움을 받는다.
  • 다른 사람 돕기

    • 이런 이유 때문에 서로를 도울 준비를 하는 일은 프로그래머의 의무이다. 사무실 칸마기에 틀어박히거나 다른 사람의 질문을 거부하는 일은 프로가 갖출 윤리 위반이다.
    • 같은 팀 동료가 어떤 상태인지 주의를 기울여야 한다. 누군가 곤란에 빠진 것을 봤다면 도움을 줘야한다. 자신이 다른 이보다 영리해서가 아니라 그저 신선한 관점이 문제를 푸는 데 커다란 기폭제가 된 것이다.
  • 도움 받기

    • 다른 이가 늘 도울 때는 감사해야 한다. 고맙게 그리고 기꺼이 도움을 받아들여라. 영역을 지키는 듯한 행동은 하지 마라.
    • 도움을 부탁하는 방법을 배워라. 막혔거나 혼란스럽거나 문제가 마음 먹은 대로 풀리지 않는다면 다른 이에게 두움을 요청하라.
    • 도움을 요청하기전 내 문제를 정리하다보면 상당수의 문제의 답이 떠오르기도 한다.

5장 테스트 주도 개발

  • TDD의 세 가지 법칙

    1. 실패한 단위 테스트를 만들기 전에는 제품 코드를 만들지 않는다.
    2. 컴파일이 안 되거나 실패한 단위 테스트가 있으면 더 이상의 단위 테스트를 만들지 않는다.
    3. 실패한 단위 테스트를 통과하는 이상의 제품 코드는 만들지 않는다.
  • 용기

    • 왜 나쁜 코드를 봐도 고치지 않을까? 지저분한 함수를 본 첫 번째 반응은 "지저분하군. 정리좀 해야겠네."다. 두 번째 반응은 "난 안 건드릴 거야!"다. 왜 이럴까? 손을 대면 뭔가 망가뜨릴지도 모른다는 위험을 무릅써야 한다는 사실을 알기 때문이다. 뭔가가 망가지면 자신이 감당해야 한다.

6장 연습

  • 경험의 폭 넓히기

    • 프로 프로그래머는 종종 다양한 문제를 접하지 못해 곤란해 한다. 회사가 업무에 필수인 단 하나의 언어, 플랫폼, 도메인을 강요하는 경우가 많다. 영향력을 넓히지 못하면 자신의 경력과 사고 방식이 해로울 정도로 좁아진다.
  • 연습에 관한 윤리

    • 프로 프로그래머는 개인 시간에 연습한다. 직원의 기술 연마를 돕는 일은 회사가 꼭 해야만 하는 일이 아니다. 직원의 이력서를 광내는 일도 회사가 할 일이 아니다.

7장 인수테스트

  • 프로 개발자에게 완료에 대한 정의는 단 하나 뿐이다. 완료란 다 됐다는 뜻이다. 완료란 모든 코드를 작성했고, 모든 테스트를 통과했음을 말하는 것이고, QA전문가와 이해당사자들이 이를 인수했다는 뜻이다. 이게 완료다.

8장 테스트 전략

  • QA는 오류를 찾지 못해야 한다.

    • 물론 마음먹었다고 척척 달성할 수 있는 목표는 아니다. 똑똑한 친구들을 모아 제품의 모든 결점과 부족한 부분을 열심히 잡아보아도, QA는 어떻게든 오류를 찾아낸다. QA가 뭔가를 발견할 때마다 개발팀은 간담이 서늘해져야 정상이다.

9장 시간 관리

  • 다음은 회의에 대한 두 가지 진실이다.

    1. 회의는 필요하다
    2. 회의는 엄청난 시간 낭비다.
  • 거부하기

    • 요청을 받았다는 이유로 모든 회의에 참석할 필요는 없다. 사실 너무 많은 회의에 참석하는 일은 프로답지 못한 행동이다.
    • 회의 참석을 요청한 사람은 참석자의 시간 관리에 책임이 없다.
  • 빠져나오기

    • 회의는 계획대로 흘러가지 않을 때가 많다. 이런 회의인 줄 알았으면 참석을 거부했을 텐데라는 생각이 들 때도 있다.
    • 쓸모 없는 회의에 발이 묶였다면, 예의 바르게 회의에서 빠져나올 방법을 찾아야 한다.
    • 회사의 시간과 자금을 현명하게 사용해야 할 의무가 있기 때문에, 적당한 때를 봐 회의에서도 빠져도 되는지 물어보는 일은 프로답지 못한 행동이 아니다.
  • 반복회고와 시연

    • 반복 회고와 시연은 각 반복 주기가 끝날 때마다 시행한다. (...) 1주나 2주에 한 번이므로 말할 거리가 너무 많으면 안 된다는 점을 명심하자.
  • 논쟁/의견 차이

    • 한 번은 켄트 벡이 심오한 말을 했다. "어떤 논쟁이든 5분 안에 해결되지 않으면 논쟁으로는 해결할 수 없다." 논쟁이 길어지는 이유는 양쪽 모두 근거가 되는 명백한 증거가 없기 때문이다.
  • 카페인

    • 어떤 이들은 적당량의 카페인을 섭취했을 때 집중력 마나를 더 효과적으로 쓰기도 한다는 사실은 의심의 여자가 없다. 하지만 조심해야 한다. 카페인은 집중할 때 묘하게 '안절부절'한 상태로 만들기도 한다.
  • 타임박스와 토마토

    • 시간관리와 집중을 관리하기 위해 토마토라고도 알려진 포도모로라는 매우 효율적이며 유명한 기법을 사용한다.
    • 25분 타이머를 맞추고, 5분 쉬고 4세트 반복후 30분정도 길게 쉬는 것이다.
    • 포모도로(pomodoro) 기법에 대한 글은 아주 많으니 꼭 읽어보길 바란다.
  • 결론

    • 진흙탕이 점점 커지는 것을 언제나 경계하고, 눈치채는 즉시 최대한 빨리 깨끗이 정리한다.

10장 추정

여러가지 추정방법을 소개함

11장 압박

  • 프로 개발자는 압박감을 느껴도 침착하고 결단력 있게 행동한다. 압박감이 커질수록 훈련과 규율을 따르는데, 이 방식이 압박의 주체인 마감일과 약속을 지키는 최선의 방법임을 알기 때문이다.

  • 최악의 행동은 급히 서두르는 것이다! 어떤 값을 치르더라도 이 유혹에 저항하라. 서두르면 빠진 구멍이 더 깊어질뿐이다.

  • 상황이 힘들어지면 규율을 믿어라.

12장 함께 일하기

  • 소프트웨어는 대부분 팀 단위로 만든다. 팀원들이 프로답게 힘을 모을 때 팀은 가장 효율적이다.

  • 정말로 프로그래밍을 하며 일과 시간을 보내고 싶다면, 우리가 대화하고자 노력해야 할 상대는 바로 사람이다.

13장 팀과 프로젝트

  • 팀은 프로젝트보다 만들기 더 어럽다. 그러므로 영구적인 팀을 만들어 이프로젝트에서 저 프로젝트로 움직이게 하고 한 번에 여러 프로젝트를 맡기는 게 낫다.

14장 장인정신

  • 그들은 "아니요"라고 말을 할 때를 알지만 "예"라고 대답하려고 노력한다. 장인은 프로다.

  • 장인정신은 장인들이 지니고 있는 사고방식으로써 가치, 규율, 기술, 자세 및 답변을 포함하는 밈이다.

  • 장인 정신 밈은 사람을 통해 전해진다.

Buy Me A Coffee