「情報関係基礎」のプログラミング問題を教材化する
はじめに
大学入試共通テストに「情報Ⅰ」が入ることになり急遽その対策が論じられるようになった。とりわけ,プログラミングが入ってくるということで騒がれている。しかし,現行課程(2021年現在)でも,「情報と科学」では標準,「社会と情報」でも「発展」としてプログラミングは教科書に掲載されている。また,大学入試センター試験(共通テスト)には「情報関係基礎」があり,プログラミングと表計算が選択問題として入っている。したがって,将来を見越して,現行課程でもプログラミングを授業でやっていればそれほど動じることはなかったはずである。しかし,現実はそうではない。いま情報を担当している教員でプログラミングができる,教えられる者がどのくらいいるかというと,おそらく10%に満たないであろう。20年前に現職教員に10日ほどの研修で免許を出したが,このときにプログラミングは研修内容に入っていない。それを新課程導入のための応急措置として,その後きちんと情報の教員を採用していけばよかったのだが,それがまったくといっていいほどなされなかった。教育行政の怠慢としかいいようがない。また,情報の授業をきちんとやらない,未履修問題も起きた。これは現場の認識不足によるものだった。
対策をどうするか
では,今論じられている「対策」とはどのようなものか。今までの状況が上のような状態であるから,授業経験の蓄積というものがない。そのため,現場の授業体験に基づいた対策になっていないのが現状である。
たとえば,共通テストで使われるプログラミング言語(DNCL)の仕様の問題。これに合わせようと,疑似言語の処理系が作られたりしているが,筆者の経験からいうとその必要はまったくない。共通テスト(センター試験)の問題は,アルゴリズムが理解できるかどうかが最大の焦点であり,コーディングについては,「繰り返し」「条件分岐」の基本的な手法がわかっていれば十分対応できるからだ。DNCLでプログラミングを行う練習をする必要はないのである。筆者は,記述が簡単な CindyScript を授業で用いていた。繰り返しは for でなく repeat で,繰り返しの始点と終点を記述するのでなく,繰り返しの回数を記述するのだが,これを使ってセンター試験の過去問を見ながらコーディングさせたがほとんど問題はなかった。DNCLからCindyScriptへの翻訳ができない生徒は,そもそも「配列をどう表すか」「どのように繰り返すのか」といった基本がわかっていないのである。前述の for と repeat でいうと,「1から7まで」を「何回繰り返すか」に変えるだけなのだが,回数を数えることができない生徒が少なからずいた。これは,プログラミング以前の問題だろう。https://note.com/evjunior/n/ncc303353170b
情報Ⅰの教科書では,出版社により,Pytoh,JavaScript,VBAなどが用いられている。そのうちどれであっても共通テストには十分に対応できる。
教員のスキルの問題
もうひとつ,現在あまり論じられていない重要な問題がある。それは,生徒に必要なスキルと教員のスキルの問題である。単に,教科書の例をコーディングしたり,共通テストの問題をやるだけなら,たいしたスキルは必要ない。教科書の例や問題には解答が載っているし,過去問は実際にコーディングしなくてもできる。しかし,生徒はそれでよいが,教員はそうはいかない。プログラミングは実際にコーディングしたものが正しく動くことを確かめなければ意味がないのである。教科書の例題はよいが,共通テストの場合,問題になっているのは全体の一部に過ぎない。ここだけコーディングしてもプログラムは動かないのである。初期設定や画面表示の部分は教員が作っておかなければならない。たとえば,2020年の「情報関係基礎」の宝探しのプログラム。これを実際に動かすには,ロボットや宝の画像,ゲーム版,ボタンを作っておかなければならない。それらを準備した上で,生徒が問題の部分だけ正しくコーディングすれば動くようにしておきたい。正しくできれば,ゲームが実際にできるのだ。動きもせず,答えがわかっただけで,なんの面白みがあるというのだろうか。しかし,もしこの準備をPythonでおこなうとすれば,matplotlib の使い方などかなりの知識が必要になるのだ。それを学ぶのに,教員が通常の業務をこなしながらだとすると,半年はかかるだろう。
逆に,生徒は特にプログラミングを学んでおく必要はない。あわてて,プログラミングスクールに通う必要など何もないのだ。きちんと授業を受けて基本的な構文を理解し,アルゴリズムを読解する力があればそれで共通テストに対応できる。もちろん,興味がある生徒がプログラミングスクールに通うのは,それはそれでよい。
このあたり,生徒に必要なスキルと教員に必要なスキルの違いについてはほとんど議論されていないようだ。それはそうだろう。授業体験の蓄積がないからだ。授業をやったことのない人たちがいくら議論してもこの視点を持つことはできまい。
なお,前述のように,これからPythonを学ぼうとすると,入門書だけでは足りず,半年はかかると思われるが,それでは困るだろうから,教員向けの案内やマニュアルを作成した。
共通テスト(センター試験)過去問の教材化
前述のように,どれだけのことが必要かを考えた上で,大学入試センター試験「情報関係基礎」の過去問のうち,プログラミングの問題を教材化することを考えていく。「情報Ⅰ」の教科書では,出版社によって扱うプログラミング言語が異なるが,ここではPythonを用いる。その理由はデバッグがやりやすいこと,グラフィックが他の言語より扱いやすいことである。
実習で生徒が行うのは,基本的な構文の穴埋めである。特定のライブラリに依存する部分を構築したり,条件分岐・繰り返しをすべてコーディングするということはしない。共通テスト「情報Ⅰ」の出題も「情報関係基礎」に準じた形になることが予想されるのと,すべてを始めからコーディングするのは生徒にとってハードルが高いからである。もちろん,簡単なものであればすべてコーディングするのは可能だろう。しかし,2重ループになっていたり,条件分岐が多岐にわたるものを,情報の授業だけで書けるようにするのはむずかしい。週2単位の情報の授業でプログラミングにあてられる時間数と,まったくの初歩から学ぶことを考えれば,アルゴリズムが理解でき,基本的な構文がわかればできるものにするしかない。
教材化するに当たっては,次のことを考える。
(1) 問題はWeb上にあるので,それを入手してもらうことを前提とする。
授業ではそれをそのまま使うことができるが,このようにnoteなどでWeb上に
公開するときは,問題文そのままは掲載できない。
(2) 実際の授業では,元の問題を解かせてからコーディングだけをPythonで
やってもよいし,この問題文を参考に,教材全体を作り替えてもよい。
そこは生徒の実態に合わせて行う。ここでは,作り替えた教材を作る。
共通テスト対策演習(過去問演習)は別途行う想定だ。
(3) コードの中の空欄は,元の問題と同じでなくてもよい。また,「答え合わせ」
を最終的に行うとしても,正しくできればちゃんと動くだろうから,それが
答え合わせになる。
(4) 空欄を正しく埋めることができれば,実際に動作することが肝要である。
紙上のテスト問題ではなく,プログラミング実習なのであるから,動かなければ
話にならない。すると,そのために教員が準備しておかなければならないことが
かなりある。
(5) 題材としては,バブルソート(2008年)のような,プログラミングの初歩で
学ぶアルゴリズムのものから,迷路(2002年,2018年)やブロック落とし
(2007年),宝探し(2020年)のように,パズルやゲームのものがあるが,
生徒の興味を引くという点では,パズルやゲームのものがいいだろう。
完成して動いたときの楽しみがある。
センター試験(共通テスト)プログラミング問題の過去の内容
1997 テキスト文字で模様を描く
1998 数あてゲーム
1999 ソートされた2つのデータの統合
2000 数の検索
2001 金種計算
2002 迷路の解の存在判定
2003 テキストのパターン検索
2004 計算式の作成パズル
2005 じゃんけんの勝敗判定
2006 総当たり戦の順位づけ
2007 ブロック落とし
2008 バブルソート
2009 素因数分解
2010 漢数字への変換
2011 順位づけ
2012 秤と分銅
2013 営業時間の設定
2014 太鼓と掛け声
2015 ゲーム盤
2016 商品を入れる箱
2017 三角形の個数
2017追 花見の日の決定
2018 迷路
2018追 俳句の順位づけ
2019 グループ分け
2019追 ゲームの得点計算
2020 宝探しゲーム
2021 すごろくゲーム
2021 第2日程 ロボットの進行制御
これらから題材を拾い,テキストを作り,プログラムを作っていく。グラフィクスを使わなくてもできるものから始める。まずは,2017年の「三角形の個数」からだ。