2P by neo 1달전 | ★ favorite | 댓글 1개
  • 데이비드 A. 휠러의 리뷰

    • 데이비드 J. 아간스의 "Debugging: The 9 Indispensable Rules for Finding Even the Most Elusive Software and Hardware Problems"는 소프트웨어 및 하드웨어 개발자를 위한 필수적인 디버깅 책으로 평가됨.
    • 이 책은 특정 기술이 아닌 버그를 찾고 수정하는 기본 원칙을 설명하며, 초보자나 중급 개발자에게 특히 유용함.
    • 책은 "아홉 가지 규칙"을 중심으로 구성되어 있으며, 각 규칙에 대한 설명과 적용 방법을 담고 있음.
  • 아홉 가지 규칙

    • 시스템 이해하기: 매뉴얼을 읽고, 기본을 이해하며, 도구를 잘 활용하는 것이 중요함.
    • 실패 유도하기: 실패를 다시 재현하고, 간헐적인 버그의 원인을 찾는 것이 중요함.
    • 생각 멈추고 관찰하기: 데이터를 먼저 수집하고, 추측에 의존하지 않음.
    • 분할 정복: 문제를 좁혀가며 해결하고, 쉽게 식별할 수 있는 테스트 패턴을 사용함.
    • 한 번에 하나씩 변경하기: 핵심 요소를 격리하고, 테스트를 하나씩 변경함.
    • 감사 기록 유지하기: 수행한 작업과 결과를 기록하며, 모든 세부 사항이 중요할 수 있음을 이해함.
    • 플러그 확인하기: 가정한 것을 의심하고, 도구를 테스트함.
    • 새로운 관점 얻기: 새로운 통찰을 얻고, 경험의 목소리를 듣는 것이 중요함.
    • 수정되지 않으면 고쳐지지 않음: 문제를 정말로 해결했는지 확인하고, 원인을 수정함.
  • 책의 장점과 단점

    • 책은 디버깅의 기본 원칙에 집중하며, 다른 기술 관련 책들과 차별화됨.
    • 간헐적인 문제를 다루는 방법에 대한 실용적인 조언이 포함되어 있음.
    • 책의 부록에는 관련 웹사이트와 포스터 다운로드 링크가 있음.
    • 아쉬운 점으로는 모든 규칙과 하위 규칙을 한 페이지에 정리한 목록이 없다는 점과 특정 기술에 대한 구체적인 조언이 부족하다는 점이 있음.
  • 결론

    • 이 책은 디버깅의 기본 원칙을 배우거나 상기하는 데 유용하며, 초보자와 전문가 모두에게 도움이 됨.
    • 데이비드 A. 휠러는 이 책을 강력히 추천하며, 기본 원칙의 중요성을 강조함.
Hacker News 의견
  • 버그가 있는 코드를 수정하려는 유혹은 크지만, 고장 난 코드를 수정하는 것보다 작동하는 코드를 망가뜨리는 것이 더 쉬움. 크리스마스 전구 예시처럼 최소한의 작동 예시로 시작하여 문제를 찾는 것이 효과적임

  • 문제 해결 시 중요한 것은 당황하지 않는 것임. 명확한 사고가 필요하며, 좋은 관리자는 문제 해결에 집중할 수 있도록 지원해 줌

  • git bisect는 여러 커밋 중 문제를 일으킨 커밋을 찾는 데 유용함. 특히 큰 코드베이스에서 문제를 빠르게 찾을 수 있음

  • 시스템을 이해하는 것이 중요하지만, 모든 매뉴얼을 읽는 것은 비현실적임. 실용적인 접근이 필요함

  • 올바른 파일을 올바른 기계에서 편집하는 것이 중요함

  • 문제 해결 사고방식을 기르기 위해 추천하는 책들:

    • "The Martian" by Andy Weir
    • "Zen and the Art of Motorcycle Maintenance"
    • "The Three-Body Problem"
    • "To Engineer Is Human" by Henry Petroski
    • "Surely You're Joking, Mr. Feynman!"
  • 추가 규칙:

    • "자신의 잘못임을 의심하라". 코드 변경을 먼저 의심해야 함
    • "버그를 찾으면 그와 관련된 다른 문제도 찾아라". 같은 종류의 문제가 다른 곳에서도 발생할 수 있음
    • "사용자와 유지보수 프로그래머를 우선으로 최적화하라"
  • CI에 버그를 테스트로 추가하여 회귀를 방지해야 함. 수정 전후로 CI가 실패하고 성공하는지 확인해야 함

  • 디버깅 후에도 작업이 끝난 것이 아님. 각 버그에 대해 세 가지 질문을 해야 함:

    1. 이 실수가 다른 곳에도 있는가?
    2. 이 버그 뒤에 숨겨진 다음 버그는 무엇인가?
    3. 이런 버그를 방지하기 위해 무엇을 해야 하는가?
  • 최소한의 설정으로 문제를 재현하는 것이 중요함. 대부분의 경우 이렇게 하면 버그를 찾을 수 있음. 코드를 반으로 나누어 정확히 어떤 부분이 잘못되었는지 찾는 것이 효과적임