서평
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