프로그래머는 자주 개발자라는 이름으로 불리고, 구현이 가장 중요한 듯 생각되기도 한다. 하지만, 개발 과정에서나, 유지보수 과정에서나 문제는 발생하기 마련이다. 능력이 아무리 뛰어나고, 머리 좋은 사람들이라 해도 문제를 만들기 마련이며, 오죽했으면 문제가 없다는 것은 아무 일도 일어나지 않고 있다는 증거다라는 말이 있겠는가?
문제가 발생하는 것을 당연하게 여기게 되었다면 우리가 할 수 있는 것은 크게 두 가지가 있다.
첫번째. 문제가 발생할 여지를 줄이는 것이다.
문제가 발생할 여지를 줄이는 좋은 방법으로는 좋은 습관을 들이는 것인데, 개발 프로세스를 늘 개선함으로써 단점을 보완해나가는 것이다. 반복 작업이 있다면 그 횟수를 줄일 순 없을까? 한번으로 끝낼 순 없을까? 고민하고 보완해나가고, 피드백이 부족하다면 회의를 자주 한다던가, 개발 과정을 사용자와 공유한다던가 하는 방법으로 보완해 나가는 식이다.
문제가 덜 발생한다면, 그로 인한 시간과 노력을 낭비하지 않아도 되기 때문에, 문제를 해결한 것보다 가치있다.
두번째. 문제 해결 능력을 기르는 것이다.
문제가 발생했다면, 무엇이 문제던 간에 해결해야 한다.
문제를 해결했다고 말하기에 앞서 자기 자신에게 다음과 같은 질문을 던져봐야만 한다.
원인이 무엇인가?
간혹 원인 자체를 잘못 파악하는 경우도 있다. 이럴 땐 어떤 해결책이던 간에 실패하기 때문에, 원인 파악의 중요도는 크다고 할 수 있다.
우선 생각나는 모든 원인을 떠올리는 것이 좋다. 검증 과정을 거칠 것이기 때문에, 엉뚱하고, 황당한 방법도 모두 나열해보는 것이 좋다.
원인을 생각 했다면 다음과 같은 질문에 답해보자.
해결 방법으로 무엇이 떠오르는가?
대부분의 문제는, 한가지 해결 방법만 존재하지 않는다. 증상을 해결 할 수 있는 해결책은 모두 떠올려 보는 것이 좋다. 많은 문제가 가장 확률이 높은 원인 때문에 발생되지만, 그렇지 않은 경우도 종종 있기 때문이다. 실제로 적은 확률로 발생하고, 그 상황들이 절묘한 타이밍에 겹쳐야만 발생하는 문제를 겪은 적도 있기 때문에 더더욱 그렇다고 생각한다.
증상을 해결했는지 확인해보고, 해결 방법이 새 문제를 만들거나, 문제를 완벽히 해결했는지 아닌지를 생각해보라.
문제 해결를 겪는 사람들이 어려운 문제를 만났을때 눈에 보이는 증상만 해결하려는 욕구에 사로잡히곤 한다. 하지만 절대 그래선 안된다. 잠시 그 문제를 덮어둘순 있겠지만, 그 문제는 더 큰 문제로 다시 내게로 올 것이다.
프로그래머는 문제 해결사여야 한다. 특히 서버 프로그래머는 그렇다고 생각하고, 어떤 문제에 봉착했을 때 논리적이고, 이성적인 판단을 내릴 수 있어야 한다. 기술적인 문제인지 여부는 상관없다. 단지 프로그래머가 문제 상황을 자주 마주치는 직업이고, 그에 따른 해결책을 생각해야 하는 직업이기 때문에, 문제 해결 능력이 중요하다 할 수 있다.
아직 이 책을 읽어보지 못했거나, 아직 자신이 문제 해결사로써 부족하다 느낀다면, 이 책을 통해 문제 해결 방법과 그 과정에 대해 다시 한번 생각해 볼 수 있는 계기를 가지는건 어떨까?