アルゴリズムの表現
Algorithm Basicsアルゴリズムという学問を体験する
ここからは、アルゴリズム(問題を解決するための手順を、順序立てて明確に表したもの)という学問を、実際に手を動かしながら体験していきます。難しく身構える必要はありません。物事を細かく分解して、ひとつずつ順序立てて考えていくドリル練習だと思ってください。
体験には、Scratch(ブロックを組み合わせてプログラムを作れる、初心者向けのビジュアルプログラミング環境)というWebアプリを使います。Scratchのエディタページで、実際に手を動かしてブロックを組み合わせる体験は、講座の中でじっくり行います。パズルのピースを組み合わせる感覚で、機械に対して自分の思い通りの命令を出せるかどうかを試してみてください。
アルゴリズムの3要件
よいアルゴリズムには、次の3つの条件が求められます。
| 要件 | 内容 |
|---|---|
| ① 有限性(Finiteness) | 処理の回数が有限であること。無限ループに陥ることなく、必ず終了点に到達すること |
| ② 決定性(Definiteness) | 同一の入力に対して、誰が実行しても、どのような環境で実行しても、常に同一の出力を生成すること |
| ③ 一般性(Generality) | 特定の問題だけでなく、広範な問題群に対して適用可能であること |
①有限性は、処理が必ず終わることです。無限に繰り返され続ける手順は、問題を解決したとはいえません。②決定性は、同じ入力なら誰がやっても同じ結果になることです。手順にあいまいさがあってはいけません。この2つは、比較的イメージしやすい条件です。
③一般性を、パスタとソースで考える
一方で、③一般性は、具体的にイメージしにくいという声をよく聞きます。そこで、料理にたとえて考えてみましょう。パスタの作り方(茹でる手順)は、どんなパスタ料理でも基本的に同じです。けれども、そこに絡めるソースを差し替えるだけで、ミートソース、カルボナーラ、ペペロンチーノと、まったく違う料理が生まれます。
このように、同じ手順でも、一部を書き換えるだけで他の目的にも応用できることを、一般性といいます。一度作った手順を使い回せるということは、それだけ価値のあるアルゴリズムだということです。
自分はプログラミングをしないから関係ない、と思うかもしれません。しかし、アルゴリズム的な考え方は、社会人にとってもほとんど必須といえるほど重要な考え方です。手順を明確に、抜け漏れなく、誰が読んでも同じように実行できる形で示す力は、業務のオペレーションマニュアルを作るときにも、部下やメンバーへの指示の出し方にも、そのまま生きてきます。
ここからは、基礎の一歩先の話です。初心者の方は読み飛ばして構いません。でも、人に指示を出す立場にある方ほど「そうだったのか」となる話です。
「決定性」がない指示は、現場で事故を生む
「いい感じにやっておいて」という指示は、決定性を欠いた典型的な例です。指示を受けた人によって解釈が変わってしまい、同じ入力(同じ指示)から違う結果が生まれてしまいます。業務マニュアルや引き継ぎ資料を作るときに「誰が読んでも同じ手順にたどり着けるか」を意識するのは、まさにアルゴリズムの決定性を意識することと同じです。
「一般性」の高い手順ほど、資産として長生きする
パスタとソースの例のように、一部を差し替えるだけで応用できる手順は、作った後も長く使い続けられます。逆に、特定の状況にしか使えない手順は、状況が少し変わるたびに作り直す必要が出てきます。マニュアルや型を作るときには、「この手順は、少し条件が変わっても使い回せるか」を一度考えてみると、後々の手間がぐっと減ります。
教室のひとこま
最後に、このテーマを教えるとき、教室でよく交わされるやりとりを。
講師「プログラミングは自分に関係ない」という反応から、Scratchを実際に触ったあとに「これ、業務マニュアルの作り方そのものですね」という感想に変わる瞬間が、この回でいちばん見ていて嬉しい場面です。