驚き最小の原則(おどろきさいしょうのげんそく、Principle of least astonishment または Rule of least surprise)とは、ユーザインタフェースやプログラミング言語の設計および人間工学において、インタフェースの2つの要素が互いに矛盾あるいは不明瞭だったときに、その動作としては人間のユーザやプログラマが最も自然に思える(驚きが少ない)ものを選択すべきだとする考え方である。

例えば、あるユーザインタフェースでは + を押下することでプログラムを中止させるとする。同じユーザインタフェースにマクロを記録する機能(キーを押下した順序を記録して後で再利用できるようにするもの)があるとする。ユーザは + を含むキーストロークをマクロとして記録したい場合もあるだろう。驚き最小の原則に従えば、マクロ記録中の + はプログラムを中止させずにキーストロークとして記録される方がユーザを驚かせない。

この経験則は、賢明なデフォルトの適用にも関係している。

ロボット三原則に基づく整理 オブジェクトとロボットには類似性が認められており、アイザック・アシモフのロボット三原則がここでも妥当すると考えられているKen Pugh『プレファクタリング リファクタリング軽減のための新設計』オライリージャパン、2006年、81頁。

ロボット三原則の第二原則の「ロボットは人間に与えられた命令に服従しなければならない。」は「オブジェクトは、そのメソッド名が表す動作を実行しなければならない」と整理される。これには「メソッドはその動作を規定する内容を持つ」という要素と「メソッドはその名前から合理的に予想できる動作を実行する」という要素がありこの後者が驚き最小の原則に当たる。

日本語話者 結城浩は1996年、この原則を人間関係を円滑にすすめるための心得に拡張し、「驚き、最小の法則」として紹介した。たとえば、プログラムを顧客に納品する際に、判明しているバグがあるのなら、それを伝えておいたほうが顧客にとっても利用時の戦略を立てやすくなる、といったものである。「『どうしようかな?』と思ったときには、 相手の『驚き』を最小にするような選択をすべき」であるという。

プログラミング言語 Ruby は、一時期「驚き最小の原則」とともに語られることが多かった。ただし、作者のまつもとゆきひろはこの原則を Ruby の設計哲学として採用したことはないと述べている。Ruby については、「さまざまなバックグラウンドの人々すべてを驚かせないことではなく、Ruby のやり方に十分に慣れた人が持つ常識が一貫して通用するという意味」であるとして、「Matzの驚き最小の原則」という言い方も提案された。現在では Ruby が「驚き最小の原則」とともに語られることは少なくなっている。

脚注

外部リンク 以下、英文 "Applying the Rule of Least Surprise" エリック・レイモンド作 The Art of Unix Programming より Principle of Least Astonishment at Portland Pattern Repository