아이템 55. 신중하게 최적화하라.
55. 신중하게 최적화하라.
최적화 관련 격언 세가지
맹목적인 어리석음(blind stupidity)을 비롯한 다른 어떤 이유보다도, 효율성이라는 이름으로 저질러지는 죄악이 더 많다(효율성을 반드시 성취하는 것도 아니면서 말이다)
윌리엄 울프(William A. Wulf)
작은 효율성(small efficiency)에 대해서는, 말하자면 97% 정도에 대해서는, 잊어버려라. 섣부른 최적화(premature optimization)는 모든 악의 근원이다.
도널드 커누스(Donald E. Knuth)
최적화를 할 때는 아래의 두 규칙을 따르라 규칙 1 : 하지마라 규칙 2 : (전문가들만 따를 것) 아직은 하지마라 - 완벽히 명료한, 최적화되지 않은 해답을 얻을 때 까지는.
M. A. 잭슨(M. A. Jackson)
원칙
- 성능 때문에 구조적인 원칙(architectural principle)을 희생하지 마라. 빠른 프로그램이 아닌, 좋은 프로그램을 만들려 노력하자.
- 좋은 프로그램인데 충분히 빠르지 않다면, 좋은 구조를 갖추었기 때문에 최적화의 여지도 충분하다. 각 모듈간의 관계를 적당히 유연하게 유지하고 있기 때문에, 구조적으로 변경이 쉽기 때문이다.
- 설계를 할 때는 성능을 제약할 가능성이 있는 결정을 피하라.(최대한 결정을 늦춰라.)
- API를 설계할 때 내리는 결정들이 성능에 어떤 영향을 끼칠지를 생각하라.
- 최적화는 객관적인 측정 기준을 만들고 수치화 하여 의사결정을 내리자.
결론
빠른 프로그램을 만들고자 애쓰지 말라는 것이다. 대신 좋은 프로그램을 짜기 위해 노력하라. 성능은 따라올 것이다.