본문 바로가기

독서 나눔

책도서(2) - 실용주의 프로그래머 - 2015.01.19(월)

- 무엇이 우리를 가로막는가 - 2015.01.19(월)

실용주의 프로그래머라는 실장님 추천 책을 읽어보았습니다.

이 책은, 나의 습관과 행동을 변경할 수 있고 설득 할 수 있는 책이었습니다. 
처음에는 가볍게 전체적으로 읽어보았는데 내 일상 업무에 그 일부를 사용하고 있겠지? 라는 안일한 생각을 많이 바꾸게 해주는 책이었습니다. 그리고 이 책에서는 프로그래머들이 반드시 봐야하는 탈무드라는 별칭이 붙을 정도로 책을 본 사람들도 많고 상당히 도움 되는 내용들이 많았습니다. 지침서라는 표현까지 나올 정도로 중요한 내용들이 많은 챕터별로 짧게 글 하나에 잘 담겨져 있었습니다. 그리고 저는 적응 곡선이 있기 때문에 이 책을 다시 읽은 계획이며 학습하며 실제 업무에도 하나씩 적용해보고 싶습니다. 그리고 점차 나아지고 숙련되어지는 프로그래머가 될 수 있도록 많은 지혜를 습득하겠습니다.

특히 이 책을 읽으면서 기억에 남는 챕터나 내용을 몇 가지 짚어보자면…….

* DRY 원칙 : "Don't Repeat Yourself"
- DRY원칙은 한마디로 중복을 없애고 반복 작업을 하지 않는 것 입니다. 반복적으로 수행해야 하는 일은 모두 자동화하고, 만약 클래스 작성 시 비슷한 코드가 중복되거나 같은 동작을 하는 클래스들이 있으면 서로 합치고 리팩토링을 합니다.

* 자신의 일에 대해 생각하면서 일하라! 
- 절대 기계적으로 일하지 말고, 언제나 생각하고 일하면서 동시에 자신의 일을 비평하고 분석하라.

* 자신과 자신의 행동에 책임을 져야 한다. 자신의 능력에 대해 자부심을 가질수 있지만, 실수나 무지 같은 단점에 대해서도 정직해져야 하며, 어설픈 변명을 늘어놓기 전에 그 변경꺼리를 없애도록 노력해보라.

* 소프트웨어 엔트로피 
- 엔트로피는 시스템 내의 '무 질서'한 정도를 가리키는 물리학 용어다.
- 깨진 창문을 내버려두지 말라. 깨진 창문은 순식간에 불어난다.  
( 나쁜 설계, 잘못된 결정, 형편없는 코드를 고치지 않은 채 내버려 두지 마라.  
발견하자마자 바로 고쳐라. )

* 요구할 수 있을 만한 것을 찾아내고 그것을 잘 개발해라. 

* 지식 포트폴리오
- 매년 새로운 언어를 최소 하나는 배워라. 문제의 다른 접근법
- 기술 서적을 분기마다 한권씩 읽어라.
- 비 기술서적도 읽어라. 사람을 만족시키려고 노력하는 것이다.
- 수업을 들어라. 
- 지역 사용자 모임에 참여하라. 듣지만 말고 적극 참여하라.

* 스스로 답을 찾지 못하겠거든, 누가 답을 찾아줄 수 있을지 그 사람을 찾아라.
답을 찾는 도중에 별로 관련이 없어 보이는 문제들에 대한 해답을 찾아서 놀라는 일도 생길 것이다. 

* 시간은 늘 부족한 자원이다. 그래서 미리 계획해야 할 필요가 있다. 할 일 없는 시간을 위해 늘 읽을거리를 준비하라. 병원에서 진료를 기다리느라 허비되는 시간은 밀린 독서를 할 훌륭한 기회다. 

* '우연에 맡기는 프로그래밍', 곧 행운과 어쩌다 오는 성공에 의존하는 프로그래밍을 하지 말아야 한다. 대신 '의도적으로 프로그래밍'해야 한다.

* 디버깅을 할 때 당황하지 마라
-  "그건 불가능해", "하지만 정말 그럴 리가 없는데" -> 그런 일을 일어날 수 있으며, 실제로도 일어났다. 
- 항상 문제의 근본적인 원인을 발견하려고 노력하고, 그 문제의 특정한 증상만 고치려고 하지 말라.
- 고치는 걸 넘어서 왜 이 실패가 더 일찍 발견되지 않았을까 생각해봐라. 버그를 미리 잡을 수 있도록 단위 테스트나 다른 테스트를 수정할 필요가 있는지 고려하라.

등. 정말 지침서라고 표현할 정도로 좋은 내용들이 많고, 실제로 하나하나씩 적용할 수 있도록 정기적으로 이 책을 구독해야겠습니다. 소장용이네요.
그리고 추가적으로 아래 철학적인 내용들은 다시 제 머리와 마음속에 담아봅니다.

* 허락을 얻는 것보다 용서를 구하는 것이 더 쉽다. - 그레이스 호퍼
* 지식에 대한 투자가 언제나 최고의 이윤을 낸다. - 벤자민 프랭클린
* 언어의 한계가 곧 자기 세계의 한계다. -루트비히 비트겐슈타인
* 결정이 돌에 새겨지는 것이라 가정하고, 발생할지도 모를 우연한 사건들에 대해 준비하지 않는 데에서 실수가 나온다. 결정이 돌에 새겨진 것이 아니라 해변가의 모래 위에 쓰인 글씨라 생각해 보자. 언제든지 큰 파도가 글씨를 지워버릴 수 있다.
* 리팩터링을 하지 않는 핑계로 자주 사용되는 이유가 일정의 압박이다. 하지만 이것은 설득력 있는 이유가 되지 못한다. 지금 리팩터링을 하지 않으면, 일이 더 진척되었을 때, 곧 신경 써야 할 의존성이 더 많이 생겼을 때 문제를 고치기 위해 훨씬 더 많은 시간을 투자해야 한다. 그때가 되면 일정에 더 여유가 생길까? 우리의 경험에 비추어 봤을 때 그런 일은 없다.