「プログラミング的思考が大事!」

と声高らかに宣言しているものの、意外と「ネット上で先生向けに分かりやすく解説・紹介しているところが少ないな」と感じましたので、図を使って分かりやすくまとめていこうかと思います。

「これからプログラミング的思考を詳しく知ってみたい」と思っている学校の先生方、私個人の考えですが、ぜひ参考までにお読みください。

プログラミングが流行ってきているのはなぜ?

論理的思考とプログラミング的思考とは?:レゴブロックの町

2020年にプログラミング教育が授業に取り入れられたからです。(学習指導要領に策定されています)

プログラミング教育が授業に入ると言っても、プログラミング言語を打つこと(コーディング)を教えるワケではないので勘違いしないようにしましょう。

プログラミング教育とは、子供たちに、コンピュータに意図した処理を行うよう指示することができるということを体験させながら、将来どのような職業に就くとしても、時代を超えて普遍的に求められる力としての「プログラミング的思考」などを育むことであり、コーディングを覚えることが目的ではない。

出典:文部科学省(文科省)「小学校段階におけるプログラミング教育の在り方について(議論の取りまとめ)」

保護者間では、ロボットや、プログラミング言語を学習させるご家庭が増えていますが、無理に覚えさせなくて大丈夫です。本人がやりたいとハマったら身につけさせるくらいで十分です。

ここで大事なのは最適な手順を作り、自分の意図した通り物事を動かせることです。

コンピュータも大事ですが、コンピュータじゃなくても学べます。

ちなみに覚えておいて欲しいことは

一般的にはプログラミング的思考と論理的思考、ロジカルシンキングはほぼ同じ意味で扱っている、捉えている方が多いです。

注意

論理的思考とロジカルシンキングは別物だと言う方もいらっしゃいます。言葉は全く違いますが、考え方はかなり似ています。

ただ、私的に言うと論理的思考とプログラミング的思考は分けて考えられるかなと思っています。ただし、ものすごく関連性が高い言葉なので、ぐちゃぐちゃになってしまうのです。

分けて考えられる理由は読み進めてもらえれば理解できると思います。

論理的思考とは?

論理的思考とプログラミング的思考とは?:考える人

プログラミング的思考を理解する前に、論理的思考を知っておきましょう。

論理的思考とは一体何なのでしょうか?

論理的思考は目的を達成するために物事の筋道を考えて、計画的に実行する考え方です。

「こうなるだろう」という大体の結果予測を立てるだけでも論理的思考とも言えるので、紙に書いて思考をまとめることだけが論理的思考ではないことに注意しましょう。

論理的思考を語る前にそもそもどうして思考するのかを知らなければならない

論理的思考とプログラミング的思考とは?:どうして頭に?が出るのだろう?

思考とはそもそも何なのでしょうか?

思考とは、心に色々な事柄を思い浮かべる(心像:mental image)行動を通じて、それらの関係を構築する作業である。この心像には、五感で受け取った像(知覚心像)と、それらを脳内で再構成した像(記憶心像)があり、思考ではこの2種類の心像を複数照会し合いながら同定し、判断に至る作業を行う

出典:Wikipedia(思考)

これは難しい…。よく分からなかった方、大丈夫です。私も分かりません。

出典先を読んでもらえれば分かりますが、思考とは一言では表せられないほど複雑で、難しい領域だということが分かります。

心理学の世界ですら「思考は曖昧だ」と言われているようです。

では、私たちはどうして思考するのでしょうか?

それはもっと幸せに(より良く)なりたいと考えているからではないでしょうか?

論理的思考は課題を認識し、より良くするための手順を考えるのに使う手段

論理的思考とプログラミング的思考とは?:思考の迷路に迷い込む

思考が幸せになりたいと考える…。

そのためには課題が分かっていなければなりません。

そしてその課題を解決するために、どんなステップが必要で、さらにより良くするためにはどのようにするべきか…。

場合によっては結論から逆算する方法もあります。

このように思考整理のために、論理的に考えるという手段が使われます。

そう、あくまで論理というのは手段なのです。

論理的思考を体感してみよう

突然ですが、問題です。

論理的思考、プログラミング的思考とは何か?:ロジカル正方形で学ぶ

全て正方形の□があります。

3本の直線をつなげて、この□全てに線が通るようにしなさい。

さぁ、どうでしょう?3本の直線をつないで、□全てに線を通すことができますか?

論理的思考、プログラミング的思考とは何か?:ロジカル正方形で学ぶ(失敗例)

ちなみにこれは失敗例ですよ。

ヒントをあげるなら、条件は「□全てに線を通す」、「線をつなげる」の2つです。

「長さはバラバラでも良い」「枠に収まるとは限らない」ってことがポイントです。

そろそろ分かってきましたかね?

正解を出しますよ。

論理的思考、プログラミング的思考とは何か?:ロジカル正方形で学ぶ(成功例)

こうなります。

正解できた方はどれほどいらっしゃったでしょうか?

クリアしようといろいろ考えたこと。これが論理的思考

論理的思考とプログラミング的思考とは?:悩む女子高生

さきほどの問題を真剣に考えてくれた方、お疲れ様でした。

「なんで3本しかないんだ。4本だったら…。」

「なんで線をつなげなくちゃならないんだ」

「枠に収まるようにしているからいけないのでは?」←(正解の思考)

このように、さっき問題を解くためにいろいろ試して、考えてみませんでしたか?

問題を解決しようという意識になっていれば、「こうだったらできるかもしれない!」と(無意識的にでも)仮説を立てて、実際にやってみるハズ。

論理的思考には4つの段階があると思っています。

論理的思考、プログラミング的思考とは何か?:フローチャート

実施以外は論理的思考を用いて表現できます。

プログラミングもこの流れで動いていきます。

これが論理的思考です。

「え、これが?」って思うでしょう。

そうです。これは今まで学校でやってきたことと何一つ変わりがないのです。

論理的思考教育は意識的に使えること

ここまで読んで「じゃあ、論理的思考教育って何のためにあったの?」という方もいらっしゃると思いますが、論理的な思考は無意識に使ってしまうことが多いのです。しかし、無意識的に使ってしまっては問題解決能力がなかなか育まれません。

それを意識的に使えるトレーニングを行うのが論理的思考教育です。

プログラミング教育では何を教えるか?

論理的思考とプログラミング的思考とは?:悩みの深みにハマっていく

「何一つ変わらないとしたら、プログラミング教育では一体何を教えるべきなのか?」

これが今、学校の先生が直面している問題かと思います。

ここで、文部科学省の説明を見てみましょう。

子供たちが、情報技術を効果的に活用しながら、論理的・創造的に思考し課題を発見・解決していくためには、コンピュータの働きを理解しながら、それが自らの問題解決にどのように活用できるかをイメージし、意図する処理がどのようにすればコンピュータに伝えられるか、さらに、コンピュータを介してどのように現実世界に働きかけることができるのかを考えることが重要になる。

そのためには、自分が意図する一連の活動を実現するために、どのような動きの組合せが必要であり、一つ一つの動きに対応した記号を、どのように組み合わせたらいいのか、記号の組合せをどのように改善していけば、より意図した活動に近づくのか、といったことを論理的に考えていく力が必要になる。

こうした「プログラミング的思考」は、急速な技術革新の中でプログラミングや情報技術の在り方がどのように変化していっても、普遍的に求められる力であると考えられる。

出典:文部科学省(文科省)「小学校段階におけるプログラミング教育の在り方について(議論の取りまとめ)」

最もらしい文章ですが、「分かるような分からないような内容」という方がほとんどかと思います。

これだけ読むとコンピュータが重要な鍵を握っているような気がしますが、いきなり

急速な技術革新の中でプログラミングや情報技術の在り方がどのように変化していっても、普遍的に求められる力である

と書いてあります。ということはコンピュータ技術を教えることが最重要ではない…。

結局、何を教えるべきか。

それは、

仕組みや、環境、計算式や、論理的な思考全てをひっくるめて課題を効率良く解くための考え方です。

思考をまとめるためにプログラミングの考え方を用いる

心理学でも述べられているように、「思考は曖昧」だという点を忘れてはなりません。

つまりずっとモヤモヤしているのです。しかし、モヤモヤしているということは論理的思考が常に裏で動いていて、解決のために処理を走らせています。

アンテナが高いと言われたり、ハッと閃いたりするというのは常に論理的思考を走らせている方です。これを無意識的に使用しています。

ただ、何をするべきかが情報としてハッキリ分かっていないとモヤモヤが長くなります。

このモヤモヤを明確にするために用いる手段が、プログラミング的思考です。

プログラミング的思考=計算論的思考

プログラミング的思考を知るにはその原点から知る必要があります。

プログラミング教育が始まった背景は2006年にJeannette M. Wing氏が発表した論文「Computational Thinking」が世に出てからです。

このComputational Thinkingに書かれていることは、小学校段階におけるプログラミング教育の在り方についてに書かれている

時代を超えて普遍的に求められる力

と全く同じことです。

プログラムを経験した方なら分かると思いますが、同じ目的を達成するにしても最適な方法というものがあります。

言うなれば手法、環境、人材など現在自分が置かれている状況から最も適した方法を選択する力と言えます。

これは計算論的思考と呼ばれ、プログラミング的思考と全く同じ意味だと私は捉えています。

徳島文理大学の林 向達先生のページは非常に分かりやすいので参考にしてください。

プログラミング的思考は人間の知恵そのもの

ここで理解しておかなければならないのはフローチャートで表すということが大事ではなく、

目的を達成するために一番最適な手段を選択するということです。

まずはこの動画を見てください。

これは長さの違う棒を長さの順に並べ替えるという目的を持っています。

動画を見てもらうと分かりますが、並べ替えの方法次第でものすごく早く終わるものもありますし、ものすごく時間かかっているものもあります。

これはクイックソートという手法がほとんどの場合、特に早いので、ほとんどの検索プログラムにはこの方法が使われています。

しかし、棒の状況次第ではクイックソート以外が早い場合もあります。

このように今の状況から並べ替えを行う場合、「この方法が一番良い!」と自分で気付いたり、導き出したりできるようになるのがプログラミング的思考です。

この手法はアルゴリズムと言って、プログラミングを行う上で一番大事なスキルとなっています。

これは人間の知恵そのものだと思いませんか?

この人間の知恵を引き出せるようにすることが、プログラミング教育で最も重要なことなのです。

もちろんコンピュータ技術を教えることも重要です

これからIT技術はどんどん進歩していきます。そのため、これからの子供たちは情報機器にさわらないということはあり得ない世界になっていきます。

そのため、ICT技術、つまりコンピュータを扱う技術が非常に重要になっていくので、無視して良いワケではありません。

プログラミング的思考の問題は教えられる人間が少ないこと

論理的思考とプログラミング的思考とは?:思考の渦に巻き込まれる

この教育法はとても素晴らしいと思います。全員がこの考え方ができたら劇的に日本は進化するでしょう。

しかし、最大の問題は教えられる人間が少ないことです。

ほとんどの教員はこんな考え方を学んでいません。ましてやプログラミングなんて習っていません。

プログラマーだからと言って、こんな考え方ができる人間は稀です。

今、プログラミング教育が抱える壁は情報機器の設備や、プログラミング教育の教材が揃っていないということよりも、プログラミングを用いた教育を考えられる人材そのものがいないということではないでしょうか?

プログラミング的思考を学ばせる必要性を知って、「もっとプログラミング教育をやりたい!知りたい!学びたい!」と思っている方が増えない限りは、プログラミング教育の浸透は夢物語で終わるか、間違った解釈のまま進んでしまうな…と思ってしまいます。

そのため、しっかり教師も学ぶ必要があるのではないでしょうか?

プログラミング的思考は最も最適な解を考えること

思考、論理的思考、プログラミング的思考の図解
論理的思考の中にプログラミング的思考が内包されている
  • 論理的思考とプログラミング的思考は一般的に同じ扱いになる
  • なぜ思考するのか?それはより良い方法はないか考えるから
  • 論理的思考は目的を達成するために手順を考えたり、どうしたらできるかを考えること
  • プログラミング的思考は目的を達成する手段の中で、最も最適な解を考えること

私も最近まで「全部同じでしょ」と思っていましたが、やっと整理がついてきました。

この世界は奥が深いなぁっとつくづく感じます。