見出し画像

高等学校「情報Ⅰ」のプログラミングのために(2) どの言語を選ぶか(暫定版)

 文科省の研修用教材では,Python , JavaScript , VBA , ドリトル , Swift の5つの言語について教材が作られている。Scratch,Ruby が入っていないのはどこからも要請がなかったからではないかと思われる。本屋に行ってプログラミングの棚を見てみるといい。今一番多いのは Python だろう。次いで,Java,JavaScript,C,C#,Scratch,Ruby,R,Swift,Unityなど。VBAはプログラミングの棚にはないかもしれない。Word,Excelの方にありそうだ。ドリトルは教育書の棚かもしれないし,小さな本屋だと見つからないだろう。CindyScriptは,紙の本としては出版されていない。Apple Books で電子書籍として無料販売されている。

 教科書がどの言語で書いてくるかはいまのところ不明だ。たとえば,第一学習社の現行の「社会と情報」では,「発展」としてプログラミングを扱い,JavaScript のコードを使っている。すると,第一学習社はそのままJavaScriptでくるかもしれない。
 実教出版は,副読本「事例でまなぶ プログラミングの基礎」で Scratch,補充としてJavaScript,「Excelでまなぶプログラミング」で VBAを扱っている。「トレース Python」が 2021年3月に発行予定だが,Webページを見るとちゃんと言語を学ぶものかどうかが不明。

 教科書は,新学習指導要領に沿って,プログラミングの章を立てはするものの,研修用教材にもある,検索,ソートのようなもの,学習指導要領の解説にあるような,データの平均値や最大値・最小値を求めるものくらいになりそうだ。統計でヒストグラムや箱ひげ図を描くならRが最適だが,Rを扱う教科書があるとは思いにくい。

 実際に授業を行うことを想定すると,教科書に掲載されている範囲で学習するならあまり問題は起こらないだろう。「教科書に掲載されている範囲」という意味は,教科書のコードを打ち込んで,1,2ヶ所を変えるくらいでよしとする,ということだ。教員のスキルもその程度でよいかもしれない。
 しかし,将来大学入試共通テストに「情報」が入ってきたときの対応を考えると,それでは対応できない。現在のセンター試験「情報関係基礎」のプログラミングの問題をみればわかる。この過去問を,Python , JavaScript で書いた例をいくつか note に書いたが,実習するためには問題の部分だけではなく,それ以外の部分(初期設定と表示)をあらかじめ作り込んでおく必要があるからだ。

 生徒は問題部分だけコードを書けばよいが,実習を行うには教員が準備をしておかなければならず,そのためには教員は生徒の数倍の知識が必要になる。Pythonならグラフィクスのための外部ライブラリ,JavaScriptならHTML5の知識も必要で,たとえば,2020年のロボットの問題など,CindyScriptなら簡単に画面を作れるが,Python,JavaScriptではかなり苦労しそうだ。Scratch はこういったゲーム向きのように思えるが,そう簡単には行きそうもない。

どの言語を使うかは,教科書の選定にもかかわってくるだろう。

 第一に考えるべきなのは,やはり学校の事情だ。大きく分けて,センター試験(これからは共通テスト)を視野に入れるかどうかだ。共通テストの問題演習をしようと思ったら,CindyScript,Python,JavaScriptの3択しかない
 そうでなく,プログラミングとはどういうものかがわかればいいのであれば,Scratch とドリトルが有力候補になる。どちらも小中学校で使ってくる可能性があるのと,学校現場での実践例があるからだ。ドリトルは,初期のタートルグラフィクスのころから,学校現場での指導経験の上に開発されてきているのが強みだ。
 逆にいうと,「今だけ」できればいいなら Scratch,ドリトル。そうでなく,将来的なこと(進学,企業就職)を考えるなら,これらははずれる。高卒で就職するとして,事務系だったら,VBAをやってきましたというのと,Scratch をやってきましたというのとでは,当然前者が有利だろう。就職者が多い学校なら,プログラミングはそこそこにして,Offceソフトに習熟するという方向性も考えられる。

 したがって,以降は,大学進学を視野に入れて,「情報Ⅰ」でプログラミングを学んでおく,という前提で考えていくことにする。

 結論を先に書くと,
おすすめは CindyScript
その次が Python
次いで JavaScript
ということになる。
ただし,Python,JavaScriptについては,現時点ではわからないことが多いため,この記事は「暫定版」ということにした。

VBAはMS-Offceの環境下ということで除外した。 
Swift はもともとMac用で,Windows版も出ているが,版による互換性に若干問題があるのと,最新の Xcode では,研修用教材のコードが動かなかったので一旦除外しておく。
なお,Scratch は2次元配列が使えないというのがネックだ。

(1) 制作環境

・CindyScript
 Cinderellaを起動し,スクリプトエディタウィンドウを開いてコードを書く。
 処理内容によって「スロット」と呼ばれるものに分割して記述できるので,問題には使わない初期設定などを別のページに書くことができ,実習をするときもやりやすい。
 組み込み関数,ユーザー定義関数,文字列は色分けされ,わかりやすい。
・Python
 Anaconda と JupyterNotebook を使えば書きやすい。
 JupyterNotebook を使わない場合,テキストエディタでソースを書いて,コマンドラインから実行,という方法は高校生の場合どうだろう。ディレクトリの概念,やコマンドラインの使い方が必要になるからだ。ただし,最初だけなので手順を覚えてしまえばいいかもしれない。
 ネットに繋いだ状態で使えるなら,piaza が使える。ただし,外部ライブラリの matplotlib は inport できない。
 Google のアカウントの取得が必要になるが,Google Colaboratory もある。
 どちらの場合も,コードを書くページと実行画面が同じなので,少し長いプログラムになると,デバックをしにくくなる。
 ちょっと動作を試したり,短いプログラムならば piaza が手軽でよい。
・JavaScript
 テキストエディタでコードを書き,ブラウザで表示する。マルチウィンドウでいける。

(2) デバッグの容易さ

・CindyScript
 エラーがあると,コンソールにメッセージが表示される。
・Python
 Jupyterで使えば,エラーメッセージが表示され,デバッグしやすい。
・JavaScript
 開発ツールでエラーメッセージが出るが,エラーの箇所がわかりにくい。これが結構ネックだ。

(3) 言語仕様・記法の問題

 CindyScript と JavaScript は似たような記法になっている。行末のセミコロンなど,C言語ともほぼ共通する。
 Python は,インデントによりブロックを形成するので,行末のセミコロンなどは不要。
 グラフィクスやマウスの使用については,結構違いがある。CindyScript では,どちらも簡単に記述できる。Pythonでは外部ライブラリ,JavaScriptではHTML5を使うことになるだろう。これが,簡単なようでいて結構面倒だ。教員側がよくわかっていて,事前に設定しておかないと実習でつまづくかもしれない。

(4) オブジェクト指向

 CindyScript はオブジェクト指向ではない。インスタンス,メソッドといった概念の知識は不要。これに対し,Python , JavaScript はこれらの概念が必須になる。高校生のプログラミング教育として,これらが必要かということになるが,知らなくてもよいだろう。実際,大学入試センター試験「情報関係基礎」ではまったく使わない。しかし,Python ,JavaScript ではある程度教員側がわかっていないといけないだろうし,これが結構厄介だ。

(5) 学びやすさ

 CindyScript についての本は,紙の本は出版されていないが,リファレンスマニュアルは,ヘルプからすべて参照できる。Webページ「CindyScript基礎と応用」にもたいていのことは書いてある。
 Python , JavaScript の入門書はたくさん出ているが,本によって目指す方向が違うから選定が難しい。機械学習,HTML,データ処理,どちらを向いているかで編集方針が違う。そのため,知りたい事柄が載っていない本も多い。
 では,Webを探すのはどうか。
 Python,JavaScript についてはたくさんのページがあるが,知りたいことを探すのに一苦労だ。
 普通は公式ページで探すのが一番なのだが,公式ページでもわからないことがある。したがって,これから,情報の授業のために Python , JavaScript を学ぼうとしたら,かなりの時間が必要だと覚悟しなければならない。

(6) 生徒用マニュアルの必要性

 実習を行おうとすれば,生徒用のマニュアルが必要だろう。1年間でとりあげる内容で使うコマンドなどをマニュアルに書く。言語仕様全部を書く必要はない。前述のように,オブジェクト指向の概念もいらない。
 「リファレンスマニュアルを読みながらプログラムを書く」という学習は役に立つはずだ。もっとも,「プログラムの記述方法の習得が目的にならないよう取扱いに配慮する」といっている文科省はそこまで考えていないだろうし,穴埋めだけでいいならリファレンスマニュアルもなくてもよさそうだ。
 教員用のマニュアルは,生徒用以上に必要だろう。言語仕様のすべてを網羅する必要はない。教材作りのために必要な範囲でよいが,これからプログラミングを学ぶ教員には必須といっていい。都道府県の教育委員会でそういうものを作ってくれればいいがあまり期待できないだろう。


 以上,これからどうするか,を考えてみた。
本稿は,筆者の知識が CindyScript 以外は少ない状態で書いているので,今後書き換えていく可能性がおおいにある。