CodeZine読者の皆様、こんにちは。本稿は、テクノロジーを活用して「教育」や「学習」をアップデートしたいと考える方々に最新情報をお届けする、教育ICTのWebメディア「EdTechZine」で公開中の記事の試し読みページです。全文はEdTechZineのページでお読みいただけます。
身近な話題から始めるプログラミング的思考
まずは鷲崎氏から、プログラミングを学ぶ必要性、プログラミング的思考の養い方について語られた。
プログラミングを学ぶ必要性について鷲崎氏は、「プログラミングの技能習得」と、ひとつの学びが他の学びに寄与する「学習転移」、2つのねらいがあると述べた。中でも注目したいのは後者の「学習転移」で、同氏は2018年に発表されたScherer氏の研究(※注)を取り上げ、「プログラミングを学ぶことで、創造的思考、数学思考、メタ認知、空間認識能力、推論の学びを容易とし、他の学習の促進につながることがわかってきた」と説明した。小学校におけるプログラミング教育は、この学習転移の有効性に注目すべきだというのだ。
- ※注:Scherer, R., Siddiq, F., & Sánchez Viveros, B. (2018). The cognitive benefits of learning computer programming: A meta-analysis of transfer effects. Journal of Educational Psychology.
創造的思考や数学思考は、プログラミング的思考と重なる部分だ。鷲崎氏は自著『Scratchでたのしく学ぶプログラミング的思考』を参照して、プログラミング的思考とは何か、改めて整理したものを提示し、プログラミング的思考の要素を説明するとともに、「プログラミング的思考を支える論理的推論も重要である」と述べた。「問題の原因は何か」「どのような仮説を立てて考えればいいか」プログラミング的思考は問題の背景を読み取る力も養う必要があるというのだ。
では、プログラミング的思考を養うためにはどうすればいいか。鷲崎氏は、プログラミングを「知らない」「知っている」「使える」「応用できる」の4段階でアプローチが変わるという。
まずはプログラミングについて何も「知らない」とき。身近な話題の中で一般化や抽象化できる課題について考えるのが良い。鷲崎氏は一例として、下図のような課題を取り上げた。サンドイッチの食材を使って、他の料理を作ろうとしたときに何ができるのかを考える問題だ。考え方としては、サンドイッチで使用した食材を「分解」して、次に「共通」の食材で作れる料理を考え、最終的に「食パンでできる料理」という形に「一般化」して答えを出すだろう。このように日常の身近な課題とプログラミング的思考を絡め、「ものごとを分解して、本質を見極める思考を鍛えることが重要だ」と同氏は述べた。
続いて、プログラミングを「知っている」段階になると、簡単なプログラムを組みながらプログラミング的思考に触れるのが良い。たとえば「Scratch」でできる一例(下図参照)として鷲崎氏は、「ネコが文字の黒い部分に触れたら、言葉を発する」という簡単なプログラムを紹介した。 「黒」という色をRGBの変数で指定すれば、「さまざまな色に触れるとアクションを起こす」という柔軟に扱えるプログラムに一般化することができる。プログラミングができるようになると、このような方法で「一般化」の概念を学ぶことができるというのだ。
また鷲崎氏は、一般化や抽象化、モデル化などプログラミング的思考を下支えする論理的推論の養い方についても取り上げた。下図はその一例である。遠足の目的地までたどり着いた子に共通していた点は何か。はぐれた子は何が原因だったのか。背景から読み取れる共通点をもとにルールや原則を見い出したり、仮説を考えたりすることで論理的推論が養える。このように論理的推論についても、身近な課題から入っていくことが重要だと同氏は言う。
また論理的推論についても、簡単なプログラムで鍛えることができると鷲崎氏。一例として、「Scratch」で風船が動くプログラムを作り、子どもたちがその動きを見ながらプログラムの規則性を予測して、同じように動く作品を作る取り組みを紹介した。最初は「◯秒待つ」くらいのルールしか見つけられないが、やっていくうちに、「最初は風船が手にあたっていたのに途中からあたらなくなったら、それは風船が移動したからである」という検討により、「風船が手にあたっているか、いないか」という条件の利用を考えられるようになっていくという。
そして、プログラミングが「使える」段階にくると、いよいよ教科の学びの中でプログラミング的思考が養えると鷲崎氏は話す。たとえば算数の多角形では、内角の角度を変数で一般化し、多角形を描画するプログラムを作成するという具合だ。さらにプログラミングが「応用できる」段階になると、ゲームなどの作品づくりや具体的な課題解決の中でより発展的・創造的に養うことができる。このように、プログラミング的思考の育成については、「いきなり授業で身に付けよう」ではなく、身近な事象や課題に触れながら養うことが重要であるというのだ。