この度ご縁があり、東京の「アスク学童クラブ綾瀬」様にてプログラミングの出前授業を行いました。
今回の記事では、その授業内容や結果についてご報告いたします。
なお、出前授業ごっとこむ様の以下URLより、テラボの出前授業をお申し込みいただけます。
https://demae-school.com/socios-e-partners/
授業構想:テラボの強みを活かす
テラボでは、長年マインクラフトを活用したプログラミングの授業を行ってきました。
テラボ独自のカリキュラムは多くの子どもたちが履修しており、小学校高学年や中学校でJavaScriptの学習へ進むなど、確実な成果を挙げています。 今回の出前授業についても、このテラボの強みを最大限に活かせる「マインクラフトを活用した授業」を構想することとしました。
授業のテーマ:社会科との連携
初等教育において、プログラミングは単体の教科としてではなく、「各教科等での学びをより確実なものとするための学習活動として取り組む」ことが想定されています。よって、マインクラフトを活用した授業を展開するにあたっても、他教科との連携を考える必要があります。
マインクラフトを活用したプログラミングの授業では、主に「エージェント」と呼ばれるゲーム内のロボットをプログラミングで動かす活動を行います。このロボットを動かすという活動が、子どもたちにとってどのような学びになるのか。それについて深く考えました。
そこで目を付けたのが、ファミリーレストラン等でよく見かける「配膳ロボット」です。 ネコの顔が付いたものが代表的で、全国各地のファミレスで一般的に見られるようになりました。これが導入された背景には、コストカットや人員不足の解消という社会課題があります。
これは、近代から続く工業化の流れを汲んだ変化と捉えることができ、 それと同時に、子どもたちにとって最も身近なロボットの1つであり、日頃から好感を持って触れていると考えられます(他にはお掃除ロボットなどが挙げられます)。
細かな機能を見ていくと複雑ですが、基本的には「席のボタンを押す」➔「そこまでロボットが移動する」という、子どもがイメージしやすくプログラムに落とし込みやすいシンプルな仕組みであることも重要です。 そこで今回は、小学校5年生の社会科で習う「工業化」と連動させ、この配膳ロボットの動きをマインクラフト上で再現する授業を計画しました。
本単元の目標
出前授業は、申し込みされた先方の状況によって授業内容も大きく変化します。しかし、どの授業でも変わらない「授業の核」を設定したいと考え、事前に指導案を作成することとしました。 ここでの細かな指導案の内容への言及は避けますが、以下のような単元目標を設定しています。
【知識及び技能】 工業生産に関わる人々は、消費者の需要や社会の変化に対応し、配膳ロボットなどの身近で情報技術(IT)を活用した工夫のある製品を開発・導入していることを理解する。 また、それらのロボットが「順次」や「反復」といったプログラムの命令の組み合わせによって意図通りに動作している仕組みについて、体験を通して正しく理解するとともに、意図した動きになるようプログラムを作る技能を身に付ける。
【思考力、判断力、表現力等】 マインクラフト上での配膳シミュレーションにおいて、ロボットを効率よく動かすための手順を論理的に考え、試行錯誤しながらプログラムを改善する活動を通して、工業生産に関わる人々の工夫や努力を捉えるとともに、「プログラミング的思考」を働かせ、より最適な解決策を導き出しようと思考する。
【学びに向かう力、人間性等】 情報技術や工業生産の進歩が、自分たちの生活や社会をよりよくしていることに関心を持ち、社会の発展に寄与しようとする態度を養う。 コンピュータの働きを、単なる便利な道具としてだけでなく、社会課題の解決やよりよい社会づくりに生かそうとする意欲を持つとともに、プログラミングの学習を通して、失敗を恐れずに粘り強く課題を解決しようとする、創造的な態度を身に付ける。
授業を構築するにあたり、特に次の2つのポイントが子どもたちに伝わることを目標としました。
- 工業製品は身近なものであり、社会課題を解決しているということ
- 試行錯誤しながらプログラムを改善する活動を行うこと
「失敗」のないユニバーサルデザイン:最適化問題の活用
本授業は本来2時間構成を想定しており、2時間目には中心課題として「最適化問題」の初歩となるような問題を設定していました。最適化問題とは、おおざっぱに言えば「特定の制約(ルール)の中で最も良い解答を探す」問題のことです。特定の正解・不正解があるわけではなく、すべてが正解の中で「より良いもの」を探す、といったものです。
最適化問題は、プログラミングの試行錯誤と非常に相性が良いと考えます。 プログラミングにおける試行錯誤は、主に「正解を導くために失敗を繰り返すプロセス」であったり、「より短く美しいプログラムを目指すプロセス」であったりします。しかし前者は正解が出た時点で思考が終わってしまい、後者は子どもにとって直感的ではありません。そもそも、出前授業で行う範囲では、両者の試行錯誤は起こりにくいのが現実です。
そこで、最適化問題を活用します。 様々なルートが存在する問題を作成し、「どのルートが一番プログラム(命令)を節約できるか」「特定の目標に多く到達できるか」など、その制約に合わせて様々なルートを検証し、実験することが求められます。
今回の配膳ロボットの例で言えば、「10個の命令(ブロック)で、なるべく多くの机に配膳するにはどのようなルートを通れば良いか」という問題を作成しました。これにより、プログラム上や頭の中で様々なルートを試行錯誤する必要のある課題になります。
また、これにはユニバーサルデザイン的な意図もあります。仮に最終課題として「特定の机にたどり着く」という一本道の正解を求めた場合、子どもたちの最終的な結果は「成功」か「失敗」の二択になります。
出前授業という限られた時間の中で、新しい内容をすぐ使いこなせるかどうかは子どもによって大きく変わります。そんな中で授業の最後に「失敗」を突きつけることは、今後プログラミングに親しむことを阻害してしまうでしょう。
しかし最適化問題の場合、あるのは「成功」か「より良い成功」だけです。「自分ができる範囲で、なるべく多くの机に到達するプログラムを作成する」という目標になり、ユニバーサルデザイン的であると言えるでしょう。
今回の出前授業に向けた調整
さて、今回は先方様から以下のような条件をご提示いただきました。
- 1時間での授業にしてほしい
- 「プログラマー」という職を紹介してほしい
- 学童保育なので、低学年の子が多い
この条件に則り、授業内容の調整を行いました。 学年層が幅広く、かつ1時間という限られた時間であることから、社会科にあたる内容は省略しました。また、ご要望にあったプログラマーのお仕事紹介を最後に盛り込むこととしました。
さらに低学年が中心ということで、授業の核となるプログラミング活動の難易度調整を行いました。プログラミングにおける学びの中心は、新しい命令をたくさん知ることではありません。すでに知っている命令を、課題に合わせていかに活用するかが重要です。
そのため、まずは学ぶ命令を精選することから始めました。「移動する」命令を前提として、追加でもう1つ命令を学ぶ場合、候補となるのは「くり返し」「ブロックを置く」「ブロックを破壊する」の3種類です。 「移動する」と「ブロックを置く」という行為はやや関連が薄く、課題も作りにくいことから除外しました。
「くり返し」は様々な課題の可能性が広がる面白い命令であるものの、その特徴ゆえに小学校低学年には少し認知負荷が高いことも懸念されます。1時間という限られた授業としてはややリスクがあることから、今回は見送りました。
一方で「ブロックを破壊する」は、「移動の障害となるものを壊して進む」という明確な意図を設けることができます。また、「壊して進む」のか「避けて進む」のかという、子ども自身が選択する余地を生むことにも繋がります。
検討の結果、今回は「移動する」「ブロックを破壊する」の2つを活用する活動を作成することとしました。
授業の中心となる最適化問題に向け、前段階の課題として「移動する」プログラムを学ぶ活動と、「ブロックを破壊する」プログラムを学ぶ活動の2種を準備しました。 そして最後の最適化問題では、これらを活用し、「10個の命令で、なるべく多くの障害物を壊しつつ、多くの机に移動する」という課題を設定しました。
授業の締めくくりにはプログラマーという職業を紹介し、最適化問題という体験から「効率化」という概念に触れて終わる構成に仕上げました。
授業の様子
当日は、20人近くのお子さんに対して授業を行いました。 多くの子どもたちがマインクラフトを知っているようで、パソコンの準備をしている間も、「僕、マイクラやったことあるよ!」「今日はマイクラで何やるの?」など、興味津々で色々なことを話してくれました。
一転、授業が始まると、みんなものすごい集中力でプログラミングに取り組んでいました。 短い時間での授業でしたので、操作で苦労する部分もありましたが、目の前の課題に対して、1つ1つの移動や破壊についてしっかり考えながら進めることができていました。 子ども同士で話し合いながら、「こっちから行った方がいいんじゃない?」「次は前に3つだね」など、協力してプログラムを作り上げていく微笑ましい姿も見られました。
最終的には、すべての子どもが「破壊する」ブロックを含む課題をクリアし、最適化問題についてもそれぞれが自分のできる範囲でプログラムを作り上げることができていました。
今後の課題と展望
1時間という短い時間の中で、どのような学びを重視するかについては、まだまだ検討の余地がありそうです。 マイクラ自体の基本操作について迷う子どもは少なかったものの、プログラムを制作する画面上での操作については、もう少し分かりやすいレイアウトや説明の工夫が必要だと感じました。
また、今回授業に取り入れた「破壊する」プログラムについても、こちらの予想以上に動きがイメージしづらい部分があったようで、この命令への導入方法を改めて見直す必要性がありそうです。
最適化問題については、子どもたちから様々なアプローチや考え方が飛び出し、問題の設計自体は良かったと感じています。ただ時間の制約もあり、十分な試行錯誤にまで至らなかった面もありました。より問題の難易度を調整し、最適な方法を探す「試行錯誤のプロセスそのもの」にフォーカスできるよう改善していきたいと考えています。
以上で、今回行いました出前授業の報告とさせていただきます。
今後もテラボでは、プログラミング教育を通した社会貢献活動を進めてまいります。
文責・授業者 本多廉