可能性の枝切りができない開発は必ず失敗する。

開発は、有限の時間で有限のリソースで行うものです。
少ない差し手で勝負を決めなければならないものです。
ですから主張します。
**「可能性の枝切りができない開発は必ず失敗する。」**と。

**「全ての項目をきちんと評価して」**、**「最適な選択を」**、**「それぞれの可能性を最大限に見積もって」**、**「誰にでも分かりやすく」**など、できると思ってはいけません。それは必ず泥沼にはまり込みます。


### **枝切りができれば必ず正解にたどりつく種類のゲーム**

 話は変わりますが、[倉庫番](https://ja.wikipedia.org/wiki/%E5%80%89%E5%BA%AB%E7%95%AA)というゲームをしたことがありますか。それを例に、枝切りの重要性を示したいと思います。

- 荷物は押すことしかできません。荷物を引くことはできません。
- 荷物は1個しか押すことができません。2個以上の荷物を押すことはできません。
- そこで、すべての荷物をゴール地点に運ぶことが目的です。

　このゲームでは、そのつど選択肢があって、木構造でその選択肢を示していくことができます。これを[ゲーム木](https://ja.wikipedia.org/wiki/%E3%82%B2%E3%83%BC%E3%83%A0%E6%9C%A8)といいます。そして、下手な操作をしてしまうと、荷物をゴール地点に動かすことができない状態になってしまいます。そうすると素のゲーム木の枝は、そこで終わりになってしまいます。このゲームの最大の特徴としては、何かしら手順を探していくと必ず「すべての荷物をゴール地点に運ぶこと」ができるという点です。
　ですから、何をしてしまうと行き詰まりになるのかを見つけて、その行き詰まりの枝を切り落としていくことで、必ず正解が残るというものです。

 ゲームの多くは、このような選択肢があって、どの選択肢を選ぶのかがゲームの戦略になります。オセロゲームの場合には、どこに石を置くかの選択肢が少ないので、プログラム化されるのが早かったわけです。将棋や囲碁は、その枝の数が多いので、なかなかプログラムの水準が上がるのが、チェスなどに比べてゆっくりだったわけです。コンピュータの性能が上がったことで、(アルゴリズム自体も飛躍的に性能があがって)、名人を打ち破る状況になってきたわけです。
　
　有限の能力を持つヒトの場合には、可能性の枝切りをして、不要な方向に努力をしないことが大切になります。

###**要因は極力、直交する条件を選べるようにする。**

- 直交性のない場合
        - 5段階で評価する項目が5個あるとして、そこから最適な条件を見つけることをするには、`5**5=3125` 通りから、最適なものを探さなくてはならない。
- 直交性のある場合
        - 5段階で評価する項目が5個あるとして、そこから最適な条件を見つけることをするには、5*5 = 25 通りの中から最適なものを探せばよいことになる。
    「全ての項目をきちんと評価して」、「最適な選択を」と主張する人は、この違いを自覚する必要があります。
        -　１つの条件を評価するのに1時間かかるとすれば、直交性のない場合には、390*8= 3120 時間かかります。直交性のある場合には、4*8 +1 = 25時間となります。

###**その分野の知見は最大限に利用しよう。**

- 可能性の枝切りができない状況では、その分野の知見を最大限に利用することです。その時点で「世の中では○○○ということになっているけど、実は違うんじゃないか」などとは言っていけません。(それを言っていいのは、十分に多くの知見を持っている中で、一部のピースについて疑うだけの経験と考察を持っている場合だけです。)

###**適切なコストモデルをもっておこう。**
    
- 物事を実現するには、何かしらコストがかかります。そのコストによって、実用になるものとならないものとがあります。実現できてもコストが割りあわない組み合わせは最初から除外することです。レーザーレーダー（＝ライダー lidar)の価格は、どう見ても、軽自動車の価格帯に使えるようにはなりそうにもありません。軽自動車で使えるセンサは、ステレオカメラとか別のものになります。

###**困難な度合いをその分野の知見を持っている人と開発者に聞くこと**

- 「不可能ではない」ということと「それを選択すべき」との間には、大きな壁があるのです。重力波を検知することは「可能なこと」でした。しかし、それが誰にでも出来ることではありません。経験の浅いマネージャーは「不可能じゃないんだったら、やればいいじゃない。」などという言葉を気軽に言ってしまいますが、それがどれだけ開発を歪めるものであるのかを知って欲しいと思います。  
        
　
###**誰にでもわかりやすいのは望ましいが、いつもそうできるわけではない**
    
- 可能性の枝切りをするために、その分野の専門家は、素人にはわかりにくい表現になる場合があります。自分にはその説明が理解できないから、「お前の言うことは聞くつもりがない」などとは言ってはいけません。その説明や見解がその分野の専門家に共有されるものであるのかどうか、他の専門家に質問してみることです。

そのような視点で、可能性を再度見直してみてください。そうすれば、可能性の組み合わせが大きな枝となってしまうのを防げます。

このように**「全ての項目をきちんと評価して」**、**「最適な選択を」**、**「それぞれの可能性を最大限に見積もって」**、**「誰にでも分かりやすく」**開発することを要求してはいけません。

　そのような注意をすることで、物事は扱いやすいものになります。
　あなたの関わっている開発が、成功につながりますように。


-----------------------------
###**「全ての項目をきちんと評価」するアプローチを求めてはいけない理由の追加**

- 「全ての項目をきちんと評価」を主張する人の大半は、コストに無自覚の場合がある。
 マネジャーが仕事を割り当てるときには、割り当てた作業に対するコスト意識を持つ必要がある。
　ばくぜんと「全ての項目」と言っているときには、必ず影響する項目、影響があるかもしれない項目、影響が無視できる項目はどれなのかを、それまでの知見を元に絞り込んでいるだろうか。

- 「全ての項目をきちんと評価」を主張する人の大半は、それまでの実験結果や理論的な枠組みを知ろうとしない場合がある。
　必ず影響する項目、影響があるかもしれない項目、影響が無視できる項目を知るためには、それまでの実験結果や理論的な枠組みの理解が必要になる。そのような理解を必要とせずに、「部下にきちんと対応させた」と主張するのに一番楽な表現は、「全ての項目をきちんと評価しなさい」という表現になる。


- 「全ての項目をきちんと評価」を主張する人の大半は、実験計画法を知らないことがある。
> 実験計画法（じっけんけいかくほう、英: Experimental design、Design of experiments）は、効率のよい実験方法を設計（デザイン）し、結果を適切に解析することを目的とする統計学の応用分野である。
ウィキペディア [実験計画法](https://ja.wikipedia.org/wiki/%E5%AE%9F%E9%A8%93%E8%A8%88%E7%94%BB%E6%B3%95)

実験計画法は、条件の組み合わせで、やみくもに条件が増えてしまうのを抑えて、効果的に実験を行うための手法です。5個の項目で各5段階の条件があると、`5**5=3125` 通りの条件を実験しなくてはならないとなるのを防ぐための手法です。

-----------------------------------------
###**「最適な選択を」求めてはいけない理由の追加**

「最適」ではなく「受け入れ十分な(acceptable)」を目指そう。
「最適」というと「何にとって最適なの？」、「誰にとって最適なの？」、「どういう状況での最適なの？」という疑問が浮かぶ。最適な顔検出ってなんでしょう？検出率が高いこと、どんな顔向きでも検出すること、夜間の暗がりでも検出できること、マスクをしていても、サングラスをしていても検出できること、ライブラリの実行速度が速いこと、LSIやFPGAで実行しやすいことなどなど。「最適」という言葉は、あいまいすぎて、何をしたいのかが明確ではありません。
　技術には何らかの利用目的があります。その利用目的に対して「受け入れ十分な(acceptable)」ものであるかどうかが重要であると私は考えます。自分の想定する利用分野に対して受け入れ十分な(acceptable)」ものであれば、役に立つのです。「受け入れ十分な(acceptable)」ものであれば、検出率が世界一でなくても利用価値はあります。


###**「それぞれの可能性を最大限に見積もって」するアプローチを求めてはいけない理由の追加**
　様々な手法があるなかで、1人の人間が改良できる可能性のある手法は１つと思っていいいでしょう。
「あの手法は、こう改良できるはず、その手法はこう改良できるはず」などというアイディアと検証能力を有り余る才能と時間とを持ち合わせている人はいるでしょうか。
開発は、有限の時間で有限のリソースで行うものですから、目的を実現するためにどの手法を用いて実現しようかと考えるときに、改良の可能性を考えるのは限られます。


-----------------------------
###**「誰にでも分かりやすく」するアプローチを求めてはいけない理由の追加**

「誰にでも分かりやすく」はできるにこしたことはないが、「知るべき人・知らせるべき人に分かりやすく」を目指すべきだ。
・理系の大学院生が、理系での常識とされることを知らない(おそらく文系学部出身の)採用担当者に自分の研究内容を説明するときにとても苦労していることは想像がつく。
　自分の研究をなぜ研究するのかの前提条件を説明しても、そのための前提条件を理解するための言葉を知ってもらえないだろう。「微分方程式」、「多変量解析」、「主成分分析」、「フィードバック制御」、「軌道計算」、「イオン化エネルギー」、状態や条件やベクトルなどの「直交」、近似計算の「ニュートン法」などなど。近年の文系の高校生・大学生は、学校や学部によって理系の知識に触れることなくなってしまう場合がある。そのために、理系の大学院生が、理系での常識とされることを知らない(おそらく文系学部出身の)採用担当者に自分の研究内容を説明するときに、相手が理解できる範囲の中でしかわかってもらえず、自分の研究の説明ではなくて、それ以前の状況の説明で、時間切れになったりしているのではなかろうかと心配する。
・また、理解しようとする動機が存在しない人に、説明して理解してもらうことは簡単ではない。
・「知るべき人・知らせるべき人に分かりやすく」ということで言うと、理系の大学院生が、理系での常識とされることを知らない(おそらく文系学部出身の)採用担当者は、「知らせるべき人」であることは間違いない。

開発をする場合には、その結果を「知るべき人・知らせるべき人に分かりやすく」することで、自分の開発を成功させることが目的であって、知らせるべき人は、開発に対して影響を持つ人や、一緒に開発をしている同僚です。


やみくもに、採用すべき技術を絞り込めずに、**「全ての項目をきちんと評価して」**、**「最適な選択を」**、**「それぞれの可能性を最大限に見積もって」**、**「誰にでも分かりやすく」**することを、目指す開発を要請されないように、この記事が役立てば幸いです。


### **可能性の枝切りが出来ないマネジメント**
可能性の枝切りができない理由の一因はマネジメントにあります。
何ができれば十分と言い切れない弱さにあります。
何かを判断する勇気がなく、「私は納得していない」と責任回避する余地を持ち続けたいというリーダーの弱さにあります。
新しい開発をする場合には、少数の人が自分たちの判断力を信じて物事を押し切る必要があります。
いくつかの革新的な技術は、少数の人によって開発されています。新しい言語の処理系の開発も、１人によって成し遂げられることが、その言語の誕生においては珍しいことではありません。AWK,Perl,Python,Rubyのうち、AWKが３名であって、他は１人によって開発されています。