과유불급(過猶不及)

The best is the enemy of the good. – Voltaire

적절한 수준 이상으로 작업하는 것은 차라리 그 이하로 작업하는 것보다 더 프로답지 못하다. 프로그래머가 일을 잘하고 있는지 알려면 그가 주어진 문제에 대해 적절한 수준으로 작업하고 있는지를 보면 된다. 어떤 사람을 훌륭한 아마추어 프로그래머로 만들어 주는 재능이나 성격이 프로가 되기에는 매우 적합하지 않은 요소일 수도 있다. 작업의 수준을 적절히 조절하지 못하는 사람은 프로가 되기에는 항상 실격이다. – <프로그래밍 심리학>, 제랄드 M. 와인버그

과유불급이라는 말이 논어에 나온다고 합니다. 과유불급은 ‘지나침은 미치지 못함과 같다’는 뜻입니다. Scott Meyers: The Most Important Design Guideline?를 보면, 지나치면 어떻게 되는지를 잘 알 수 있습니다.

class Date
{
public:
	Date(int month, int day, int year);
};

그 글의 필자는 단지 위의 Date 클래스의 인자가 잘못 지정되는 것을 막으려고, Day 클래스, Month 클래스, 그리고 Year 클래스를 새로 만들어 30여 줄을 추가합니다. 그리곤 그것이 좋은 설계라고 주장합니다. 인자가 잘못 지정되는 것을 막는 것은 가치 있는 일입니다. 하지만, 금융, 군사, 그리고 우주 항공 등 실수가 매우 치명적인 분야에 사용되는 경우가 아니라면, 그로 인한 이득보다 생산성 감소로 인한 손해가 더 클 것입니다.

단지 인자 지정이 잘못되는 걸 방지하려고 한다면, 다음처럼 두 줄만 생성자에 추가하면 거의 해결됩니다.

assert(month >= 1 && month <= 12);
assert(day >= 1 && day <= 31);

지나침은 모자람과 같습니다.

Advertisements

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Google+ photo

Google+의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

%s에 연결하는 중