最適化する時期
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/10/21 23:57 UTC 版)
「最適化 (情報工学)」の記事における「最適化する時期」の解説
最適化ではコードの可読性を損ない、性能向上にしか寄与しないコードを追加することがある。これはプログラムやシステムを複雑にし、保守やデバッグがしにくくなる。そのため、最適化や性能チューニングはソフトウェア開発工程の最後のほうで行われることが多い。 ドナルド・クヌースは、時宜を得ない(しばしば、早すぎる段階での)最適化を戒める言をいくつも記している。一例を挙げれば、 「ほんとうの問題点は、プログラマたちが誤った場所と誤った時点での効率について苦労して、多くの時間を浪費してしまったということにあります。プログラミングでは、時を得ない最適化は諸悪の根源なのであります。(すべてではないにしても、少なくとも悪の大部分と言えるでしょう。)」(1974年、チューリング賞受賞講演より。『ACMチューリング賞講演集』p. 56、『文芸的プログラミング』p. 30) クヌースはアントニー・ホーアに由来するとしているが、ホーアは否定している(アントニー・ホーア#語録を参照)。ダイクストラに由来するのではないかとする説があり、ホーアもそう述べている。なお、クヌースが1974年に「未熟な最適化は諸悪の根源である」と書いているもうひとつの文献は、ダイクストラのGo To Statement Considered Harmfulに対して書かれた、Structured Programming with go to Statementsである。 これについて Charles Cook は次のように述べている。 「賛成だ。コードのボトルネックがどこなのかが判明する前に細かい最適化に時間を費やすのは無駄だ。しかし逆にシステムレベルのソフトウェアを設計するときは、性能問題を常に念頭に置くべきだ。よいソフトウェア開発者はこれを自動的に行っており、どこの性能が問題となるかを感覚的に感じ取ることができる。経験の浅い開発者は、後の工程でのちょっとした微調整で問題が全て解決するという間違った信念を持っていることがある」 「時期尚早な最適化」という言葉は、プログラマが個々のコードの設計時に性能への考慮をすることを指している。そのような小手先の最適化を最初から行っていると、コードが複雑化してその機能の本質を見誤り、コードが汚くなったり、バグを作りこんだりする。 よい手法とは、設計をまず行い、その設計からコードを書き、プロファイル/ベンチマークを実施して最適化すべき箇所を特定することである。単純で簡潔な設計であれば、この手法での最適化が容易であり、プロファイリングによって予想外の性能問題(時期尚早な最適化では思いもよらなかった問題)が明らかとなることもある。 実際には、ソフトウェアの設計の初期段階から性能目標を念頭に置く必要があるが、プログラマは設計目標と最適化のバランスを保つ(最適化での伸びしろを考慮してコードを書くときの時期尚早な最適化を控える)。
※この「最適化する時期」の解説は、「最適化 (情報工学)」の解説の一部です。
「最適化する時期」を含む「最適化 (情報工学)」の記事については、「最適化 (情報工学)」の概要を参照ください。
- 最適化する時期のページへのリンク