실용주의 프로그래머 Topic 15

Topic 15 추정

데이비드 토머스, 앤드류 헌트

Alt text

느낌표 ! (인상 깊은 문장 | 문맥)

추정하는 법을 배우고 추정 능력을 계발하여 무언가의 규모를 직관적으로 짚을 정도가 되면, 추정 대상의 가능성을 가늠하는 마법과 같은 능력을 발휘할 수 있게 될 것이다.

p.94

추정으로 놀람을 피하라.

p.95

개발 하다보니 추정이 제일 어렵다. 몇 시간이면 될 것 같았던게 버그가 생각보다 깊은 곳에 있어 몇 일이 걸리기도 하고 1주일이면 기능을 만들 수 있을 것 같았는데 의이로 이틀에 끝나기도 하는 경험을 종종 한다.

추정을 한다고 하지만 거의 맞지 않아서 대체로 프로토타입을 후딱 만들고 추정을 하는 편이다. 해당 프로젝트에 비슷한 경험이 있으면 추정은 무척이나 수월할텐데 편식하지 않고 경험 많은 개발자가 되어야겠다.

학생 때 산학협력 선생님께서 진행하는 과목 첫 시간에 일정산출표를 작성해서 제출하라고 하셨다. 이 때는 이게 필요한가 개발하면서 일정은 변할텐데 2주 걸린다고해도 덜 걸릴수도 더 걸릴수도 있는거 아닌가하고 질문을 드렸다. 그 때 선생님께서는 “일정 산출을 잘 하는게 제일 중요하다. 개발 능력보다 더 중요하다.” 라고 말씀하셨다. 이 때는 무슨 말인가 싶었는데 개발 현장에 있으니 내가 하는 일은 돈과 직결되어있고 기간 또한 돈과 직결되어있다. 그러기에 회사는 기간을 매우매우 중요하게 생각한다. 이 때 개발자의 의견을 물어보는데 이 때 예를 들어 2개월이면 될 것 같은데요?라고 하면 회사에서는 2개월에 맞춰서 플랜을 짠다. 이 때 기간을 못 맞추게 되면 회사 플랜이 바뀌어 여러 손해가 발생하게 된다. 이때는 전적으로 일정 산출을 제대로 못한 개발자의 잘못이다. 생각해보면 어떤 회사가 ‘개발하면서 일정을 알려주세요’라고 하겠는가. 이걸 알지만서도 일정을 추정한다는 것은 매우매우 어렵다.

추정치는 어디에서 나오는가?

모델 작성에 너무 시간을 너무 많이 쏟기 전에 과거에 비슷한 상황에 처했던 사람이 없는지 주변 사람들에게 문의해 보고, 그들이 어떻게 해결했는지 알아보자. 똑같은 일을 해 본 사람을 찾기는 어렵겠지만, 놀라울 정도로 자주 다른 사람의 경험을 바탕으로 성공적인 추정치를 낼 수 있을 것이다.

p.96

역시 경험해본 사람의 추정보다 훌륭한 것은 없다. 개발자 네트워크를 잘 구성해서 조언을 구하는 것 또한 중요하겠다. 구석에서 막 분석해서 일정 도출보다 밥 먹으며 조언을 구하는 것이 더 나은 추정치를 구할 수도 있겠다. 물론 둘 다이면 더 좋겠다.

1. 무엇을 묻고 있는지 이해하라

어떤 종류의 추정을 하건 첫 단계는 상대방이 무엇을 묻고 있는지 이해하는 것이다. 앞서 이야기한 정확도뿐 아니라 도메인에 존재하는 조건에 대해서도 감을 잡을 필요가 있다.

p.96

개발자를 위한 서비스를 개발 하는 경우는 드물다. 대부분 특정 분야에서 사용될 서비스를 개발하기 때문에 해당 도메인 지식이 필요하다. 도메인 지식을 모르고 시스템을 구성해보는 것은 어리석다. 물론 전문가가 될 수는 없지만 최소한의 지식이 있어야 감을 잡을 수 있다. 이런 도메인 지식들을 새로운 프로젝트 때 마다 얻을 수 있다는 것이 한편으로는 개발자의 특권인 것 같기도 하다.

2. 시스템의 모델을 만들어라

의로인의 요청을 이해한 후에는 간단하게 기본적인 것만 갖춘 개략적인 모델을 만들어 보라.

모델을 만드는 것은 창의적이면서도 동시에 장기적으로 유용한 작업일 수 있다. 모델을 만드는 과정에서 이전에는 표면에 명확히 드러나지 않았던 숨겨진 패턴과 프로세스를 발견하는 경우도 많다.

p.97

일단 머릿속으로 정리하는 것보단 도식화하여 눈으로 볼 때 훨씬 더 정확하게 파악할 수 있다. 잘 알고 있다고 생각했지만 막상 설명하려 할 때 설명할 수 없듯 너무 자신을 믿어서는 안된다. 글을 써보기도 하고 누군가에게 설명을 하면서 자신이 잘 알고 있는지를 판단할 필요가 있다.

3. 모델을 컴포넌트로 나눠라

다 만든 모델은 컴포넌트로 분해할 수 있다. 이제 이러한 컴포넌트들이 어떻게 상호 작용하는지를 수식으로 기술해야 한다.

대부분의 컴포넌트에는 각 컴포넌트가 어떻게 전체 모델에 기여하는지를 나타내는 매개 변수가 있다. 이 단계에서는 일단 매개 변수를 찾기만 하면 된다.

p.97

4. 각 매개 변수에 값을 할당하라

5. 답을 계산하라


위 두가지도 설명이 되어있지만 책의 에제에서는 대용량 파일 전송 시스템을 예를 들어 컴포넌트의 전송 속도를 매개변수로 잡아 여러 상황에 대해서 설명하고 있다. 그렇지만 이를 적절히 요약하기가 쉽지 않고 와닿지 않아 생략하도록 하겠다.


6. 여러분의 추정 실력을 기록하라

여러분이 계사한 추정치를 기록해 놓고, 나중에 이 값이 실제 결과에 얼마나 가까웠는지를 평가해 보면 정말 좋을 것이다.

추정치가 틀렸더라도 움츠리거나 도망가지 말라, 왜 틀렸는지 찾아라.

p.99

항상 마무리를 하고 회고가 중요하다. 이 때 자신의 부족함이나 개선점을 알 수 있기 때문이다.

Topic 15 느낌

Topic 15 막연하게 추정해왔던 것을 체계화하여 일정을 산출해보는 노력과 연습이 필요하겠다는 생각을 하게 한다. 이 부분이 약해라고 느끼고 있었지만 개선할 노력을 하지 않았었는데 체계화된 틀 안에서 따라하며 노력해봐야겠다.


실용주의 프로그래머 Topic 14

Topic 14 도메인 언어

실용주의 프로그래머 Topic 16

Topic 16 일반 텍스트의 힘

NCloud LB & SourcePipeline 구축하기
tech collection 서비스 성능 개선하기
Selenium 복권 구매 자동화 만들어보기
디자인 패턴
책 리뷰
블로그 챌린지