プログラミング教育について

プログラミング教育について

執筆:准教授 神原利彦

 新年明けて早々だが、プログラミング教育について考えてみた。コロナ禍ですっかり影に隠れた感があるが、昨年4月から小学校でプログラミング教育が必修化された。筆者自身の体験を元に敢えて偏見を言わせてもらうと、必修化して本当に大丈夫なのか?…という思いが強い。今でこそ、大学で「コンピュータ・プログラミング」という授業(選択科目)を担当し、学生たちに(偉そうに)プログラミングを教えている身であるが、自身が大学生の時はプログラミングで挫折した経験があるからだ。大学生でも選択科目なのに、小学生が必修なの?という気もするし。

 挫折の原因は色々あるが、たった1文字打ち間違えただけで動かなくなる点や、たとえ動いても無限ループで止まらなくなったりする点とか、トラブルが頻発し、その原因がなかなかわからない点が挙げられる。あとは性格かな?偏見かもしれないが、プログラミングのトラブル対応には我慢強さというか忍耐が求められる。数字の「0(ゼロ)」と大文字の「O(オウ)」は間違え易いし、数字の「1(イチ)」と小文字の「l(エル)」も間違え易い。辛抱強く、そういった細かい違いに至るまで文字の打ち間違いがないかを地道にチェックしていく作業には忍耐が必要だ。小学生にそれだけの忍耐が期待できるのか?とか、教える先生自身が生徒より先にぶち切れてしまうのではないか?とか心配してしまう。

 筆者自身の経験では、道具と人の巡り合わせで良い方向に向かう可能性もあると思っている。例えば、最初はFORTRANという言語で、大学の助手の先生から教わった際は、言語の構造が不可解な上に助手の先生に質問しても「先生もわからん」という答が返って来た。そんな時はどうしようかと思ったよ。大学の図書館でFORTRANの本を何冊も読んだが、一向に解決できず、必修のプログラミングの単位を落とし、すっかり挫折した。大学生がプログラミングを嫌いになるには充分な経験だった。だが、次の年に再履修する際には、米メリーランド大学から帰国してきた助教授の先生が持ち込んで来たC言語に道具が変わった。わけのわからないFORTRANよりもC言語っていうのは単純で理解し易く、助手まかせにせず、その先生自身が教えてくれたこともあって、かなりわかり易いと感じた。しかもその先生が(学生の生意気な)質問にすべて明確に答えてくれたので、一気にプログラミングが好きになった。あくまで筆者の偏見であり、FORTRANをディスるつもりは毛頭ないのだが、単にC言語が自分に合っていたことは確かだろう。

 当時は、大学のメインフレーム計算機をIBM 5550というパソコン端末(図1)から接続して使っていたのだが、大学が終了した後も5インチのフロッピーディスクに自分の作ったプログラムをコピーして、自宅に持ち帰り、自宅のPC-286 MODEL-0というパソコン(図2)でも、そのプログラムを動かしていた。当時はハードディスクが高価で(学生の小遣いでは)買えなかったので、PC-286には記憶装置がフロッピーディスクドライブしか無く、Microsoft-C でコンパイルすると、30行程度の短いプログラムでもフロッピー装置をガッチャガッチャとうるさく鳴らしながら5分~10分ぐらい待たされたおぼえがある。それだけ待たされても実行ファイルが出来ず、エラーメッセージが表示されることも多々あった。それが全然苦にならなかったのは、プログラミングが面白かったからだ。待たされても、実行ファイルを動かしてみるのが楽しかったからだ。余談だが、IBM 5550では文字コードがEBCDIC(エビシディック)なのに対し、PC-286ではASCII(アスキー)だったので、同じプログラムを両方のマシンで動かしても表示結果がゼンゼン違うという現象が起きて、かなり悩まされた。

図1:IBM製5550

図2:EPSON製PC-286

 さて、話を戻し、小学生のプログラミング教育必修化の動きに関しては、様々な問題があることがネットやメディアなどで騒がれているが、当の小学生にはプログラミングの面白さを是非とも知って欲しい。面白く感じられないなら、道具や人を変えてみるのも手だ。筆者もC言語に出会わなかったら、あるいはその助教授の先生に教わらなかったら、挫折したままだったと思う。

 もうひとつの大きな心配は、論理的な思考が止まる点である。プログラミングで論理的な思考を養うことができる。それは確かにマチガイではないのだが、計算の中身や過程を知らなくても関数をブラックボックス的に使えば答が出てしまう。つまり、既製品の関数がどんな機能を持っているかさえ知っていれば、その関数を呼び出すだけで事足りてしまう。例えば、「2つの正整数a,bから最小公倍数を求めるプログラムを書け」というプログラミングの課題に対し、既製品の関数lcm(a,b)を呼び出す…だけで終ってしまう可能性があるのだ。つまり、最小公倍数を算出するための論理的な計算過程(アルゴリズム)を思考する感覚がまったく養われない。思考が「ひたすら既製品を探す」ことに集中してしまうおそれがある。プログラミング教育の必修化で、こういう論理的思考が止まってしまう生徒を創り出すことがないよう切に願う。学校を卒業し、いざ社会に出ると、既製品が存在せず、アルゴリズムもソフトウェアも独自に創るしかない事態が多いのだから。