情報処理学会第81回全国大会 シンポジウム

「小中高で必修化されたプログラミング教育 〜高校は「情報I」「情報II」が新設へ」

全体説明「小中校で必修化されたプログラミング教育を概観する」

大阪電気通信大学 兼宗進先生

情報教育の学習指導要領の改訂に工学系の大学研究者が参加する意味

始めに小中高のプログラミング教育について概観させていただき、後半で具体的な活動についてお話しします。

 

まずこれまでの経緯について大まかに説明します。2003年に高校で「情報」という教科が始まり、情報教育をするようになりました。それからこれまで16年の歴史が積み重ねてきました。私は大学で工学部の電子機械工学科におりまして、そこでコンピュータやプログラミングについて研究しております。教育畑というわけではございませんが、今回、小学校のプログラミングを必修化した会議(※1)や、中央教育審議会で小中高の情報教育で何をどこまで学ぶか、という全体を見る会議にも参加することで、工学系の大学教員として新しい学習指導要領を検討させていただきました。

 

※1文部科学省「小学校段階における論理的思考力や創造性、問題解決能力等の育成とプログラミング

教育に関する有識者会議」

 

ただ、決まりや制度を作るだけでは新しい教育を行うことはできませんので、自分たちでできることは何かということを検討して、情報処理学会の、CE研(コンピュータと教育研究会)のメンバーと一緒に教材を開発し、簡単に入門的なプログラミング言語を作ってみよう、それをオンラインで使えるサーバー環境を作ってみよう、などいろいろな活動してきました。それらについてはWebで公開するとともに、書籍として出版するお手伝いをしてきました。気がづいたら結構増えてきています。

 

今日のトピックは、この図の左下の新しい学習指導要領についてです。これは昨年夏にPDFで公開されて、つい最近冊子として出版されました。2022年から10年間の、全国の高校普通科で教えられる共通教科「情報」と、専門課程で行われる専門教科「情報」の解説です。この解説の作成にあたっても、情報処理学会などから工学系のメンバーが加わっており、たいへん良かったと感じています。

 

下図は小中高のブログラミング教育の段階的な内容です。

小学校のプログラミングの必修化が2020年ですから、もう1年後からスタートする状況で、今年度2018年度から2019年度は各都道府県の自治体で教員の研修が行われる予定です。そのために、学習指導要領とその解説、カリキュラムの手引きと、研修の基礎資料になる「小学校プログラミング学習の手引き」が文科省から公開されています。

 

中学校のプログラミングは、技術家庭科の中で行います。実は今までも技術科の技術教育の中で、ロボットを動かしてみようとか、センサーを使って温度を測ってみようといったところで、プログラミングが使われていたのです。新しい学習指導要領では、それに加えて、双方向のコンテンツ、ざっくり言うとネットワーク通信をするプログラミングも入ってくることになっています。

 

高等学校で新しい学習指導要領が始まるのが2022年からです。現在は、普通科では「社会と情報」というプログラミングが入っていない科目を8割の高校生が受講していて、「情報の科学」というコンピュータサイエンスがもとになっている科目を受講している生徒は2割に過ぎません。これが、2022年度からは必履修科目の「情報I」いう形で一本化され、全ての高校生がプログラミングや情報科学を含んだ内容を学ぶことになります。そして、情報Iの上に、さらに発展的な内容の情報IIが新設されることになりました。興味のある人や理系の人には、ぜひ情報Iを学んだ後に情報IIを学んでもらいたいと思います。

 

文科省の有識者会議の資料に、小中高のプログラミングの目的について書かれたものがありました。

 

 

例えば、小学校では「身近な生活の中でコンピュータが使われていることに気づきましょう」となっています。さらに、「問題を解決には、いろいろな必要な手順があることにも気づきましょう」ということです。学習するというより、気づくことが大切かもしれません。

 

中学校では、「社会におけるコンピュータの役割や影響を理解する」ということで、自分の身の周りの生活を超えて社会全体を見つめ、コンピュータがどう使われているかということを深く考え、さらにこの中で簡単なプログラムを自分で作成するという技能が入ってきます。

 

高校では、さらに「コンピュータの働きを科学的に理解する」ことになり、さらに、実際に問題解決にコンピュータを活用できるプログラミングを作ることになっています。これらについては、このあと先生方から事例の紹介がありますので、ご期待ください。

 

小学校のプログラミング教育

■6つのランクに分かれ、教科書に載るのは三つの例

順に見ていきます。小学校については、割に報道が多くて「小学校のプログラミング、必修になったみたいですよ」、「学校でみんながプログラミングをやるんですよね」ということをご存知の方は多いと思います。ただ、全員が必修と言いながら、情報系・プログラミング系の科目が作られなかったので、教科的には何も変わっていません。

 

では、小学校では何年生で何を・どこまでするのかというと、先ほど話に出てきた文部科学省の「小学校プログラミングの手引き」では活動をA、B、C、D、E、Fとランク分けがされています。例えば、Aの学習指導要領に例示される、つまり教科書に載るプログラミングというのは、非常にピンポイントで、小学校5年生の算数、小学校6年生の理科、もう一つがいろいろなところで入ってくる「総合的な学習の時間」の三つです。これは、全ての小学校で必ずやることになっています。

次のBは、「ここで・こういうふうにやりなさい」という明示がなくても、各小学校で工夫して、教科学習の中でプログラミングの考え方を使った活動をやってくださいというものです。後で清水先生からお話がありますが、教科の中でプログラミングを活用することは、最初は簡単ではないと思います。この二つが学習指導要領に書かれているものです。

 

AとBは教科学習の中で行うものですが、プログラミングだけを学ぶという時間はありません。それをやってもいいですよというのが、Cです。それから、課外活動として、興味を持った子どもには、クラブ活動などでプログラミングをやってもいいですよというのが、Dです。さらに、学校を使うけれど学校外の活動(E)、学校外の学習活動(F)なども含めて、様々なプログラミング活動が認められるようになりました。

 

■小学校でプログラミングを行う目的は

なぜ小学校でプログラミングを行うのかについては、一般的にはまだ腑に落ちないところもあると思います。その理由としたのが、論理的な思考を育むためということで、もう一つがプログラミング的思考をすることです。プログラミング的思考については、下図をご覧ください。

プログラミング的思考というのは、何か解決したい問題があったら、それをどのような手順で操作してけば解決できるのかということを、子どもに考えさせて、それを「一つ一つの動きに対応した機能をどのように組み合わせたらいいのか」という表現でコーディングまでつなげています。それを通していろいろな能力を養っていくわけです。

 

私の小学校時代は、知識をとにかく暗記することが多かったですが、時代が変わって、今は「知識・技能」の他に、「思考力、判断力、表現力」というものが非常に重視されています。これは情報に限りません。

 

さらに、「学びに向かう力、学ぶ意欲」を合わせたこの三つを小中高で身につけさせていきなさいということになっています。

 

 

実際に子どもたちにどのようにコンピュータのプログラムを理解させるのかというのが、こちらの図です。先ほどの小学校のプログラミングの手引きに示されているものです。

 

最初にコンピュータにどのような動きをさせたいのかということを考えて(1)、それをどういう順番で行えばよいのかを考える(2)。さらにそれを一個ずつの命令、つまりプログラムに置き換えて(3)、これらを記号(コード)としてどのようにプログラムに表せばよいかを考え(4)、さらに1回で思い通り動くはずはないので、間違いの原因を考えてやり直しましょう(5)、という手順を踏むことになっています。

 

実際の活動では、そんなに難しいことをやるわけではありません。ここにあるような皆さんもご存知のブロックプログラミングで、上から下へ直線に動くようなプログラムです。これを右のように反復を使って置き換えると同じことを何度もしなくていいね、ということを扱っていくということです。今までは、こういった上から下に順番に1個ずつ命令を書いて、whileで反復したり、if文で分岐をしたりということは大学で教えていましたが、来年からはこの部分は小学校から扱われるようになります。

 

下図は、小学校5年生の算数の教科書に載るだろうと想定される、多角形を描くプログラム、ドリトルを使っています。

 

そして、こちらが6年生の理科で扱われる通電制御、つまり単純な省エネのプログラムで、部屋に人がいる時は電気が点いて、人がいなくなったら自動で消えるようにするというものです。これは、一番外側の反復(黄色)の中に、茶色の部分にifとelseの条件分岐が入っているので、さほど簡単なわけではないものです。このように、あまり文字入力で苦労せずにプログラム体験ができるという事例になっているのだと思います。

 

さらにプログラムの考え方を理解したら、その考え方を黒板や紙や鉛筆を使って、普通の教科学習に使うこともできます。いつもパソコンやタブレットでなくてもよいのです。これは英語の例ですが、後で清水先生から他の教科の事例をご紹介いただけると思います。

 

■簡単に見えて、実は非常に高度なことをやらせようとしてしまうという危惧も

ただ、個人的に多少危惧しているのは、プログラミングは最初はすごく楽しいと思いますが、やがてどこかで理解が難しいという局面を、迎えることがあると思います。これは大学生でも同じです。そこでちょっと間違えてしまうと、さっぱりわからない、難しいというところに気持ちが向いてしまって、結局プログラミングに苦手意識を持ったり、コンピュータが嫌いになったりということにつながらなければいいなと思っています。楽しく教えるノウハウはたくさんありますが、そのノウハウを、プログラミングを教える可能性がある全国の小学校の先生に伝えられるといいですね。

 

ただ、個人的に多少危惧しているのは、プログラミングは最初はすごく楽しいと思いますが、やがてどこかで理解が難しいという局面を、迎えることがあると思います。これは大学生でも同じです。そこでちょっと間違えてしまうと、さっぱりわからない、難しいというところに気持ちが向いてしまって、結局プログラミングに苦手意識を持ったり、コンピュータが嫌いになったりということにつながらなければいいなと思っています。楽しく教えるノウハウはたくさんありますが、そのノウハウを、プログラミングを教える可能性がある全国の小学校の先生に伝えられるといいですね。

 

例えば、「順次」は子どもでもわかるでしょうし、「条件分岐」も小学校低学年の子どもでも、何となく理解はできます。

「反復」も、フローチャートで書くのは多少難しいですが、指でなぞっていけば、「同じことをやるのならここまだ戻ればいいよね」というところまではわかるでしょう。

小学校4年生くらいでしたら、この三つのそれぞれについては十分理解できまると思います。しかしイメージとしては、例えば日本語で漢字や単語の意味を理解できても、それを使って一つのまとまりのある長い文を作ったり、段落を作ったり、章や節を作ったりということになると、一気に難易度が上がってきます。プログラミングもこれと同様です。

 

私はよく小学校の授業を見学するのですが、そこで見せていただいたプログラムの例が下図です。左側のもとのプログラムがわかりづらいので、右のように整理してみました。これをご覧になって、何のプログラムかおわかりになるでしょうか。これは、歩行者用の押しボタン信号のプログラムです。題材自体はとても身近で、子どもたちにも入りやすい例だと思います。

 

これは小学校4年生の授業で出てきたのですが、私の学部の1年生のC言語の入門授業の期末テストの問題と全く同じ内容でした。for文の中にifがあって、その中にfor文が入る、という3重の入れ子の構文は、大学生でも全員が使いこなせないかもしれません。

 

もしかしたら小学校の先生には、これが単にブロックがたくさん並んでいるとしか見えていない可能性があるのですが、「実はそれは構造が3重になっていて、非常に高度なことですよ」という情報は、工学系の我々が伝えていく必要があるのではないかと思いました。

 

先ほどの多角形を描くプログラムは、算数の計算問題と同じで、「みんなで三角を描くプログラムを作ってみよう」と言ったら、クラス全員がそれを描けるようになるというのが学習目標になりますから、全員が同じプログラムを書くことになります。それはそれで楽しい子どももいるとは思いますが、やはりできれば作品作りなど自由なことをやってほしいなとは思います。ただ、そうすると指導の難易度も上がってしまうので、その辺は、今後いろいろ工夫が必要ではないかと思います。

 

 

下図は高校2年生が作った簡単なアニメーションの例です。簡単な動きですが、プログラムがすごく長いです。多分、先生は20行ぐらいのプログラムを作るイメージで課題を出したと思いますが、生徒は作っているうちにすごくのめり込んでいくのですね。多分、小学生も中学生も同じで、何十行でもどんどん書いていくことになると思います。


 

下図のプログラムは全部で469行あります。この人が作りたかったのは、テトリスのようなアニメーションです。ゲームではないのですが、ここまでやるためにピースを一個ずつ作って組み上げていったのでしょう。作り上げたいという気持ちはよくわかります。このような作品制作を通して、プログラミングの楽しさを体験できればよいのではないかと思います。


 

■プログラミングを体験することで身につけさせたいこと

プログラミングを体験することで何を身につけさせたいかということを、まとめたのがこちらです。

まず、何かやりたいことがあって、人間同士なら相手が言っていないことを補って理解してあげることはできますが、コンピュータは機械ですから、まさに究極の他人です。ですから、間違った命令を書いたら間違って動いてしまうし、書いていないことは絶対やってくれません。それを明確に伝えてあげることが重要だと思います。

 

また、今の子どもたちにとって、タブレットやスマートフォンは身近で大切なデバイスになっていると思います。それだけ大事なものの仕組みは、やはり知っておく必要があるだろうというのが、コンピュータの性質や仕組みを理解することの一番の目的だと思います。

ただ、説明しても小学生や中学生に伝わるわけではないので、まずはプログラミングを体験して、自分たちが使っているアプリはこういうふうに作られているんだ、そもそも人が作っているんだということを、体験を通して実感することが大切と感じています。

 

中学校のプログラミング教育

■技術科の中で求められる内容がより高度に 

中学については、この後西ケ谷先生がお話ししてくださいますが、私が関わった実践を二つ紹介します。

 

こちらは高校の女子生徒が作ったロボットで、口の中に反射型の光センサーが入っていて、物が入ったら口が閉じ、なくなったら開くという単純なものですが、やはり実物があると楽しいですね。

 

こちらは一昨年の中学校技術科の全国大会の公開授業で紹介されたものです。ライントレースのロボットが線をたどって外れないように動くのですが、左側に壁が来ると止まります。そして荷物(ピンポン玉)が載っている時には、壁についた籠に荷物を投げ下ろす動作をします。自分が荷物を持っている・持っていないを認識するという状態遷移の状態で、なおかつライントレースをして、壁のところで荷物を下ろすという、並行性のようなものまで、中学校で扱われるかもしれないということです。

 

また、小学校では、自分のコンピュータやタブレットの画面で動かす、あるいはそのプログラムを機械やロボットに転送して動かすということを行いますが、中学校でこれから始まるのは、自分のコンピュータと友達のコンピュータのプログラム同士が通信をする、教室の中で通信をするという、双方向の通信があるコンテンツを作るということです。

 

こちらは、センサーの値をネット配信するというものです。教卓に置いた光センサーや温度センサーの数値を、ネットワークを使って教室内の端末に一斉に配信するものです。生徒は自分のコンピュータで、図の下の真ん中にあるようなプログラムを書いて、センサーの値を受信するようにします。

 

このプログラムでは、ドリトルのカメが一定間隔でX軸方向に動きますが、その時のy軸(縦軸)の位置は受信したセンサーの値となるようになっているので、時間経過に従ってセンサーの値のグラフが書けることになります。さらに応用すれば、データのやりとりを双方向にすることも可能です。

 

やり取りのあるプログラムをわかりやすく表現する図が必要

これは個人的に気になっていることですが、プログラムが単独で動くときは、ソースコードだけで理解が難しければ、フローチャートで図示した方がわかりやすいと思います。しかし、この図のように、やりとりのあるプログラム、例えばスマホのアプリとか自動販売機といったものの動きをうまく書く方法というのがなかなかありません。我々であればシーケンスの図を使えばよいかなと思いますが、ただシーケンスだと、やりとりはわかりますが、フローチャートで言えば長方形にあたる処理(実行)がやはり表しにくいということがあります。

実は中学校や高校の学習指導要領にはUMLのアクティビティ図という言葉が載っています。シーケンスの図よりはアクティビティ図のほうがよいかなと思いつつも、やはり処理の部分も描きたい。図で言えば、この四角形の中の処理を、ここでは分岐するとか反復するとかフローチャートのようにしてしまうと、縦のフローで頭がいっぱいになってしまって、大事な通信のやりとりの部分から注意がそれてしまわないか、かえって難易度が上がってしまうのではないかというのが心配です。ですから、細かい分岐や反復はなくしてしまって、基本的には順次だけに整理して、その代わり他の機器やアプリケーションとの通信にフォーカスするという表記法が必要だと思います。

 

こういったプログラミングに使う教材は世界中で開発されていますが、去年から今年、去年あたりで一番よく目にしたのはmicro:bitですね。これは非常によくできていて、本体が2000円くらいで、各種のセンサーやLEDがついているのに加えてBluetoothも搭載していて、パソコンとも通信できますし、子ども同士で直に通信もできます。これなら小学校から高校、大学まで幅広く使うことができます。Microsoftのプログラム環境で使うことができ、ブラウザでプログラムを書くとそのままボードに転送されます。インストールが必要ないところも、授業用の教材として優れたところだと思います。

 

 

高校のプログラミング教育

■実は高校の「情報I」の内容こそ全国的なニュース

小学校でプログラミングというのは大々的に報道されていますが、小学校では体験をすればよいということです。それより高校の内容の方が、世の中を揺るがす大ニュースではないかと、個人的には思っています。

 

新しい学習指導要領では、情報Ⅰが必履修で、全国の全ての高校生が履修します。

 

内容は四つに分かれていますが、はじめの二つは通信の内容や、社会の中でコンピュータがどう扱われているかといった話や、情報をどのようにデザインするかということで、今までの「社会と情報」に近い内容です。三つ目でコンピュータとプログラミングを扱っていて、初めて国民全員がプログラミングを学ぶということになります。その中でアルゴリズムやメモリーの中の内部表現、シミュレーションといったことも学びます。その他にネットワークやデータベースも扱う単元があり、それらを全て情報Iで学ぶことになります。

 

情報IIにも、社会の中の情報や情報デザイン的なものがありますが、それに加えて「データサイエンス」という言葉が入っています。数学でも、小中高でデータの扱いが非常に重視されてきているということがあり、それも踏まえた上で、数学の統計と連携して高度なデータ処理を扱いましょうということになりました。学習指導要領の解説の中には、機械学習の初歩まで扱うということが書かれていますが、今後それがどのような形で教科書等に載ってくるのかということを、見ていく必要があると思います。内容的には、今まで大学で教えられたようなことが扱われるようになるだろうと期待しています。

 

もう一つ、情報IIには「情報システムとプログラミング」というものがあります。中学校で、ピアツーピア(P2P)的なクラウド同士の通信を体験したら、高校の情報IIでは、情報システムですから、サーバー側とクライアント側にそれぞれプログラムを置いて、多数のクライアントから接続をして、一つのシステムを形成するというところまで実習するのだろうなと思っています。

 

ただ、時間数もそれほど多いわけではありませんので、普通のプログラム環境で実習しようと思うと、多分難しいでしょう。ですから我々も協力して、高校で実現可能な実習環境や学習内容を提案していくサポートは必要であると思っています。ただ、今のところはまず情報Iを何とか成功させようと、皆さんが頑張っているところではないかと思います。

 

コンピュータ的思考の基礎の基礎 CSアンプラグド

コンピュータ的思考の教育方法として、コンピュータサイエンスアンプラグド(Computer Science Unplugged:以下CSアンプラグド)というものがあります。今日はその中のソーティングのアルゴリズムのビデオを見ていただきます(※)。

 

CSアンプラグドは、ニュージーランドのティム・ベル先生がもう2,30年前から提唱している教育法です。我々大学教員は、コンピュータについて十教えることがあったら、十すべて教えたいと思ってしまいますが、そうするとどうしても本質がぼやけてしまいます。この方法では、コンピュータサイエンスの基本と全体像を見事に明らかにしています。

 

ビデオ「いちばん軽いといちばん重い」

 

 

このビデオでは、フィルムケースにコインの枚数を少しずつ変えて入れたおもりを使っています。1個ずつ持つと重さが違うことはわかるかもしれませんが、コイン1枚の違いはなかなかわかりづらい。そこで、天秤を使って比較するという活動です。天秤の左右のかごに1個ずつ載せるという制約の中で、おもりを重い順に並べなさいというものです。

 

この男の子がやっている作業のアルゴリズムを考えてみてください。この子は、順番はわからないけれど、軽いのをよけていくと最後に重いのが残るので、このグループの中で一番重かったものが判別でます。残りのおもりに対しても、軽かったらよけることを繰り返していきます。そうすると、最後に残ったのが、2番目に重かったということになります。これはいわば選択ソートですね。

 

一方、女の子は、最初に載せた黄色のかごのおもりには触りません。赤のかごに載せた方だけ動かしています。つまり、黄色のかごのおもりを基準にして、それよりも重かったか軽かったかで、左右に分けています。今度は別のおもりを基準にして、同じ作業を繰り返します。最終的に男の子は55回も比較していますが、女の子は27回で済んでいます。

 

ご覧いただいてわかるように、女の子の方はクイックソートのやり方です。クイックソートのプログラムをC言語で書けと言われたら、けっこう難しいですよね。でも、このやり方であれば、多分小学生でもクイックソートの考え方自体は理解できます。ですから、ソースコードを書くのが勉強なのか、アルゴリズムを理解するのが勉強なのかという分かれ道がありますが、思い切ってソースコードも配列1個という制約も捨てようという選択もあるのですね。そして、ここに一つのかたまりとして配列があって、もう一つこちらにも配列がありますよ、この複数の配列を使ってもいいんですよ、という形に緩めてあげてもよいのです。先ほどお話ししたように、実はクイックソートというのは、考え方だけなら小学生でも理解できる。そうしたら、もしかすると中学生でもソースコードが書けるようになるかもしれないわけです。

 

我々情報分野の者にとっては、「プログラミングを全国民に体験してほしい。せめて高校では全員が学んでほしい」と言い続けてきたら、小学校からのプログラミングが全員必修になりました。夢が叶いすぎているのかもしれませんが、後戻りはできないのです。小学校にプログラミングが入ったけど、全然駄目だった、教育の失敗だよねということになったり、子どもたちがプログラムと聞いただけで嫌な気分になってしまったりするということは、絶対に避けなければいけません。

 

情報系の研究者が、これからの情報教育のためにできること

情報処理学会は工学系の団体ですので、新しい教材やソフトなら提案できると思います。例えば先ほどのてんびんを使ったソートの考え方であれば、ソートの本質というのはこういうことだということを、とことん考え抜いて、本質だけを残した教材を作る。こういったことこそ我々ができることだと思います。ぜひ、このような優れた教材をお手本にして進めていけたらと思います。

 

また、センター試験に代わる大学入学共通テストにプログラミングを含む情報を入れることが検討されています。入試に入ることで、皆が真剣に学んでくれればと思う一方で、プログラミングの楽しさが失われないか、嫌だけども受験勉強だからやるというのが果たしてよいのか、などいろいろな意見はあると思います。

 

ただ、今回情報が重視されたりプログラミングが必修となったりしているということは、その分期待されているわけですから、これからの子どもたちのために、日本の、そして世界のためになっていくことだと信じて進めていきたいと思います。皆様にも、ぜひ一緒に研究活動をしていただければと思います。