프로그래밍을 해서 좋은 점

by SL

가장 잡기 어려운 버그는 내가 문제가 없다고 확신한 곳에 숨어있는 녀석이다. 의심스런 곳을 쥐잡듯이 뒤져도 안 나오다가 전혀 예상치 못한 곳에서 원인을 발견하고는 어이상실한 기억, 웬만한 프로그래머는 다 있을 것이다. 이런 경험을 몇 번 하고 나면 무언가에 대해서 확신하고 단정짓는 것이 무척 조심스러워진다. 종종 개발자는 표현이 모호하고 자신감이 없어서 답답하다는 얘기를 듣는데, 이런 업무의 특성과 무관하지 않다고 본다. 반대로, 평소에 그러던 사람이 어떤 문제에 대해서는 유독 확신에 차서 얘기한다면 거기에는 그럴 만한 까닭이 있다고 봐야 할 것이다.

디버깅에는 가설을 세우고 검증하는 과정이 포함되어 있다. ‘이 버그의 원인은 아마 이 모듈에 있을 거야’, ‘이런 조건에서 발생할 거야’라는 가설을 먼저 세우고, 정말 그런지 확인하는 것이다. 좀더 넓게 얘기하면 프로그래밍도 비슷해서, 구현이란 ‘이런 식으로 짜면 동작할 거야’라는 설계 가설을 검증해보는 과정으로 볼 수 있다. 프로그래밍의 중요한 점은, 의식적으로 그리고 무의식적으로 내 생각이 맞았는지를 명시적으로 확인하는 훈련을 받는다는 사실이다. 프로그래밍의 멋진 점은, 내 생각이 틀렸을 때 더 많은 것을 배울 수 있다는 사실이다. 어이없는 곳에서 버그를 발견하고 ‘아, 내가 왜 이 생각을 못했을까?’라며 스스로를 한심해한 뒤, 이런 바보짓을 피하려면 어떻게 해야 할지를 고민하게 된다.

내가 요즘 하는 일은 컴퓨터 프로그래밍이라기보다는 데이터를 분석하고 모형을 만드는 쪽에 가깝다. 따지고 보면 모델링도 비슷한 것 같은데, 모형에서 어떤 요소가 중요하고 또 얼마나 중요할까에 대한 가설을 만든다. 그후 실제 데이터를 탐색하고, 모형을 적용하면서 그 생각이 맞았는지를 검증한다. 이를 통해 잘못 생각한 것이 있었다면 교정받을 기회를 얻는다.

망치질을 배우면 모든 것이 못으로 보인다고 했는데, 나 역시 업무를 통해 익힌 이런 관점을 일상 생활에 적용하고픈 충동을 느낀다. 편견은 내 삶 속 경험을 디버깅하기 위해 가설을 세우는 일이다. 문제는 그 가설이 충분히 검증된 것인가 하는 점이다. 열심히 노력하는데도 문제가 해결될 기미가 안 보인다면, 잘못된 가설에 매달리고 있는 건 아닌지 되짚어볼 필요가 있다.