2017年11月25・26日に行われたななめな学校1に講師として参加し、「プログラミング」をテーマにした授業をしました。その際考えたことや、実際の授業内容について紹介します。
プログラマーである自分にとって「プログラミング」をテーマに設定することは自然なことでしたが、2020年度のプログラミング教育必修化は時事的な話題でもあります。予備知識として、文科省のサイトから学習指導要領(平成29年3月公示)やその解説資料をダウンロードして読んでみました。
学習指導要領におけるプログラミング教育
まず勘違いしていたのが、「必須化」といっても「プログラミング」という教科が追加されるというわけではなく、既存教科の中に組み込んでいくということなんですね。総則では受け皿となる教科として「算数科」「理科」「総合的な学習の時間」を挙げ、“学習内容と関連付けながら計画的かつ無理なく確実に実施されるものであることに留意する必要がある”とされています。まぁ、それはそうか…と思いました。
(3) 第2の2の(1)に示す情報活用能力の育成を図るため,各学校において, コンピュータや情報通信ネットワークなどの情報手段を活用するために必要な環境を整え,これらを適切に活用した学習活動の充実を図ること。また,各種の統計資料や新聞,視聴覚教材や教育機器などの教材・教具の適切な活用を図ること。
あわせて,各教科等の特質に応じて,次の学習活動を計画的に実施すること。
ア 児童がコンピュータで文字を入力するなどの学習の基盤として必要となる情報手段の基本的な操作を習得するための学習活動
イ 児童がプログラミングを体験しながら,コンピュータに意図した処理を行わせるために必要な論理的思考力を身に付けるための学習活動〜総則 第1章総則の第3の1の(3)〜
ここだけを読むと、いわゆる「プログラミング技術の習得」に言及されているように思えたのですが、さらに続けて読み進めてみるとどうやら違うようでした。
小学校段階において学習活動としてプログラミングに取り組むねらいは,プログラミング言語を覚えたり,プログラミングの技能を習得したりといったことではなく,論理的思考力を育むとともに,プログラムの働きやよさ,情報社会がコンピュータをはじめとする情報技術によって支えられていることなどに気付き,身近な問題の解決に主体的に取り組む態度やコンピュータ等を上手に活用してよりよい社会を築いていこうとする態度などを育むこと,さらに,教科等で学ぶ知識及び技能等をより確実に身に付けさせることにある。
〜小学校学習指導要領解説 総則編 P85〜
つまり実践的なプログラミング能力を身につけるための指導ではないということらしいのです。しかし、まだ学習経験の少ない小学生にとって、実際に何らかの“プログラミング言語を覚えたり, プログラミングの技能を習得したり”することなしに、“コンピュータに意図した処理を行わせるために必要な論理的思考力”を身につけるのは難しいのではないか思いました。確かに既存のプログラミング言語を扱うと、細かい前提知識が必要となり、本質にフォーカスしにくいということも想像できます。かといって、体験を伴わない形で概念的な話を聞かせるだけでは、ほとんど意味が無いと思うのです。
必要なのは魅力的なプログラミングへの入口
前述の指導要領を読むなどして簡単に調べたところでは、一般的な学校の授業の中でプログラミング技術が習得できるような状況には、当分の間はならなそうだと感じました。おそらく年に数回、そういえばそれっぽい授業があったなぁというくらいの感じになるのではないでしょうか。そういった状況で大切なのは、子どもたちにプログラミングの世界を魅力的に伝え、興味を持ってもらうことだと思います。企業などが主催する小学生向けプログラミング教室や、市販のプログラミング教材など、入門に適したコンテンツはすでに多くあります。本人が興味さえ持てば、そういったもので学校以外の場面で学ぶことが出来ます。小学校のプログラミング教育においては、限られた時間の中で、プログラミングの「楽しさ」を伝えることが重要な事なのではないだろうかと考えました。
授業内容の構想
子供向けのプログラミング学習と聞いてまっさきに思い浮かぶのがScratch2というプログラミング環境です。ただ、これを使ってしまうと経験者と初心者のレベル差がでてきてしまいます。今回、事前にプログラミング経験を知ることができなかったので、もっと別の教え方をした方が良いと考えました。
そこで考えたのが、人やカードなどのアナログなものを使ってプログラミング体験をしてもらおうというアイデアです。かつてのコンピュータは、パンチカードでプログラミングしていたのですから、別にデジタルデバイスがなくてもプログラミングはできます。授業の中でも「ペッパーのプログラムは、紙と鉛筆さえあれば今ここでも書けます(ただし実行はできないけどね)」という話をしました。また、オリジナルのルールを設定すれば、経験値に関わらず同じ条件で学習できるはずだと思ったからです。
時間制限への対策
今回の制約として大きかったのは時間です。与えられた授業時間は2時間30分でした(途中1回休憩をはさみます)。小学校の通常の授業と比べるとながいようですが、たった1回の授業です。対象が大人でも、この時間の中で満足なプログラミング体験をしてもらうのは難しい時間なのではないでしょうか。そこで、グループワークにしようと考えました。通常プログラミングは1人で取り組むものですが、あえてグループワークを導入し同じ課題に協力して取り組むことで、個々の待ち時間を節約したり満足感の平均値も上げたりできると考えたからです。

また、授業の始めと終わりに、子ども達に伝えたいことを簡潔にまとめたレジュメを提示しました。なかでも下の2つは実際にプログラミング体験をする前に意識しておいたほうが良いと思ったことです。それぞれについて説明します。
1. プログラムに「正解」はない あるのは「目的」のみ
プログラミングは表現であり、目的を達成するための行為です。目的の達成には多くの道筋があり、目的を達成しさえすればOKだということを、まず冒頭で伝えておきたいと思いました。色んな答えがあるはずだとあらかじめ意識していれば、プログラミングの世界をより楽しむことができるはずです3。
2. ロボットはかしこくない
一般的にロボット4は賢いものとして扱われることが多いです。でもそういう意識のまま、初めてプログラミングを体験すると、「なんでこんなことができないんだ」「面倒だ」とストレスに感じてしまいます。前提としてロボットはかしこくないと意識しておけば「じゃあしょうがない、自分がしっかりプログラムしてやろう」という姿勢で望む事ができます。この方がプログラミングはきっと楽しく思えるはずです。
授業内容の紹介
考えたのは、5人1組でマス目状のステージに配置されたアイテムをゲットしていくゲームです。アイテムをゲットするために、ロボット役の先生5をプログラムします。「すすむ」「右向け右」など、カードの種類がいくつもあるので、1つずつ使い方の説明と練習問題というのを1セットとして繰り返す流れで進めていきました。

まず、こちらで用意したステージをプロジェクションし、各チーム自分達のステージ上に同じようにアイテムなどを配置して再現します。矢印の書いてあるダンボールがスタート位置、それ以外のダンボールはブロック(進入禁止のマス)です。アイテムは、紙コップの中に入っていてお菓子とジュースの2種類があり6、なかには中身がどちらかわからないように「?」と書かれた蓋がしてあるものもあります7。

ステージの準備ができたら、カードを並べてプログラムを書いていきます。左枠はプログラム本体用、右枠はカスタムカード8を定義する用の枠です。

プログラムができたら、カードを順番に読み上げながら、ロボット役の先生を動かして確認します。ここで先生には「かしこくないロボット」役に徹してもらいました。先生が気を利かせて「賢く」振る舞ってしまうとゲームが成立しません。あくまでプログラムに忠実に動いてもらうように、授業前に細かくルールを確認しておきました。
お菓子効果
休憩前のステージと最後のファイナルステージの2つについては、獲得したアイテムの数だけチームの人数分、本物のお菓子をプレゼントしました。安直な手段でしたが、そのルールを伝えた時に子ども達のテンションが高まったのを感じ、やはり効果は絶大だなと思いました。
ファイナルステージ
ファイナルステージでは各チームに問題作りをしてもらいました。問題はステージとそのステージをクリアするプログラムのセットです。隣のチームの問題を解いてゲットできたアイテムは自分たちのものです。逆に、自分たちの作ったステージで隣のチームに取られなかったアイテムは自分達のものになります。このように攻守入れ替わるステージです。最初に、問題作りをしてもらい、出来上がったところからひとつずつ回答が正しいことを確認していきました。確認ができたチームのステージは証拠として写真を取り、プログラムの方は消してもらい、別のチームに問いてもらう準備をします。
下はその時に撮った写真一覧です。皆かなり複雑なステージです。左下のステージだけ矢印が手書きなのは、隣のチームにスタート位置がバレないように裏返しておきたいという意図らしいです。記録のため、後で僕が画像に手書きで矢印を入れました。そこまで本気でやってくれるとは、予想していなかったです…(汗)。

全チームの問題作りが完了したら、時計回りに場所を移動して、今度は隣のチームの問題を解く番です。後で1チームずつプログラムの確認をしていくのに時間を残しておきたかったので、ここでの時間制限は厳密にしました。そして最後に、全員の前で各チームの作ったステージや、それに挑戦したチームのプログラムの確認をしていきます。

予想外のドラマ
あるチームは途中で1枚だけカードの数を間違えていました。相手の思わぬミスで自分たちのお菓子を守れた出題側チームは湧き上がりました。逆に、解答側チームの空気は一瞬で凍りついたのを感じましたが、「大丈夫まだ続けられるよ!」といって、そのままプログラムの実行を続けると、偶然的にいくつかのアイテムを追加でゲットすることが出来ました。内心『よかった…』と思ったのですが、その後自分たちのステージのアイテムは全て取られてしまい、また落ち込むことに…。こんなドラマが生まれるとは、授業前は予期していませんでした。
グループワーク(チーム制)の副産物
グループワークにしたのは時間的な制約を考慮したからでしたが、他に色んな効用があったようです。特にファイナルステージの解答時間は結構タイトだったこともあり、全体を俯瞰して指示を出すもの、カスタムカードを作るもの、枠からはみ出ないようにカードをきれいに並べるものなど、チームワークの良し悪しが勝敗にも大きく関わってきました。どんどん積極的にプログラミングする子、冷静に問題箇所を発見する子、新しいアイデアを思いつく子、即席のチームでしたがそれぞれが役割を見つけて活躍していました。隣のチームのやり方を偵察に行って報告したり、カスタムカードを使って他のチームとは違う新しい命令を作って盛り上がったりなど、グループワークならではの楽しさも沢山ありました。
幻のチャレンジステージ2
個人的には当日の時間調整でやむなく削ったチャレンジステージ2(下のスライド参照)でプログラミングの「凄さ」を体験してもらいたかったのが心残りです。きっと自力で解ける子もいたので、せめて家に持ち帰って考えてもらえるような用意をしておけばよかったと反省しました…。
おわりに
限られた時間の中で、プログラミングの「楽しさ」を最大限に伝えるという点を、重要な課題に設定しました。結果としてまとめた「先生をプログラミングしておかしをゲットしよう」の内容は、ステージのバリエーションを増やせば、もっと深く学びをすすめることもできます。特殊な教材も不要です。グループワークにしたことで、子どもたちも非常に楽しんでくれたようだったので、効果はあったのではないでしょうか。(もし同じ内容をやってみたいという方は、ご連絡いただければ提供できる資料はお渡しします!)
近年の機械学習分野の盛り上がりをみると、今回扱ったようなプリミティブなプログラミングは将来的には現代における手書き文字のような、限定された場面でしか使われない技術になる可能性もあります。10年後、20年後にななめな学校があったとして、今回の授業を受けてくれた子どもたち世代が次世代に向けて一体どんなことを伝えたいと思うのだろう…?そんな妄想をするとなんだかワクワクします。
最後になりましたが、今回の授業内容の検討や実施、またこの記事の執筆にあたってもお手伝いくださったアシスタントの皆様には大変お世話になりました。ありがとうございました。
エンジニアを募集しています!
KARAPPOでは、エンジニアリング的視点から生まれる新しいアイデアや問題解決の提案、ユニークで面白いチャレンジをしていくために、エンジニアを募集しています。ななめな学校のような、地域に貢献する活動には今後も継続して参加・協力していきます。自分も参加したい/興味があるという方は、ぜひこちらの募集要項をご覧になってご応募ください(この記事読んだよと書いてくださるとさらに喜びます)。よろしくお願いします!
- 千葉市メディア芸術振興事業実行委員会主催の小学校3年〜6年の子供たちを対象にしたイベント。「なななめな視点」を持つことを学び、表現の幅を広げてもらおうという趣旨で、様々なクリエーターを講師を迎えて催されます。今回は2日間で計6名の講師が招かれ、各講師1日2回の授業を行いました
- 単純なアニメーションからインタラクティブなゲームまで、色んなものを作ることができるプログラミング教育のためのソフトウェア
- 実際の授業でも、ある課題について必要以上に複雑なプログラムを書いた子がいて、その後他の子がもっとシンプルな回答をする場面がありました。その時、どちらも目的を達成していたので「正解」だと教えました
- 「機械」と読み替えてもらって結構です。授業の中では同じ意味で用いました
- アシスタントの方5名に協力いただき、各チームに1人ずつついてもらいました
- それぞれ色の違う棒を入れています
- 蓋のされたものは「条件分岐」を使ってゲットします
- 関数に当たるカードです。処理のまとまりに名前を付けて、使いまわしたり、プログラムを読みやすくしたりできます







