서평

1. 프로의 마음가짐

  • 책임감을 가져라, 기능에 해를 끼치지 마라, 구조에 해를 끼치지 마라 = 유연한 코드 작성 필요

    • QA팀은 아무것도 찾지 못해야 한다

  • 직업 윤리 : 한 주에 60시간의 일 계획을 짤 것 = 40시간은 회사 + 20시간은 자기개발

  • 전산 분야의 지식을 익힐 것, 끊임 없이 배울 것, 품새로 연습하기

    • 최소한 알아야 할 기술 목록들

      • 디자인패턴

      • 설계원칙 (SOLID)

      • 방법론 (XP, 스크럼, 린, 칸반, 폭포수, 구조적 분석, 구조적 설계 개념)

      • 원칙 (TDD, 객체 지향 설계, 구조적 프로그래밍, 지속적 통합, 짝 프로그래밍)

      • 도구 (UML, DFD 등)

    • 품새

      • 볼링 점수 계산, 인수 분해 프로그래밍 등 간단한 훈련을 반복하는 것

      • 손가락 + 두뇌의 단련을 목적으로

      • 단축키에도 익숙해 질 수 있도록

  • 함께일하기, 멘토링, 업무 지식 익히기, 겸손 등…

2. 아니라고 말하기

  • 어떠한기능을 구현하기 위한 시간과 왜 그만큼의 시간이 필요한지, 담당자가 원하는 시간까지는 무리임을 명백하게 주장할 수 있어야 한다

  • 안되는 것에 대한 말은 빠를수록 좋다

  • ‘노력’하겠다는 말을 남발하지 말 것, 그렇다면 이전까지는 노력 안했다는 말…?

3. 예라고 말하기

  • 약속의 경우 다음과 같이 협동해야 한다

    • 하겠다고 말한다

    • 진심을 담는다

    • 실제로 실행한다

  • 아래의 말은 약속의 문구가 아니다

    • 필요 / 해야한다

    • 희망/ 바람

    • 하자 —> ‘내가’ 라는 주체가 없기 때문에

  • 약속은 자신이 모든 상황을 제어할 수 있을 때만 쓰여야 한다. 다른 사람의 의존이 불가피한 경우 목표달성을 위한 구체적인 약속을 해야한다

  • 약속을 지키지 못하는 상황이 발생하면 경고하고 약속 문제를 빠르게, 즉시 말해야 한다

4. 코딩

  • 준비된 자세

    • 코드는 반드시 동작해야 한다

    • 코드는 고객이 제시한 문제를 반드시 풀어야 한다

    • 코드는 기존 시스템에 잘 녹아 들어야 한다

    • 다른 프로그래머가 읽기 쉬워야 한다

  • 피곤한 새벽에 코딩하지 말자

  • 해결하지 못한 사적인 문제는 어느정도 해결하고 코딩할 것

  • 몰입영역 : 나의 최고 근자감이 폭발할 수 있으므로 영역에 빠지지 않는 편이 차라리 낫다

  • 음식 : 굳이 도움이 돈다면 영역으로 들어갈 때 정도. 결론적으로 크게 도움이 되는지논 모르겠다

  • 외부방해 : 짝 프로그래밍, TDD 가 도움이 된다

    • 짝 프로그래밍의 경우 코드가 잘 나오지 않을 때도 도움 된다

  • 창의적인 입력 : (저자의 경우 공상과학소설이 도움이 된다고 한다…)

  • 디버깅 시간 : 디버깅 시간 단축은 프로의 의무이다. TDD 가 도움이 된다

  • 속도조절 : 집에 갈 시간을 정하고, 운전하며 해방감을 느끼고, 샤워도 하는 등…

  • 일정을 못 지킨다

    • 최선, 최악, 성공 가능성이 가장 높은 경우의 추정치를 마련한다.

    • 희망은 기각하라.

    • 질주는 재앙이다.

    • 초과근무는 실패 시 대안이 필요하다.

    • 가짜 출시는 ‘완료’ 의 정의를 마음대로 해석시킨다

  • 도움

    • 주는 것과 받는 것 둘 다 필요하다

5. 테스트 주도 개발

  • TDD 의 세가지 법칙

    • 실패한 단위 테스트를 만들기 전에는 제품 코드를 만들지 않는다

    • 컴파일이 안되거나 실패한 단위 테스트가 있다면 더 이상의 단위 테스트는 만들지 않는다

    • 실패한 단위 테스트를 통과하면 그 이상의 제품 코드는 만들지 않는다

  • 얻을 수 있는 혜택들

    • 확신

    • 결합 주입 비율의 하락 <-> DI

    • 코드 수정에 대한 용기

    • 문서화

    • 좋은 설계에 대한 고민

6. 연습

  • 코딩 도장 : 코딩을 무술 연마에 비유하여 쓰는 말. 함께 모여 연습하기도 하고 개인적으로 하기도 한다

    • 품새

      • 어떤 문제 풀이를 정교하게 짜모은 것

      • 풀이보다는 동작과 결정 내기리를 연습한다

      • 단축키, 코드 관용구를 익힐 수 있는 좋은 방법

    • 합 맞추기

      • ‘핑퐁’ 이라고 하며 한 명이 단위 테스트를 개발하고 다른 한 명이 그 테스트를 통과하는 코드를 짠다

    • 대련

      • 두 명이 합을 맞추어 서로의 문제를 풀게 만드는 것과 비슷하다

7. 인수 테스트

  • 불확실성의 원칙 : 서류와 실제 시스템의 동작은 항상 다르다는 원칙

  • 불안한 추정, 때늦은 모호함

  • 인수테스트 : 요구사항이 언제 완료되는지를 정의하기 위해 이해 당사자들과 프로그래머들이 힘을 모아 작성하는 테스트

    • 완료 = 모든 코드 작성의 완료 + 모든 테스트 통과의 완료를 의미

    • 목적은 ‘의사소통’ 에 있다

    • 비용이 비싸므로 항상 자동화 해야한다

    • 사업 분석가의 테스트 : 행복한 경로 & QA 의 테스트 : 좋지 않은 경로 & 경제조건, 예외사항 등을 테스트

    • 개발자는 인수테스트를 실행하고 오류를 확인하고 원하는 기능을 실행하여 테스트를 통과 시킨다

  • 인수테스트 vs 단위테스트

    • 단위테스트 : 프로그래머 for 프로그래머

    • 인수테스트 : 사업적 관섬

—> 같은 내용을 테스트 할지라도 다른 메커니즘과 경로를 통해서 테스트 한다

8. 테스트 전략

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

  • 테스트 자동화 피라미드

    • 단위테스트 : 프로그래머에 의해, 프로그래머를 위해, 시스템 프로그래밍 언어로 만든 테스트

    • 컴포넌트테스트 : 인수테스트의 일종. 해당 업무 규칙을 테스트하는 인수테스트

    • 통합테스트 : 여러 컴포넌트로 이뤄진 큰 시스템에 대해서만 의미가 있다. 컴포넌트 간의 묶음이 잘 호환되는지를 확인하는 테스트

    • 시스템테스트 : 통합한 시스템 전체를 대상으로 하는 자동화테스트

    • 수동 탐색 테스트 : 예상치 못한 오류를 찾아내는 테스트

9. 시간관리

  • 회의 : 당장의 이익이나 큰 이득이 있는 경우에만 참석할 것

    • 거부할 때는 정중히 거절하도록 한다

    • 빠져나올 때는 주제가 잘못된 길로 갈 때 진행순서를 바꾸거나 신속히 진행하거나 또는 현재 중요도에 따라서 빠져나올 줄 알아야한다

    • 의제와 목표를 정하고 해당 주제로만 회의한다

    • 일일회의 : 어제 한 것 + 오늘 할 것 + 방해요소 유무에 대하여 1분 정도로 이야기 한다

    • 반복 계획 회의 : 제품 백로그 ~ 다음 반복 주기 동안 처리할 항목을 고르기 위한 회의. 각 항목은 5~10분 정도 소요한다

    • 반복회고와 시연 : 회고 20분, 시연 25분

    • 논쟁 / 의견 차이 : 5분 내로 해결하도록 한다. 데이터가 꼭 필요하다. 총 50분. 팀원 간 의견을 발표한다.

  • 집중력 마나 : 수면, 카페인, 재충전, 근육 집중 등

  • 타입박스와 토마토 : 포모도로 기법 =(25분 타이머 + 5분 휴식 (전화, 그 외 업무 처리))* 4번 + 30분 휴식 하기

  • 우선순위를 지키고 피하지 말 것

  • 막다른 길을 빠르게 돌아올 것

  • 선택지를 넓힐 것

10. 추정

  • 약속과 추정은 다르다

    • 약속 : 꼭 지켜야하는 것

    • 추정 : 약속x , 추정은 어림짐작이다. 약속에 포함되지 않는다

      • 방법 : PERT

        • 프로그램 평가와 검토 기술

        • 미해군이 폴라리스 잠수함 프로젝트를 지원하기 위해 만들었다

      • 추정에 사용하는 자원 중 가장 중요한 자원은 주변사람들이다

    • 사업부는 추정을 약속으로 보고 개발자는 추정을 어림짐작으로 본다

  • 업무를 추정할 때 세 가지 숫자를 제시한다. 이 숫자를 3방 분석이라한다

    • O 낙관적 추정 값

    • N 명목 추정 값

    • P 비관적 추정 값

  • 광역적 델파이 : 의결일치. 사람을 모아 팀을 꾸리고, 토론하고, 추정하고, 합의에 도달할 때까지 토론과 추정을 반복한다

    • 날아다니는 손가락

      • 한번에 하나의 업무에 대해서 토론

      • 손가락으로 0-5 의 숫자로 얼마나 걸릴지 생각해서 표현한다

      • 모든 의견이 일치하면 다음으로 넘어가고 아니라면 일치할 때 까지 계속한다

    • 계확포커

      • 숫자를 적힌 카드를 사용한다. 날아다니는 손가락과 유사하다

    • 관계추정

      • 모든 업무를 카드에 적고 추정값을 적지 않는다

      • 업무카드를 상대적으로 비교하여 긴 시간이 필요한 업무를 오른쪽, 짧은 시간은 왼쪽으로 옮긴다

  • 큰 수의 법칙

    • 큰 업무를 여러 개의 작은 업무로 쪼개 따로따로 추정하면, 하나의 큰 업무 추정 값보다 작은 업무들의 추정 값의 합이 정확하다.

  • 개발자는 사업부가 계획을 짜는데 쓰도록 실용적인 추정값을 전달해야 한다

11. 압박

  • 달성할 확신이 없는 마감일의 약속은 피해야 한다

  • 빠르고 지저분하게 라는 말은 모순이다. 어떤 때라도 지저분함은 느리다는 의미이다. 언제나 깔끔한 상태를 유지하자

  • TDD, 유닛테스트와 같은 규율을 지켜야 한다

  • 당황하지 말것

  • 팀에게 압박, 어려움의 상황을 알리고 도움을 받아야 한다

12 .함께 일하기

  • 소프트웨어는 팀원들이 프로답게 힘을 모을 때 가장 효율적이다

  • 프로그래머의 업무는 사업이 순조롭게 나아가도록 만드는 일이다

  • 코드는 공동 소유로 가져가고 다른 사람의 코드 작업을 막지 않아야 한다

  • 짝 프로그래밍을 하자

13. 팀과 프로젝트

  • 팀에게 프로젝트를 부여하는 것이 프로젝트를 위해 팀을 생성하는 것 보다 낫다

  • 팀은 프로젝트보다 만들기 더 어렵다

  • 영구적인 팀을 만들고 여러 프로젝트를 할당시키는 편이 더 좋다

14. 스승과 제자 그리고 장인 정신

  • 수습기간 : 인턴은 스승과 함께 한다

  • 장인들 : 10년 이상의 경력. 여러 다른 시스템과 언어를 사용해본 사람

  • 숙련공 : 능숙하고 훈련받은, 열정적인 프로그래머. 경력 5년 정도의 개발자

  • 견습생 / 인턴 : 대학 졸업생, 자주성이 없으며 숙련공들의 밀착 지도를 받고 일을 돕는다. 짝 프로그래밍을 한다

  • 장인 = 서두르지 않으면서도 일을 빠르게 처리하며 합리적인 평가를 제공하고 임무를 처리하는 사람

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

Last updated