しかし、使う教材が子ども向けである(実際の仕事で使われているツールではない)ことから、
「仕事に使えないツールでプログラミングを学んで、意味があるの?」
なんて疑問をもつ方も少なくありません。
実は、必修化のねらいは「プログラミング的思考を身につける」こと。
「プログラミング」の能力をつけることが目的ではないのです。
では、「プログラミング」と「プログラミング的思考」ってどう違うのでしょうか?
ここでは、両者の違いとプログラミング的思考を学ぶメリットをわかりやすく解説します。
プログラミング的思考ってなんだろう?
プログラミング的思考とは一体なんなのでしょうか。文部科学省による「学習指導要領解説」ではつぎのように説明されています。
子供たちが将来どのような職業に就くとしても時代を越えて普遍的に求められる「プログラミング的思考」(自分が意図する一連の活動を実現するために、どのような動きの組合せが必要であり、一つ一つの動きに対応した記号を、どのように組み合わせたらいいのか、記号の組合せをどのように改善していけば、より意図した活動に近づくのか、といったことを論理的に考えていく力)を育むため、小学校においては、児童がプログラミングを体験しながら、コンピュータに意図した処理を行わせるために必要な論理的思考力を身に付けるための学習活動を計画的に実施することとしている。なんだか難しい説明ですね。
これを要約すると、プログラミング的思考とは「ある目的を達成するために順序立てて論理的に考え、結果を出していく力」のことです。
これをすれば、こうなる。Aの場合はこうする。Bの場合はこうする。
そんなふうに順序立てて考え、最適な結果を出すための考え方がプログラミング的思考なのです。
プログラミング的思考は、プログラムを書く(=コンピュータを使い、プログラミングをする)ときだけでなく、生活や仕事のあらゆる場面に必要な力といえるでしょう。
なぜ、いまプログラミング的思考が必要なの?
ではなぜ、プログラミング教育を必修化してまで「プログラミング的思考を養う」教育が求められるのでしょうか。デジタル社会になり「情報を使いこなすスキル」が問われるようになった
高度情報社会の進展はハイスピードで進んでいきます。身の回りを見渡してみると「数年前にはなかったのに、いまではみんなが使っている」なんてモノがたくさんありますね。
スマートフォン、タブレットコンピュータ……10年前には考えられなかったモノが身の回りにはあふれています。
また、人と人とのコミュニケーションにおいても、FaceboookやInstagramなどのSNSを使って、いままでと異なるスタイルで人と関わる機会が増えています。
そんな時代に必要とされるのは、情報の洪水に流されず、必要なモノと必要でないモノを見極める力。
正しい判断力を持つために、これまでの学校で鍛えてきた「決まった問題をすばやく解く力」だけではなく、「知らない問題が出てきたときに論理的に考え、答えを出す力」、つまり「プログラミング的思考」を育てようとしているわけです。
第四次産業革命、AIの発展。「人間にしかできない」仕事が求められている
人工知能(AI)という言葉をよく見かけるようになりました。AIを活用することで、ビッグデータの解析、ロボットのさらなる進化、さまざまな技術の自動化などが可能になります。
これによる大規模な世の中の変化を「第4次産業革命」と呼びます。
幅広い分野で、人間だけにできる仕事とは何か?
それは、過去にないものを生み出す力だと言われています。
AIは過去のデータを分析することはできても、飛躍的な考え方をし、まったく新しいものを生み出す能力には弱いとされます。
どんな機械にも真似のできない創造性を発揮するには、問題点を整理して成果を生み出すプログラミング的思考が不可欠なのです。
変化の激しい時代には「問題解決能力」が不可欠
急速に社会が変化していく現代では、「決まった問題を素早く解く力」以上に「問題点がどこにあるかを明らかにし、解決の手順を示す力」が求められます。さらに、大きな問題を解決するにはチームでの取り組みが必要です。グループ内のメンバーや、世の中の人々に理解を求めるためには「順序立てて物事を示す」プレゼンテーション能力も必要だと言えるでしょう。
「問題点は何か」
「その問題点は、どのような原因で生まれてきたか」
「問題点を構成する要素には、どのような関連性があるか」
「解決策は、どのような手順で考えていけばいいのか」
このようなことを論理立てて考え、分かりやすく人に伝えていく。そのためにもプログラミング的思考が必要になるのです。
プログラミング的思考とプログラミング、共通点と違いは?
プログラミング的思考の必要性がわかったところで、「プログラミング」と「プログラミング的思考」の共通点/違いについて見ていきましょう。プログラミング的思考とプログラミングの共通点は?
「プログラミング的思考」はもともと、プログラムを書く(=プログラミングをする)ときの思考法です。プログラミングとは、コンピュータにわかる形で命令を書いて並べ(コーディング)、コンピュータに仕事をさせる(=問題を解決する)ことです。
コンピュータには「いい感じでやっといて!」は通じないので、「まずAをして、それからBをして……」と命令する必要があるのですね。
(「プログラミング」についてより詳しく知りたい方はこちら↓)
一方、プログラミング的思考とは、課題をいくつかの要素(ブロック)に分け、それぞれの関連性を確認しながら、解決にいたる手順を明らかにしていく考え方のことです。
プログラミング的思考は、プログラムを書く(=プログラミングをする)ときだけでなく、あらゆる場面で役立つスキルだと言えるでしょう。
プログラミング的思考とプログラミングの違いは?
簡単に言えば、プログラミング的思考は「ものごとを組み立てていく取り組み方」なのに対し、プログラミングはその「取り組みそのもの」をいいます。たとえば学校やプログラミング教室では、Scratchなど子どもでもとっつきやすいツールを使ってプログラミングを行います。
プログラミングをするには、「何がしたいのか?」「そのためにはどうすればいいか?」を論理立てて考える必要がありますね。これがプログラミング的思考です。
プログラミングの経験を通し、ものごとを論理立てて考える力=プログラミング的思考を養う。
そして、あらゆる場面にプログラミング的思考を活かす。
それこそが、プログラミング教育必修化のねらいなのです。
プログラミング的思考を育てるには?
では、プログラミング思考を育てるためにどんなことが行われるのでしょうか?パソコンを使わず「考え方」を体験する
パソコンなどの電子機器を使わずにプログラミング体験をすることを、アンプラグドなプログラミングと呼びます。カードを並べて正しいプログラムを考えたり、ワークシートに書き込みながらプログラムを完成させる活動がこれにあたります。
タイピング(キーボードの操作)がまだできない低年齢のお子さんでも取り組むことができ、「プログラミング的思考とは何か」を気軽に知れる点がアンプラグドプログラミングのメリットです。
どのような手順で物事を進めれば、効率がよいプログラムになるのかをフローチャートで考えていく。
たとえば、小学校で「掃除当番の役割分担をどうすれば、掃除が早く終わるかな?」というような課題をアンプラグドプログラミングで考えることで、「プログラミング的思考とは何か」を体験するケースなどがあります。
いろいろな教科の勉強にプログラミングを混ぜる
プログラミング的思考は、問題を様々な角度から見たり、いろいろな方法で解く練習をすることで育ちます。たとえば算数なら、「五角形を書いてみよう!」という問題にえんぴつと定規、コンパスで取り組むだけでなく、プログラミングで取り組んでみる。
同じ問題にいろいろな方法で取り組むことで、「課題を整理し、論理立てて取り組む力」=プログラミング的思考が育っていきます。
(「プログラミングで多角形を書く」授業をわかりやすく解説した記事)
試行錯誤を繰り返し、正しいかどうか検証する
アンプラグドなプログラミングの学習は、プログラミングの「考え方」を学ぶには非常に適しています。その一方で、自分のプログラムが本当に正しかったかどうかを確かめづらい点もあります。
掃除当番の例でいえば、「掃除が早く終わった!」と思っても、それが「手順を改善した」ことによるのか、実は「やる気」の問題だったのか断定しづらいデメリットがあります。
その点では、パソコンやタブレットなどを使ったプログラミングのほうがはっきりとした結果が出るメリットがあります。
定められたプログラムツールを使って、ロボットに決まった作動をさせる。
自分の「考え方」が正しければ、ちゃんと動く。
「考え方」が間違っていたら、ロボットは動かない。
こんな試行錯誤を繰り返すなかで、「自分の考え方はしっかり合っているかな?」と確かめることができます。
プログラミング的思考育成の具体的な進め方とは?
では、プログラミング教育は具体的にどのように進めるのでしょうか。先生は「司会役」!
アンプラグドなプログラミングを進めるために必要なのは、先生が「ルールを知り、進行していく」司会役を果たしていく(ファシリテーションする)ことです。ちょうど、ボードゲームのナビゲーターやゲームマスターに近いかもしれません。
プログラミングを他教科に取り入れる具体例
プログラミング教育の具体的な授業内容は、実は決まっていません。各学校の自由な裁量でいろいろな教科に取り入れることが期待されています。
たとえばですが、
・算数を数式をいろんな角度からみる。
・理科で実験方法を議論する。
・英語で学習の仕方を効率化する。
・社会で資料の集め方やフィールドリサーチの方法を議論する。
など「やり方を議論する」ことでプログラミング的思考をやしなう方法も考えられます。
タブレットを使ってプログラミングする授業の内容は?
タブレットやロボットを使ってプログラミングの授業を行う場合は、以下のような流れが考えられます。・ScratchやレゴマインドストームE3などの子ども向けツールを用意する。
・目標とする動作を提供する(その手順に関しては教えない)
・何人かのグループで同時にプログラミングを行い結果を確認する。
・それぞれに、成功した理由、失敗した理由をディスカッションする。
プログラミング教育必修化のねらいはスキルだけでなく、考え方の育成。「やらせっぱなし」ではなく、試行錯誤する過程を重視するのが大事だと言われています。
プログラミング的思考を育てるためのポイント
プログラミングの意味を適切に伝える
「プログラミング的思考育成には、アンプラグドなプログラミングも有効」といっても、実際に指導を受ける子どもの側では「これがどうして、プログラミングの勉強になるのか」意味がわからないことも多いでしょう。
そのためには、プログラミングとは何であるのか、時間を取って話し合うことが必要です。
単にコンピュータで記号を組み合わせていくことがプログラムではない。
問題点を整理して解決方法を考えていく、積み重ねにより、プログラミングの能力も向上していく。
そのためのトレーニングであることを教えた上で、作業に取り組むことが効果を大きくするでしょう。
結果だけではなく、プロセスに意味があることを教える
たとえば、算数の分野でも「正解にいたる道筋はいくつもあるが、学校で教える正しい方法は一つ」というようなことがあります。ときには「答えが合っていても、学校で習った方法と違うから正解にならない」ことすらあるようです。
このような環境のなかではプログラミング的思考を育てていくことは困難でしょう。
「答えが合っていることが大事じゃない」
「答えを出すことに、どういう手順を踏んでいくかというプロセスが大切なんだ」
ということを繰り返し伝えることで、プログラミング的思考を育てる指導の効果も大きくなります。
親子で話す時間をつくる、否定をしない
プログラミング的思考とは、小学校で学ぶ他の教科に比べて「正解」「間違い」という結論が下しにくいという特徴があります。子どもとしても自分のやり方が正しいのか不安になることも多いでしょう。
不安が学習意欲の低下に結びつけることを防ぐためには、子どもの気持ちを聞いてあげることが必要でしょう。
「どんなことをやっているのか」
「どんな失敗しちゃったか」
「この先、どんなことをやってみたいか」
大切なことは、子どもの考えを否定しないことです。
「いまのところは失敗があっても大丈夫だから、繰り返し繰り返し考えて試していくことで、きっとすごいプログラムができるよ!」
と子どもの味方になってあげること。
プログラミング的思考とは、そんな環境のなかで大きく育つと考えられます。
まとめ
2020年春より必修化されるプログラミング学習の授業でプログラミング的思考を学ぶ。といわれても、その第一歩目がわからなくて、悩んでいる先生や保護者の方も多いでしょう。
しかし結局は「悩むこと」そのものがプログラミング的思考のトレーニングになるというのも事実。
「できないことが、できるようになるのは、おもしろいから、その方法を考えていく」
そんな言葉でバックアップしてあげると、子どもの気持ちもいっそう前向きになっていくでしょう。