Quora의 As someone who works with interpreted programming languages, I do not quite understand. How do you debug large C and C++ programs?에 대한 Mario Galindo Queralt, Ph.D.님의 답변입니다.


당신은 하지 못합니다.

네, 가장 간단한 답변은 당신은 거대한 C와 C++ 프로그램을 디버깅하지 못한다는 것입니다.

제가 설명해보겠습니다. 하지만 그전에 저는 당신에게 King of Spain Fernando VII에서 하나의 스페인 문장을 말씀해드리겠습니다: “Visteme despacio que tengo prisa“. 이 문장에 대한 영문 번역은: “Dress me slowly, I’m in a hurry“입니다. 사실 직역은 말이 되지 않지만 영어의 비슷한 문장이 이해를 도울 것입니다: “Haste makes waste“나 “Less haste more speed“.

버그 없이 프로그램을 작성할 수 있는 기술을 상상해보세요. 그것이 가능한가요? 그것은 당신에게 환상적으로 들릴 것이지만 가능합니다! 따라서 프로그램을 작성하는 방법은 잘 쓰는 것, 디버거가 필요없게 만드는 것입니다. 와우!

그런데 누군가 프로그램을 처음부터 에러없이 작성할 수 있을까요? 정답은 매우 느리게(des-pa-ci-to) 입니다. 이것은 1823년 컴퓨터 과학에 대한 스페인의 왕, 페르난도 7세의 기여에 의한 것입니다. 그는 기술에 대한 비전을 가지고 있었습니다. 농담이지만 사실입니다.

이 아이디어는 매줄마다 당신이 쓴 것을 확인하고 테스트하는 것입니다. 절대로 수없이 쓴다음 테스트 후 고치지 마세요. 만약 빨리 작성하는 것이 좋다고 생각한다면 당신은 틀렸습니다. 당신은 언제나 엄격하게 프로그램을 작성해야 합니다. 어떤 상황에서도 임시적인 소프트웨어를 작성하지 마세요. 항상 당신에게의 표준을 가장 먼저 생각하세요.

당신은 반드시 당신이 쓰는 모든 것에 대해 테스트 규칙을 작성해야 합니다. 테스트는 최대한 빨리하십시오. 최대한 빨리 당신의 코드에 대한 부분을 테스트하세요.

정규 프로그래밍 기술을 사용하여 버그를 완전히 제거하세요. 불변을 고치고 그들을 존경하세요.

소프트웨어를 재사용하세요. 소프트웨어를 다시 사용하세요.

작은 코드를 합쳐가며 큰 프로그램을 작성하세요. 나누고 합치세요.

만약 위의 모든 것을 완료했다면 이제 디버거가 필요할 것이고 당신은 뭔가 잘못하고 있는겁니다.

저는 병렬 프로그램들을 수년간 개발해왔습니다. 그것은 당신에게 놀라운 수 있지만 병렬 프로그래밍에서 디버거는 거의 필요가 없습니다. 따라서 저는 디버거를 사용하지 않습니다. 수천줄의 제 소프트웨어는 대부분 버그가 없습니다. 때때로 버그가 발견되면 저는 매우 불쾌함을 느끼며 제 프로그래밍 규칙을 다시 만들고 만듭니다.

보통 제 코드는 비교적 엄청나게 짧고 응축되어 있는 상태입니다. 저는 더 많은 시간을 쓰는 것보다 생각하는데 씁니다.

제가 다음에 말할 내용은 당신을 다시 한 번 놀라게 할 것입니다: 저는 엄청나게 빠른 프로그래머로 고려됩니다. 네, 다른 프로그래머가 디버깅을 하고 그들의 소프트웨어를 제거하고 고치는 동안 제 것은 매우 효율적으로 잘 작동합니다.

끝 줄: 프로그래밍을 사랑하고 디버깅을 싫어하십시오.

저는 당신의 추천(Upvote)를 전적으로 감사히 생각합니다.