プログラミングを学ぶことでつく力ということで、「論理的思考」という言葉が使われることがあります。
でも論理的ってどういうことでしょうか。私は、はっきり定義をしらべたり教えてもらったりしたことはなく、なんとなく理解しているつもりになっていました。
教育の分野では、プログラミングで身につくのは「プログラミング的思考」だとされていますが、ますますよくわからないですね。
とりあえず、だれかがとってつけたプログラミング的思考についてはおいといて、「論理的思考」とは何なのかをきちんと自分の言葉にしたいと思います。
でも最初の1歩は、Wikipediaの力をかります。
ここでいう論理とは、思考の形式及び法則である。これに加えて、思考のつながり、推理の仕方や論証のつながりを指す。よく言われる「論理的に話す、書く」という言葉は、つながりを明確にし、論証を過不足なく行うということである。
論理的であるというのは「論証」がキーになりそうですね。論証は「正しく説明が出来る」と言い換えてもよいのではないでしょうか。
論理の説明に「推理」も含まれますね。推理とは何でしょうか
既にある事実をもとにして、まだ知られていない事柄をおしはかること。
あてずっぽうの予測ではなく、実験結果や法則性、根拠のある資料などの事実をもとにして、考えるということですね。
つまり論理的であるということは、
事実(実験結果や法則性、資料など)を基に説明を過不足なくつなげられることであり、まだ知られていない事柄であっても事実を根拠に推し量って説明ができること
のようです。
論理的思考能力という言葉は、ヒトくくりになりすぎていそうですね。
私なりに分解してみます。
・事実を導き出す力
・事実を元に考える力
・説明する力
・過不足なく説明をつなげる力
・未知の事柄を、事実を根拠に推し量る力
こんなところでしょうか。
では、プログラミングで論理的思考は学べるのでしょうか。ひとつずつ考えてみます。
- 事実を導き出す力
プログラミングでは資料や短いコードにより実験によって、そのコードはどのような動きをするべきかを確認しつ組み立てる必要があります。実験的に短いコードを実行してみたり、信憑性の高いドキュメントを確認する癖をつけられれば、「事実を導き出す力」は、プログラミングを学ぶ過程である程度は学べそうですね。
- 事実を元に考える力
プログラミングでは「実現したいこと」は答えが示されているわけではなく、短いコードや機能の組み合わせで作り出します。実験結果やドキュメントの組み合わせを元にどうすれば求めるものが実現できるのか?を考えなくてはプログラミングはできないので、「事実を元に考える力」もプログラミングを学ぶ過程である程度は学べそうですね。
- 説明する力
プログラミングそのものでは、説明する力は身につかないかもしれません。
作ったプログラムのプレゼンテーションなどによって身に着けたいですね。
- 過不足なく説明をつなげる力
作ったプログラムのプレゼンテーションをする際に、論理の飛躍がないように気をつけられればよいのですが、プログラミングを学んだからといって、過不足なく説明がつなげられるとは限りませんね。説明を過不足なくつなげるには、説明をしてみて反応のフィードバックをえることや、そもそも国語の作文などを学ぶ方が近道かもしれません。
- 未知の事柄を、事実を根拠に推し量る力
プログラミングの作業中は作ったもののバグや問題が次々と発生します。それらは学ぶ人にとってはすべてが未知の事項であることでしょう。バグや問題を解決するとき、事実を元に試行錯誤していきますが、当てずっぽうからだんだんと根拠を元に推し測っていけるようになっていきます。「未知の事柄を事実を根拠に推し量る力」は、プログラミングを学ぶことで一番学べそうな領域かなと思います。
それにしても、単にプログラミングが出来るようになるまで学んでも、上記のような論理的な思考が学び取れるかどうかは学び方次第といえそうです。
レベルエンターで行っている教育も、現時点では「プログラミングを学んで論理的思考が身につく」とはいえないので、ここを強化したいと思います。