仮説検証はdo-while?
なんてことをつぶやいてたら、せっかくなので何か思い立ったことを仕組みとして図式化できないかと思い、なんとなく表題のような内容に至りました。というか、今まさにそんな感じの仕事をしていたので、ちょいホットなネタだったってだけなんですけども。
えーと、「do-while」と言うのが何のことやらわからない人のために簡単に説明しておきますと、プログラミング言語における基礎制御文の中の1つで、多くのプログラミング言語で全く同じか、似たような制御文が実装されているものです。どんなことをするものなのか、簡単に説明すると
繰り返したい制御に対し、まず文を1度実行してから、継続判定を行う
制御文です。図にしてみましょう。
通常の繰り返し制御文(while)の場合、
while (条件式) {
繰り返し条件が成立している間実行させる文
}
このように、「繰り返し対象処理」を実行する前に、「進んでも良いか?」という問い合わせをするので、初回から条件を満たさなければ、一切処理しないまま、終了してしまいます。
けれども、do-whileの場合は、必ず1度目は実行します。
do
{
繰り返し条件が成立している間実行させる文;
} while (条件式);
となるわけです。
仮説検証は、仮説を立てた後、かならず1度「検証」という名の実行をおこないます。これをしないことには、仮説が
・正しいのか、誤っているのか
・どこが、どのくらい誤っているのか
・仮説を改めた方が良いのか
・続けた方が良いのか
と言った判断ができません。1度でも実行すると、評価することができ、評価の結果、継続可否や継続するための改善ポイントが見えてくるからです。実行しないことには、仮説は仮説のままで、机上の空論となってしまいます。図にしてみると…
こんなモデル図になりますが、先ほどまでと同じようにフロー化するなら…
こんな感じになるかと思います。いわゆる
(正の)スパイラル思考
と呼ばれる考え方に属します。一般的なビジネスにおいて、とても重要な考え方となる「仮説検証」ですが、ソフトウェア開発でもスパイラル型の開発手法(アメリカ軍のFuture Combat Systemsでも活用)は非常に効果的で、一般的に採用されている開発手法です。アジャイルも、突き詰めればスパイラル型を応用したものですしね。
100%設計工程を完成させてから、次の製造工程へ引き継ぐ…と言ったやり方ではなく、開発すべきテーマをいくつかの部分に分割し、プロトタイプを作成しながら、小さな部分を製造、テストしていき、最後に完成品に至るという手法のこと。
問題解決の思考法としても同様です。
ただ考えているだけでは何も解決しないので、仮説を立てたら、すぐに行動を起こします。そして、その後が重要です。やりっぱなしではなく、こまめにフィードバック(感想、指摘、気になった点、何でもいいから応答する)をします。フィードバックの結果、さらなる修正が必要になることもあれば、アクションを起こして初めて不便に気付くこともあるでしょう。当初考えていた"仮説"とまわりの状況が変わっている可能性もあります。
その時点で、新鮮な情報を入手し直し、次の仮説に反映させると、それをまた実行に移して検証することが可能になるのです。
プログラミングの世界では、do-while 文の利用はあまり歓迎されていない傾向がある(読めない人、読み難いという人が多いとかなんとか)のですが、個人的にはこの制御文が好きなんですよ。
私が新人の頃は、むしろ率先して使い、先輩に怒られて、何とか使わなくてもいいように書き直させられたりしてました。昨今はどうなんでしょうね。
でも、こうしてビジネスの本質的な部分と似通うところがあるなー…なんてことがわかってくると、「ちょっと受け入れてみようかな?」って感じしませんか?