SmalltalkBestPracticePatterns:1.2

From 흡혈양파의 번역工房
Jump to: navigation, search
1.2 코딩

코딩

패턴이 담당하는 활동에 대한 명확한 해설을 제공하기 위해서는 코딩(coding)을 언급하고 넘어가야겠다.


컴퓨터가 물리학이나 수학의 영역이었을 당시에는 코딩을 구분된 활동으로 보지 않았다. 아이디어가 생기면 그것을 구현하고 결과를 살펴봤을 뿐이다.


그러다가 상용 소프트웨어 개발의 출현과 함께 개발자 계층이 나타났다. 최상위층에는 시스템 분석가, 즉 실제로 컴퓨터를 사용하기엔 너무나 중요하고 높은 지식층이 위치한다. 그 아래층에는 분석가들의 모호한 중얼거림을 어셈블러 또는 (추후엔) 컴파일러가 인식할 수 있는 내용으로 바꾸는 방법을 아는 프로그래머들이 존재한다. 그리고 최하위층은 프로그래머가 채운 용지를 가져와 천공 카드를 생성하는 코더(coder)로 구성된다.


더 나은 인터페이스 기술 덕분에 타이피스트로서의 코더(coder-as-typist)는 오랫동안 쓰이지 않게 되었고, 프로그래밍의 저수준 활동을 의미하게 되었다. 하지만 그 오명은 남기 마련이다. 필자가 상담가가 되었을 무렵 다음과 같은 말을 들었던 적이 있다. "네가 코딩을 할 수 있다는 사실을 알리지 마라. 그렇지 않으면 특별 요금을 부과할 수 없을 것이다."


이제 코딩의 의미를 재정의할 시간이 되었다고 생각된다. 사실 재정의라기보단 복구라고 해야겠는데, 정의 자체는 괜찮다고 생각하기 때문이다. 단, 그 정의에 부여된 오명은 근시안적이고 위험하단 생각이 든다.


필자에게 개발이란 두 과정으로 구성되고, 그 과정들은 상호작용한다. 첫째, 컴퓨터에게 실행시키고자 하는 작업이 무엇인지 생각하는 과정이다. 두 번째는 그러한 작업을 컴퓨터에 명령하면 것이다. 그러한 명령(instruction)의 작성을 시도한다면 컴퓨터로부터 기대하는 작업을 변화시킬 것이다.


그렇다고 이 모델에서 코딩이 디자인 또는 분석보다 뒤떨어짐을 의미하는 것은 아니다. 코딩은 모호하고 편안한 아이디어들이 열악한 현실의 기대에서 깨어나는 곳이다. 컴퓨터가 실행하길 원하는 작업이 무엇인지 배우는 곳이다. 코딩을 중단하면 학습이 중단된다.


책임을 어디로 가중해야 하는지에 대한 예상이 항상 적중하는 것은 아니다. 코딩은 디자인에 대한 우리의 추측을 시험하는 곳이다. 코딩 중에 디자인 변경에 유연하게 준비한다면 시간이 지날수록 괜찮아지는 프로그램이 생산된다. 초기 디자인 아이디어만을 이행하도록 고수한다면 매우 근시안적이라 할 수 있다. 객체에서 모양새가 보기 좋지 않은 코드를 발견할 때가 있다. 이 책에 담긴 패턴을 기반으로 (대부분 Composed Method) 코드를 다른 객체로 이동하길 권할 것이다. 예를 들어, 아래와 같은 코드를 발견한 적이 있다:

Station>>computePart: aPart
      ^self multiplyPartTimesRate: aPart
Station>>multiplyPartTimesRate: aPart
      ^Part
            amount: aPart amount * self rate
	    date: aPart date


필자는 다음과 같이 말했다. "multiplyPartTimesRate: 에서 Part의 데이터를 너무 많이 사용하는 것으로 보이네요. 이 코드를 Part로 이동시키면 어떨까요?" "그치만 Parts가 연산을 실행하도록 설계된 건 아니잖아요!" "코드가 그렇게 말하는 것 같으니 우선 해보죠."

Part>>* aRate
       ^Part
              amount: amount * aRate
	      date: date
Station>>computePart: aPart
       ^aPart * self rate


이 결과는 Station에게 Part의 세부 정보를 더 적게, 간단하게, 짧게 알려준다. 코딩 도중에 디자인 통찰에 대해 열린 마음을 가진 덕분에 전체 시스템을 더 간단하게 만드는 법을 배웠다.


이 책에서 자료에 대한 영감은 코드를 검토하는 경험에서 얻은 것이다. 글을 작성하면서 더 많은 사건들이 기억났다. “맞아. 그 고객이 그걸 잘못하고 있었는데 정말 골칫거리였지. 그 문제는 어떻게 볼 수 있을까?” 그러한 상황에서 필자의 조언은 당연히 코딩에 관련된 조언으로, 매우 전술적이다. 그 문제를 깊이 이해할 시간은 없다. 작은 문제들을 해결하도록 돕는 것이 훨씬 큰 문제들의 근원과 해결방법을 밝혀주는 계기가 되는 모습을 보면서 놀람을 금치 못한다.


Notes