실용주의 프로그래머

11
The Pragmatic Programmer 실실실실 실실실실실 Booker 실실실

Upload: seongjung-kim

Post on 08-Aug-2015

69 views

Category:

Engineering


8 download

TRANSCRIPT

Page 1: 실용주의 프로그래머

The Pragmatic Program-mer실용주의 프로그래머

Booker 김성중

Page 2: 실용주의 프로그래머

책 소개

저자 : 앤드류 헌트 , 데이비드 토머스

초보를 벗어나고자 하는 프로그래머를 위해 저자들의 오랜 성찰을 통해 정제한 지혜와 구체적인 실천법을 안내한다 .

코딩 가이드라인 , 설계에 대한 격언 , 프로젝트 관리에 대한 조언 , 사람들과의 관계에 대한 지혜 , 각 항목별 연습 문제를 제공한다 .

Page 3: 실용주의 프로그래머

소통하라청중 이해하기 (WISDOM)

1. 무엇 (What) 을 배우길 원하는가 ? : 실용주의 프로그래머가 되기 위해 준비해야할 것이 무엇인지 ?

2. 말하려는 것에서 그들이 관심 (Interest) 있어 하는 건 무엇인가 ? : 가치있는 프로그래머 ? 개인 기량 높이기 ? 소스코드 관리 ? 자동화툴 ? 테스트 코드 작성 ?

3. 얼마나 소양 (Sophisticated) 이 있는가 ? : 다들 비슷한 수준

4. 어느 정도의 구체적인 (Detail) 내용을 원하는가 ? : 비학술시그인만큼 대략적인 정보만 ?

5. 누가 정보를 소유 (Owe) 하길 원하는가 ? : 공유 !! 모두가 소유

6. 그들이 경청하도록 동기 (Motive) 를 주려면 어떻게 해야 할까 ? : 공감할 수 있도록 자극을 줘야 한다 . 성공한 사람이나 기업을 예로 들면서 ?

Page 4: 실용주의 프로그래머

직교성독립성 (independence), 결합도 줄이기 (decoupling)

1. 하나가 바뀌어도 나머지에 어떤 영향도 주지 않는 것 .

2. 직교적인 시스템의 장점• 생산성 향상 : 변화가 국소화 (localize) 되서 개발 시간과 테스트 시간이 줄어든다 .

• 리스크 감소 : 시스템이 잘 깨어지지 않는다 .

3. 직교성을 유지하기 위한 방법• 코드의 결합도를 줄여라 .

: 부끄럼타는 코드 (shy code) 작성 . 다른 모듈의 구현에 의존하지 않는 코드• 전역 (global) 데이터를 피하라 .

: 코드가 전역 데이터를 참조할 때마다 , 코드는 해당 데이터를 공유하는 다른 컴포넌트와 묶이게 된다 .

• 유사한 함수를 피하라 .

Page 5: 실용주의 프로그래머

소스 코드 관리

• 소스코드 관리 시스템은 일종의 거대한 UNDO 키와 같다 .

• 소스코드나 문서 관련의 모든 변화를 기억한다 .

• 버전 관리가 용이해져 생산성이 증가한다 .

• 버전 관리를 통해 버그 추적 (bug-tracking), 감사 (inspection),

퍼포먼스 , 품질 관리를 유용하게 할 수 있다 .

진보라는 것은 변화와는 거리가 멀고 오히려 기억에 의존한다 .

과거를 기억하지 못하는 사람은 과거를 반복할 운명이다 .

- 조지 산타야나 (George Santayanana), 이성의 삶 (Life of Reason)

Page 6: 실용주의 프로그래머

의도적으로 프로그래밍 하기1. 언제나 자기가 지금 무엇을 하고 있는지 알아야 한다 .

2. 맹목적으로 코딩하지 말라 .

3. 계획을 세우고 그것을 바탕으로 진행하라 .

4. 신뢰할 수 있는 것에만 기대라 .

5. 여러분의 가정을 문서로 남겨라 .

6. 노력을 기울일 대상의 우선순위를 정하라 .

7. 과거의 노예가 되지 말라 .

Page 7: 실용주의 프로그래머

리팩토링• 자신이 작성하는 코드를 항상 비판적으로 검토해 보는 습관을 기르기 바란다 . 기회가 있을

때마다 코드의 구조와 직교성을 향상시키기 위해 노력하라 . 이러한 프로세스를 리팩토링(refectoring) 이라 부른다 .

• 리팩토링은 언제 해야 하는가 ?

: 언제나 바로 지금이 최적기다 .

• 일찍 리팩토링하고 , 자주 리팩토링하라 .

: 리팩토링해야 할 것들의 명단을 만들고 유지하라 . 어떤 것을 지금 당장 리팩토링하기 힘들다면 ,

일정에 그것을 리팩토링할 시간을 확실히 포함시켜 두도록 한다 .

Page 8: 실용주의 프로그래머

유비쿼터스 자동화• 빌드와 릴리스 과정이건 , 코드 리뷰 서류 작업이건 , 혹은 프로젝트에서 거듭 발생하는

어떤 종류의 작업이건 간에 그것은 모두 자동화되어야 한다 .

• 수작업 절차를 사용하지 말라 .

1. 자동화 도구 사용 (cron)

2. 빌드 자동화 (make)

Page 9: 실용주의 프로그래머

실용주의 팀• 깨진 창문 + 삶은 개구리

• 소통하라 !• : 훌륭한 프로젝트 팀은 뚜렷한 특성을 갖는다 . 모든 사람이 좋아할 만한 잘 준비된 퍼포먼스를 보게 될 걸 알기 때문에 사람들은 회의를 기대한다 . 그들이 생산해 내는 문서는 깔끔하고 정확하며 일관적이다 . 바보같이 들리지만 , 팀은 정체성 확립의 기반을 얻을 것이고 , 세상은 여러분의 작업과 관련되어서 기억할 만한 뭔가를 얻게 될 것이다 .

Page 10: 실용주의 프로그래머

결국은 모두 글쓰기1. literate programming : 코드와 문서를 결합시키기 . 문서화는 개발 프로세스에서 필수불가결한 부분이다 . 노력을 중복하거나 시간을 낭비하지 않고 , 문서를 늘 손에 닿는 가까이에 두면 문서 작성이 더 쉬워진다 .

2. 코드 내의 주석• 단순한 모듈 수준의 헤더 주석 , 중요한 데이터와 자료형 선언에 대한 주석 , 클래스 및 메서드별

간략한 주석 , 해당 함수가 어떻게 사용되는지• 소스코드에 대한 책임감은 사람들이 정직해지도록 하는데 놀라우리만큼 효과적이다 .

Page 11: 실용주의 프로그래머

감사합니다