via decoder.tistory.com: 무료 책 두 권
링크해놓은 블로그(decoder.tistory.com)를 구독하다가 발견한 책 (중에서 한 권)을 이번 주에 다 읽었다.
책 자체는 예전에 Morgan Kaufmann을 통해 발행되었던 책을 저자들이 저작권을 돌려받고(?), CCL 을 걸고 웹으로 공개한 책이다. 책의 여러 부분이 어떤 의미에선 Working Effectively With Legacy Code랑 궤를 같이하는 책인데,
- 기존에 만들어진 프로그램(코드 베이스)이 있고,
- 이를 분석해서 다시 쓸 수 있게 만들고,
- 최종적으로 새 프로그램(코드 베이스)을 만들어낸다
라는 프로그래머들이 꽤나 자주 겪을 일을 다룬다.
전체 내용도 저 목적(?)에 충실하게, “기존 코드를 어떻게 하면 이해할 것인가”와, 이 코드를 어떻게 수정하면 좀 더 관리하기 쉽고, 비용 대 효용이 적당하게 진행할 수 있는지를 다룬다. 이 책은 “자기가 참여하지 않았던 프로젝트”의 코드를 어떻게 빨리 파악하고, 수정할 부분을(정리할 부분?) 찾아내고, 이런 재공학 ((이 책에서 말하는 재공학이란, 기존 (공학)을 통해서 만들어낸 프로그램을 역공학을 통해 원래 목적/개념/구현을 파악하고, 이를 다시 현재 상태에 맞는 프로그램으로 (공학으로) 만들어내는 작업이다 )) 을 어떻게 하면 좋을지 설명한다.
책을 몇 챕터 훑어보면 각 챕터 구성이 학자가 썼다는 티가 팍팍나게 되어있는데, 각 챕터들이,
- 의도
- 문제가 왜 어려운가 / 그리고 왜 풀 수 있는가(혹은 실마리가 뭔가)
- 해결책과 그에 상응하는 단계들
- 장/단점 분석
- 난관
- 근본 이유(rationale)
- 예 / 적용사례 / 관련논문들
하는 식으로 쪼개져 있다. 사실 이렇게 반복되서 출/퇴근 시간에 버스(혹은 지하철)에서 읽기에 적당했다. 그리고 이 챕터들은 Introduction 부분을 제외하고 크게 2개로 쪼개져 있다. 첫 부분에선 역공학적인 측면(=코드 읽기/분석), 두번째 부분에선 여기에 추가적인 목적을 넣어서 새로 구현하는 것(=재공학 과정)을 다룬다.
이 책의 내용 중에 맘에 들었던 것은 학자가 썼던 티가 많이 나지만, 그래도 SE 분야의 교수들이 쓴지라, 실세계 분석 사례가 많고, 덕분에 실제로 소프트웨어 공학자들이 겪을 법한 상황을 자주 제시한다. 여기서 제시하는 “코드를 어떻게 받아들이고 처음 평가하는가”에 대한 항목이 (목차에서 따왔다)
- 방향 설정 – 전체 목표(maxim)을 정하고, SCRUM 같은 원탁 회의를 하고, 가치 평가 후 가치 순서에 따라 진행하며, KISS 원칙 등을 말한다
- 코드와 처음 만나보기 – 유지보수 작업자와 대화, 한 시간 제한을 걸고 코드 읽기, 문서 훑기, 데모하면서 (기존 프로그래머와) 대화, 가짜 객체(Mock) 집어 넣어 보기
- 초기 이해 – 지속적인 데이터(DB/파일 구조) 살펴보기, 디자인 추론하기, 예외적인 것들 살펴보기
- 세부 모델 이해 – 코드에 질문 삽입, 리팩터링 하면서 이해하기, 실행 흐름 따라가기, 계약(contract) 읽어내기, 과거로부터 이해하기(과거=기존 소스코드 revision log)
의 4 개의 장에서 코드를 어떻게 접하고 평가할 것인지 다룬다. 사실 프로그래머란 직업이 코드를 읽는 시간이 쓰는 시간보다 많은 이상, 여기에 나온 내용들은 꽤 유용하고, 다른 업계 리더나, 책에서 강조한 내용들도 꽤 많이 있다.
특히나 가짜 객체를 넣을 수 있어야 시스템을 빌드해 볼 수 있는 정도로 이해한거라거나, DB 스키마나 인터뷰 방법 등등(…)은 실제로 해봤거나 사례 분석을 해봤어야 서술 할 수 있는 내용으로 보인다.
책 후반부 내용은 Working Effectively With Legacy Code랑 상당히 많이 겹치는데, 이 부분은 이 책의 서술 방식이 나쁜건 아니지만, 훨씬 더 concrete case를 많이 제공하는 WEWLC가 낫다. 읽을 시간이 없다면 앞 부분만 읽는 걸 추천.
코드를 수정하는 부분이나 구체적인 방식을 볼거라면 앞에서 언급한 Working Effectively With Legacy Code가 훨씬 좋은 책이다. 다만 앞서 말한 코드를 실제로 어떻게 “처음 이해할 것인가” 라는 문제를 “재공학할 프로그래머의 입장”으로 분석했다는 것과 명확한 문제 설명 방식, 어느 정도 실세계에도 적응 가능해보이는 점 때문에 이 책이 의미있는 듯 하다.
그렇게 길지 않은 내용이고, 책 자체도 웹상으로 공짜로 볼 수 있으니(혹은 PDF로), 시간 내서 한 번 읽어보는 것도 나쁘진 않을 것이다.
ps. LaTeX 소스를 제공하긴하는데, 이걸 대소문자를 구분하는 파일시스템에서 컴파일하려면 그림 디렉토리의 첫 글자의 case를 바꿔줘야 한다. =_=;
Kindle DX 문제인 줄 알고 출력 용지를 a4paper에서 lettersize로 바꾼다고 삽질하다가 알게된 팁(?)
킨들은 읽을만 한가??
냅더적.
읽을만 해요. 지금 이 책이랑 딴거 읽으면서 경험한거 포스트로 쓰는 중이에요( – -)
책 내용보단 킨들에 더 관심이 가는군요. @_@
후후(?). 소개해주신 덕에 즐겁게 읽었습니다~