「小学校でプログラミングが必修化」ってどういうこと?
はじめに
前回のコラムで、小学校におけるプログラミング教育の狙いの1つに「プログラミング的思考を育むこと」というのがありました。
プログラミングが必修化されるタイミングで、この「プログラミング的思考」という言葉をよく耳にするようになったと思います。
ところで、「プログラミング的思考」とは、一体どういうものなのでしょう?また、そもそも「プログラミング」って何なのでしょう?
今日はそのあたりについてお話してみようと思います。
「プログラミング」とは?
私たちは普段から、「コンピュータ」を使った製品をたくさん使っています。パソコンやスマートフォン、タブレット端末はもちろん、スマートウォッチにスマートスピーカー、テレビやカーナビ、最近では電子レンジや冷蔵庫にもコンピュータが組み込まれています。
コンピュータは私たちが「やりたいこと」や「知りたいこと」「便利な使い方」のをする手助けをしてくれます。
様々な製品に組み込まれたコンピュータは、そうした手助けを「勝手に」し始めたわけではありません。メーカーの人たちが、使う人の役に立つような仕事をコンピュータに「させている」はずです。
この「コンピュータに何か仕事をさせる」のに必要なのが「プログラミング」です。
このボタンが押されたら画面にこう表示しなさい、目的地が設定されたら現在位置から目的地までの最短ルートを検索しなさい、といった具合に、コンピュータに「命令」しているわけです。
コンピュータに何かをしてもらうための「命令」のあつまりのことを「プログラム」と呼び、そのプログラムを作ることを「プログラミング」と呼んでいます。
「プログラミング的思考」とは?
プログラムを作る、つまりプログラミングをする際には、その目的(何をさせたいのか?)を明確にし、目的達成の手段(どうやってそれを実現するのか、どういう順番で何をさせたらいいか)を考える必要があります。
この考え方が「プログラミング的思考」です。
「プログラミング的思考」と聞くと、「プログラミングをしない人には関係ないもの?」と思うかもしれません。しかし実は、みなさんも普段の生活の中で、この「プログラミング思考」を使っていますし、それが上手な人とそうでない人がいます。
プログラミングをしていない人がプログラミング的思考をしている、と聞いてもピンとこないと思います。これは「プログラミング的思考」という表現が、あとから出来たもので、もともとは「論理的思考」と呼ばれていたものとほぼ同じなのです(厳密にはプログラミング的思考と論理的思考には少し違いがあるのですが、ここではその説明は割愛します)。
「プログラミング的思考」の例
たとえば、今日の夕食にカレーライスを作ろう、と決めたとします(目的)。この目的を達成するために、みなさんはどうしますか?
多くの人が
- いまある材料を確認し、足りない材料を買いに行く
- じゃがいも、玉ねぎ、にんじんなどの材料の皮をむき、カレーライスに合ったサイズに切る
- 肉も適当なサイズに切って準備しておく
- 鍋に油と野菜を入れ、野菜が柔らかくなるまで炒める
- 肉を入れて、だいたい火が通るまで炒める
- 水を入れて沸騰させ、具材が柔らかくなるまで煮込む
- いったん火を止めて、カレーのルーを割り入れてかき混ぜる
- 再び火をつけ、とろみがつくまで中火で煮込む
という手順を踏むと思います。
・・・おっと大変!ご飯をセットするのを忘れていましたね!!食べられるのはもう少し後になりそうです・・・
この「目的(カレーライスを作る)」を達成するために、何をどのような順序で行うか、を考えること。これこそが「プログラミング的思考」なのです。
「手順」とか「段取り」を組み立てる、と言い換えることもできます。これが上手な人なら、きっと野菜を切り始める前にお米を洗って、炊飯器にセットしていたことでしょう。
「プログラミング」が「プログラミング的思考」を育てる
パソコンを使ってプログラミングをする際にも、同じように「手順」を考えることになります。
たとえばインベーダーゲームのように、弾を発射して敵を倒すゲームを作りたい、とします。
このゲームを作るためにはまず「自分の飛行機」「敵」「弾」が必要ですね。「敵」はこういうふうに動くようにしよう。そのためにはこの命令とこの命令を組み合わせて、動くようにしよう、と考えます。「自分の飛行機」は自分で操作したときに左右に移動できるようにしたいですね。そのため、左向きのキーが押されたらこの命令を実行するようにしよう、右向きのときはこうで・・・と考えます。弾はどうやって作ろう・・・?と、1つ1つのキャラクターを、どの命令を使って何をさせるか、を作っていくことになります。
目的を達成するために必要な要素を洗い出し、1つ1つをどう動かすかの手順を考える、これがプログラミングです。
さきほど「カレーライス」の作り方を例に挙げました。ご飯をセットするのを忘れて、食べるのが遅くなってしまいましたね。この失敗を踏まえて、次に作るときは、野菜を切る前にご飯をセットしよう、と考えると思います。・・・しかし次に作るのはいつでしょう?早くて明日?でも明日もカレーじゃ家族から不満が出そうですね。来週?来月??そうこうしているうちに次に作るときは、またおなじ失敗をしてしまうかもしれません。
パソコンを使ってプログラミングをする場合はどうでしょう?作ってみたけど敵のキャラの動きがおかしい、思ったとおりに動いていない。どこが間違っているんだろう?プログラムを見直します。ここの命令の順番がおかしい?じゃあ早速直して試してみましょう。もう一度動かして・・・今度は思い通りに動きました。弾の動きもちょっと思ってたのと違うな・・・じゃあここを見直して・・・と言った具合に、短い時間の間に何度も見直して試してみることができます。
作るものを計画し、作成し、うまくいくかを確認し、間違っていたら直す。このサイクルを、短い時間で何度も回すことができますね。
この、「うまくいかなかった部分の原因を考えて、修正して、試してみる」というサイクルをたくさん行うことで「考える」トレーニングができる、というわけです。
失敗した原因を「考えて」、直し方を「考えて」、うまくいったか「確認して」を短い時間で何度も何度も試すことができる、これがプログラミングで「プログラミング的思考」を育てる、ということなのです。
おわりに
今回は、「プログラミング的思考」がどういうものなのか、実はふだんの生活にも大きく関わりがあるんですよ、というお話をしました。
プログラミングを学ぶことが、コンピュータやゲーム制作という枠からとびだして、生活に役立つ「チカラ」になると私は信じています。
次回はすこし話題を変えて、いま高校の授業に導入され、大学入試にも入ってくる「情報1」についてお話しようと思います。