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

答えと目標は違う。「できること」でなく、どういったプロセスが必要なのかを考える

東京都立立川高校 佐藤義弘先生

第12回全国高等学校情報教育研究会全国大会(和歌山大会)
第12回全国高等学校情報教育研究会全国大会(和歌山大会)

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

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

 

「情報の科学」を1年生で実施しています。

 

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

 

Python、ドリトル、JavaScriptです。

 

■プログラミングにかける時間数は何時間でしょうか。

 

2020年度は9時間、2019年度は6時間、2018年度は2時間でした。

 

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

 

初歩の同じところから始めます。

 

授業では教材を余分に用意します。例えばStep10まで作っておいて、授業の目標はStep5がゴールと設定しておきます。余力のある生徒は、先に進んで理解を深めます。また「Step8まで進んだら教室内を巡回して教えて回っても良い」としておくこともあります。

 

プログラミングは、まずコードを打つところから入ります。これまでの経験から、「プログラミングがわからない生徒は、『変数』という概念が理解できないのではないか」という仮説を立てているので、まず変数に対する処理を書いていって、変数に任意の数字入れると答えが出る、というあの感じがわかるような教材開発をしたいと思っています。

 

既にPythonでプログラミングの基礎的な文法の理解度をチェックするためのExcelの教材を作っています。例えばfor文の繰り返す命令を打つときに、前にスペースを四つ入れて打てているかどうかを、テキストマッチングで判定する、というものです。Pythonはコーディングに関しては自由度がないところが、逆に教材向きですね。変数についても、Pythonならコードの中で定義をする必要はありません。

 

Excelでコードの書き方をテキストマッチングで自動判定して、できる子はすぐ先に進めるし、できない子はできるようになるまで練習問題を何回もやる、という教材を作れば、理解に合わせて進めることができると思います。

 

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

 

初学者はコードの「写経」しかできません。写経ですら難しく、コピペも正しくできないことが多いと思います。ですから、写経の中から必要な知識や仕組みの理解ができるように、仕組みの説明を十分にします。

 

先ほどの質問にも関連しますが、例えば「ifと入れたら条件分岐ができる」とわかっていても、インデントでスペースを4つ入れることを忘れる人はたくさんいます。これはインテンドを入れる意味合いが理解できていないからで、ここはきちんと説明する必要があります。

 

 

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

 

プログラムは、まず読めることが大事だと思います。手順を伝えたり、フローチャートを読んだりするのと同様に、コード上で手順を正確に追っていくことに慣れていけば、いずれ自分でも書けるようになるかなと思います。

 

本校では、3つの制御構造が入れ子になった構造のプログラムの作成ができると良いのですが、たどり着けない生徒が多いです。ゴールとしては、例えばループと条件分岐を組み合わせて、「100」と入れたら、100までの素数が出てくるプログラムが書けるようになればと思っていますが、全員が達成できるわけではありません。

 

ただ、単純計算でいうと、プログラミングにかけられる授業時間は6時間ぐらい。「情報I」の4つの分野でそれぞれに3つずつ単元があるので、プログラミングは12分の1です。それにしては、プログラミングが注目され過ぎな気もします。

 

 

[探究活動について]

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

 

問題解決の手順としてのアルゴリズムは考えることができるかもしれませんが、情報科の授業の中だけで、プログラミング言語でコーディングできるようになるとは思いません。

 

 

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

 

探究は生徒の活動であるので、そこで使うプログラミング言語も生徒が選択します。昨年度の探究(SS課題研究Ⅰ)でプログラミングに関係していた生徒は、C#(ユニティを使うから)、Python(AIや機械学習をするため)、ブロック(レゴ:ロボット制御)のように、目的に合わせて選択します。SS課題研究ⅠはSSHの課題研究で学校設定科目であり、週2時間程度となります。1学年322名のうち、私のゼミに参加していた生徒は26名でそのうち15名がプログラミングに取り組みました。

 

 

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

 

昨年度のSS課題研究Ⅰでは「コンピュータで何か動くものを作る」が大きなテーマで、作るものを決めてから研究の目的を考える手法をとりました。具体的には、プロジェクションマッピング・映像作品・ロボット・ゲーム・AI・3DCG・ボーカロイドといった手法を選び、そこに研究テーマとなる「意義」を考えるようにしました。

 

原則自分たちでゴールを決めるので、完成するかどうかの予測はしていません。AIのチームは「Google翻訳を超える」がテーマでしたから、できないのは明白でした。できることが目的でなく、どういったプロセスが必要なのかを考えることが目的であるという考え方です。

 

 

■探究でプログラミングを扱う生徒に対して補講のような機会は設けられますか。行うのであれば、具体的にどのような内容でしょうか。

 

放課後等の自由利用時間を利用して自主的に取り組む程度で、補講等は行っていません。

昨年の反省から、今年度は「要素技術」(ソフトの使い方やプログラミング技術)は夏休み中に習得するように指導する予定です。

 

 

■探究の活動中のプログラミングに関する指導はどなたが行うのでしょうか。先生以外に、外部の講師やTAなどは置いていらっしゃるのでしょうか。

 

自分たちで解決するのが原則ですから、指導はありません。生徒からのリクエストに応じて、参考文献をSSHの予算で購入する程度です。昨年度は3学期になると、受験期を終えた3年生が自主的にTA役としてサポートしてくれました。

 

 

■探究活動のゴール設定はどのように行うのでしょうか。 

 

探究の場合、できる・できないは先に考えずに、まず自分たちでやらせてみるようにしています。

ゴールがとても遠い場合、要素を分解して、自分たちの研究として取り組める問題を探し、そこをゴールにします。AIのチームの場合、AIで翻訳するのは技術的に難しいことがわかり、インターフェイスにも活用できるAIの考え方を取り入れたチャットボットを作ることに取り組みました。それでもテーマは「Google翻訳を超える」です。

 

 

■「できる・できないは先に考えずにやらせてみる」というのは、指導される側もたいへんではないでしょうか。

 

活動の最初の段階で、予備調査や分析を行っていくと、多分、彼らが自分たちはどこまでいけるとかということがわかってきます。

 

それによって、目標はここにあるけれど、頂上にはたどり着けないから、その手前の2合目までの行き方を見つければそれでよい、とします。それでも確実に頂上には近づいている。高校生の探究というのは、それでよいのではないかと思います。

 

必ずしも頂上にたどり着くわけではないけれど、例えば、その中の要素技術を分けていって、ここの部分は自分で今から取り組んで研究できそうだというのを見つけながら、頂上に近い方向に少し進むのが探究ではないかと思っています。

 

答えと目標は違います。目標は遠いところにあって、それはいつかたどり着こうと思うものです。最近の流行のSDGsのゴールも、それが全て解決できるようにならないけれど、目標に掲げていますよね。そこに一歩でも近づこうとするのも難しいけれど、その方向に足を踏み出すこと自体が一歩であることに気付くだけでも、それは探究の成果として、正しい答えが出たと考えられます。

 

探究の成果というのは、「この成果はこれだ」と自分で納得できる方向にあるということであって、目標を達成することではないと思います。 

 

 

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

 

教えることを早めにあきらめることではないでしょうか。正しい方向を示してあげることが大切で、教えようとするのではなく、理解できるような手立てを用意してあげることが必要だと思います。探究などでは、目的意識があれば勝手に学びます。私よりプログラミングが得意な生徒はたくさんいます。正しく「すごいねぇ」と褒めたり、必要に応じて生徒に「教えて」と言えたりするマインドが必要です。

 

 

◇第3回中高生情報学研究コンテスト 東京都立立川高校の発表

 「カメラとRaspberry Piを用いた視程観測装置の自作」