회사 혹은 연구실 혹은 개인 프로젝트의 일환으로 프로그램을 짜게 될 때, 나중에는 썩 작지 않은 규모의 프로그램이 될 이것을 어떤 설계에 기반한 어떤 코드로 짜기 시작해야 할지에 대한 고민을 항상 하게 된다.
대부분의 경우엔 시작 단계 때 “지금 내가 짜는건 동작을 확인하는 목적만 가진 ‘테스트용’ 프로그램이야! 실제로 내가 완성하게 될, ‘정교한 설계에 기반한 프로그램’은 따로 짤 계획이야!” 라고 생각하고는 설계를 적당히 대충 하게 될 것이다. 왜냐면 그렇게 해야 기한을 맞출 수 있으니까.
하지만 그 이후, 이 ‘테스트용’ 프로그램 코드를 가지고 앞서 말했던 ‘정교한 설계에 기반한 프로그램’을 다시 만드는 작업을 빠른 시일 내에 하지 않으면 ‘테스트용’ 프로그램의 설계가 곧 최종 프로그램의 설계로 되어버린다. 그런 경우가 정말 많다.
이렇게 되면 억울한 경우가 많이 생기게 된다. 그 프로그램을 상사 혹은 후임에게 넘겨주거나 피드백 받을땐 항상 그 부분에서 지적을 받게 되기 때문이다. 원래는 그렇게 짜려던게 아닌데 말이다.
그러므로 가능하면 처음부터 내가 머리에 그리고 있던 “정교한 설계”가 되도록 코드를 짜는 것이 좋다. 추상화도 재깍재깍 하고 리팩토링도 재깍재깍 하면서 말이다. 주말 남는 시간에 게임 하면서 노는 것 보다 내 프로그램 코드를 리팩토링 하는게 더 재밌는 경우도 물론 있지만 그런 경우가 항상 있진 않다.
한 줄 요약: 첫 단추를 잘 꿰야 한다.