ソフトウェア

「Goの父」ロブ・パイクの「プログラミング5カ条」、ネット上で話題に


UNIXはただ死んだだけでなく、本当にひどい臭いを放ち始めている」「キャッシュはアーキテクチャではない。単なる最適化だ」などの語録を生んだ「Goの父」とも呼ばれるロブ・パイク氏の「プログラミング5カ条」について、ネット上で話題となっています

users.ece.utexas.edu/~adnan/pike.html
http://users.ece.utexas.edu/~adnan/pike.html

Rob Pike's Rules of Programming (1989) | Hacker News
https://news.ycombinator.com/item?id=24135189

パイク氏の「プログラミング5カ条」は以下。


ルール1:プログラムのどこで処理時間がかかるかはわからない。ボトルネックは意外な場所で発生するので、ボトルネックがどこにあるかを証明するまでは、臆測で速度の改善に取り組まないこと。

ルール2:処理速度を測定すること。測定して、コードのある部分が他の部分を圧倒しない限り、速度の調整をしてはいけない。

ルール3:派手なアルゴリズムは、入力値のnが小さいと処理が遅い。そして通常、nは小さい。派手なアルゴリズムは大きな定数を持っている。nが頻繁に大きくなることがないなら、派手なアルゴリズムは使わないようにすること。(nが大きくなっても、まずルール2を適用すること)

ルール4:派手なアルゴリズムは単純なアルゴリズムに比べてバグが多く、実装も大変なので、シンプルなアルゴリズムとシンプルなデータ構造を使うようにすること。

ルール5:データが支配する。正しいデータ構造を選択し、うまく整理していれば、アルゴリズムはほとんどの場合、自明のものになる。プログラミングの中心はアルゴリズムではなくデータ構造。

5カ条のうちルール1と2は、トニー・ホーアの有名な格言「早すぎる最適化は諸悪の根源である」を再掲しており、ルール3と4はKISSの原則の実例、ルール5はフレデリック・ブルックスが自身の著書「人月の神話」の中で述べていたとのこと。また、ケン・トンプソンはルール3と4を「疑わしいときは、ブルートフォースを使え」と言い換えており、ルール5はしばしば「スマートオブジェクトを使った愚かなコードを書け」と短縮されると説明されています。

この5カ条に対し、ソーシャルニュースサイトのHacker Newsのコメント欄にはさまざまな意見が投稿されています。特に、memcachedRedisで極端なキャッシュを実装している事例に遭遇している人は多い模様。ルール1を取り上げて「人々がこのルールに従って、物事がうまくいくようにしてほしいと思います」というコメントが見られます。


「memcachedをオフにするだけでシステムの高速化に成功した」事例もあるとのこと。


また、ルール5で重要視されているデータ構造について「長年稼働するシステムでは、時代に応じて『適切なデータ構造』を選択することはほとんど不可能です。データ構造も、データ自体と同じくらい長くは続きません」というコメントも。確かに、年表示を2桁に絞っていた場合に「2000年」をコンピューターが誤認識してしまう2000年問題などは、当時は妥当と思われていたデータ構造が年月を経て妥当性を失った好事例です。


「ほとんどのビジネスが抱えている問題は、コーディングスキルの欠如やアルゴリズムを構築できないことではなく、そもそもどのようにしてデータを構造化し、良識的な方法でモデル化するかにある」といったコメントも投稿されています。

この記事のタイトルとURLをコピーする

・関連記事
プログラミングを勉強するには「言語能力」と「問題解決能力」も重要 - GIGAZINE

プログラミングを上達するには量と質のどちらがより大切なのか? - GIGAZINE

ソフトウェアエンジニアがハードウェアのプログラミングをする時に注意すべきこと - GIGAZINE

プログラマーを30年間やってきた経験から学んだことまとめ - GIGAZINE

バージョン管理システム「Git」の使い方はどのように教えるのが良いのか? - GIGAZINE

in ソフトウェア, Posted by darkhorse_log

You can read the machine translated English article here.