こんにちは。「ダイエットをしよう!」と言いながら、中華炒め大盛りご飯小ラーメンセットを食べたさばとです。
この記事では「プログラミング的思考」がどういうことなのかを具体的なプロセスに分解して解説します。前回の私の記事でプログラミングについて解説していますが、そちらを深掘りしたものになります。そちらも合わせてご覧いただけると幸いです。-> プログラミングとは……? IT KiDS講師が徹底解説!
プログラミング的思考とは以下の2つの変換プロセスを行うための論理的思考であると考察しています。
- 厳密言及の変換
- 論理的変換
今回は「プログラミング的思考」に関しての記事です。色々な場面で「プログラミング的思考」という言葉を聞く機会があるかと思います。
ですが、そんな「プログラミング的思考」とは何なのだろう? 生徒たちが躓くプロセスは一体どこなのだろう? という問題提起のもと、同僚と「プログラミング的思考」について語り合いました。
もちろん、これは私とその同僚が勝手に考えていることですので、あくまで仮説の一つ、一考察として見ていただければと思います。
プログラミング的思考
2020年の小学校におけるプログラミング教育の必修化に伴い、「プログラミング的思考」という言葉を巷で聞く機会が増えたと思います。プログラミング「「的」」思考ってなんぞや、と当時思ったのを覚えています。
なぜ「的」という言葉がつくのか。その答えはきっとプログラミング以外の処理を含んでいるからに他ならないと思います。
プログラミングにおける思考の分解
そこで普段プログラミングをするときにどのように考えているかを書き出してみることにしました。
例えば、以下のようなコーディングを考えましょう。
わかりやすいのでScratchによる例を考えてみましょう。
猫のキャラクターが左から右に向かって進み、画面右側で止まる
https://scratch.mit.edu/projects/1021401176/
↑にアクセスして緑色の旗を押すとプレビューを見ることができます。
この左から右に向かって進み、画面右側で止まる、というのは以下のようなプログラムを書いています。
ではこのプログラムはどのような思考で書いたのか。それを分解して考えてみました。
厳密言及の変換
まず最初に行ったのは、厳密言及の変換です。これは曖昧な説明文をプログラムに落とし込めるような形で自然言語のまま変換するプロセスです。
猫のキャラクターが左から右に向かって進み、画面右側で止まる
これを厳密言及の変換を行った上で書き直してみましょう。
猫のキャラクターは最初に画面上左(X座標-180の位置)にいる。猫のキャラクターは画面上右(X座標180の位置)になるまでX座標を10ずつ増やす(進む)。
プログラミングっぽくなってきましたね。ここで重要なのは「画面右側で止まる」という部分に該当する部分がなくなっていることです。
止まるということを進まないという形で言い換えています。すなわち、進むという命令を実行しない、ということです。
論理的変換
次に論理的変換を行います。これは自然言語のまま行う命令単位で分解する作業です。
1. スタート
2. 猫のキャラクターのX座標を-180にする
3. 猫のキャラクターのX座標が180より大きくなるまで以下を繰り返す
a. 猫のキャラクターのX座標を10増やす
これを行うのが論理的変換です。これを行うことで命令単位で指示をリスト化することができます。
コーディング
ここまでくれば一つ一つの命令を実際の言語に落とし込むことができます。
この3つの作業をプログラマーは行っているのです。
プログラミング的思考とは
ここで、プログラミング「的」と呼ばれるわけを考察していきます。本当はプログラミングではないのだけれど、プログラミングを行うときに行っている考え方がプログラミング的思考なのだと考えます。
この3つのプロセスにおいては厳密言及の変換と論理的変換のことです。
この2つの変換はプログラミングでなくても使用することができます。
料理の例 卵かけご飯
卵かけご飯を作ることを考えましょう。
生卵を割り、しょうゆ少々を加えてよくかき混ぜたものを熱々のご飯にかけてすぐに混ぜ合わせて食べます。
ChatGPTで生成
あえて一行で生成してみました。ですが、これを作ることはできますよね。人間は複雑なことでなければ厳密言及の変換も論理的変換も行なわずとも目的を達成することができます。
ですが、複雑な内容(例えば、あるプロジェクトを成功させる、など)を行う際には当然その行動は様々な解釈が生まれることとなります。
そこで厳密言及の変換と論理的変換を行うことでよりその作業を画一化することができます。
厳密言及の変換
では厳密言及の変換をしていきましょう。
熱々のご飯、卵1つ、醤油、茶碗は用意されているものとします。
茶碗に熱々のご飯を盛ります。そこに卵を割りご飯にかけ、ご飯と卵を混ぜ合わせます。その後、醤油を10ccかけ、軽くかき混ぜます。
より全く同じものができそうですね。
論理的変換
1. 以下の材料を用意する
a. 熱々のご飯
b. 卵1つ
c. 醤油
d. 茶碗
2. 茶碗に熱々のご飯を盛る
3. 卵を割る
4. ご飯の上に落とす
5. ご飯と卵を撹拌する
6. 醤油を10ccかける
7. ご飯と卵と醤油を撹拌する
こんな感じに命令を分解することができました。
プログラミング的思考を行うメリット
メリットとしては今行わなくてはいけない問題が明確に表現できるということです。
これを行うことでよりこのプロジェクトを達成する成功率をあげることができます。また、初めてこの処理を行う人であっても高い確率で同じものを生成することができるようになります。
すなわち、この思考を行うことは複雑な内容というものをどのように行うかを考えることに他なりません。
コーディングについて
この厳密言及の変換と論理的変換を行うことができればコーディングはあとはそれをコンピュータに合わせて書き直すだけです。どんなプログラミング言語であっても同じ分解した命令をそのプログラミング言語の要求する形で書き直すだけなのです。
まとめ
プログラミング的思考とは以下の2つのプロセスだと考えます。
- 厳密言及の変換 = 自然言語のまま変換する
- 論理的変換 = 自然言語のまま行う命令単位で分解する
この2つのプロセスを行えるようにすることで、複雑なプロジェクトの成功率をあげることができる、ということなのです。