事例140
Pythonで実践プログラミング
神奈川県立厚木西高校 梁取新平先生

きょうはPythonを3年生の選択授業で教えた時のご報告をいたします。
勤務校は厚木市の山の中にあり、普通科全日制の中規模校です。3年ほど前からインクルーシブ教育実践推進校として、一つの教室に複数の知的障害のある生徒さんたちが在籍し、一緒に高校の授業を受けていることが大きな特色の一つです。
情報科の授業に対する子どもたちの関心はさほど高いとは言えませんが、面白く話を聞いてくれているという感触はあります。そのような中でプログラミングをどう教えていくのかを考えてきました。
プログラミングで何を教えるのか
今回、新学習指導要領の内容を確認するために、本文と解説書、情報科教員研修用教材も確認して、プログラミングの授業では何を教えなくてはいけないか、キーワードを抜き出してみました。

この内容を、高校1・2年生の、文系も理系も混ざった生徒たちに週2時間、年間で70時間の中で指導、評価するわけです。現実的には、これらの単元を13、4時間で指導するわけで、考えただけでも大変です。しかも、情報科は受験科目になる可能性もあるため、これまでのように「できるところまで」という考え方から我々自身も一歩進まなくてはいけません。
プログラミング教育の目的
これを見て、私なりに「プログラミングで生徒たちにどんな力を身につけさせたいのか」ということを考えてみました。
目的の一つは、コンピュータの中でやっていることを、おぼろげながらでも想像できるようになることです。

もう一つは、仕事をバラバラに分けて考えることができることです。

抽象的な言い方ですが、ここでの「仕事」とは職業のことではなく、例えば食事する、歯磨きをするなど、日ごろの行動を全て含めた動きのことです。それら一つひとつを分解していくと「手順」があり、手順に従わなかった場合にどのような結果が出て、そこに至った考え方がわかる。そんなゴールを考えました。
また、わからないことも予測できることに気づいてほしいと思います。

現状、私たちの身の回りにあるものは必ずしも全て数値化したり説明できたりすることばかりではなく、中には難しいものや曖昧なものもたくさんあります。
コンピュータなどの技術を使えば、それらを予測することができる。例えば天気予報や渋滞予測など、予測できるものは予測し、私たちの生活に役立てられると気づかせるということは目的の一つとして良いと思います。
自分が使用するスマホの中で、どんなことが起きているのか。それを考えながら使う生徒は、ほぼいないと思います。しかしスマホも人間が作ったものですから、その中で起きていることに少しでも思いを巡らせられるようになってほしいと思います。

この手のデバイスは、近年ブラックボックス化が進んでいます。一昔前は、パソコンの本体カバーを開けて、中のハードウェアをいろいろ付け替えてカスタマイズして使う人もいましたが、今の生徒たちのスマホの使い方を見ると、アプリを入れることはしても、それ以外の部分を分解してカスタマイズして使うような人はおそらくいないでしょう。と言うより、できないような仕組みになっています。パッケージングされたものを買ってそのまま使用するのは、思考停止につながります。
このような現状に対する考え方への入り口となるのが、プログラミングではないでしょうか。分からないものを解明する楽しみ、これがプログラミングを学ぶ目的だと、個人的には思います。
ただ、これだけでは少し寂しく感じます。本校は、卒業してすぐ就職する生徒もいますので、コンピュータを使った授業は人生で最後かもしれない。ならば、もう少しプログラミングの「面白さ」を伝えたいと思います。

プログラミングの面白さとは、試行錯誤や様々な失敗を繰り返しながら、自分が作ったプログラムがうまく動くという喜びを味わうこと。もう一つは、自分が作ったもので他の人が遊んでくれたり、動かしてくれたりというドキドキ感。限られた時間の中ですが、この三つはできれば盛り込みたいと考えています。
Pythonを選んだ理由
そのような考えから、様々な言語を試してきましたが、中でもご紹介したいのがPythonです。
理由は、入力が英語だということです。英語の授業でも、パソコンの英文入力を課題にすることもあるようです。高校生の授業ですから、日本語プログラミングや、いわゆるブロックプログラミングではなく、英語でコーディングする体験をさせたいと考えました。

また、インタプリタ言語なので実行過程やエラー箇所がよくわかります。さらに、ネット上に情報が多く、検索するとたくさんのサンプルコードや情報が出てくるため、問題が起きた時に生徒自身が解決手段を見つけやすいという利点があります。
私自身もPythonの勉強は今年になって始めたようなものなのですが、使ってみて私なりに解釈しているのは、Pythonそのものは言わば「普通の人」であることです。Python単体では基本的なことだけしかできません。
しかし、Pythonの強みは「心強い能力」があることです。それは、様々なモジュール、ライブラリを呼び出す能力です。子どもっぽい例えですが、ロールプレイイングゲームで例えると、職業、ジョブとか、アビリティのようなもので、それらを呼び出して自分の体に装備すると、屈強な戦士にも魔法使いにも、剣士にもなれるようなものです。Pythonにいろいろなライブラリを組み合わせることで、かなりできることが広がるということです。
人工知能やAIで有名な言語ではありますが、Python単体では人工知能もAIも作れません。
Pythonが人工知能のシステムを組むためには、このような便利なライブラリやモジュールを呼び出して組み合わせます。すると、このスライドにあるような数値計算や科学計算、グラフが作れるようなプログラムが作れます。

他には、Tkinterを使うとGUIアプリが作れます。Pygameはゲームが作れますし、PyInstallerと組み合わせるとEXEの実行ファイルを作ることができます。

自分で作ったコードをEXEファイルにできることの最大の利点は、そのEXEファイルを共有フォルダに入れることで他の生徒と共有でき、友達が作ったプログラムで遊べるという点です。そうすることで相互評価ができ、教員の評価の負担もぐっと減ります。
教員も、生徒のコードを見てすぐに良し悪しの判断をすることは難しいです。それならば実際に生徒同士で遊んでもらって、使い心地やインターフェースを多角的に評価する方が良いでしょう。ですから、私は実行ファイルに簡単にできるかどうかという点を非常に重視しています。
実際の授業で使用したもの
3年生の選択授業「情報の科学」では、開発ツールとしてGoogle ColaboratoryとWinPythonを使いました。
Google Colaboratoryは、ウェブ上でPythonのコーディングができ、とても便利です。

また、県立高校で支給されているChromebookでアクセスできます。ただし基本的なことにしかできないため、もう少し発展的な内容をさせたいなら、WindowのPCなどに開発環境を入れてから取り組んだ方が良いかもしれません。

本校ではWinPythonも試しました。これはAnacondaという統合開発環境に近く、インストール不要で様々なライブラリがあらかじめセットになっています。
欠点はファイルサイズの大きさと動作の重さです。おそらく、Anacondaを直接インストールした方がずっと早く動作するのではないかと思います。

授業の中で実践したこと
実際の授業では、数当てゲームで実践しました。数当てゲームの良さは、分岐、反復、乱数、データの入出力を一度にできる点です。
他には、関数の作成と利用のために、ユークリッドの互除法を使ってみました。

また、高校数学への挑戦として、数学が得意なライブラリを呼び出して利用してみました。

ほかには、せっかくPythonを使うなら少し人工知能らしいことをしてみようと考えました。たくさんの人間の写真の顔を認識するプログラムを作らせました。アナログ情報の認識は人工知能の世界の入り口です。デジカメなどを通じて実生活で経験しているものなので、生徒たちの反応も良かったです。
他には、タイピングゲームを作らせてGUIプログラミングを体験し、作ったゲームにBGMを乗せたり、背景画像を貼り付けたりして、思い思いにカスタマイズをしました。それを実行ファイルに変え、相互評価をするという流れです。

生徒の「苦労も大きいが面白い」という反応
生徒たちからは、「中学校までとは全然違い、難しくて心が折れる」という感想がありました。一方、「授業で学んだことがAIにつながっていると思うとすごい」という生徒が意外と多かったことは嬉しく感じました。
また、授業の最後にYouTubeやInstagram、ペッパーくんの感情エンジンなどがPythonを使って作られているという話をしたところ、興味を持って喜んでくれました。
自分たちが苦しみながらも勉強したものが、世の中のものにつながっていることを知った喜びがあるようです。

課題はまだまだ多い
プログラミング教育で私たちが教えなくてはならないことの一覧をもう一度表示します。
ここまででご紹介した内容でカバーできる範囲は、赤にした箇所しかなく、まだまだ足りません。
今後、他の先生と情報交換しながら、生徒に指導するためのノウハウを蓄積できたらと考えています。

今後取り組んでみたいのは、Webスクレイピングです。ウェブ上のデータをクロールし、データを自動的に集めるということも、Pythonの得意技ですので。
また、生徒が自分のプログラムを工夫したりいじったりできる「余白」が絶対に必要だろうと思います。教員が示したプログラムをただ打つだけでは、面白味を感じられないでしょうから。これからはこの余白づくりにも取り組んでいきたいと考えています。

※神奈川県高等学校教科研究会情報部会 情報科実践事例報告会2019 口頭発表より