よいプログラムを作ろう
よいプログラムを作ろう
1.対象
高校2年生以上,情報Ⅰの学習でPythonを学習した生徒向け
2.授業時間
2時間程度
3.授業の概要
とある高校の理数科の課題研究として相談を受けた「ちょっと惜しいフェルマー数(下図)」の組を探したいというテーマを題材に,よいプログラムとはなにか,特に速いプログラムはどういうものかについてを考えます.
まずは,ヒントなしに各自でプログラミングに取り組んでもらいます.プログラミングに慣れている生徒は標準的なプログラムを作ることができます.プログラムを作れなかった生徒もこの先の授業に参加できるように,もともと課題に取り組んでいた生徒が作ったプログラムとして標準的なプログラムを提示します.
標準的なプログラムでは探索範囲を広げるとすぐに計算時間が膨れ上がってしまって,現実的な時間で計算でなくなってしまいます.そこで,この計算をプログラムを改良して速く計算する方法を検討してもらいます.グループワークで実施し,グループごとに実際にコードを作成してもらいます.各グループの結果はGoogleスプレッドシートなどで共有し一番速く実行できたグループを特定し,そのプログラムも共有します.
最後にプログラムに精通した人はどういう点に注意してプログラムを作っているのか,いろいろなポイントを教えていき,その都度それによってどれくらい速くなるか調べていきます.以前に実施した授業では,70秒くらい(問題のスケールが300の場合)かかる計算を,生徒は10秒程度に速くすることができました.一方,専門家のプログラムは同じ処理を0.1秒程度で実行できます.生徒が想像するよりはるかに速くなるので,驚きとともにプログラミングの奥深さを学ぶことができます.
4.授業のねらい
プログラミングの初学者はとにかく動けばいいという感じでプログラミングしてしまいますが,学習の目標としてはそれでは不十分で,よいプログラム(速い,誤作動を起こさない,わかりやすいなど)を書けるようになる必要があります.初学者はそもそも「よいプログラム」という考えがないので,具体的なテーマをもとによいプログラムとはなにか,その重要性について学ぶ内容になっています.なお,もともと近隣の高校から,理数科2年生に向けて少し高度なプログラミングの授業をお願いしたいとの依頼があり考案した授業内容で,少し難しい内容になっています.
5.実施実績
秋田県立本荘高等学校の理数探究クラス2年生に授業を実施しました.授業に参加した生徒の感想は
今日は実際に体験しながら楽しく学ぶことができました。僕たちでは最後のプログラミングを9秒台にするのがやっとだったのでそれよりもとてもはやいプログラミングをしていてビックリ仰天しました。
私はよいプログラミングとはなるべく短くすませるものだと思っていましたが、本当の良いプログラミングは計算のスピードが段違いに速くなるものだと言う事がわかり、プログラミングの奥深さを知りました。
良いプログラムについて、興味深いお話を聞くことができ、充実した時間にすることができた。プロがコードをかくと時間を何倍にも早くすることができると知って、ワクワクした。
プログラムを作成して難しいけど自分で早くする方法を見つけたときはとても楽しく感じた
情報は難しくわかりづらい物だと思っていたけど今回の授業で情報がとても楽しいものだと思えました。
といった感じで,十分に授業の狙いを達成できたと感じています.