生産性を高めるために必要なのはシンプルな思考力です

シェアする

clip_image001

昔々新人研修でプログラミングを教える際に、ボーリングのスコアを計算する例を良く使いました。最終フレームだけ特別なように思えるのですが、ある視点でみると実はシンプルだということに気付いてもらうのが狙いでした。(ボーリングのスコアの計算方法を知らない人には申し訳ありません)

スポンサーリンク

最終フレームに関係なくボーリングのスコア計算はひとつのパターンしかない

ボーリングのスコア計算はフレームごとに計算した点数を累積します。フレームごとに2投の機会があり、1投目および2投目の結果でフレームの点数を計算します。しかしフレームの結果によって点数が先のフレームへ持ち越しされるため、投球結果によって点数が違ってきます。基本的に1フレーム最大2投ですが最終フレームのみ最大3投まで可能になっています。最終フレーム(ゲーム終了)はストライク3連続、ストライク2連続に10本未満、ストライク1とスペア、ストライク1とミス、スペアとストライク、スペアと10本未満、ミスで3投目なし、と大きく分けて7パターン存在します。こうしてみると最終フレームだけ特殊なように見えます。

この例題を試す場合、最終フレームについて特別な支持は出さず自由に取り組ませます。但しできるかぎり処理を部品化させることだけ指示します。部品化とはひとつのプログラムの中にすべての処理を入れるのではなく、特定の目的だけに限定し必要な時に呼び出して使える独立した小さいプログラムのことです。部品化する目的を正しく理解できると最終フレームがワンパターンであることに気付くことができます。

プログラミング経験のない人は、スコア計算に何の疑問も持たずスコア用紙の見た目そのまま設計するため、計算式を1~9フレーム用と最終フレーム用に分け、最終フレームだけ7通りの計算式を用意してゲーム終了の判定を行うという複雑な構造のプログラムを作ります。しかも複雑な構造のプログラムはテストもトライ&エラーの連続で膨大な時間と労力を消費します。

一方でスコア計算を部品化するために分解整理すると、実はどのフレームも同じ計算であることが理解でき、ゲームの終了も最終フレームを意識することなく10回目のスコアが出た時点で終了という実にシンプルなルールになっていることがわかります。つまり計算ルールを「知っている」と「理解している」の違いがプログラムの構造に現れます。

シンプルに考える思考が身に着くと仕事やプログラミングだけではなく、実生活にもいろいろと役に立つことがたくさんあります。例えば要領の悪い人や無駄が多い人が見抜けるようになります。質の悪い仕事で高額請求しようとする業者も見抜けるようになります。日常生活レベルで付き合う分にはあまり影響ないですが、仕事や何か発展的な作業をする相手としては避けたいものです。

仕事ができる人はシンプルに考えられる人です