📕
“우리는 우연에 맡기는 프로그래밍, 곧 행운과 우연한 성공에 의존하는 프로그래밍을 하지 않아야 한다. 대신 의도적으로 프로그래밍해야 한다. 코드가 애초에 왜 잘 돌아가는지도 모르는 채로 제한적인 테스트를 했을 때는 코드가 잘 돌아가는 것처럼 보였지만, 그것은 단지 그때 운이 좋았을 뿐이다. 근거가 없는 확신을 가지고 계속 앞으로 나아가면 대실패를 맛볼 수 있다. 우리는 우연한 행운과 주도면밀한 계획을 착각하는 경우도 종종 있다.
우연에 맡기는 프로그래밍을 하지 말고, 의도적으로 프로그래밍하자. 우리는 코드를 마구 찍어 내는 데에 드는 시간을 줄이고 싶고, 또 가능한 한 개발 주기 초기에 오류를 잡아서 고치고 싶고, 애초부터 오류를 더 적게 만들고 싶어 한다. 그러려면 의도적으로 프로그래밍해야 한다.”
<실용주의 프로그래밍>
우연에 맡기는 프로그래밍을 하고 싶은 엔지니어는 없을 것입니다. 하지만 ’일단 돌아가는 코드‘, ’급한 불을 끄기 위한 코드‘, ’설계, 가정, 계획 없이 작성하는 코드‘는 우연에 맡기는 프로그래밍의 같은 말이라고 생각합니다. <실용주의 프로그래밍>에서 소개하는 우연에 맡기는 프로그래밍이 아닌 의도적 프로그래밍을 하기 위한 연습 방법을 소개합니다.
1️⃣ 언제나 내가 지금 무엇을 하고 있는지 알아야 한다.
2️⃣ 더 경험이 적은 프로그래머에게 코드를 상세히 설명할 수 있어야 한다. 그렇지 않다면 아마 우연에 기대고 있는 것일 터이다.
3️⃣ 나도 잘 모르는 코드를 만들지 말라. 완전히 파악하지 못한 애플리케이션을 빌드하거나, 이해하지 못한 기술을 사용하면 우연의 함정에 빠질 가능성이 높다. 이것이 왜 동작하는지 잘 모른다면 왜 실패하는지도 알 리가 없다.
4️⃣ 계획을 세우고 그것을 바탕으로 진행하라.
5️⃣ 신뢰할 수 있는 것에만 기대라. 가정에 의존하지 말라.
6️⃣ 가정을 기록으로 남겨라. 자신의 마음속에서 가정을 명확하게 하는 데 도움이 될뿐더러, 다른 사람과 그에 대해 소통하는 데에도 도움이 된다.
7️⃣ 코드뿐 아니라 여러분이 세운 가정도 테스트해 보아야 한다. 어떤 일이든 추측만 하지 말고 실제로 시험해 보라.
8️⃣ 노력을 기울일 대상의 우선순위를 정하라. 중요한 부분이 가장 어려운 부분이기도 한 경우가 많다.
9️⃣ 기존 코드가 앞으로 짤 코드를 지배하도록 놓아두지 말라. 한 프로그램 안에서도 예전에 한 일이 앞으로 할 일을 제약하지 못하도록 하라. 언제나 리팩터링할 자세가 되어 있어야 한다.