プログラミング必修化って言うけれど
小学校でプログラミングが必修化になるみたい。Facebookでも同じネタを簡単に書いたけど、こちらでもご紹介。
プログラミング必修化、ICTの学習活用最下位の日本はどうすべきか?
昨年12月21日、2020年から順次適応される次期学習指導要領に答申が出され、間もなく正式な学習指導要領が告示される。小学校でプログラミング教育が開始され中高においても強化される。2月6日開催された次期学習指導要領とプログラミング教育に関するセミナーをレポートする。
非常につたないプログラムだけど、仕事でプログラムを書くこともあるので、ちょっとこの記事を見たときに、「嘘でしょ?」って感想を持った。かつて仕事で小中学校に出入りをした経験もあって、今の教職員で、こうしたスキル(というか思考)を持った人間がいないと感じたからだ。
プログラミングには正解などない。ちゃんと動けば問題ないし、その中でコードが美しいとか、シンプルとか、見やすいとか、早いとか、そういう基準で「よりよい」:コードがあるだけだからだ。
例えば、1から100までの数の和を計算させるコードを書いたとしよう。(PHPですけど・・・)
その1・・・力技
1 2 |
$result = 1 + 2 + 3 + ・・・・・ + 99 + 100; echo $result; |
面倒だけど、ひたすら1~100までの数を足しあわせる処理を書く方法。もちろん、シンプルだけど、正解。ちゃんと答えが出ます。でも、数の範囲が変わると使えなくなる難点も・・・。
その2・・・正攻法
1 2 3 4 5 6 7 8 9 |
$i = 1; $j = 100; $result = 0; for ($count = $i,$count < $j,$count++){ $result = $result + $count; } echo $result; |
正統派のループ処理
その3・・・頭使った方法
1 2 3 4 5 6 |
$i = 1; $j = 100; $result = ($i + $j) * ($j - $i + 1) / 2; echo $result; |
簡単にこの3タイプにされると思う。
その1は数字の範囲が変わるとその都度修正が必要になる。これだと条件を変えながら何百回も計算させる時にはとても面面倒。だけど、コード的には一番シンプルだ。
その2は教科書的に言えば、最も正解に近い。今回はforだけど、whileで回してもいい。
その3は、教科書的ではないけども、正解を導き出せる方法だ。
学校の先生はどう採点するのだろうか?どれも正解だ。ただし、現場レベルからいえば、一番「正解」と思われるのは3の方法だろう。仮に数が1~100万までの和だろうが、もっと大きくなろうが、計算のスピードが速いからだ。ループさせる方法だと、数が大きくなればなるほど、ループの回数も増える。ループの回数が増えれば増えるほど、処理に要する時間が長くなる。だから、CPUリソースの面でお勧めできる方法ではない。
だから、3の方法は、どのような変数に修正しても、計算はたった1行分。数が増えても、処理時間の増加はごくわずかだ。プログラミングはケースバイケースで「ベスト」な解答が変わるのだ。
これは、現場でもプログラムを書く人が100人いたら、100通りのやり方があるはずだ。今の学校教育では、この「100通りのやり方を認める」方向では話が進んでいるのだが、その100通りのやり方を評価できる先生がどれだけいることか。
それは、自分の小学校の時の思い出も書きたいので、また次回に。