프로그래밍을 해서 좋은 점
가장 잡기 어려운 버그는 내가 문제가 없다고 확신한 곳에 숨어있는 녀석이다. 의심스런 곳을 쥐잡듯이 뒤져도 안 나오다가 전혀 예상치 못한 곳에서 원인을 발견하고는 어이상실한 기억, 웬만한 프로그래머는 다 있을 것이다. 이런 경험을 몇 번 하고 나면 무언가에 대해서 확신하고 단정짓는 것이 무척 조심스러워진다. 종종 개발자는 표현이 모호하고 자신감이 없어서 답답하다는 얘기를 듣는데, 이런 업무의 특성과 무관하지 않다고 본다. 반대로, 평소에 그러던 사람이 어떤 문제에 대해서는 유독 확신에 차서 얘기한다면 거기에는 그럴 만한 까닭이 있다고 봐야 할 것이다.
디버깅에는 가설을 세우고 검증하는 단계가 포함되어 있다. ‘이 버그의 원인은 아마 이 모듈에 있을 거야’, ‘이런 조건에서 발생할 거야’라는 가설을 먼저 세우고 정말 그런지를 확인하는 것이다. 좀더 넓게 얘기하면 프로그래밍도 비슷해서 구현이란 ‘이런 식으로 짜면 동작할 거야’라는 설계 가설을 검증해보는 과정으로 볼 수 있다. 프로그래밍을 해서 좋은 점 중 하나는 끊임없이 내 생각이 맞았는지를 확인하는 훈련을 받게 된다는 것이다. 특히 내 생각이 틀렸을 때 배울 거리가 많다. 어이없는 곳에서 버그를 발견하고 ‘아, 내가 왜 이 생각을 못했을까?’라며 스스로를 한심해한 뒤 앞으로 같은 바보짓을 피하려면 어떻게 해야 할지 고민하게 된다.
내가 요즘 하는 일은 컴퓨터 프로그래밍이라기보다는 데이터를 분석하고 모형을 만드는 쪽에 가깝다. 따지고 보면 모델링도 비슷한데, 모형에서 어떤 요소가 중요하고 또 얼마나 중요할까에 대한 가설을 만든다. 그후 실제 데이터를 탐색하고 모형을 적용하면서 그 생각이 맞았는지를 검증한다. 그러면서 잘못 생각한 것이 있었다면 교정받을 기회를 얻는다.
망치질을 배우면 모든 것이 못으로 보인다고 하는데, 업무를 통해 익힌 이런 관점을 일상 생활에 적용하고픈 충동을 느낀다. 편견을 갖는다는 건 내 삶 속 경험을 디버깅하기 위해 일종의 가설을 세우는 일이다. 그 가설이 충분히 검증되었고 일반화가능한 지혜라면 경륜이라고 불리겠지만, 그렇지 않다면 부정적인 뉘앙스 그대로 편견에 불과하다. 열심히 노력하는데도 문제가 해결될 기미가 안 보인다면 잘못된 가설에 매달리고 있는 건 아닌지 되짚어볼 필요가 있다.