事例273

ソートアルゴリズムを人型ピクトグラムで気づき考え共有する授業

東京都立南多摩中等教育学校 御家雄一先生

※クリックすると拡大します。

ご本人提供
ご本人提供

 

今回の発表は、「人型ピクトグラムでソートアルゴリズムを考え学ぶ」というものです。ここで使ったアプリケーション「人型ピクソートグラム」(※1)を開きながらお読みいただければと思います。

 

「人型ピクソートグラム」は、ピクトグラミングシリーズ(※2)の一つです。

 

「ピクトグラミング」のページはご覧になった方も多いと思いますが、このページのいちばん下のほうに「関連アプリケーション」というコーナーがあって、その中にいくつか特殊なピクトグラミングシリーズの「派生アプリケーション」が入っています。

 

※1  「人型ピクソートグラム」はこちらから

 

※2  ピクトグラミングシリーズはこちらから

 

ちなみに、この人型ピクソートグラムは、青山学院大学社会情報学部の伊藤一成先生の研究室の学生の渡辺さんが制作したものです。

 

 人型ピクトグラムをシーソーで重さを比較して重さの順に並べる

 

「人型ピクソートグラム」は、人の形状のピクトグラム(本発表ではピクさんと呼びます)をシーソーに乗せると、重い方に傾く、というメタファーを用いて、ソートアルゴリズムを考えさせるというもので、非常に直感的に使うことができます。

 

 

「人型ピクソートグラム」のトップ画面がこちらです。

 

画面の左下にある「正解発表」というボタンを押して、その中の「はかりを公開する」を押すと、ピクさんの重さが表示され、正解を判定することができます。

 

 

「並べ替えの手順」に絞った授業を設計する

 

初めに簡単に全体像をお話しします。このピクソートグラムは、シーソーでピクさんの重さを比較します。この元ネタは、コンピュータサイエンスアンプラグド(CSアンプラグド:※3)の「いちばん軽いといちばん重い」という、てんびんで重さを比較するものです。

 

※3 https://csunplugged.jp/

 

このアプリケーションのポイントは、生徒はシーソーの仕組みを既に知っているので、シーソーの使い方を考えることなく、比較に集中できるというところです。使い方の部分はクリアしてソートアルゴリズムを学ぼうとするも、アルゴリズムの考え方やソートのやり方など、様々な要素が複雑に絡み合っているため、生徒がどこかで躓く懸念があります。

 

今回は、それを分解して「並べ替えの手順」というところに絞りました。そこでは、重さや大きさの比較は、基本的には2値でしかできないということを、シーソーを使って示します。これは、我々が普段の生活の中でなじみのある、シーソーの傾きを見れば2つのもののうちどちらが重いかがわかる、ということを使います。

 

 

このアプリケーションには、画面右下の方には、「自動ソート機能」というものがあります。これを押すと、「ピクト司令官」が出て来て、並べ替えの作業をやってくれてしまいます。

 

しかし、最初は並べ替えを自身で考えてほしいので、授業ではこのURLの最後に「?=hide」を付けてクエリ拡張し、自動ソート機能を非表示にして、「自分自身で考える」というステップをさせます。そのため授業では、生徒に1クリックで「?=hide」を付与したページを開けるように、パソコン室のパソコンのブラウザを開いたときにデフォルトで表示するローカルのオリジナルHPに、そのURLのボタンを設置しました。

 

 

まずは自由に触ってみながら、並べ替えに要する回数を数える→「しめじソート」で確認

 

この状態でアプリ画面を開かせて、生徒に自由に触らせます。直感的に動作がわかるアプリケーションなので、こちらからはシーソーがピクさん2人の重さを比較して、はかりが結果を表示すること、ピクさんをシャッフルする「選手交代」と、再度同じメンバーでソートを試す「元の隊形に戻る」の機能があることを説明しつつ、いろいろ試させます。

 

一通り触らせたあと、「2人のピクさんの重さの順番はすぐわかるね。では、3人の重さの比較をして重さの順に並べるなら、並べ替えは何回でできるでしょうか」ということで、並べ替えの回数を考えさせました。

 

そして皆の答えをGoogleFormで収集し、回答をリアルタイムで中間モニタに表示して共有しました。口頭で「提出してから中間モニタは見るように。成績など一切関係ないから、今の状況を全力で楽しみ考えよう」といった声掛けを随時していました。

 

すると、3回、2回…と結果が分かれ、中には0回というものもあります。これを見て、結果が別れたことに関して考察させました。「えーーー!?少し割れたね、なんでだ?さっ!考えよう。ざわざわざわざわ…おしゃべりどうぞー!」といったラフな掛け声をして気楽な会話の時間を提供しました。

 

それぞれ、自身の回数を隣席の生徒と共有して、方法を自分なりに共有する人や、手元で再度実施するのを見てもらったり、また0回の意図を考察するなど様々な行動が見られました。

 

一旦静粛にしてもらったのちに、「なぜ0回があったと思う?」と問うと、生徒たちは口々に思いを述べます。おおよそ自明であるため、即時「そうね、これは一か八かだよね。最初の並びがすでに完璧パターン。それに気づいたのは素晴らしい!最小回数はゼロだね」と提示条件の甘さに気づいたことを褒めました。

 

しかし、3人並べ替えの一か八かを除いたパターンの一部を目の前で3ステップほど紹介し、最小回数で確実性を求めた場合の回数を問いました。

 

そして先程と同様に、GoogleFormで収集し、回答をリアルタイムで中間モニタに表示して共有しましたが、今回は自由記述欄を作成し、最小の並べ替えの回数で並べ替えられる手順を文章で書かせました。これも同様に中間モニタでリアルタイム共有しています。

 

 

生徒にいろいろ試させた後で、NHKのEテレの「大人のピタゴラスイッチ」の動画コンテンツ「しめじソート」(※4)を見せました。これは、しめじの長さでマージソートをするテンポのいい動画で、けっこうおもしろいものです。

 

※4 NHK for School セレクション 「やさいがいっぱい」より

 

この並べ替えにはポイントがあって、ます15本のしめじを2本ずつペアにして大きさを比較し、ペア中で小→大の順に置きます。次にペア単位で2組ずつ比較して、ペアの中の大きいもの同士、小さいもの同士を比較します。これを繰り返して並べ替えていくことで、全てのしめじを小さいものから順に並べることができます。動画を見ながら、これは他の場合にも応用可能な、汎用的に順番が付けられる仕組みになっていることを隣同士で話し合って気づかせます。

 

この際、特に制限を設けず「今、頭の中に思うことがあるよね。隣の人と共有して」程度の指示を出しています。その後「ここのポイントの一つは同じ手順を繰り返していたところ。具体的に思いつかなくても、個数が増えてもできるということには気付きますね」とアプローチしました。

 

 

バブルソートの動きを見ながら手順を解読し,言語化する

 

次に、人型ソートピクトグラムを、通常の自動整列表示バージョンで開かせます(?=hideを消す)。

 

これも説明ナシで使えるので、時間をとって自由にいろいろ触らせて、どのようなことができるかを確認させます。

 

 

自動並べ替え機能を使って、6人のピクさんの並べ替えを行います。

 

画面の左上の設定ボタンで、「人数選択=6人」「速さ選択=速い」「自動整列=バブルソート」に設定して、先生の「せーのっ!」に合わせて一斉にやってみます。

 

今度は、自動でピクさんが動き、左肩のところに並べ替えに要した回数が表示されます。

 

整列が完了したタイミングで、「せえの!!」で答えを言わせると、全員同じ回数になります。

 

「なるほど、ではこれがどのような手順でできているかを解読してみよう」ということで、手順を文章化したものをGoogle Formに提出し、これも中間モニタで共有しました。ここで「バブルソート」の名称と、まさに名は体を表す手順であることも押さえました。

 

 

クイックソートでも同様にやってみる

 

次にクイックソートで同じことをやってみます。「人数選択=7人」「速さ選択=速い」「自動整列=クイックソート」の設定で並べ替えをさせます。ここに、ピクト司令官が登場します。

 

そして、回数が表示されたところで、バブルソートと同様に「せーのっ!」で回数を発生して共有します。すると回数がまばらであることに気づきます。生徒の一部はざわつきます。「回数に差があるのは...もしかして、ぽんこつ司令官が混ざっていましたか」と問い、笑いを誘いました。こうして、クイックソートの方が回数が少なくて済むことに気付き、その手順を考える、という「気付く→考える」のセットを何度も繰り返して行いました。

 

 

続いて、先ほどの「ピタゴラスイッチ」の「じゃがいもソート」を見せました。こちらはクイックソートを使った動画ですので、先ほどやった内容がそのまま解説されています。これを見て、「なるほど、そうか。ソートっていろいろな手順があるんだね」ということに気づき、さらにこの解説のとおりやれば、どんな数値でも並べ替えができるということを理解させていきます。

 

 

考えたことを話し合い、共有する場を作る

 

こちらが私の授業を設計する際の目標です。考える環境を整えて、生徒たちにざわざわとああだ、こうだということを言わせて、それを共有する場を提供するようにしています。

 

どうしても生徒たちのざわざわが止まってしまうことがありますが、そのときは、「じゃあ、GoogleFormで共有しよう」と声をかけて、皆に投稿してもらったものを中間モニタに提示するようにします。

 

 

こちらは生徒が手順を文章で書いたものを中間モニタで提示しているところですが、その中で私の方で「いい解説」を選んで示します。「『いい解説』は、抽象的、つまり何が入っても説明できる書き方だね。今回はそういう書き方をしてね、とは言ってなかったけれども、こんなふうに書けるのはすごいね」といった話もしました。

 

 

生徒たちにとっては、相当頭を使う経験に

 

授業をやってみた感覚では、生徒たちはものすごく頭を悩ませていました。最初に、とりあえず並べ替えるときにはスイスイやっていましたが、最小回数でできた人がいる、ということに私が強く反応を示したあたりから、ちょっと意気込んで頑張る人が出てきました。

 

今回はいろいろな活動があって、次々に条件を提示してどんどんミッションを与えていきました。生徒たちは、ミッションが進むにつれて要領が分かってくると、結構頭を悩ませていました。最終的には、「結構頭を使いました。楽しかったです」という人も、「久々に頭を使い過ぎて疲れました」という人もいて、面白かったなという印象です。

 

今回はできる限り生徒が考えるところに重点を置きたかったので、狙い自体はかなりうまく突破できたかな、と思います。実は、今回の教材は、私も少し開発に関わっていました。CSアンプラグドの実習も、非常によくできていますが、実際に教材を用意するのは結構大変です。その点においては、この「人型ソートプログラム」は一つの提案となったかなと思っています

 

 

[質疑応答]

 

Q1:

授業の中で、言語化をさせるタイミングを積極的に取られているという印象がありましたが、初期の段階で生徒に記述をさせたところと、最後のほうで記述をさせたところで、変化はありましたか。

 

A1御家先生:

こちらでお見せしているのは、生徒から許可を取ったものですが、個人のレベルで見ていると、この短期間だけでは、大きな成長はやはり見られなかった、ということはあります。

 

それでも、最初は適当にやっていた感じだったのが、「効率の良い方法を真似てみよう」というチャレンジ精神が見られる生徒が、1クラスに5~6人、多いクラスは10人くらい出てきた、ということはありました。

 

また、手順を書く際に、最初はAB、AC、AD、BC、BD、CD…のように具体的な羅列を書いていた人が、文章で書けるようになった、というような細かい変化はあり、そういった本当に小さな視点においては成長はあったかなと思います。

 

この授業の期間内では、まねてみたとか、頑張ってみた、くらいではありましたが、そういったチャレンジができるようになったのは成長だったのかな、と思っているところです。

 

 

Q2:

この「手順を言葉にして説明する」というのは、なかなか大変なので、これを何回も繰り返すとなると、生徒が挫折してしまわないか、と思いながら見ていました。でも、それこそがアルゴリズムにおいて考えなければならないことなので、すごく大事なことだと思います。

 

こういったところでは、手順を全員に対して、PC教室の中間モニタで提示してフィードバックされると思いますが、そのときに注意されたことはありますか。

 

A2御家先生:

基本的には、褒めることをメインにしています。3、4回褒めて、1回注意といった感じです。また、具体的に書いている人たちには、「これをそのまま他のところで使っても有効かな」ということを問いかけるようにしています。

 

中間モニタで提示することには、結構重要なことが一つあります。まず、生徒たちは「先生が提示していることには、何かしらの正解を出さなければいけない」と思っていると感じています。ですから、「これは君たちが理解するためにやっていることだから、採点対象ではない。どれだけ頑張ったか大事だよ」ということを言った上で、序盤はとにかく自分で考えさせる。そして、中盤からは、「他の人の答えを見せてもらってもいいから頑張ってごらん」と励まします。

 

「目標は、次に同じような問題が出されたとき、自分で同じように考えられるかだよ」という話をよくしています。

 

こういった授業が、あまり共通テスト対策の授業になってしまうのはよろしくないかもしれませんが、このように未知の問題を出されて、その場でアルゴリズムをぱっと考えることを繰り返すのは、結果的に共通テスト対策にもなり得るかな、と思っています。

 

特に、バブルソートなどは、やり方を教えてしまえば一瞬ですが、それを初見で考えて、このように解いていけばよいということに気づく、そういった簡単なことでも繰り返しやるということは、かなり意識しています。

 

 

Q3-1:

これは大体1時間でやってしまう内容でしょうか。

 

A3-1御家先生:

1時間、実際には今は45分授業で展開しています。そのうち最初の5分間は、クラスの雰囲気を「温める」時間を取っているので、実際には40分構成になっています。

 

 

Q3-2:

40分というのはすごいですね。これだけのスピード感で進められるのは、非常に周到な準備をされているのでしょうね。このピクトソートグラムの素材も、すごくなじみやすいツールなので、生徒が楽しく使えるのではないかと想像できます。

 

A3-2御家先生:

ありがとうございます。それほど周到な準備ができていればよかったのですが(笑)。

 

ピクトソートグラムがありがたかったのは、「シーソーだから遊んじゃえ!」というのが、最初に生徒の中から出てきたことですね。遊んでいる間に経験したことが、次にやることに直でつながることになったのがよかったと思います。

 

もう一つは、その「遊んじゃえ」という感覚で言えば、私は授業準備をするときは、生徒の席で行っています。授業中に先生が前に立ってあれこれ指摘したり、「ああしなさい、こうしなさい」と言うだろうな、ということを、生徒目線で客観的に見たりすることで、この活動のタイミングで、先生から何と言われたら思考や手が止まってしまうのか、ということを考えて展開を考えます。

 

今回の授業の場面では、基本的に生徒が常に頭を働かせているように設計しました。なので、最後はもうまるで頭から煙が出ているようで、ヒーヒー言っていました。間に挟んだ「しめじソート」のような動画も、実は正解発表の代わりだった、と。ですから、結構負荷はかけ過ぎたな、というのは反省点です。

 

 

Q4-1:

「しめじソート」や「じゃがいもソート」は、情報の教材として使えそうだなと常々思っていたので、このように使えばいいんだとヒントをいただけた発表でした。

 

A4-1御家先生:

ありがとうございます。マージソートを生徒に最初からやらせるのは、けっこうたいへんだな、と思っているので、「しめじソート」はマージソートの、「じゃがいもソート」はクイックソートの手順に気付くことができるかな、とちょっと期待していたのですが、やはりちょっと難しいですね。

 

それでも、クイックソートを考えた後に答えとして見る、というのは、すごく効果があるのではないかと思って見せています。

 

 

Q4-2:

こういった視聴覚教材は、他の授業でもふんだんに取り入れていらっしゃるのでしょうか。

 

A4-2御家先生: 

ものによります。考えをメインとするところは、逆に不親切にしています。

 

というのは、こちらから与え過ぎると、頭に叩き込む方の集中がそがれてしまうので、そういった授業の時は、けっこう不親切にやっています。難しい概念のときは、ちょっと最後の最後でちょっとだけ親切にやるようにします。

 

ちょっと話がそれますが、bitとByteの概念を説明するときは、人型ピクトグラムの模型を渡して、「これの表裏のパターンで考えましょう」という授業をしています。これがbitに対応して、人が2人いれば2ビット、4人いれば16進法の1桁で4娘1だね、という形で説明しています。

 

人型ピクトグラムの模型は、6mmの厚みの木の板を人型にカットしたもので、片面を黒く塗っています。そのため、人型ピクトグラム1人でオモテウラを示せることから1人で1bitを表せています。

 

授業の途中で全体の空気を温め直すことがあります。雑談を交えますが、その雑談が授業本編と関係のある雑学のようなことを話します。ここでは人の活動になぞらえるために、平成中期に流行った「2娘1(ニコイチ)」の話をしました。

 

仲良し2人組を2娘1、3人組を3娘1...のように言っていたこと、それをプリクラに落書きしていたことを話し、手元のピクトグラム人形で、2娘1や3娘1を作って説明しました。生徒は話を聞く人と、それを真似て2娘1や3娘1を作る人がいました。

 

ここで2娘1(2人組)を作らせ、そのオモテウラのパターン数を数えることにします。するとこれは2bitの通り数を数えていることと同じで、「3娘1では?」「4娘1では?」と問います。

 

2bitで4通り、3bitで8通り...といった話は、本や教科書、動画等で説明されています。2娘1のような説明やワイワイと楽しみながら感覚を掴む授業方法が苦手な方には、淡々と説明している動画をいつでも見られるようにしていますが、その場で楽しみながら考えつつ習得していくことを年間通して実施しているため、このような取り組みが生徒にとって楽しみであり、あとあと教科書を見ると納得できると評判です。

 

そのコツの一つとして、視聴覚教材をうまく作って説明すれば、かなりテンポよくできると思いますが、この辺りに関しては、基本的には書画カメラで手元を提示して、動かしながら説明しています。解説用のスライドは作り込まず、とにかくその場でとにかく考えさせるようにしています。作り込みすぎるとどうしても一方向の提示になってしまいます。その場の生徒の反応に応じて臨機応変に対応するには、作り込んだ資料は使えないです。

 

ですから、このピクソートグラムの実習に関しても、ほとんどスライド資料などは丁寧には作っていません。もちろん、復習のときのためにちょっとした動画コンテンツを使ったりはしていますが。

 

 

Q4-3:

あえて親切にしないというか、その分生徒が能動的に動ける余地を残すことにつながっていくのかな、と思います。今回お話されている人型ピクソートグラムにしても、あえて「今日はあれをやります、これをやってみよう」と懇切丁寧に教えず、まず自由に触らせるところからスタートさせるというのは、すばらしいと思います。

 

A4-3御家先生:

ありがとうございます。この授業を設計するときは、教員が指示するのでなく、環境だけ整えるように意識しました。他の授業もそうですが、あとで教科書を見たときに、「あれ、教科書に載っている技術って意外に簡単じゃん」と思ってもらえたら嬉しいな、と思っています。

 

生徒は私の授業では、教科書は最初に開いてその日に扱うところをざっと見たら、すぐに閉じてしまう習慣付いています(このソートの授業では、教科書は最初に開きませんでした)。そして、とにかく考え考え抜いて。「じゃあもう一度教科書を見てみよう」ということで教科書を開くと、なるほど、分かる、と。そんなことを目指しています。

 

 

Q5:

登場するキャラクターが親しみやすいので、生徒が「やってみよう」と思うことができ、ハードルを上げないことにつながっていると思います。いきなり「今日は並べ替えソートをやります。アルゴリズムをやります」と言ってしまうと、もうそれだけで授業の内容が遠い存在になってしまう可能性がありますよね。そういった生徒の身近に寄せる工夫がおもしろいと思いました。

 

Q5御家先生:

実はこれは私にとって、一つの弊害のようなものにもなっておりまして。年度の最初の頃は、生徒は「楽しい、楽しい」と言いながら徐々に難しくなっていく、というのはわかっていたのですが、この時期(年度の中盤以降)になると、「先生が楽しそうなものを提示したときは、罠だよね」という切り返しがちょくちょく出てくるようになりました。ですので、「ちょっとは警戒しながら、とりあえずは与えられた環境を楽しんでね」と言うようにしています。

 

警戒されていたのはごもっともで、終盤になって数式が出てきたときは、皆「うおーっ(絶望)」となっていました。「それでも、最初楽しかったところで、なるほど、と思えたら、きょうはそのステップは完璧にクリアしているからだいじょうぶだよ」と励ますようにしています。

 

 

Q6:

この辺りは結局プログラミングとつながる内容ですし、教科書にもソートのプログラムの構造は出てきたりしますよね。先生ご自身は、この先プログラミングに落とし込むことは考えていらっしゃいますか。

 

A6御家先生:

個人的には、ちょっとも考え直さないといけないな、という反省もありつつ、この次の授業でやったことをお話しします。

 

バブルソートは分かったね、説明できるね、ブクブクと泡のようになっているね、というような感覚的な「なんとなくわかった!」はこの授業の中で終えたので、そのアルゴリズムを言語化(日本語で書いてみたよ)というのを生徒に提示しました。箇条書き程度のものです。

 

その後、Scratchで簡易実装したものを提示しました。

 

確かにバブルソートが出来ていることと、それが前回(本記事内容)で扱ったことであると分かっていただけましたが、じゃあそれを自分たちでも実装しようとすると絶望的な表情を浮かべていました。

 

ただ、Scratchやピクトグラミングシリーズである程度のプログラミング経験はあるため、操作や試行錯誤はスムーズに出来ていました。殆ど手順を示してバブルソートを作らせ、その中で前回(本記事内容)で強調していた「二者比較しかできないね」を強調していました。どの部分を例えていたかを気づかせることを目的としてやっていました。

 

基本的には、生徒は徐々に付いて来られなくなります。頑張って付いてきてくれた人が6、7割、ちょっとギブアップしかけた人が1割ぐらいです。ここでのポイントは、Scratchが使えたり、プログラミングができるようになったりすることではなくて、最初の目標としては、ソートアルゴリズムを日本語で表現することをやってきているのだから、今度はそれをプログラムで表せたらいいよね、という展開にしています。

 

正直、心の中では、プログラムをどんどん書けるようになってほしい、ということはありますが、全てをまとめて提示すると、生徒にはけっこう負荷がかかってしまうので、少しずつ小さなステップを踏んで、「ここまでできたから偉いね」という形で提示しております。

 

提示したプログラムを読んで「なるほど」と思えばまず良し。自分でもそのとおりに動くものを作ることができればなお良し。このようにいろいろなスモールステップのゴールをたくさん提示しています。Scratchでここまでできた人は、発展としてランキング機能まで作ってみたらどうか、ということを提案してみようか、と思っています。

 

 

[生徒たちに発言を促す工夫]

この事例の中でも、度々生徒を盛り上げたり、発言を促したり機会について言及していましたが、私の授業ではとにかく考えさせて隣席の人と共有するおしゃべりを常に推奨しています。bitの説明もスイッチを手に取り「ON,OFFの2通りをこれ一つで表せますね」程度で終えられますが、一斉授業で周りに人がいることを利用して仮説を共有させることを常にしています。

 

また、教員の問いかけに対して、全員が答えるような機会を作っています。例えば今回の発表ではGoogleFormを使った例でしたが、「独り言の声量でいいから、絶対に声を出してねーー!!いくよ??せーーーーーーのっ!!!!!ざわざわざわざわ」(“ざわざわざわざわ”も言ってノイズを出すことで、声を出しやすくする)のように声を出させるなどといった工夫をしています。

 

一貫して情報の授業はピリついた緊張感ではなく、バラエティ番組に参加しているかのような空気感を出しているため、問いに対してすぐに生徒は思考して周辺の生徒と意見交換をすることが出来ていたと思います。なお、授業に関係のない話をしていた場合には、授業後にちょっとだけ「勘違いか意図的かわかりませんが、授業の空気感の意図がわかりませんでしたか」と個別に問うています。時々問うていますが、「考える→共有する」が多いため、結構頭を使っておりよそ事をする暇がないと時々言われます。

 

神奈川県情報部会実践事例報告会2022オンライン ポスターセッションより