클린코더
프로 프로그래머에 대한 가이드를 제시한 책.
태도, 원칙, 행동에 에 초점을 두고 있음
클린코더 책 링크
느낀점#
- 해당 책은 로버트 마틴이 현업에서 겪으며 
프로 개발자란 무엇인가?를 고민하고 정리한 책이다. - 모든 책이 그렇듯이 해당 글들을 곧이 곧대로 받아들이지 않고, 자신의 해석으로 바꾸는 것이 중요하다고 생각한다.
 - 이 책 또한, 로버트 마틴의 생각이므로 모든 것을 그대로 받아들이지 않고, 자신의 것으로 다시 전환하며 읽는게 좋다고 해석하였고, 그래서 해당 책을 읽으며 어떻게 프로 개발자가 될 것인지 나만의 해석으로 정리하고자 한다.
 
1. 프로의 마음가짐#
- 책임이 전부라 해도 과언이 아님
 - 직업 윤리
- 회사가 자신의 경력을 책임져 주지 않는다.
 - 한 주에 60시간 계획을 짜고 20 시간을 자신을 위해 쓰는 것을 권장
 
 - 끊임없이 배우고 연습하라
 - 함께 일하고 멘토링하라
 - 프로는 때때로 실패한다는 사실과 계산이 틀릴지도 모른다는 것, 그리고 언젠가 자신의 능력이 부족해지는 날이 온다는 사실을 안다. 당당하되 겸손한 마음을 가지는 것을 잊지말자.
 
소프트웨어적으로 해를 끼치지 않으려면 어떻게 해야할까?#
- 기능의 해
- 오류 X, but 오류는 있을 수 밖에 없음
 - 그 완벽하지 않다는 사실에 책임을 져야 함
 - 오류에 책임을 지자
 - 테스트 자동화 
TDD를 강조 
 - 구조의 해
- 구조가 좋아야 코드가 유연해 짐
 - 바꾸기 쉬운지 증명하는 길은 실제로 바꾸어 보는 것
 보이 스카웃 규칙: 모듈에 체크아웃 시, 체크인 했을 때 보다 더 깨끗해야 한다는 규칙
 
최소한의 권장 기술 리스트#
- 디자인 패턴 (GOF, POSA)
 - 설계 원칙 (SOLID 객체지향 원칙 , Component 개념)
 - 방법론 (XP, Scrum, lean, kanban, waterfall, 구조적 분석, 주조적 설계 개념 등)
 - 원칙 (TDD, 객체지향 설계, 구조적 프로그래밍, 지속적 통합, 짝 프로그래밍 실천)
 - 도구 (UML, 데이터 흐름도, Structure Chart, Petri Net, State Transition Diagram and Table, Flow chart, Decision Table)
 
2. 아니라고 말하기#
프로라면 권위에 맞써 진실을 말해야 한다. 프로는 관리자에게 아니라고 말하는 용기를 가져야 한다.
- 해당 기간까지 완성하는 일이 아니라는 사실을 충분히 알고 있다면 "좋아요 한번 해볼께요" 보단,
아니요, 불가능 합니다라고 해야한다.
 - 이유도 좋지만, 해당 사실이 어떤지가 훨씬 중요하다.
 - 팀 플레이어는 항상 "네넵"이라고 하지않는다.
 - '노력' 해도 원하는 결과를 만들지 못하면 실패다.
 
우리 모두 명심해야 할 일은 예라는 대답은 프로로서 가져야 할 원칙을 포기할 뿐 아니라, 문제 해결에도 도움이 안 된다는 사실이다.
3. 예라고 말하기#
- 약속의 정의
- 하겠다고 말하고, 진심을 담고, 실제로 실행한다.
 - 즉, 
나는 언제까지 할 것이다.를 뜻한다. 
 - 진심을 담지 못하거나, 완수하지 못하게 되는 이유 및 해결책
- 자신이 모든 상황을 제어할 수 있을 때만 약속
 - 어떻게 할지 몰라도, 방법을 찾아내겠다고 약속을 하는 길도 있음
 - 예상치 못한 일이 발생되면, 바로 공유하고 예상치를 바꾸어야 함
 
 
문제가 될지도 모르는 사실을 다른 사람에게 즉시 알리지 않으면, 약속을 완수하는 데 필요한 도움을 얻을 기회를 스스로 뺏게 된다.
- 예라고 말하는 법
노력이란 단어를 회피 (불확실성을 숨기면 오히려 후에 감당하기 힘듦)- 모든 요청에 예라고 말할 필요는 없지만, 
예라고 말할 수 있는 창의적인 방법을 찾는데 고심해야 한다. 
 
4. 코딩#
코딩에 대해 개인적인
행동,기분,태도에 관한 규칙과 원칙을 소개하는 챕터
- 코드에 대해 다뤄야 할 여러 요소
- 코드는 반드시 동작해야 한다
 - 코드는 고객이 제시한 문제를 반드시 풀어야 한다
 - 코드는 기존 시스템에 잘 녹아들어야 한다
 - 코드는 다른 프로그래머가 읽기 쉬워야 한다
 
 
행동, 기분, 태도#
- 지치거나 주의력이 흩어졌다면 코드를 만들지 말라
- 새벽에짠 코드 X
 
 - 근심이 있을땐 해당 문제를 먼저 해결하거나 우선순위를 낮추어 계속 방해거리가 되지 않게 해야함
- 이상적으로는 개인 문제에 힘쓴느 일은 개인 시간에 해야함
 
 - 몰입에 빠지지 마라
- 큰그림을 놓쳐, 되돌려야 할 확률이 높아짐
 페어 프로그래밍으로 이를 방지할 수 있음
 - 프로다운 태도로 예의 바르게 기꺼이 도울줄 알아야 함
 - 어떤 때는 코드가 안나오기도 함
- 주요 원인으로 수면, 걱정, 불안, 우울을 꼽음
 - 여기서도 짝 프로그래밍을 추천
 
 - 창의력이 창의력을 낳는다
- 다른 창의적인 활동을 하는 것도 좋고, 여러 분야의 책을 읽는 것도 좋음
 
 - 디비겅 시간도 개발 시간
TDD로 이를 많이 줄일 수 있음
 - 소프트웨어 개발은 마라톤
 - 피곤하면 창의성과 총명함이 사라짐
- 곤경에 빠졌을 때나 피곤할 때는 잠시 자리를 떠나라
 - 운전이나 샤워도 도움이 됨
 
 - 질주하라는 부추김에 넘어가면 안됨
- 이는 소프트웨어 품질저하로 이어질 수 있음
 - 초과근무도 이에 해당
 
 - 타인을 돕기 위해 약간의 시간도 마련하지 못할 만큼 중요한 업무는 없다.
- 프로라면 명예를 걸고 어떤 때든 도움을 줘야 함
 - 도움을 받을땐 항상 감사하기
 - 쉽게 도움을 받을 수 있는 데도 게속 막힌 상태를 유지하는 일은 프로답지 않음
 
 
마감을 못지키는 날이 온다#
- 이런 일정 지연을 관리하는 요령은 
이른 감지와투명성- 최선, 최악, 성공 가능성이 가장 높은 날, 이렇게 세가지를 짜는 습관을 들이자 (두가지라도..)
 
 - 무슨일이 있어도 fall-back plan (실패 계획) 을 세워 놓자
 
완료의 정의#
- 독자적인 
완료의 정의를 만들어 생기는 가짜 출시 문제를 피해야 함