オンラインイベント「教科『情報』をめぐる動きと情報入試に向けた指導を考える」

「情報Ⅰ」プログラミングの指導と大学入学共通テスト

東京都立立川高校 指導教諭  佐藤 義弘 先生

ご本人提供
ご本人提供

はじめに簡単に自己紹介します。私は東京都立立川高等学校の情報科で、指導教諭をしていますが、情報科ができたときから、ずっと情報科の専任として勤めています。ご縁があって、津田塾大学の非常勤講師もしています。また、執筆や監修等では、東京書籍の教科書、日経BPの「情報最新トピック集」と、近刊の「ニューステップアップ情報Ⅰ」という問題集も作っています。

 

学習指導要領作成の協力をさせていただいたこともあり、新しいカリキュラムについては早めから勉強する機会がありました。

 

 

 

「情報I」におけるプログラミングの扱い

 

まず「情報Ⅰ」におけるプログラミングの指導についてお話しします。「情報Ⅰ」というと、新聞などでも、どうしても「プログラミングを学ぶ科目」と書かれることが多いですが、プログラミングは学習指導要領で言えば全体の12分の1です。

 

つまり、学習指導要領の分野が(1)から(4)まであって、その中がそれぞれ(ア)(イ)(ウ)の3つの項目に分かれている。均等割りの時間数とすると、2単位の時間数の70時間を12で割って、6時間程度になります。そうすると、その中でプログラムが書けるようになるか、というのは問題だと思います。

 

プログラミングをご自分で勉強された方はおわかりになると思いますが、6時間ではと無理では、と思われる方もいらっしゃるかもしれませんし、逆に既にどれかのプログラミング言語をある程度習得されている方は、6時間あればあらかた書けるのではないか、と考える方もいらっしゃるでしょう。

 

 

プログラミングが「情報I」の全体の12分の1という根拠はこのような形になります。

 

学習指導要領は4つの分野で書かれています。その4つの分野のうちの「(3)コンピュータとプログラミング」の中に(ア)(イ)(ウ)と3つの項目があり、そのうちの「(イ)アルゴリズムとプログラミング」がプログラミングに該当します。

 

これを均等割りすれば、6時間程度が妥当なのかな、と思われるような構成になっているわけです。しかもアルゴリズムとセットですから、アルゴリズムとプログラミングで計6時間程度、と見るのが妥当でしょう。

 

 

アルゴリズムについて、学習指導要領の解説には、「フローチャートやアクティビティ図などで表現する」ということが書かれています。

 

アクティビティ図はUML(Unified Modeling Language:統一モデリング言語)ですから、割に厳密に定義が設定されています。フローチャートにも、定義があると言えばありますが、アクティビティ図の方が、厳密性が高く、そんなものを書かなければならないとなると大変だな、と思って、中学の技術科の教科書を見ましたら、フローチャートはほとんどなくなっていて、アクティビティ図にほとんど移行していたので、びっくりしました。

 

プログラミングでは、『データやデータ構造』『プログラムの構造』『外部のプログラムとの連携』といったことをやりましょう、とされています。そうやって考えると、アルゴリズム2時間とプログラミング4時間という割合かな、と思えてしまうわけですね。

 

 

今、いろいろなところからプログラミングの教材が出ています。オンラインのプログラミング教材もあります。無償で提供いただけるものもあり、大変ありがたいのですが、実は授業の中では使いづらいのです。

 

よくあるパターンが「全20時間の授業プラン」というものです。先ほどから申し上げているように、均等割りをするとプログラミングに充てられる時間は6時間程度。授業の工夫で、もう少し時間を増やすことはできますが、それにしても全20時間では、授業の中で全て行うのはとても無理、ということになってしまいます。

 

また、既成の教材を生徒にやらせてみると、あまりに身に付かない、ということも少し気になっています。プログラミングの教材というのは、大体において一貫した一つのテーマがあり、そのテーマに従って解決できるように進んでいく、というパターンでできています。このパターンでは、正しくできたら次に進むことになりますが、そうすると、一つのことを1回しか経験できないのです。

 

例えば、リストの扱い方をやったとしても、分かりました、できました、で次に進んでしまいます。しかし、また繰り返して使うわけではないから、忘れてしまうことになります。

 

一般的な授業では、例題をやって、「こうやると解決できるね」ということを説明したところで類題をやってみましょう、ということになりますが、こういったパターンで進むオンライン教材は、実はあまりないのですね。ですから、あまり身に付かない。その場はできても、忘れてしまったり、定着が緩かったりということも気になるところではあります。

 

 

プログラミングを「情報」で学ぶ、ということについて考えてみます。

 

「情報I」の授業だけでプログラム言語を1つマスターできるかというと、ちょっと難しいのではないか、と思います。いろいろ工夫してみましたが、できるようになった、という感はあまりなかったですね。ある程度読めてはいるな、という感じはありましたが、書けるということにはならなかった、というのが正直なところです。

 

「情報」の授業で学べることとしては、コンピュータはプログラムに従って動くこと。分岐や分岐といった処理が素早く正確にできるといった、コンピュータの特徴が理解できること。コンピュータに分かるようにプログラムで意図を伝えなければならないということ。コンピュータが意図を「理解」しくれることはない、というあたりであると思います。

 

最後の「コンピュータが意図を『理解』してくれない」ということについては、自分のプログラムでエラーが出ると、「なんで分からないの?!」と、パソコンの画面に向かってブツブツ言っている生徒が意外にいるのですね。生徒たちにとっては、コンピュータは万能なのです。本校は、優秀な生徒が揃う学校ですが、それでも早くから高性能なコンピュータを身近に使い過ぎたせいか、どうも勘違いが大きいのですね。コンピュータだから、こちらが多少間違えても意図を理解してくれるのではないか。コードは正しいのだから、全角と半角の違いくらいわかってくれないのか、と思ってしまう傾向があるのではないか、と思われます。

 

そしてDNCL2(大学入試センター言語の新しいバージョン)が読めるようになってくれたら、と思っております。とりあえず、そこまでできればよしとしてよいのではないかと思います。

 

 

 

学習指導要領の読み解き方にはポイントがある

 

次に、学習指導要領の解説をしっかり読んでいきたいと思います。学習指導要領の解説には、読み解き方があります。これは、教科書会社さんの説明会でも、ある程度お話しされているとも聞いています。

 

学習指導要領の書き方はいろいろ工夫がされています。

 

「理解するようにする」とか、「扱う」、「触れる」、「養う」と書いてあることは、『授業の中で取り上げなければならない』ことです。また、「(このようにすることも)考えられる」と書いてあるのは、『発展的に取り扱ってもよい』と読んでよいそうです。このことをまず頭に置いて、もう一度学習指導要領を読んでいただくと、ちょっと様子が変わってきます。

 

 

例えば「(3)-(イ)アルゴリズムとプログラミング」の「知識および技能」はこのスライドのようになっています。これは学習指導要領ですが、学習指導要領の「解説」を読んでいただくと、ちょっと様子が変わってきます。

 

 

学習指導要領の「解説」では、『アルゴリズムの表現』や『データ構造』『プログラムの構造』といった具体例が挙げられていますが、これらは全て『考えられる』で書かれている、というのがポイントです。

 

とはいえ、プログラミングをする上で、これらのことは知識・理解として当然やっていかなければなりません。ただ、学習指導要領の解説に明示されている具体例については、環境が整わなかったり、生徒の実態から見て難しかったりしたら、そこまでのレベルの内容をやらなくても大丈夫ですよ、と読めるように書いてある、と考えられるわけですね。

 

単純なアルゴリズム・典型的なアルゴリズムについても学んでおきましょう、関数やAPIの利用も考えられる、と書いてありますから、この中からできるものがあれば、いくつか拾ってやっておくとよいでしょう、と読んでいただければよいかと思います。

 

 

『アルゴリズムとプログラミング』をどのように考えていったらよいか、ということについては、現行の「情報の科学」に、「(2)問題解決とコンピュータの活用」という単元があります。この中の「(イ)問題の解決と処理手順の自動化」に、ちょっと足せば大丈夫だ、と考えればよいと思います。

 

ですから、現在「情報の科学」で授業をされている先生にとっては、もう少し工夫をすれば何とかなるだろう、と思います。

 

現在「社会と情報」をやられてる先生方は、この部分は新たな展開を作っていかなければならないので、ちょっと大変かな、と思うところはあります。

 

アルゴリズムについては、アクティビティ図について、一度触れておく必要があると思います。私も、中学の技術の教科書がここまで変わっていたことについては不勉強でした、という感じでした。

 

プログラミングについては、リストとか配列といった『データ構造』と、『外部のプログラムとの連携』が追加されました。これも考え方はいろいろありますが、『外部のプログラム』をAPIと言ってしまうと割合に簡単ですが、実はAPIは仕様がしょっちゅう変わるので、実際の授業では大変扱いづらいです。事前に用意したものが、仕様が変わっていたがために、いざ授業で使おうとしたら全然反応が返ってこなくて痛い目に遭ったこともあります。それだけでなく、去年使ったものが今年使えない、誰かからもらった指導案・授業案でそのまま授業ができないというパターンが非常に多いので、とにかく事前の確認が大切です。

 

こういったことに注意した上で、外部とのプログラムとの連携は、例えばPythonでいうところのインポート、他のプログラム群を読み込んで使うといったことも可とする、という解釈することもできると思います。

 

 

 

教科書の記載内容から考える

 

次に、教科書の記載内容を見てみましょう。

 

教科書見本本の内容を比較しました。

 これは私なりの読み解き方ですので、ご異論がある方もいらっしゃるかもしれませんが、私見としてご覧いただければと思います。

  

※クリックすると拡大します。

 

教科書には、プログラムの基本構造、順次・繰り返し・分岐、演算子、比較演算子などが載っています。言語はいろいろで、Scratchだけ、あるいはVBAだけで書かれているものもあります。

 

各項目について、大方の教科書に載っているものを拾ってみると、このスライドのようになります。そうすると、配列はやるけれども、二次元配列はやらなくていいかな、とか、モジュールを追加することはやらなくてもいいのかな、ということが見えてきます。ちょっと恣意的に黒く塗りつぶしてある所もありますが、その辺りは大目に見ていただけるとありがたいです。

 

ローカル変数・グローバル変数や、探索や整列のプログラムですが、これをプログラムとして書くのではなく、アルゴリズムのところで紹介することにとどめている教科書も多いようです。また、Scratchのようなブロック型プログラミングについては、特に指導としてはなくてもいいのかな、と思います。

 

教科書がこうなっている以上、大学入学共通テストも、これを念頭に置きながら問題を作ることになるので、この辺りのところをやっておけば大丈夫ではないかと思います。これが教科書から見る学習内容です。

 

 

大学入学共通テストとプログラミング

 

次に、大学入学共通テストの内容と、プログラミングの部分の関連度を見ていきます。

 

いくつかプログラミングの問題がすでに公表されていますが、例えば昨年11月に公表された「試作問題(検討用イメージ)」では、シーザー暗号の解読にプログラミングを使っています。

 

 

この問題を解くにあたって、プログラミングとして必要な要素がこちらです。リストの考え方、forを使った繰り返し、関数の考え方、比較演算子などになります。

 

この関数の考え方では、見たこともないような命令が定義されて使われています。それでも、これを関数として捉えると、「ああ、そういうことなんだね」と納得できます。ですから、実際に関数を使ったり、作ったりするための考え方が身に付いてると、非常に解きやすいりのではないかと考えられます。

 

比較演算子や演算子の説明がないことも特徴です。「!=」は「ノットイコール」、「%」は「割った余り」ですが、これについて説明がありません。これはPythonやJavaScriptなどの言語の仕様と同じです。for文やif文の文末に「:」があり、次の行がインデントになっていて、繰り返すブロックの所もインデントです。それから行末に「;」がないというところを見ると、JavaScriptでもないんだなという感じで、全体として見た目上はPython風味です。

 

ただ当然、コードに日本語が入っていて、Pythonそのもの、というわけではありません。

 

 

次に、3月に公表された「サンプル問題」を見てみましょう。ここでは選挙のドント方式の問題がありました。この問題も、これを解くために必要な理解しておかなければならない要素としては、まず配列の考え方が入っています。それから、繰り返しfor文とwhile文が入っています。そして、先ほどもお話ししたように、これもPython風味で、for文やif文の文末の「:」、それからインデント、行末に「;」がないということが特徴として挙げられます。

 

 

これらから、大学入学共通テストの程度感として、これくらいのことをやっておけばいいかなということを、まとめてみました。

 

まず、演算子と比較演算子について理解させておく必要があります。また、if文・for文・while文については実際に使っておく経験が必要だと思います。

 

それから配列(リスト)については、やっておかなければいけません。教科書を見る限り、二次元までははやらなくてもいいのかな、という感じはあります。関数の考え方・使い方については、実際に作ってみることもやっておく方がよいかと思います。解くためには、プログラムを書けなくてよいですが、読めるようになっていることが大事なのかな、ということは考えられます。

 

大学入学共通テストに向けて言語を学ぼうと思ったら、Pythonが一番いいかな、と思われますが、問題自体が、他の言語を学んでいても解けるように、とても工夫されていると思います。ですから、Pythonを学んでおくのがベストかもしれませんが、JavaScriptであっても、VBAやScratchであっても、さきほど挙げたプログラミングの肝の部分ができるようになっていれば、十分対応できると考えられます。

 

 

 

プログラミングの指導について

 

続いてプログラミングの指導です。

 

私は「情報の科学」では、既に毎年プログラミングの授業をやってきているので、その中でわかったことをまとめてみました。

  

 

 

まず、「アルゴリズムの明確化」と書きましたが、要はフローチャートを書いておいて、そのフローチャートと同じような流れでプログラムを書かせる、というやり方にしたほうが、生徒にはわかりやすいようです。

 

逆に言うと、彼らは問題を解決するためのアルゴリズムを考えるのが難しいと考えているのではないか、と思われます。ですから、センター試験の「情報関係基礎」のように、アルゴリズムが提示されて、穴になっているところで何を判断するかを考える、という問題は意外に解けてしまう可能性があると思っています。

 

また、授業では同じものを2回やる方が効果的です。私の授業では、手順が全部書いてあって、自分で読解してどんどん解決していく、という形の課題を準備しています。プログラミングの場合、生徒によって速度がかなり違いますので、このように自分の速度で進められる課題が効果的です。

 

このとき、ステップに合わせてA、B、C、Dと課題を作っておいて、初日はAからBに進み、次の時間は続きから始めるよりも、最初からもう一回やってごらん、とした方が、どうも先の伸びが良いように思います。具体的に言えば、1日目にAからBに進んだら、次の時間はCから始めるよりも、もう一度AやBを振り返ってから、CやDに進んだ方が、結果的に早く・深く進むことができる、ということが傾向としてわかっています。

 

また、プログラムが書けない生徒は、頑張っても書けない、という感触もあります。けっこう支援はしても、実際のところなかなか難しい生徒はいますね。

 

 

問題を解くためには、プログラミングに慣れてもらうことが必要です。そのためのオンライン教材として、本校では、プログル情報(※1)とProgate(※2)を使っています。

 

※1 https://high.proguru.jp/

※2 https://prog-8.com/

 

どちらもよくできていますが、時間数として、授業の中では難しいので、夏休みの宿題として使っています。

 

ただ、やりっぱなしにしておくとどうしても忘れてしまいますし、定着がなかなか苦しいので、小テストを入れています。不定期に3分程度で、スライドの右側のような問題で、読み方を問います。これはプログラムを読み慣れることが狙いです。このような小テストを抜き打ちでちょいちょい行って、忘れさせないように心掛けています。

 

今年からこの小テストを始めましたので、成果はこの後、プログラミングの授業が始まったところで、どのような成果が得られるか、楽しみな状況です。

 

 

 

大学入学共通テストに向けて

 

大学入学共通テストに向けて、これはプログラミングと言うより全体的な話になりますが、国公立大学で利用されるようになってほしいと思います。

 

「情報を利用する学部・学科だけ」というご意見が、とあるところから出ているとうかがっていますが、ある先生が、「ということは、全部の大学だよね」とおっしゃっていました。私もそう思います。使わない大学があるなら教えていただきたい(と言うと、けんかを売っているようで申し訳ないですが)と思います。ただ、二次の個別試験で使うとなると、受験指導が大変なので、共通テストだけだといいな、と思ったりもします。

 

問題例が少なくて、対策が難しいのも事実ですね。サンプルのような問題がたくさん必要です。次のサンプル問題の公表は来年の秋ということですが、それまで「情報Ⅰ」の授業が進んでいます。1学期と2学期の中頃までは対策のしようがないまま進むのは大変なので、何とかならないかな、というのが正直なところです。でも、作問が大変なのはよく分かっているので、難しいことであるということも理解しています。

 

ただ、授業時間内で演習は不可能で、しかも定期テストに出すのも難しいです。リード文が1ページもあるとなると、定期テストを印刷するとテスト全体が20ページ近くになってしまいかねません。また、情報科の先生は、当然私も含めて、情報科での進学指導の実績がないので、何が・どの程度できるようになっていればよいのか、ということがよく分からないところがあります。

 

あと、できる生徒に本当に良い評価が付けられてるのか、ということについては、本当に不安だというのが正直なところです。

 

 

最近の動きで言いますと、大学入学共通テストで、「情報Ⅰ」は単独科目として実施されるということで、それは喜ばしいことです。初年度は移行措置があるということですが、1年だけとは言え、今の1年生も受験科目になってしまう可能性があるということが非常に怖いですね。

 

浪人した子たちに対してのアフターケアを私たちがやるべきなのか、予備校さんにお任せしてしまうべきなのか。悩むところです。

 

でも、本校の生徒は、もしかすると共通テストの問題冊子が経過措置用の選択問題も含めて1冊になっていたら、「情報Ⅰ」の方がうまく解けるかもしれない、というような気もしないでもありません。

あとは、先ほどもお話ししましたが、試作問題は来年の秋冬に公表されるというところも気になります。

 

来年の1年生は、この問題が公表されてから残りの半年足らずで共通テストに対応できる力をつけていくことが必要になります。

 

オンラインイベント「教科『情報』をめぐる動きと情報入試に向けた指導を考える」 講演より