エンジニアの39ルール

エンジニアの39(さんきゅー)ルールを知っていますか?知らないですよね。

昔(と言っても結構最近)僕がプログラミングする時に拘るべき数字があって、それが3と7±2という話をしたら、その時の上司が39の法則と言い出したのが始まり。つまり、完全な造語です。そして、法則よりもルールのほうが適切だと判断して名付けた。

39ルールとは

僕がプログラミングする時に使っている客観的な指標で、モノゴトは3〜9個の間で収まっていると扱いやすい、ということ。例えばディレクトリ内のファイル(モジュール)の数。多すぎると理解しにくいし、少なすぎるとディレクトリを掘って見るのが面倒になる。大体3〜9個の間が扱いやすいファイル数であると考えている。ファイルの中の関数の数とかも同様ですね。多い方の例がわかりやすいけど、1ファイル内に関数の数が多いと理解が難しくなる。

この39ルールを何に使っているかというと、考え始めるためのトリガーとして使っている。先程の例でいうと、ファイル数が多い場合はグルーピングできる概念がないか考え始め、ファイル数が少ない場合はディレクトリの存在意義を疑い始める。ようは、数字から外れる場合に、見逃している概念や考え過ぎている概念がないかを検討するのに使っている。

ただし、考え始めるためのトリガーとして使っているだけなので、常に3〜9個の間にするべきという話ではない。3未満が適切な場合もあるし、9より多いことが適切な場合もある。あくまで39ルールは検討のトリガーでしかなく、検討の結果適切なら問題なしと。それが39ルールであり、法則よりルールに変えたのも緩い制約の相応しいから。

ここからはそれぞれの数字がなんで決まったのか。

3について

同じことが3回出てきたら、抽象化・共通化や自動化を考えるっているアレです。元々どこからの話かは覚えていないが、ずっと記憶に残っているルール。リファクタリング系の書籍ととかかな。知識の重複を避けるDRY原則も同じかもですね。

ただし、纏めるべきかは本当に適切かを慎重に見極めないといけない。例えば処理を抽象化する場合、似たような処理をやっているから纏めるのではなく、概念として同じだから抽象化することが大事。同一概念にする自信がなければ、バラけさせておいて判断を先送りするのでも良いんです。

なので、3は抽象化・共通化や自動化の判断基準で使っている数のことです。

9について

元々は人の記憶は一度に7±2個のことしか覚えられないっていうアレで、それの最大数の9のことです。マジカルナンバー7±2と言うらしいです。最近は数が減って、マジカルナンバー4というのもあるみたいです。僕自身は一度に9個のことなんて覚える自信はありません。3つでも怪しいです。

asu-yoku-laboratory.com

39ルールではモノゴトを把握できる数として捉えているので、上限は9くらいが丁度良いです。記憶する数としては捉えていないです。例えば、ディレクトリ内のファイルを把握するという感じです。まぁあとは、3と繋げた時の他の数字と比べての呼びやすさです。「さんきゅー」は呼びやすく記憶に残りやすい。だから、上司は「さんきゅー」と言い出し、9になりました。

なので、9はマジカルナンバー7±2の最大数のことです。

まとめ

元々別々の指標で使っていた数字を、ノリでガッチャンコしてみたら覚えやすい名付けになったのが39ルール。でもガッチャンコした結果、何かを扱える数って実は3〜9個なんじゃない?ってなって、モノゴトを扱う範囲の指標としても使うようになった。

特にエンジニアだけの話ではなく、色々と使えそうですよね。こういうマイルールを定めておくと強制的に考える切っ掛けを作れます。