プログラミング教育の必修化が2020年度にはじまりました。
プログラミング教育の一番のねらいは「プログラミング的思考」を育むことです。
では「プログラミング的思考」とは何なのでしょうか?
文部科学省によると以下のように述べています。
自分が意図する一連の活動を実現するために、どのような動きの組合せが必要であり、一つ一つの動きに対応した記号を、どのように組み合わせたらいいのか、記号の組合せをどのように改善していけば、より意図した活動に近づくのか、といったことを論理的に考えていく力
もっとわかりやすく教えて!
一言でいうと”深く考える力” だよ
さまざまなサイトで「プログラミング的思考」の解説がなされていますが、一言で表現していることは少ないでしょう。
なぜ一言で表現するのが難しいのか、なぜ一言で表現するなら”深く考える力”になるのかということを踏まえて説明していきます。
- 「プログラミング的思考」は一言で表現すると”深く考える力”!
- プログライング的思考と論理的思考の違いは”選択”を考慮するかどうか
- プログラミング的思考には数多くの能力が含まれており、5つの要素に分けられる。
プログラミング的思考とは?
プログラミング的思考を一言で表現すると、なぜ”深く考える力”になるのか。
それは「プログラミング的思考」が、実に多くの思考に関する力を含む言葉だからです。
最もプログラミング的思考に近い言葉として「論理的思考」があります。
論理的思考とプログラミング的思考の違いを簡単に挙げると、次のようになります。
論理的思考は”最適解の選択”を考慮しないよ
最適な結果を選ぶのが「プログラミング的思考」ってことか!
つまり「プログラミング的思考」は論理的思考力だけでなく、さらに数ある選択肢の中から最も適したものを選ぶ能力まで含んでいるのです。
また「プログラミング”的”思考」は広義的に考えると「プログラミングをする際に必要となるような思考」のことです。
実際にプログラミングをする際には次のようなことを留意します。
- どんなプログラムが書きたいのか(創造力)
- どんなプログラムが必要か(課題解決力)
- どんな順序でプログラムを並べればよいか(論理的思考力)
- どう改善すれば実現可能か(試行錯誤力)
- 改善するために問題になっている原因は何か(課題抽出力)
- 効率の良いプログラムの書き方はどうすればよいか(最適化力)
- どれくらいで完成させられるか(計画力)
- 期日までに完成させなければならない(実行力)
めっちゃ考えること多いやん!!
だから一言で表現できないんだ
まとめるとプログラミング的思考と論理的思考は次の画像のように比較できます。
このように「プログラミング的思考」には様々な能力が含まれていますが、全て「考える力」が共通して必要です。
そのためここでは一言で表現するのが難しい「プログラミング的思考」をあえて「”深く考える力”である」と一言で表現しています。
- プログラミング的思考と論理的思考の違いは”選択”を考慮するかどうか
- プログラミング的思考には数多くの能力が含まれている
- その能力は全て「考える力」が共通して必要になる
→プログラミング的思考を一言で表現するなら”深く考える力”
プログラミング的思考を5つの要素に分ける
プログラミング的思考には様々な能力が含まれており、一言で言うと”深く考える力”としました。
プログラミング教育を通して、実際はどんなことに取り組めばよいのでしょうか。
ここではプログラミング的思考を大きく5つに分けて、プログラミング教育を行う上で意識すべきことを紹介します。
- 分解
- 組み合わせ
- 一般化
- 抽象化
- シミュレーション
これら5つの要素を追及していくことで子どものプログラミング的思考力(”深く考える力”)が伸びていきます。
これらの要素はプログラミング的思考を伸ばしていくために必要なものですが、社会で活躍するためにも必要になってきます。
分解
「分解」はものごとを小さく分けて考えることです。
難しい問題ほど小さく分けて考えることで、課題を解決しやすくなります。
時計のパーツごとに「ボディ、ベル、針」と分解することもできますし、図形としてみれば「丸、四角」に分解することもできます。
組み合わせ
「組み合わせ」は手順の組み合わせを考えることです。
上の例はリンゴを回収する動きを表しています。
曲がる回数をより少なくしたい場合は、動き方を工夫すればたった1回曲がるだけで完了することができます。
プログラミングの中では「繰り返し」「もし~なら」「もし~でなければ」などを使って様々な組み合わせを考えます。
一般化
「一般化」はものごとのパターンを見つけ出すことです。
ものごとの似ている点や関係性を紐解き、パターンに落とし込むことで別の場面でもそのパターンを利用することができます。
上の例では「右、上を2回繰り返す」ということをしています。
これを一般化の観点でみると「パターンを繰り返す」という操作をしたとみなすことができます。
抽象化
「抽象化」は大事なものだけ抜き出して考えることです。
新しいどんぶりを作ろうと思ったときに、どんぶりを抽象化してみると、どんぶりは「深いお皿に白ごはんをいれて主菜を乗せたもの」と3つの性質のみ取り出すことができます。
抽象化すると上に乗せるものは主菜であれば魚でも肉でも構わないという性質が見えてきます。
目的に応じて必要なものだけを抜き出すことが大切です。
シミュレーション
「シミュレーション」は頭の中で手順をたどることです。
上の例で、最初に右を向いているとすると、最後はどの場所でどっちを向いているでしょうか?
答えは「場所は一番右下で向きは下」です。
左に1歩進むときは向きは変えていません。
このようにものごとの手順を頭で想像しながら正しくたどっていく能力です。
プログラミングではシミュレーションが上手な子ほど完成までのスピードが早くなります。
まとめ
この記事では「プログラミング的思考とは?」をご紹介しました。
まとめは以下の通りです。
- 「プログラミング的思考」は一言で表現すると”深く考える力”!
- プログライング的思考と論理的思考の違いは”選択”を考慮するかどうか
- プログラミング的思考には数多くの能力が含まれている。
- プログラミング的思考は5つの要素に分けられる。
- 分解
- 組み合わせ
- 一般化
- 抽象化
- シミュレーション
具体的にはどんなことするんやい?
それはまた次の記事で説明するね!