もう随分と以前。私がサラリーマン生活を始めた当初の話。プログラミングの練習で「乱数」による抽選プログラムを作ったことがある。乱数のロジックは既に汎用の関数として用意されているので、その関数を呼び出して、関数により返された数字を取り出して、それを表示させる。(ただ、そのときの関数は、0から1の範囲で、指定した桁数の少数での数字を返すものだったので、これに対象となる数字の母数を掛けた値が求める出力すべき数字となる)
さらにこのロジックを応用して、ビンゴカードをデジタルで表示させるプログラムなども作った。乱数を表示させるだけのことなら容易い。ただ、ビンゴカードの場合は最低でも24回乱数を発生させて、1度出た数字を再度取り出すことはしない。列ごとに数字の範囲も決まっている。列ごとの数字の範囲から1度出た目を次の抽選候補から外す方法もあるが、数字が重複した場合には、新たに重複しない数字が出るまで抽選を繰り返す方がロジック的には簡単で作りやすかった。
小学校でプログラミングの授業というのが今年度から始まるようだが、実際のプログラムがうまく動くかどうかよりも、そこにたどり着くためのロジック(プログラミング的思考:論理的思考力)が重要視されるようだ。将来のプログラマーを育成するわけでもなかろう。もしそうなら、先生が大変だ。そして、思考する力を身に付けるとともに、その多様性を認め合えるようにすることも重要。実際には正常に動かないプログラムは無価値だが、教育の場では、途中までの状態でもその過程を評価して欲しいし、実際にそのプログラムが正しく動かないなら、その原因や対処方法を探ることも大切な勉強になる。
もちろん、同じ結果にたどりつくとしても、ロジックやプログラムの優劣はある。高度な思考により、コンピュータの負荷が小さく、処理時間が短い方が良いプログラムと一般的には思われるが、それはプロのプログラマーになって考えれば良いこと。正直これには、経験とセンスが欠かせないから。逆に多少処理時間が余計に掛かったとしても(ほぼ体感の差はないはず)、実際に正しく動くプログラムをまずは短時間で作り上げるような子どもに、私なら高評価を与えたい。
(秀)