プログラミング×探究活動をどのように指導する?

プログラミングの真髄は「効率化の追求」が肝であることを念頭に置いて

山口県立岩国高校 山下裕司先生

情報処理学会第81回全国大会
情報処理学会第81回全国大会

[現行の教科「情報」のプログラミングについて]

■情報科の科目名、実施学年をお教えください。

 

文系2年生で「社会と情報」、理系2年生で「情報の科学」を実施しています。

 

■授業で扱うプログラミングの使用言語は何でしょうか。

 

年度によって違いますが VBAは必ず扱います。年度によってはHTMLとJavaScriptを扱いました。

 

■プログラミングにかける時間数はどのくらいでしょうか。

 

年間を通して、プログラミングを意識した授業展開としています。単元としてのプログラミングには10時間くらいかけますが、それに限定することなく、いたるところでプログラミングを通して学び、プログラミングと共に学びがあり、プログラミングについて学ぶという、いわば「through」プログラミング、つまりプログラミングを通して他教科の単元の理解を深める、「with」プログラミング、つまりプログラミングで授業展開に役に立つことをする、という考え方です。

 

「about」プログラミング(=プログラミングについて学ぶ)もいいですが、いきなり単元として扱うとなると、どうしても違和感があるし、唐突です。

 

ですから、今やっている授業では、「プログラムを使うとこんなことができる」ということを、何かにつけて生徒に見せています。

  

 

■初心者とAdvancedの生徒は、同様に初歩から教えるのでしょうか。 指導の工夫があれば教えてください。

 

全員初学者として、初歩から教えます。丁寧にスタートすることが大切ですし、いたるところでプログラムの動作を見せていくようにしています。そうすると、それだけでモチベーションが上がる生徒がいます。得意な生徒は、周囲の生徒のフォローに当たってくれます。

 

 

■特に初学者の生徒を教えるにあたっての工夫を教えてください。

 

プログラムの存在意義は、効率を上げることにありますから、その意義を感じ取れる題材にすべく、内容を選んでいます。

 

ゲーム的なものでプログラミングの導入をすると、効率化の追求という観点から外れてしまうように思います。手作業で何時間もかかりそうな作業であっても、プログラムを組めばすぐに終わらせることができるといった、生徒にとって可能性の拡大になる方向で題材を模索しています。

 

例えば、パワーポイントを生徒に提出させて、その場で一つのファイルにまとめるというのも、その一つです。40人分のパワポを1つずつファイルを開いてくっつけていると、それだけで30分ぐらいかかってしまう。これをプログラムで瞬時にやって見せて、「このプログラムはこんなコードで動いているんだよ」というのを見せると、生徒はもうモチベーションが違ってきます。これが、先ほどお話しした「with」プログラミングです。

 

そういう意味で、プログラムをわざわざ組むより手作業でやったほうが早いという題材は失敗です。実際に作らせる際には、できるだけ効率よくプログラムが組めるように、部品(基本的なコード)を置いておき、それを利用(コピペ)させるのがよいと思います。

 

 

■先生は数学の先生でもありますが、数学の内容を「情報」との連携させる工夫はどのようになさっているのでしょうか。

 

個人的には、「情報」は2年生で学ぶのがおもしろいと思います。数学をまず1年生で学んだあと、2年生の「情報」で、数学で学んだことを題材として利用できるからです。

 

情報では他教科の「原体験」をさせることができるのではないかと思っています。「原体験」とは、例えば、物理で斜方投射を学びますが、子どもたちはそれ以前にずっとボール遊びをして、放物線を体験しています。あの体験なしで斜方投射を学んでも、生徒にはちんぷんかんぷんでしょう。私はこれを「原体験」と呼んでいます。原体験なしで、数学を頭だけで理解しようとするからのみ込めない、ということがあります。

 

例えば「数列」です。数学の授業で、先生が黒板に「等比数列とはこういうもので、等差数列はこういうもので…」と5項目くらいまで書きますが、その程度ではダメなのです。プログラムを使えば、数百項でも簡単に表示することができます。そして生徒たちは、原体験として「等比数列はあっという間に計算できないところまでいってしまうけど、等差数列はゆっくり増えていくんだな。数列の項と数列の和はこんな関係にあるんだな」ということを、直観的に知ることができます。

 

「漸化式」も同様です。漸化式とはどんなものかを感じ取らせるためには、多くの項を見せることが効果的ですが、これもプログラムを使えばまさに一瞬で提示することができ、生徒たちも納得できる。これが教科学習におけるICT利活用の理想の形であり、プログラミングを学ぶ意義だと思います。

 

数学に限らず、いろいろな教科で生徒が今どんなことを学んでいるか、ということについては、常にアンテナを張って、その内容を強化できるような題材を探しています。そうしないと、生徒はすぐに内職を始めますから(笑)。それでも、「今まで(他教科の内容が)よくわからなかったけど、今日の授業でわかったよ」と生徒から言われることが私の財産であり、モチベーションになっています。

 

 

■プログラミングの授業のゴールを教えてください。

 

初学者でも簡単にプログラムできて、そこから得られる結果が「人間業では無理なものを実現できた」という体験になればいいと思います。授業では、パソコンをあくまでも高機能な電子計算機として使えればゴールだと思います。「パソコンに使われている」感が払しょくされ、「パソコンに命令している」感が達成感につながります。

 

 

[探究活動について]

■初歩的な描画やゲームつくりなどから、いずれ問題解決の目的に合わせたアルゴリズムを考えられるようにするために、通常の授業を行うにあたって心がけていることがあればお教えください。

 

今回のコンテストに応募した内容のように、課題研究といったじっくり取り組める授業では、時間をかけて問題解決のためのアルゴリズムを模索していけますが、週2単位の「情報」の授業だけでは、そこまで全員に求めるのは無理だと思っています。

 

課題研究で心がけていることは、「プログラミングは実験器具を準備する段階だ」ということ。どんな実験をして何を求めたいのかというコアな部分と、それを実現するために必要な実験器具は何かということは切り分けて考えるということです。

 

 

■「総合的な探究の時間」でプログラミングの使い方はどのように決めているでしょうか。

 

「プログラミングで何かする」ことを前提にすることも、「やりたいテーマが先にあって、その解決にプログラミングを使う」ということも、どちらのケースもありうると思います。

 

その際、「数学を使って課題研究を進める」という点は必ず押さえています。「プログラミングは数学の出口(=活躍場所の意)を与えるもの」として、例えば「統計処理をする」のであれば、統計学の検定について学び、それを実践するというところでデータ処理のプログラムの登場となります。

 

あるいは、「プログラムで画像処理をしてみたい」というのであれば、何を研究するかということについては、プログラミングでできる処理を体験しないと発想がわかないので、実際に画像処理をやってみます。そして、「こんなことができるなら、こんなことを研究してみたい」という順番になります。

 

 

■探究のテーマの設定の仕方を教えてください。最初はどの程度具体的にテーマを設定するのでしょうか。

 

ケースバイケースです。落としどころを考えて提示する場合もありますし、どうなるかハラハラしながらスタートする場合もあります。テーマの候補を例示としてあげておくと考えやすいようです。

 

以前に、Σ(シグマ)もプログラミングも習っていない生徒たちがΣk7まで用いた3項間の関係を表す新しい公式(「三項間におけるシグマ関連公式」)を作ったことがありましたが(※)、あの時は「コンピュータの膨大な計算能力を使って何かやってみたい」という生徒たちに、私からΣを使ってみたらどうか、と題材を持ちかけました。

 

Σというのは、全くもってプログラム的な記号です。k=1からnまで順にたしていくわけですから、文字通りの繰り返し構文のプログラムですね。ですから、プログラムコードと非常に相性がいい題材と言えると思います。

 

シグマ3乗の公式の作り方は、座談形式で私がレクチャーしましたが、あとは同じ手法だからやってごらん、という形で渡したら、自分たちで放課後の時間も使ってどんどん工夫していくのです。そのうちに数学の授業が追い付いてきたのですが、そのころにはシグマ4乗、シグマ5乗くらいまで自分たちで作っていました。最終的にはシグマ7乗の公式まで作ってしまって、私の方がびっくりしたのですが、生徒たちは教科書を飛び出した内容をいじることができる、ということをすごく喜んでいました。そういった、いわばフロンティア精神を味わえるのが、プログラミングの醍醐味でもあると思います。

 

ゴールを設定しても、当初の目標からすれば「無理だ」ということになる場合もありますが、そこに至る過程を探究活動の報告として行えば、立派な発表だと思います。

 

https://www.wakuwaku-catch.net/jirei19115/

 

 

■探究の活動中のプログラミングに関する指導はどなたが行うのでしょうか。補講のような機会は設けられますか。

 

私の場合、プログラミングに関する指導は一人で行っています。補講というよりも、放課後の活動が多くなります。土日に時間を取ったり長期休業に時間を取ったりすることが、補講といえば補講でしょうか。

 

■最後に、プログラミングを教えるための「秘訣」をお教えください。

 

人の手では及ばないことが実現できることを指導者自身が楽しいと感じること、そして、新しいことを取り込む柔軟な思考であると思います。

 

プログラミングだけでなく、情報科の授業は、「効率化の追求」が肝であると思います。効率化を追求するというイメージを常に持っておかないと、遊びになってしまいます。いかにたくさんの作業を瞬時に処理できるか、いかに人間が楽をできるかというところを押さえておけば、プログラミングの有用性が語れます。

 

確かに、ゲームのプログラムは、子どもたちには面白いかもしれませんが、有用性という点は欠けるのですね。ですから、プログラミングはぜひ「効率化の追求」を押さえて授業を進めるべきだと思います。それは、おそらく生徒にとって入試対策にもなるのではないかと思います。

 

 

◇第3回中高生情報学研究コンテスト 山口県立岩国高校の発表

「顔認証システムの構築と読み取り」