2012년 10월 29일 월요일

절대 코딩하지 마라

"코딩은 늦게 할수록 프로젝트가 빨리 끝난다."

대부분의 개발자들은 이 말을 제대로 이해하지 못한다. 그래서 프로젝트 일정이 촉박하면 무조건 코딩부터 시작하곤 한다. 코딩을 빨리 시작하면 프로젝트가 빨리 끝날 것으로 믿곤 한다. 말은 그렇게 하지 않더라도 일정이 부족하면 문서 작성할 시간도 없고 무조건 코딩부터 시작한다.

물론 프로젝트에 따라서 대충해도 되는 경우가 많다. 그런 프로젝트를 예로 들어서 모든 프로젝트에 확대 적용하지는 말자. 즉, 개집은 어떻게 만들어도 다 되는 것이다. 

코딩 시작은 빨리 시작할수록 재작업은 급속히 늘어난다. 코딩을 최대한 뒤로 늦춤으로써 재작업 가능성을 낮춘다. 물론 스펙이 완전히 끝나야 코딩을 시작할 수 있는 것은 아니다. 스펙을 합리적으로 작성하는 요령 중 하나가 미리 확정할 수 있는 라이브러리나 Sub system들은 인터페이스를 미리 확정하고 코딩을 먼저 시작할 수 있다.

보통 프로젝트에서 분석을 해보면 코딩부터 할 수 없다는 것을 알게 된다. 코딩부터 시작하는 경우는 무엇을 개발할지도 모르고 코딩을 시작하는 것이다. 그렇게 미리 작성된 코드는 스펙이 정해지면 버리고 다시 짜야 하는 경우가 많다. 아키텍처에 요구사항이 제대로 반영되지 않는다. 그럼에도 미리 코딩을 해 놓으면 코드를 버리기가 아까워서 그냥 사용하게 된다. 그러다보면 아키텍처는 엉망이 된다.

개발자들은 자신이 작성한 코드를 살리기 위해서 요구사항을 거부하기도 하고 코드에 꼼수를 부리기도 한다. 

가끔은 코딩만하기에도 정말 일정이 부족한 프로젝트들이 있다. 이런 경우도 코딩부터 한다고 프로젝트가 빨리 끝나는 것은 아니다. 무모한 시도를 하는 것이다. 스펙을 작성할 시간도 없는 프로젝트는 안하는 것이 낫다. 그렇다고 회사에서 프로젝트를 거부할 수는 없다. 최대한 빨리 스펙을 써서 합리적으로 가능한 일정와 범위를 제시하는 것이 더 좋은 방법이다.

일정이 촉박하다고 매번 코딩부터 시작하면 10년을 개발해도 별로 나아지는 것이 없을 것이다.

댓글 12개:

  1. 좋은 글. 모든 일(Task)이 그렇듯이 고민을 충분히 해서 세를 짠 후에 한 번에 몰아붙여 끝내는 것이 효율적이라고 생각됩니다.

    답글삭제
  2. 항상 손이 먼저나가서 문제
    참을수 없는 가벼움

    답글삭제
  3. @beomjinkim 블로그에 LiveRe 붙였어요. ^^ 좋죠?

    답글삭제
  4. @beomjinkim 다 좋은데 Tistory 기존 댓글들을 포기할 수 없어서 지금은 기존 댓글과 중복해서 사용하게 되네요.

    답글삭제
  5. LiveRe 붙이고 좋아진 것 같긴 한데 LiKE 버튼이 없어졌네요! 아님 제가 못찾고 있는걸까요?

    답글삭제
  6. 없어졌네요. - -; 다시 추가했습니다.

    답글삭제
  7. 공감합니다. 저도 경력이 늘수록 코딩시작하는데 신중해지더군요. 나중에 고생하지 않으려고.
    비록 혼자 보게되더라도 간단하게 나마 문서작성해서 다 맞춰놓고 하는게 제일 좋더군요.

    답글삭제
  8. 그렇다면 TDD 방법론에 대해서는 어떻게 생각하시나요?

    답글삭제
  9. 안녕하세요. 윈플님

    개발적인 방법론을 보면 잘못된 것이 하나도 없습니다. TDD방법론도 마찬가지입니다. TDD방법론은 분석단계를 강화하는 아주 좋은 수단입니다. 그렇다고 모든 프로젝트에 TDD방법론을 쓰는 것이 좋은 것은 아닙니다.

    스펙을 적는 방법은 매우 다양합니다. 특히 기능을 적을 때는 어떤 형식으로 적으라는 규칙이 없습니다. TDD도 그 방법 중 하나입니다. 단계별로도 한번에 다 적을 수도 있고 차츰 발전시켜나갈 수도 있고 가장 효과적인 방법은 경험이 많은 개발자가 프로젝트의 성격에 맞게 판단하면 됩니다.

    무슨 방법은 옳고 뭐는 잘못됐다고 기법이나 방법을 가지고 얘기하는 것은 위험합니다.

    원칙 중 하나는 이 모든 고민은 소프트웨어를 어떻게 빨리 개발할지에서 출발하는 것이고 그러기 위해서는 대부분의 소프트웨어는 바로 코딩에 들어가는 것보다는 스펙을 적절하게 적는 것이 좋다는 겁니다. TDD도 그 한 방법입니다.

    답글삭제
  10. 만족할때 까지 생각만 하면 아무것도 안되는 것 같고, 또 나름 고심했다고 막상 코딩하면 미처 고려치 못한 부분이 생기고, 설계와 코딩의 경계점을 잡기가 참 어려운것 같습니다.

    답글삭제
  11. 내용을 보면 분석과 설계의 경계를 구분하기 어려운 것 같군요. 코딩은 분석, 설계 어느 단계라도 필요한 부분은 미리 해 놓을 수도 있습니다. 분석은 충분히 다 되었다고 확신하는 것도 어렵고, 필요한 만큼 적당히 해야 하는데 적당히가 가장 어렵습니다.

    그래서 설계는 예술이라는 말이 나오나 봅니다.

    답글삭제
  12. 코딩을 늦게 하면 개발기간이 단축될수도 있지만
    한국의 경우 NEXT 프로젝트에서 코딩시작하기 전기간이 삭제된채로 주어집니다.
    그리고 요즘 대부분의 프로젝트에서 설계분석기간은 처음부터 삭제되고
    개발(코딩)시작 부터 합니다.

    답글삭제