プログラム授業必修化 その3

プログラム授業必修化3部作の最終記事です。

その1では学校でのプログラム授業について

その2ではパソコン教室でのプログラム授業について

それぞれ私見を述べさせて頂きました。他者批判に思われると困りますが私はプログラムの必修化に反対している訳でもなければ、他のスクールのやり方や業者を否定する訳ではありません。むしろその1の最初で述べているようにプログラムを小学生から習わせることについては大賛成です。

では、プログラムの授業をどのように行うことができれば良いでしょうか?

まずはプログラムを学習する意義をどこに求めるかが大事です。将来すべての人がプログラムを書くエンジニアのようなことをしないといけない時代が来ると思いますか?恐らくそのようにはなりません。むしろ定型化された処理はコンピュータ自身がプログラムを組み替えてより高度なプログラムを組む自動化の方向に進むでしょう。

では、なぜプログラムを全員が学ぶ必要があるのでしょう?結論から書きましょう。

アルゴリズムをプログラム化することが必要だからです。

アルゴリズムとは決まった手順のことです。例えば1~10の数字が書かれたカードがあったとしましょう。カードはバラバラの順番になっています。これを「1~10まで正しい順番に並べ替えてください。」と言われたらどうしますか?

カードの中で一番小さい1を探してテーブルに置きます。手元には9枚のカードが残ります。今度は手元の9枚のうちにある2を探してテーブルの1の上に重ねます。これを繰り返せば1~10まで正しい順番に並べ替えることができます。

これは幼稚園に通う私の下の子がやっても、私がやっても、そしてこのブログをお読み頂いているあなたがやっても同じ結果になります。この同じ手順に従えば同じ結果が得られることをアルゴリズムと呼ぶ訳です。

上記のやり方を専門用語では「基本選択法」(選択ソート、最小値法)と呼びます。

では、並べ替え方は上記の方法しかないでしょうか?

例えばテーブルにカードを置けない状況で考えてみましょう。一番上のカードを右手に持ち、残りのカードを左手に持ちます。右手のカードと左手のカードを比べて右手のカードが小さければ左右のカードを交換します。そして左手の一番上のカードを右手に移し左手に8枚、右手に2枚カードを持ちます。同じように比較して繰り返して行くと45回以内にカードは順番に揃うことになります。

この方法は「基本交換法」(隣接置換法、バブルソート)と呼ばれる方法です。基本選択法とは異なるアルゴリズムですが、結果は同じです。

他にも「基本挿入法」、「改良挿入法」(シェルソート)、「クイックソート」「ヒープソート」など並べ替えには様々なアルゴリズムが存在します。

少しややこしくなって来たので話しを整理しましょう。

例えば大阪に行くという目的があったとします。自家用車、バス、電車、新幹線、フェリー、飛行機、その気になれば徒歩でも行けますし大金持ちなら自家用ジェットなんて選択もあるかもしれません。どのような経路を使っても大阪に行くという目的は達成できます。

先ほどのカードの例に戻りましょう。カードを並べ替えるという目的を達成するためにはいろいろなアルゴリズムがありました。どれでも達成が可能です。その中からプログラムの複雑さや結果に到達するまでの速さなどを比較検討してもっとも最適なアルゴリズムを採用する必要があります。そう、私は自家用ジェットで大阪に行く事はできませんし、歩きで行くのは嫌です。家族で行くなら自家用車、一人でならば新幹線が良い選択ですかね?

そうです。プログラムの学習を通して様々なやり方(アルゴリズム)を比較、検討し最適な方法を選択し実行する能力を高める。これをプログラム学習の中心にするべきだと思います。

そう、先生の言うとおりにアイテムを並べ替えて同じ結果を出したり、ロボット(というよりもラジコンですかね?)の手足を動かしたりするのはプログラム学習の本質ではないと思う訳です。

確かにロボットに「右手を動かせ」という命令を出して右手が動けば、なんとなくプログラムっぽい感じはします。でも、リモコンでテレビを操作するのと何が違うんでしょう?チャンネルをNHKに合わせたのにTBSが映ったらテレビかリモコンが故障です。正しい命令を出せばその動きをするというのはコンピュータそしてプログラムの基本です。

「右手を動かせ」という命令に反応して右手が動くのは当たり前なんです。そういう仕組みなんですから・・・

でも多くの保護者は自分の子供がロボットのプログラムを組んだと喜ぶ訳です。その実はリモコンでテレビを操作するのと大差はないのにです。

ただのカードの並べ替えでは小学生が興味を持たない?そうでしょうか?派手にアニメーションしたり、音が鳴ったり、実際にロボットが動かないとプログラムに興味を持ってくれないでしょうか?

基本交換法については前述しました。別名をバブルソートと呼びます。バブルソートの名前の由来をご存知でしょうか?

あまり格好の良いプログラムソースではありませんが、5分くらいでちゃちゃっと書いたのでご勘弁ください。

A列にある1~20の数字を基本交換法で並べ替えてます。数字の1が下から泡ぶくが上るように上がって来るように見えませんか?そうこの泡ぶくに見えるのがバブルソートと呼ばれる理由です。

プログラムの動きを少し可視化したり、自分で考えたロジックを実行したりすることで成功したり失敗したりの繰り返しの中から正しいアルゴリズムを選択する力を養う。

これはプログラマ、SEに必須の条件ですが、その他の生きるための知恵として必要だと思いませんか?私は大阪に行くのに自家用ジェットが買えないからと諦めたり、何日もかけて歩いて行くのはごめんです。自分に合った方法を選択する力をプログラムを学ぶ事で得られるとすれば有意義な学習となると思います。

コメント

  1. […] プログラム授業必修化 その3 […]