3개월간 하프 마라톤을 준비하면서 대략 총 322km를 달렸다. 달리기 중간에 수분을 보충하는 방법과 산을 오르면서 페이스를 유지하는 법을 익혔고, 더 빠르게 달리기 위해 나 자신을 강하게 밀어냈다. 2시간 7분 동안 달리기 위해 50시간을 오로지 달리기 훈련에만 매진했던 셈이다.
이른 아침 올드 산 후안(Old San Juan)의 아름다운 길을 따라 달리는 것을 즐기기도 했지만, 나는 훈련 자체를 오히려 더 즐겼던 것 같다. 한 번의 달리기는 배움이라는 여정의 한 부분이었으며, 훈련에 익숙해질수록 지금까지 도달하지 못했던 무엇인가를 할 수 있음을 느꼈다. 이러한 강한 인상으로 인해 앞으로 또 다른 하프 마라톤에 이어 풀 마라톤에 도전하게 될 것 같다.
이처럼 마라톤 훈련 과정이 바로 소프트웨어 개발과도 어느 정도 일맥상통한 이론이 있음을 알게 됐다. 소프트웨어 개발은 새로운 소프트웨어를 창조하는 일이 아니다. 나에게는 그전에 없었던 새로운 것을 창조하는 일이다. 이는 새로운 지식을 적용하고 배울 기회를 제공해준다.
소프트웨어 엔지니어는 훌륭한 운동선수에 비유해볼 수 있다. 이들은 안락 지대를 피해 자신의 프로젝트를 개선하기 위해 고군분투한다. 마라톤 선수처럼 자신의 개발 실력을 향상하기 위해 꾸준히 훈련한다. 좋은 소프트웨어 개발자가 되기 위해서는 항상 무엇인가를 배워야 한다. 이것은 단순히 새로운 기술을 학습하는 것뿐만 아니라 문제를 좀 더 효율적으로 해결하기 위해 기술을 적용하는 방식을 익히는 것도 포함된다. 새로운 소프트웨어 패턴을 익히는 것뿐만 아니라 코드의 실제 문제를 풀기 위해 적용하는 방식도 이해해야 한다는 뜻이다. 좋은 소프트웨어 개발자는 항상 더 나은 결과물을 얻기 위해 노력한다.
궁극적으로는 당신이 구축하는 소프트웨어뿐만 아니라, 이것을 어떻게 구축하느냐도 중요하다. 소프트웨어를 만드는 절차와 여행에서 성취하려는 목표와 연관이 있다는 의미다. 당신의 사용자는 최종 결과물만을 보겠지만, 완전히 새로운 방식으로 사용자 경험이나 집계 API를 향상하기 위해 멀티쓰레딩 메소드를 적용한 방식은 당신의 머릿속에서 마치 승리의 기억으로 자리한다. 이런 경험은 좋은 개발자가 더 나은 소프트웨어 솔루션을 만들 수 있도록 인도한다.
프로젝트를 성공리에 마치는 것은 레이스를 끝내는 것만큼이나 중요하겠지만, 소프트웨어 개발자에게는 절대로 끝나지 않는 여정과도 같다. '만약에'라는 질문을 던지기만 하면 된다. 만일 내가 학습을 열심히 했더라면? 만일 팩토리 메서드(Factory Method) 대신 추상 팩토리(Abstract factory)를 구현했다면? 좋은 소프트웨어 개발자는 항상 미리 생각하고 다르게 생각한다. 다음에는 어떤 새로운 것을 배울 수 있을까? 더 나은 소프트웨어를 만들기 위해 새로 배워야 할 기술에는 무엇이 있을까?
모든 소프트웨어 프로젝트는 여행이 되어야 하며, 자신의 최고의 기록을 깰 기회가 되어야 한다. 안락 지대에서 벗어난다는 것은 계속 변화하고 새로운 도전 과제를 던지는 산업의 흐름 속에서 자신의 가치를 올리는 일이기 때문이다. 내가 보장한다.editor@itworld.co.kr