来年から小学校でプログラミング教育なる必修科目が始まるらしい。プログラミング教育といっても、パソコンでコードを書いてプログラムを動かすようないわゆる一般の人が想像するプログラミングを学ぶのではなく、パソコンやタブレットなどの機器を通じて論理的思考を身につけるという教科らしい。
私には子供がいないが、子供たちがどんなことを学ぶのか興味があるので、どんな学習をするのか調べてみた。
その中にひとつ、素晴らしいと思う学習計画のサンプルがあった。東京都杉並区の西田小学校で行われている正多角形を描くプログラミング教育だ。
【プログラミング教育ポータル】正多角形をプログラムを使ってかこう(杉並区立西田小学校)
Scratchというブラウザ上で動作するアプリケーションで、猫のキャラクタを動かして正多角形を描くようにする。プログラミングとはいうものの、やることはオブジェクトの組み合わせだ。
まず線を描くためにペンを下ろす。次に猫を80歩まっすぐ動かして80歩分の線を引く。続いて内角が60度になるように猫を120度回す。それを線を引いて回転させるのを3回繰り返せば正三角形を描くことができる。
この教育では、まず算数の時間に習う正多角形の理解が必要だ。それが理解できないと話にならないが、完全に理解していないくても、プログラミングによって理解が進むかも知れない。
また、このプログラミングによってオブジェクト指向という考え方を学ぶことになる。繰り返しの動作がある場合、「猫を指定歩数だけまっすぐ進める」とか「猫を指定角度で回転させる」というオブジェクトを用意しておけば、それを繰り返し呼ぶことで効率のいいプログラムになる。正三角形を描くのに、80歩進める→120度回転→80歩進める→120度回転→80歩進めるとするのはいかにも効率が悪いことは誰にでも分かる。
この正三角形を描く学習をもう少し掘り下げると、正多角形を描くプログラムがもっとよくなる。
多角形の内角の和は、n角形だとして180×(n-2)度と決まっている。例えば、六角形は180×(6-2)で720度になる。三角形の内角の和は180度であるが、n角形はその三角形がn-2個で構成されるからだ。
正n角形では猫の回転は180-180×(n-2)÷n度すればいいことになる。正六角形では180-180×(6-2)÷6=60度だ。
猫がスタート地点に戻ってくれば終了するというオブジェクトを用意できれば、決まった繰り返しの回数をプログラム内で指示せずとも、始めに正何角形を描くか質問して入力させることで、猫を回転させる角度を自動で計算して描くことができる。線を引き、回すことを永遠にループさせ、スター地点に戻れば抜ければいい。
まあそうしなくても、正n角形を描くnを与えるということは、猫に線をn回引かせるわけで、単にn回繰り返しとしてもいい。
nを与えて正多角形を描くプログラムでも、それにはいろいろな方法があるわけだ。
ただこの場合、n角形のnを不適切な値にすると問題が出る。スタート地点に戻るまで永遠にループするプログラムだった場合、例えばnを7にすると内角が割り切れないためにスタート地点に戻ってこられず、永久にループすることになる。7回繰り返すようにしていても、スタート地点に戻って来ないので閉じられた多角形にならない。
だからプログラミングでは、不正な処理が行われないように例外の処理を追加する必要がある。正多角形にできないnを与えるとエラー表示する。あるいは与えられてしまっても、永久にループする処理にしないようにする。そんな処理だ。
内角の公式を考えると、180が割り切れない数値を与えると問題が出ることが分かる。小数点の端数が出ても割り切れるのであれば、プログラムの作り方によってはnが16でも問題ないし、もっと大きい数字にもできる。
杉並区立西田小学校の学習では、これから円周率の学習へと発展させているようだ。円周率は直径1の円に外接する正多角形と内接する正多角形のそれぞれの外周の長さと円周の長さから求められる。多角形を増やすことで円周率の数値の範囲をどんどん狭めていくことができる。
小5の授業でそこまでやるとは思えないが、そこまで理解できる賢い子供もいるだろう。
ゆとり教育の時代、円周率を3にして問題視されたことがあった。子供に手で計算させるときのみ用いられた数値であるようだが、そうだとしても、学習指導要領に合わせるためなら円周や円の面積が大体の数字で求められたらいいとするヤツの考えなのだろう。こうやって円周率を求める考え方を知れば、3で問題があることが誰でも分かる。
プログラミング教育では、論理的思考の基礎が身につくほか、効率化のためのオブジェクト指向も身につくし、エラー発生を見越しての例外処理の考え方も身につく。算数や理科の知識の補完にもなるし、子供たちも楽しく学習できるだろう。とてもいい科目だと思う。
子供にプログラミング教育など不要だと主張する化石みたいな人もいるだろうが、今の世の中、この程度の基礎的な考え方は身につけておいて損はないと思う。すべての教員がそれを教えるレベルに達しているかは知らないが、教育内容の選び方次第ですごく役に立つと思う。
この世の中には、論理的思考ができず、不合理なことばかりしている人がいる。世の中の事象すべてが論理的で合理的でならないことはないが、感情でしかものを言えない人や、理屈を理解せずに何となく結果オーライでよしとする人はただのバカであって、その人が損をするばかりか、社会的にも不利益を被ることになる。
プログラミング教育は将来のIT技術者の養成のみならず、人が行きていくうえで何らかの役に立つと思う。関西で道徳の時間に被差別部落の歴史なんぞを学ぶ方がよほど役に立たない。
時代に合わせて学校教育を変えていくことは何も悪くないし、むしろ歓迎すべきことに思える。小学校の授業で英語が行われることについて「国語もちゃんとできないのに英語なんてとんでもない」とか「日本の英語教育では意味がない」という意見があるが、私はいいと思っている。英語教育のやり方には改善すべき点があるだろうが、英語はどう考えても必須だ。必須ではない仕事の人もいるだろうが、私のプログラマとして仕事では英語の規格書や参考図書を読んだり、英語のコミュニティで情報を集めたりする必要がある。話せなくても読んだり書いたりする必要はめちゃくちゃある。そんな職種はこれからもっと増えていくことだろう。
英語教育と同様にプログラミング教育もやっていいと思う。「やらなくていい」という人は自分の仕事に必要ないだけで、必要な仕事のことを理解していないだけに思える。
島田紳助がテレビでこんなことを言っていた。
紳助は子供の頃、母親に対して「勉強して何になるのか」と反抗していた。自分が親になると、娘たちは親に言われずとも自分から勉強していたので紳助が「勉強して何になるのか」と尋ねたところ、娘が「人生の選択肢が増えるから」と答え、目からウロコが落ちたという。
また、紳助は京大を卒業しながらマッサージ師をしている女性の「1万円の小遣いで300円のものを買ってもいい。でも1000円では2000円のものは買えない」という発言も紹介していた。
勉強して将来の選択肢をいろいろ増やし、その中から好きな職業を選べばいい。自身のキャパシティを増やして悪いことなど何もない。
今の仕事は昔とまるで変わっている。だからプログラムも英語も必要で、子供の時分から習っておけばいい。それを使う仕事に就くかどうかは本人次第。ただそれだけの話であり、その機会を子供に用意してやるのは大人の責務である。