【前編】小学校で習うプログラミング的思考。
小学校のカリキュラムに「プログラミング」が導入されてから久しいですが、てっきりそういう授業があるのかと思いきや違いました(そういう学校もあるかもしれんけど)算数や社会などの授業の中で、プログラミングを取り入れ、プログラミング的思考を培う、とそういうことらしいですね。
プログラムもプログラミング的思考も触ったことのない親が「たぶん将来安泰だから」というだけで子供にプログラミング習わすのって結構危険な思考なんじゃないかな、とプログラマとしては思うので、まずはプログラムってなんなのか。小学校で習うプログラミング的思考ってなんなのか。を私なりに噛み砕いて書いてみました。
とはいえ学校によってカリキュラムの扱い方は異なるし、取り入れ方も解釈の仕方も変わると思います。現役プログラマが(いやほんとは現役じゃないけど)文科省の資料とかプログラミング的思考をうたうサイトを眺めながらなんとなくまとめたものです。小学校の授業を実際受けてるわけじゃないので、責任は取りません(笑)
予備知識のない人が、大体こんなもんじゃないかなってわかる程度のことが書いてあると思ってください。
前編ではプログラミング的思考について
後編ではその必要性について私の意見をつらつら書いていこうと思います。よろしくお願いします(?)
プログラミングとは。
プログラミングとは、英単語を使った数式だと思ってください。
プログラミングで使用する数式は難しくはありません。このxやyの名前をユニークなものにする必要があります。そのために英単語を使います。
また、数式(英単語を用いた式)も四則演算だけではなく、プログラミング言語によって様々な式が存在します。これがプログラミングの基本です。
動くプログラムを書くこと自体は難しくありませんが、自分だけが読めるプログラムを書いたところで他の誰にもメンテナンスできません。プログラムは書くことよりも、他人の書いたプログラムを読むことの方が何倍も労力を使います。そして、他人にも読めるプログラムを書かなければ仕事で使うことはできません。
では、どうやって他人に読めるプログラムを書くのでしょうか。これに必要なのが、プログラミング的思考です。
プログラミング的思考とは。
プログラミングを仕事にする上で重要なのは「書く速度」と「可読性」です。この二つは書き続けることによって身についてくるものではありますが、特に可読性については、自分の書いたプログラムを他人にチェックをしてもらう経験値が必要になります。
その経験値で身につけていくのが「プログラミング的思考」です。この思考を先に身につけておけば、仕事で使えるプログラムの理解度は速くなるでしょう。
一般的にプログラミング的思考には5つの要素があります。「カレーを作る」という作業をプログラミングする際、どう切り分けて考えるのかを例にまとめてみました。
◾️分解
目的までの作業を細かく分解します。例えば、「カレーを作る」が目的だったとした場合
という作業に分けることができます。数式一行で書くと複雑化しあとからメンテナンスが大変になります。数式は短く分かりやすく書き、あとから手を入れやすくするのです。
◾️順序立てる
プログラムというのは、基本的には上から書いたものが順番に実行されます(もちろん書き方によって例外もあります)
先程分解した数式を、今度は順番通りに並べる必要があります。
◾️抽象化
先程の分解と順序をもとに「カレーを作る」という性質を考えてみます。
つまり、カレーをカレーにしているのはカレールーですね。このカレールーを他のものに置き換えると他の料理になるわけです。
◾️一般化
先程抽象化した性質を利用すると、途中まで他の料理に使えないでしょうか。
この作業までを数式化し【野菜スープ】という名前をつけます(レシピが乱暴なのは許してね)
など、共通部分を数式化し、それを他のプログラムからも呼び出せるように書くことによってシンプルで可読性の高いプログラムが完成します。
◾️シミュレーションする
今の一連の作業をまとめるとこうなります。
※一行に入り切らないので、コンソメスープは割愛しました(同じなので)
カレーとシチューそれぞれに「野菜を切る」「野菜を煮る」という作業を書くより、それだけ抜き出して数式化する方がすっきりと読みやすいプログラムになりますね。効率化して読みやすく短いコードが可読性の高いプログラムといえます。
頭のなかで可読性の高いプログラムをまとめるのがシュミレートです。
プログラミング的思考を学ぶ狙い
文科省推奨というか、5つの要素から構築するのが一般的なので、噛み砕いて書いてみましたがいかがだったでしょうか。
私は書いてて大変分かりにくかったです。てか、抽象化とシュミレートいらなくない?頭のなかでわざわざ考えなくても書いた方が早くない?
これを小学校のうちに理解しておくことによって、今後ITリテラシーが培われ、どんどん発展するデジダルに対する概念がブラックボックスにならなくなる。敷いてはこの思考を基にもっと周りを便利にしたいという気持ちが働くのではないかというのが文科省さんの狙いなんだそうです。
プログラマ側としては色々思うところがあるんですけど、それはまた別の話なので、後編へ(こっちがほんとは書きたかったんだい)