プログラミング的思考って何?プログラミングや論理的思考力との違いとは

「これからはプログラミング的思考が大切です!!!」

と、声を大にして本やサイトで書いてあることを目にするようになってきましたが、意外とプログラミング的思考について詳しく解説・紹介している箇所が少ないと感じます。

そこで、プログラミング的思考についてわかりやすくまとめて解説します。

 

よくある勘違いとしては、

  • プログラミング的思考って論理的思考でしょ?
  • プログラミング的思考ってプロブラムを学べばいいんでしょ?
  • なんかよくわからないけど、小学校でこれから教えてくれんでしょ?

プログラミング的思考の理解が不十分だと、子供が間違った考え方を身につける可能性があります。

子供の将来のためにも、まずはしっかりとプログラミング的思考を理解しましょう。

それでは早速解説スタートです。

どうしてプログラミング的思考が流行っているの?

2020年から小学校でのプログラミング教育が必修化になるからです。

プログラミング教育と言っても、小学校の授業で「プログラミング」という教科ができるわけでもなく、パソコンを前にしてカタカタとプログラミングを作るわけでわけではありません。

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

文部科学省が

  • プログラミング教育はコーディングをすることではない!
  • プログラミング教育はプログラミング的思考を育むことだ!

とハッキリ言っています。

これが理由でプログラミン的思考が大切だという認識が広まって、世間で話題になっています。

プログラミング的思考は5つの考え方の集合体

プログラミング的思考はザックリ言うと、「目標達成のための、超具体的な行動を伴った問題解決の考え方」です。

大切なのは「超具体的」であることです。

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

プログラミング的思考とは論理的思考力よりも更に一歩踏み込んだ内容なんです。

プログラミング的思考は問題解決のための考え方

将来は答えがあるテストに答える能力よりも、答えのない課題を解決するための能力が必要になってきます。

歴史の年号などの暗記力はネットで検索すれば瞬時に答えが出てくるので、覚えることは不要といえます。

実際、2020年から大学入試ではセンター試験がなくなることも決定しています。詰め込み型教育や暗記力の時代は終わったのです。

これからの将来に必要になる能力は答えのない問題・課題を解決するための能力です。

1.抽象化する力

抽象化とは、ゴチャゴチャに混ざっているものの中から似ているものを集めてグループ分けをすることです。

抽象化することができれば、シンプルに考えることができるようになります。

トランプを例に考えます。トランプには1〜13までの数字と4種類のマークがあります。

トランプの中ではいろいろな方法で抽象化できます。

  • 赤いカードと黒いカード
  • 絵柄と絵柄じゃないカード
  • 奇数と偶数

抽象化する方法は様々ですが、このようにグループ分けをする方法が抽象化力です。

2.分解する力

分解する力とは、抽象化とは逆の考え方です。

抽象化したトランプで考えると

  • 赤いカードと黒いカード
  • 絵柄と絵柄じゃないカード
  • 奇数と偶数

これらのどのカードかを判断する力です。

  • 赤いカードと黒いカード
    • 赤いカード:ハートとダイヤ
    • 黒いカード:スペードとクローバー
  • 絵柄と絵柄じゃないカード
    • 絵柄:Jジャック、Qクイーン、Kキング
    • 絵柄じゃない:1〜10
  • 奇数と偶数
    • 奇数:1,3,5,7,9,11,13
    • 偶数:2,4,6,8,10,12

3.並び替える力

トランプで「大富豪」というゲームはやったことありますよね?地方によっては「大貧民」とも言います。

ゲームを始めたると親からカードを配られます。親から配られたカードは初めバラバラになっているのでそれをきれいに並べるはずです。

そのときに無意識に数字の小さい順番で並べていませんか?

当たり前のようにやっているこの作業こそが並び替える力です。

4.分析する力

大富豪をしているとき、配られたカードをキレイに並び替えると「弱いカードばっかり」「今回は勝てるかもしれない」と思いませんか?

キレイに並び替える前には気が付かなかったことが、数字順で並び替えると気がつくことができるようになります。

配られたカードの状況を見て、「革命」を起こそうかなどのゲームの戦略も思い浮かぶはずです。

大人だと当たり前のようにやっている考え方ですが、、思考力が弱い小さな子どもにとっては難しいです。

5.一般化する力

一般化とは、似ている状況に応用できるようにすることです。

大富豪では毎回勝つ強い人といつも負ける弱い人がいるのは、一般化ができているかの違いです。

大富豪では毎回配られるカードが違います(当たり前ですね)。

どんな状態でも勝てるように、必勝法を持っているはず。

  • 弱いカードから使っていく
  • 絵柄は残しておく
  • ジョーカーは序盤で使わない

このように勝てる方法を一般化すると、どんな状況でも負けることがなくなり勝率が上がります。

論理的思考力との違いは行動レベルまで考えられるかの違い

プログラミング的思考力と論理的思考力って一緒です。

と、書かれたサイトがありますが正確には違います。

アジアの中にある日本であるように、論理的思考力の中のプログラミング的思考なのです。

 

論理的思考とは、因果関係を整理し順序立てて考えること、あるいはわかりやすく説明することを指します。ロジカルシンキングとも呼ばれます。

つまり、論理的思考力は

  1. AはBが原因
  2. BはCが原因
  3. だからAがCが原因

このように順番を追って考えていく能力のことです。

 

プログラミング的思考も論理的思考を同じ考え方なので基本的にはこれと同じです。

プログラミング的思考が大きく違うのは具体性があるのかということです。

 

プログラミングというのは、コンピュータに対しての数字と記号で作られた命令なので、曖昧な指示を出すことができません。

髪を切るときに「全体をさっぱりとしてください」と美容院でお願いしても成立しますが、コンピュータには「前髪は3センチ、横は5センチ、後ろは10センチ切ってください」と命令しないと動きません。

プログラミング的思考とはこのように誰がやっても同じ結果が出るように超具体的に行動レベルを考える必要があるのです

プログラミング的思考にはifとloopが必要

なぜプログラミング的思考というのかは、実際のプログラムを考えると分かります。

プログラムというのは実は条件分岐のifと繰り返しのloopの2つの単純な命令で成り立っています。

あみだくじを例に考えます。

線を下にたどって、

  • 横線があれば横移動、なければ縦移動(条件分岐if)
  • それを一番下まで繰り返す(繰り返しloop)

プログラムを考えるときは、抽象化してからプログラムを作り始めます。あみだくじの線を縦線と横線の2種類にすることでシンプルになります。横線を右と左にわかると必要は無いことに気が付きます。

プログラミング的思考も同じで、物事を抽象化して考えると複雑な仕組みも単純なことに気がつくことができます。

プログラミング的思考は再利用する

プログラミングには関数という手法があります。関数を使えば何度も同じプログラムを作る必要がなくなります。

テストの平均点を出す場合、全部の教科を足して、教科の数で割ると平均点が出ます。

平均値を出すために、毎回このプログラムを作るのは面倒です。そこで登場するのが関数です。

この関数をあらかじめ作っておけば、使いたいときにこの関数を使うだけで、平均点を求めることができます。

関数を作るときに大切なことは、一般化することです。平均点を出すときは5教科の場合もあれば、7教科の場合もあります。教科数を限定すると、5教科専用の関数となってしまって、7教科のときには使えません。

そこで、平均点をだす関数は入力された数字を自動的に読み取って、その数で割るようにしておくことで、教科数がいくつでも対応できます。

 

プログラミング的思考も同じで、一般化して関数化しておくことで、似た問題が起こってもその施工方法で簡単に解決することができますね。

プログラミング的思考を身につけるメリット

2020年以降に小学校でプログラミング教育が必修化になりますが、プログラミング的思考を身につけるメリットは何があるのか解説します

シンプルに考えることができる

プログラミング的思考を身につけると、シンプルな考え方を身につけることができます。

人間関係やお金のことなどたくさんの悩みを抱えています。悩みを解決するためにどうすればいいのかと考え過ぎでパニックになる人もいます。

 

プログラミング的思考を身につけることができれば、今一番問題になっている事の優先順位をつけ、その原因をシンプルに考えることができるようになります。

似た問題にも対処できるようになる

プログラミング的思考には「一般化する力」が含まれると説明しました。

一般化ができれば、同じような問題が起こった場合に前回の方法を応用することでスッキリ解決できることがあります。

経験やノウハウのような曖昧な職人的スキルではなく、誰でも使えるようにしておくことで応用できます。

小学生にプログラミング的思考を身につける方法

小学校ではプログラミング的思考の習得は期待できない

小学校プログラミング教育が必修化になったからと言って小学校には期待できません。

期待できない理由を紹介します。

  • 環境が整っていない
  • 教育時間が足りない
  • 先生がプログラミング的思考を身に着けていない

順番に解説します。

環境が整っていない

プログラミング教育にはパソコンかタブレットが必要です。一人1台は難しいにせよ2人に1台は必要です。プログラミングを学ぶための機材が小学校にはありません。

教育時間が足りない

学習指導要領ではプログラミング指導が必修化されますが、教科としてできるわけではありません。

算数や図工、理科などの授業の空いた時間にプログラミングの指導がされると言われています。

 

科目に採用されないので、十分な授業時間を確保することができません。年間の授業時間が3時間ということも考えられます。

プログラミング的思考はものの考え方なので、短時間で身につけられるものではなく、長時間をかけて徐々に身につくものです

先生がプログラミング的思考を身に着けていない

小学校のプログラミング教育の最大の問題は、先生が理解できていないことです。

小学校の先生は20代から50代と幅広い年齢の先生がいますが、プログラミングやプログラミング的思考を身に着けている先生は一人もいないでしょう。

学校の先生はこれまでの暗記力を求められていた時代に勉強していた世代なので、プログラミング的思考のような新しい考え方には慣れていません。

指導者が理解できていないことを子供に教えるのはかなり無理があると言えます。

ロボット教室が今のところベスト

子供にプログラミング的思考を身につけるためには、今のところはロボット教室がベストだと思っています。

ロボット教室ではロボット作りを通して、多くの課題に挑戦します。

  • 一本橋を渡るロボットを作る
  • あみだくじの動きをするロボットを作る

子どもたちは試行錯誤をしながら、ロボットを組み立てていきます。

挑戦しては失敗してを繰り返す中で、少しづつゴールに近づきます。

プログラミングもすることで、条件分岐や繰り返し、関数などを学ぶことができます。

 

プログラミング的思考はプログラミングととても似ている考え方です。

プログラミングを行う中で、当たり前のようにプログラミング的思考を身につけることができます。

まとめ

プログラミング的思考をまとめると

  • 目標達成のための、超具体的な行動を伴った問題解決の考え方
    • 抽象化する力
    • 分解する力
    • 並び替える力
    • 分析する
    • 一般化する力
  • この5つの考え方がベース

プログラミング的思考は、実際に行われているプログラミングと似ているので、プログラミング的と言われる所以です。

2020年から小学校でプログラミング教育が必修化になっても小学校では期待できません。

そういった意味でもロボット教室はこれから注目の習い事です。