Chesterton의 가운데손가락

1 day ago 3
  • Chesterton’s fence는 이유를 모르는 코드를 함부로 바꾸지 말라는 조언이지만, 이유를 남기지 않은 코드와 커밋 기록은 후임 개발자에게 같은 부담을 떠넘김
  • 해당 저장소의 지난 13년간 커밋 본문은 명령어 기준 295줄뿐이고, dependabot·revert·typo 관련 본문을 빼면 167줄로 줄어듦
  • 커밋 제목은 큰 변경에도 “fix page A”처럼 맥락을 주지 못하며, 별도 문서와 코드 주석도 거의 없어 변경 이유를 추적하기 어려움
  • 코드에는 끝나지 않은 리팩터링, 제거된 기능의 잔재, 추가됐지만 연결되거나 사용되지 않는 기능, 아무도 쓰지 않는 듯한 기능이 남아 있음
  • 커밋 메시지와 문서는 “무엇을 바꾸는지, 왜 바꾸는지, 왜 좋은 해결책인지”를 최소한이라도 남겨야 하며, 아무것도 남기지 않으면 뒤에 오는 개발자의 비용이 커짐

이유 없는 코드가 남기는 부담

  • Chesterton’s fence는 어떤 것이 왜 그렇게 되어 있는지 이해하지 못했다면 함부로 바꾸지 말라는 비유임
    • 프로그래밍에서도 이상해 보이는 코드를 “고쳤다가” 나중에 그 이상함에 이유가 있었음을 알게 되는 일이 생길 수 있음
  • 이 사례에서는 반대편 문제가 드러남
    • 이상한 코드와 결정은 많지만, 왜 그렇게 되었는지 알 수 있는 기록이 없음
    • 이전 개발자들이 모두 떠난 뒤 고용되어 물어볼 사람도 없음
  • 저장소의 커밋 기록은 실질적인 맥락을 거의 제공하지 못함
    • 지난 13년간 커밋 본문은 총 295줄
    • dependabot, “revert commit”, “fix typo” 커밋 본문을 수동으로 제외하면 167줄
    • 대략 한 달에 한 줄 수준임
  • 커밋 제목도 대개 “fix page A”처럼 큰 변경을 설명하기에는 부족함
  • 별도 문서가 없고, 코드 주석도 거의 없음
  • 이런 상황은 “우리는 이상한 일을 많이 했지만 왜 그랬는지는 말하지 않겠다”는 식의 Chesterton’s middle finger에 가까움

개발자가 남겨야 할 최소한의 기록

  • 코드베이스에는 여러 종류의 미완성·잔여 코드가 남아 있음
    • 끝나지 않은 리팩터링
    • 제거된 기능의 잔재
    • 추가됐지만 연결되거나 사용되지 않는 기능
    • 아무도 사용하지 않는 듯한 기능
  • 전체적으로는 Chesterton’s gap 문제도 심해 보임
    • “아직 울타리가 없으니 만들자”는 식으로, 실제로 울타리가 필요한지 묻지 않는 상황에 가까움
  • 좋은 글쓰기는 어렵지만, 대충 통과 가능한 수준의 설명을 남기는 일은 어렵지 않음
  • 변경 기록은 기본적으로 세 가지 질문에 답해야 함
    • 무엇을 바꾸는가
    • 왜 바꾸는가
    • 왜 이 해결책이 좋은가
  • “Implement new feature X”만으로 충분한 경우도 있지만, 대부분은 기능이 왜 또는 어떻게 그런 방식으로 추가됐는지 적을 내용이 있음
  • 버그 수정, 리팩터링, 실질적인 변경에서는 보통 최소한 한두 문단 정도로 변경 내용과 이유를 남길 수 있음
  • 이런 기록은 선택 사항이 아니라 소프트웨어 개발자의 일에 포함됨
    • 유려할 필요 없음
    • 완벽한 영어일 필요 없음
    • 거창한 에세이일 필요 없음
    • 빠뜨리는 내용이 있어도, 아무것도 없는 것보다는 훨씬 나음
  • 아무것도 남기지 않으면 이후의 모든 사람에게 문제를 떠넘기게 됨
Read Entire Article