見出し画像

「まずはとにかく書いてみる」を重視したプログラミング授業【「情報 I 」授業実践事例#2】

ライフイズテックでは、授業の導入や動機づけ、プログラミング演習の進め方など実際の授業の内容や進行方法について詳しくご紹介いただく「情報 I 」授業研究会を定期開催しています。
noteでは、先生たちによる授業ツールの活用アイデアが満載の実践事例を連載していきます。

今回は栄光学園中学高等学校・日野俊一郎先生をお迎えし、「ライフイズテック レッスン」を活用しながら、生徒が自ら手を動かす授業づくりの工夫についてお話しいただきました。



学校名:栄光学園中学高等学校(神奈川県)
情報Ⅰは1年生で実施


生徒が手を動かす授業づくり

まず最初に、授業の流れを紹介したいと思います。私の授業では、授業終了後、次回分の「ライフイズテック レッスン」と理解度チェックワークを配信しています。
次回授業前日には、課題も配信します。ただ、実際に予習してくる生徒はそれほどいないので、授業で初めて取り組む生徒も時間内にレッスンが終わらせられるよう考えています。授業当日は、私は机間巡視をしているだけでほとんどしゃべりません。課題の期限は2週間後に設定するなどして、友達に聞いたりネットで調べたりしながら、とにかく手を動かしてもらうことを重要視しています。

授業で扱うことが時間的に難しいものは、自学自習にしています。1学期であれば、授業中にプログラミングを扱い、著作権に関することなど知識ベースのものは自習で完結してもらいました。いずれもGoogle Classroomで配信し、プログラミングはGoogle Colaboratoryを使って書かせています。問題と「ここにプログラムを書いてください」というファイルを事前に作って配布すれば、生徒が作成したものをこちらで確認できて、生徒が提出ボタンを押すと編集ができない仕組みです。

授業実践例①――エラーを体験して、気づきを重ねる

では、実践例として「ライフイズテック レッスン」のチャプター6での取り組みを紹介します。
レッスン1で扱っている内容は変数・文字列の結合・さまざまな演算です。ここで出した課題の1問目は「print(’無駄’*10)というプログラムはどういう結果になるか、予想して実行して確認してください」というものです。「以下にプログラムを記述」のところにこのプログラムを打ち込むだけですね。実行すると「無駄」が10個並びます。

2問目は「print(’雨の日は’+’憂鬱だ’*3)はどうなりますか」というプログラムで、その結果は「雨の日は憂鬱だ、憂鬱だ、憂鬱だ」となるわけですが、生徒たちに「四則演算と同じで掛け算優先なんだ」、「文字変数でも*って使えるんだ」とイメージしてもらいます。ここであえて「/」(割る)は出しません。「/ってなんだろう?」と、生徒が自分でエラーを出しながら確認してもらえるからです。

3問目では、エラーの出るプログラムを出して、「プログラムに手を加えて、できるだけ手数の少ないかたちで修正してみてください」と指示します。この問題では、プログラムの途中にprint(total)を加えると、「数学25点、英語32点」と入力した結果として「2532」と出てくるようになります。文字列の扱いになっているんですね。そのことが最初から分からなくても、エラーや試行錯誤、気付きを体感してもらいたいと思っています。

「あっ、averageのとこでエラーが出ている」、「このエラーはどういうふうに解析するんだろう」、「ここにprintって入れてみるといいんじゃない」、「プログラミングって上からやっていくんだ」、「結果が2523って出てきたけど文字列の結合と同じだ、ということは、inputって文字列を作っているんだ」、「じゃあ、数値に変換しなきゃいけないんだな」……こういった体感を経て、文字列と数字の扱いが全く違うことを体験してほしいと考え、このような課題を出しました。

授業実践例②――「条件式と繰り返し」では東大入試の数学に情報科学のアプローチで挑戦

レッスン2では条件式と繰り返しを扱うのですが、ここでは、東京大学の数学の入試問題を紹介しました。解く過程で人とコンピューターの違いがはっきり分かってくるので、結構いい問題だと思います。「3以上9999以下の奇数aで、a²-aが10000で割り切れるものを全て求めよ。」という問題です。この解答を求めるために、「3からスタートして奇数だけ調べる」プログラムと、「3から1万までくまなく調べて、if分で奇数である場合だけ実行する」プログラムの2つが書けるのですが、余りの計算を2回もやるプログラムだと負荷がかかります。「どちらのプログラムでも結果は出るが、人間にとってめんどうくさいことはコンピューターにもやらせないほうが負荷はかからない」と話しています。

それから、共通テストの試作問題も紹介しました。その問題をもとに、四つぐらい新たな条件をつけて実際にプログラムを書いてもらいます。さらに難しい問題はレッスン3が分かれば取り組めるようにもなっています。

授業実践例③―プログラミングの授業は、体を動かしてもらうことが大事

レッスン3は関数の作成です。一番簡単な課題として、「正の整数が入力されたときに、約数が全部出るプログラムを作ってください」というものです。「入力される値は必ず正の整数」という前提で、まずは作ってみることを大事にしています。

それから、くじを実行するプログラムですが、このようにプログラムがちょっと長いものになると、画面上では全体像が見えづらくなります。だから、いろいろな条件を新たに加えつつ、生徒に1から全部を書かせています。プログラムの上から下まで全体像を見るのはいい学びになると思っています。

レッスン4と5では、まず、while文のプログラム作成課題として、「ランダムに選ばれた整数に対して、その数字を入力するか、give upと入力するまで終わらないプログラムを作成してください」という問題を出します。これは結構難しいので、生徒たちは相談しながら取り組んでいます。このレッスンで同じく扱う二次元配列に関しては、「各教科の名前とテストの点数をどんどん二次元配列に格納させて、平均点と合計点が出るようなプログラムを作成してください」という課題を出しました。四捨五入については注意事項を添えています。

レッスン6は整列と探索です。探索についてはレッスン5で扱いますが、整列が理解できないと探索もうまく扱えないので、レッスン6で確認してもらいます。探索のプログラムはレッスンの中で完成していて変更要素がないのですが、探索するリストの要素数がたくさんあったほうがおもしろいので、線形探索と二分探索のプログラムを追加で作成する課題を渡しています。

私は、とにかく手を動かしてもらうことをメインにプログラミングの授業を行っています。「とにかく実行ボタンを押してみろ、押さないとどんな結果になるか分からないから」とよく言っていますね。本校の「情報I」では、プログラミングに10コマ、データ活用やデザインもそれぞれ10コマぐらいと実習系にも時間を取っています。生徒たちは書ける子に聞いたり、私に質問したりしながら取り組んでいます。手を動かしていれば、3年生の受験対策時にも、1年生の授業で手を動かした記憶がよみがえってくるのではないでしょうか。

日野先生、ありがとうございました!

▼Life is Tech ! Lessonについて
https://lifeistech-lesson.jp/

この記事が気に入ったらサポートをしてみませんか?