Yunseok's Dev Blog

배운 것을 적는 블로그입니다.

코드 컴플리트 2 서평

코드 컴플리트 2는 소프트웨어계에 수학의 정석이다. 구현에 관한 거의 모든 것을 알려준다. 그리고 아주 자세히 알려준다. 구현을 하기 전에 준비사항부터 설계는 어떻게 하고, 프로그래밍 언어 선택은 무엇을 하고 변수명 조건문 등등 구현에 필요한 거의 모든 것을 다루고 심지어 책 후반부에서는 소프트웨어 장인 정신과 개발자의 성격까지 다루고 있다.

인상 깊었던 점

어설프게 아는 주제를 더 잘 아는 비슷한 주제를 비교해 이해함으로써 결과적으로 덜 친숙한 주제를 잘 이해할 수 있다. 비유를 이렇게 사용하는 것을 “모델링”이라고 한다.

비유를 얼마나 잘 이해하느냐가 소프트웨어 개발을 얼마나 잘 이해하느냐를 결정한다.

내가 아는 한 훌륭한 개발자는 비유를 기가 막히게 잘한다. 다른 사람한테 설명하기 어려운 말을 비유를 통해서 아주 쉽게 이해할 수 있도록 설명한다. 단순히 창의적인 사람이라고 생각할 수 있겠지만 이러한 능력은 프로그래밍 문제와 프로세스를 이해하는데 많은 도움이 된다.

호스트 리텔과 멜빈 웨버는 “불명확한” 문제란 전체 혹은 일부를 해결해야만 정의할 수 있는 문제라고 정의했다(Horst and Melvin 1973).

그래서 문제를 명확하게 정의하려면 문제를 한 번 “해결”해야 하며, 반복적이고 점진적으로 문제를 해결해야 한다.

아키텍처에서 최종 구조에 대한 대안을 고려했던 근거와 다른 대안들 대신 지금의 구조를 선택한 이유를 찾아야 한다.

기존에는 내가 알고 있는 지식 안에서 어떻게 아키텍처를 만들고, 어떤 기술적 선택을 할지 결정했었는데, 왜 이러한 선택을 했는지 설명할 수 있어야 한다.

디버깅

디버깅에 대해서 이렇게 자세히 다룬 책을 본 적이 없는 것 같다. 디버깅을 할 때 느낌대로 진행하는 것이 아니라 과학적으로 접근해야 한다.

  1. 오류를 재현한다.
  2. 오류의 원인을 찾아낸다.
  3. 결함을 만들어내는 데이터를 수집한다.
  4. 수집된 데이터를 분석하고 결함에 대한 가설을 세운다.
  5. 프로그램을 테스트하거나 코드를 살펴봄으로써 가설을 증명하거나 반증할 방법을 결정한다.
  6. 위에서 규명한 절파를 사용하여 가설을 증명하거나 반증한다.
  7. 결함을 수정한다.
  8. 수정 내용을 테스트한다.
  9. 유사한 오류를 찾는다.

할 수 있게 된 점

  • 코드리뷰를 할 때 책에서 배운 것을 활용할 수 있게 되었다.

image

  • 구현하기 전에 기술적 선택에 대해서 충분히 고려하고 문서화를 한다.

더 시도해 볼 점

  • 책에서 배운 것을 실제로 더 시도해 보자

Sources