事例292

どうする?単元「プログラミング」の1時間目

愛知県立高蔵寺高校 田中健先生

本セッションでは、昨年2022年度に私が実践した単元「プログラミング」の1時間目の授業についてご紹介します。たった1コマ分の授業内容ではありますが、見せ方は様々あるプログラミングの入りをどのように1コマにまとめるかという、一つの解のようなものをお示ししたいと考えております。ぜひ生徒のつもりでご聴講いただき、来年度、先生方が単元「プログラミング」の授業構成を考える際に参考としていただければ幸いです。

 

いきなりですが皆さん、古典は好きですか。古典って奥深くて面白いですよね。では、古典の授業は好きでしたか、ではいかがでしょうか。informaticsに浸かる皆さんは死ぬほど嫌いじゃなかったですか(笑)。「あり・をり・はべり・いまそがり」どこで使うの?、「未然・連用・終止・連体…」本文全然関係ないやん?と、情報の授業をそんな覚えゲーには絶対したくないんですよね。

 

「情報の授業って面白いんですよ。プログラミング、響きが仰々しいだけでめっちゃ面白いんですよ」ということが伝わるように、とにかく心理的なハードルを下げたい。そんな思いを込めた授業実践になっております。どうぞよろしくお願いいたします。

 

さて、本実践を行なった現勤務校、高蔵寺高等学校は4年制大学の進学率が98%という進学校としての位置づけです。現状、「情報」はなんと3年次履修なのですが、私が異動したときには、既に新カリでも3年次に履修することが決まっており、一切の手出しができない状態でした。

 

来年度、進学校、3年生、情報。楽しさよりも点数を……。非常に困っております。誰か助けてください。

 


進学校あるあるなのですが、情報科の専任教員は私が初代です。私が異動してきた2020年までは、他教科が主担当である非常勤の先生が「情報」の授業を担当されており、古き良き「1学期Word、2学期Excel、3学期PowerPoint」といったthe情報リテラシーでした。紆余曲折と非難の中、だいぶ苦労しましたが、これまで4年かけて、ようやく校内の教科「情報」への風当たりも変わってきました。もちろん共通テストへの導入が一番の推進力でしょうが、ここ1~2年で生徒や保護者、他教科の先生方の意識もかなり変わってきたのかなという肌感覚です。

 

 

こちらは新カリ「情報Ⅰ」の展開にあたり、私が諸方面で書いたりお話ししたりしてきている内容ですので割愛しますが、本実践の屋台骨でもあります。「田中健、高蔵寺高校」で検索していただければ色々と出てきますので、よろしければご一読ください。

 

 

■本授業の位置づけと目標

 

前置きが長くなりました、それでは実際に実践内容をご紹介します。今回の内容はご覧のとおり、年間48コマで構成した2022年度計画の25~31コマ目、単元「プログラミング」の初回です。

 

 

私の授業の特徴といえば、生徒が自分自身の考えを言語化し、他者と共有すること、それに尽きます。日常生活の一場面をお題として設定して投げかけ、最適解を探るというものです。その過程では好きなことを話していいし、正解を出す必要はない。正解出されると私の存在意義もなくなりますし(笑)。その上で他者との意見共有が肝要です。

 

製作に携わっている者が断言するのはおかしいのですが、「情報」の内容の本質は実は教科書の中にはありません。日常に「情報」がどのように溶け込んでいるのか、それを考えさせ、発見させることが高校生に必要な学びとしての「情報」です。そういったメッセージ性を込めて、毎回サイレントブーイングを浴びながら、暑苦しく楽しく展開しています。

 

 

■導入 ~自分の考えを言語化する・他者と意見を共有する~

 

こちらが授業のはじめに配付するハンドアウトです。諸権利の都合上、こういった講演ではお見せできない内容に関わるものについてはグレーアウトさせてありますのでご了承ください。

 

 

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

 

 

※ハンドアウトのダウンロードはこちらから

プログラミング_ハンドアウト.pdf
PDFファイル 341.5 KB

 

先ほど申し上げた通り、どの単元であっても、最初に必ずお題が出されます。今回のネタは懐かしのEテレ「ピタゴラスイッチ」の「アルゴリズムたいそう」です。文面は世俗的なので表現を変えますが、隣の人にぶつからないように各人どのように動くか、を体操に仕上げたものでした。実際にアルゴリズムたいそうも流してみます。

 

 

イメージがつかめたところで、恐怖の言語化の時間です。まずは「アルゴリズムって何?」となりますが、大多数はよくわからない、という反応です。そらそうですよね。そこで次に、「教科書の単元には『アルゴリズムとプログラミング』って書いてある。じゃあ、プログラミングの方は聞いたことあるはず。プログラミングって何?」と問いかけてスタートです。

 

 

最初に2分間で自身の考えをことばにします。次に2分間で教室中にどこへでも移動し、他者の考えと突き合わせます。合言葉は「どんどん絡んでください」です。4月のうちは生徒は困り果てていますが、秋口になると慣れたもので、生徒は何とか自分(達)なりの解答を絞り出して対抗してきてくれるようになります。

 

時間が来たら「悪魔のくじ引き」のフェイズです。よくある割りばしで作ったくじを5本引いて、見事当たった生徒は、自身の考えをホワイトボードに書かされ、順番にその根拠を説明させられます。その後、面白い解答や明らかにサボった解答など、必要に応じて私から各種ツッコミが入ります。これがもうとにかく不評で。

 

こうした過程を経て、プログラミングとは?の定義が共有されます。

 

これにのっかる形で「アルゴリズム:日常生活における目標達成や問題解決のための手順」が定義され、先のアルゴリズムたいそうでは「ぶつからない(問題を起こさない)手順」と結びつけます。ここでのポイントは、コンピュータの世界っぽいことば「アルゴリズム」が日常にも遍く存在することを示すことでしょうか。

 

 

■大学デビューのためのアルゴリズム? ~教科書の内容と身近な生活を結びつける~

 

進学校の生徒たちなので、「当然仕事は受験勉強です」などと日々生徒は強調されています。これは不憫極まりないということで、そんな抑圧された受験生のため、半年後に控えた大学デビューの一場面にアルゴリズムを登場させてみました。

 

 

こんな場面設定です。「今日は大学の入学式。隣にはこれまで見たこともない美男/美女、これはお近づきにならなければ!」ということで、その子と仲良くなるためにはどのような作戦でどのような行動をとるか、クラス全体で行動(処理)をつなぎ合わせていきます。

 

スタートは「あの人の名前しか知らない自分」、ゴールは「あの人が『彼氏/彼女』として隣にいる自分」です。ハンドアウトのSTARTからGETに向かって、取るべき行動(処理)を「悪魔のくじ引き」で繋げていく。見方によっては相当な悪魔度合いですが、これがなかなか盛り上がるんです。

  

 

 

(展開例)

田中:「38番! 吉田君、最初に何する?」

吉田:「話しかける!」

田中:「ですよねー」(ホワイトボードにフローチャートのように処理「話しかける」を記述)

「次、9番! 岡田さん、何する?」

岡田:「えー、インスタ交換する!」

田中:「インスタないと始まらんよなー」(同様に記述)

「次、32番! 矢野君、続きは?」

矢野:「手を握る!」

田中:「不審者やん!」

 

こんな感じで、クラス全員で繋いでいきます。脳内で思い描いたようにGETまでの過程がきれいにつながることもあり、失笑が起きるものもあります。展開例のような行動を取ったり、最初に話しかける時にちょっと挙動不審だったりするなどの失敗例も途中で上げつつ、ドクロの方に処理を進めて「人間もコンピュータもバグると問題が解決できない」といった話を交えると、教科書の記述や用語が身近な生活と関連付けられます。

 

まとめとして「今、クラス全員でつないだ手順はGETまでの道筋。これはまさにアルゴリズムの定義と一致する」ともってくると、アルゴリズムはプログラミングの世界だけに存在する特殊なものではない、と納得できる筈です。加えて、アルゴリズムをコンピュータにわかることばで記述することがプログラミングである、とすることで、ハンドアウトのオモテ面が大団円を迎えられます。簡単に言えば、目的が達成されるのであれば、アルゴリズムとしてはOKとしても良いのかもしれません。

 

 

このように、まずは生徒の身近な話題から興味・関心を引き出し、プログラミングを取り巻く環境を特別難しいものと思わせない。それこそが単元「プログラミング」の1時間目における最重要課題ではないでしょうか。

 

見えないアルゴリズムは日常にも数多く存在しており、人間は知らず知らずのうちにアルゴリズムを自分の中で無意識的に生成している、ということは次のスライドでも「へえ~」という反応が返ってきます。

 

人は1日に35,000回、無意識的に選択をしている。食事内容を考えるだけでも226回の選択をしているというような文献も有用でした。

 

 

■体験的な学びからアカデミックな内容へ ~フローチャートをトレースし、アルゴリズムを考察する~

 

続いて、せっかく美男美女をGETした処理手順がホワイトボードにあることに乗っかり、簡易的なフローチャートのトレースに入ります。ハンドアウトの裏面に配した「フローチャートをトレースし、どのようなアルゴリズムか考察せよ」という問題です。

 

まずは5分程度で楕円(開始と終了)、長方形(処理)、ひし形(条件分岐)、矢印、変数あたりをなぞる用語のインストラクションを行なえば、ほとんどの生徒が取り掛かれます。もちろん、独力では難しいという生徒もいるため、基本的に私の授業中では席移動・相談は任意としています。この時期になるとアウトプットの重要性は生徒にしっかり伝わっており、喜ばしい限りです。

 


また、ある程度時間が経った頃に、トレース表の説明を入れています。それぞれの変数の初期値はいくつであるか、何回目のループでそれぞれどのように値が変化するか、といった変数の更新履歴を可視化することは令和7年度に初めて実施される共通テストの大問3でも必須になってくるでしょう。簡単なトレース表を自身で作り、埋めていくことで当該アルゴリズムにおける規則性も徐々に見えてくることもあります。

 


フローチャートを交えて「アルゴリズムには必ず目的があること、その目的を見極めること」ということを習慣づけられると、より次時以降のプログラミングへの意欲も湧くのではないかと考えています。

 

 

■まとめ ~生徒が読み解く態勢をつくる~

 

さて、本セッションの制限時間も迫ってまいりました。

今回の授業で特筆すべきは「プログラミング言語そのものには一切触れない」ことです。プログラミング言語が変わってもアルゴリズムは変わりません。学習者がアルゴリズムの必要性を理解する前にプログラミング言語に触れてしまうと、プログラミング言語によって異なる文字列を記憶する、という地獄の古典文法と同じ方向に向かってしまいます。


プログラミングにおいて、記憶しなければならないことは何一つとして存在しません。更に言えば、困ったら文法書を見れば書いてあります。

 

よって、単元「プログラミング」の初回は「生徒がアルゴリズムを読み解く態勢をつくり、またそのマインドセットを行なうこと」が必須である、というのを私の結論としたいと思います。

 

以上、単元「プログラミング」の1時間目の授業展開とそのねらいのご紹介でした。ぜひ次の全国大会では先生方の授業実践もお聞かせください。本日はありがとうございました。



■質疑応答

 

Q-1.私立高校教員

すごく面白い内容でした。ひとつ質問なのですが、目的が達成されたら、アルゴリズムとしてはOKだと仰っていましたが、先ほどのフローチャートのように1から10まで足すような場合、例えば「1足す2足す3足す4足す…」のように、全部足す生徒がいると思うのですが、それはOKなのでしょうか。

 

A-1.田中先生

うまい、うまくないという話になると思います。アルゴリズムにも良いアルゴリズムと悪いアルゴリズムがあります。「隣の美男/美女と仲良くなる」というお題に当てはめると、その最短ルートもあるのに、なんでこんな回りくどいことするの?というやり方でも達成できるかもしれません。コンピュータには個体差はなく決まった反応をするが、人間には個体差があってどんな反応をするかわからないという現実世界の理不尽は多分に存在します。

 

高校生の学びであれば「目的が達成されたらOK」ですし、プログラマという仕事の話であれば「最短ルート」が良いですよね。授業の中では「うまいアルゴリズム、うまくないアルゴリズム、失敗するアルゴリズム、それぞれあるんだよ」ということを最終的に伝えたいなとは思っています。

 

 

Q-2.私立大学教員 

これから情報入試を迎えるにあたって、情報Ⅰの3年生配置は変えないのでしょうか。生徒は何と言ってますか。

 

A-2.田中先生

高校の先生はお分かりかと思うんですが、教育委員会に提出したものはすぐには変えられませんし、1校1名配置の情報の先生は究極のマイノリティです。次の教育課程でのマイナーチェンジを目指すとなると数年度にはなるでしょうか。ぜひ全国的に学校運営に携わる先生方に教科「情報」に興味関心をもっていただき、点数を取ることがどうしても至上命題になってしまう3年次履修を避けるように働きかけていただきたいものです。

 

現時点では生徒に詳細は伝わっていない雰囲気はあるので特に何も言っていませんが(笑)。恐らくですが、今の2年生は、今年度の2月の各社模擬試験での教科「情報」が杮落としです。そこで「解けん!」となって焦りだし、教科「情報」3年次履修の先生が苦しめられることになるのではないでしょうか。何にせよ情報の先生が独りで抱え込むことのないよう、お願いしたいところですね。

 

 

Q-3.私立大学教員

「プログラミングを嫌いにさせたくない、アルゴリズムの本質に触れたい」ということで、導入としてすごく素晴らしいと思います。自分ごととしてやらせるというのも、とても面白いと思いました。

 

ただ、プログラミングのアルゴリズムって、一つ一つが矛盾なく進んでいかないと、どこかではまっちゃいますよね。デートのお題だと、順次的な処理や条件分岐は起こり得ると思うのですが、ループはプログラミング独自の内容なので、なかなか自分ごととして捉えにくいように思えます。ループにうまく持っていけるような題材があれば、教えてください。

 

A-3.田中先生

それ実はお題にも適用できるんです。パラメータとして「好感度」を考えてみてください。好感度がまだ低い状態で「付き合って」と言うのと、高くなってからではどちらに実現可能性が?ということですね。それであれば、好感度のパラメータが一定以上になるまで、好感度を上がる行動をとり続けるというループを発生させられます。全部こじつけですけれども(笑)。仰る通り、デジタルの世界は「矛盾なく」が大前提ですが、人間の世界は恐ろしいほどに矛盾だらけです。こじつけ能力も先生の力量に入れても良いのかもしれません。

 

話が逸れました。やはり1コマ目の入りということで、ハードルを極限にまで下げることが目的になります。トレードオフの関係にある正確性よりも分かりやすさでしょうか。ぜひ共に授業ネタを考え出していただけるとありがたいです(笑)。

 

第16回全国高等学校情報教育研究会全国大会(東京大会) 口頭発表より