プログラミング教育に適した言語

プログラミング教育に適した言語について考えたことを垂れ流します。いきなり言語からは離れちゃいますけどねw

考え始めたキッカケは、最近話題になった「プログラミングが嫌いな学生たちにRubyを教えたら嫌いじゃなくなった話」。

こと教育に関して言えば言語がCだから嫌い、Rubyだから好きというものではないでしょう。ポイントは学生が興味を維持しつつ学習を継続できるか否かに過ぎません。学生にかぎらず人間は、面白いと思わないものに向き合い続けることはまず不可能です。この例で言えば「(Rails on Rubyで)Webアプリを作る」という比較的興味を維持しやすいトピックであったことが、教育として重要だったのです。仮にCであっても、その先にその言語で実現できること(たとえばOSが読める/書けるとかw)を逞しい想像力で思い描ける学生であれば、学習は継続できたでしょう。まぁ、今時そんな学生がいるともなかなか思えませんが。

興味を維持しやすいトピックを通じて教育を行うことが重要です。

とすれば「Webアプリ」というのは、幼い時からガラケーやスマフォ、そしてWebブラウザに慣れた現代の学生にとっては良い題材です。すぐに試せて結果を自己評価できますし「ああアレはこうやって作るんだ」と納得しやすいでしょう。しかしこれはWebアプリを素早く作って動かせるのであれば言語は問わない話です。RubyでもPythonでもPHPでも良い。もちろん「Webアプリを素早く作って動かせるのであれば」Cでも良い。ただここまで考えて一つの疑問が湧いてきます。

はたして「Webアプリ」が教育用トピックとして最良なのでしょうか?

Webアプリを完成させるにはそのフレームワークとなる言語以外に学ばなければいけない言語が多々あります。少なくともHTML、CSSそれにできればJavaScript…これではフレームワークが簡潔な言語&優れたテンプレートを用意したとしてもノイズが多すぎます。HTMLやCSSの知識が役に立たないかと問われればNOですが、プログラミング教育として伝えたい本質ではないはずです。おそらく伝えたいのは計算アルゴリズムや各種数学とのリンクだったりしないでしょうか。それらサブトピックとリンクするのにより良いトピックはないのでしょうか。

「ゲーム」はどうだろう?

「ゲーム」って実は最新の計算機科学の応用の塊です。動作速度はもちろん、3Dグラフィックスのための数学、敵アルゴリズムのAI、よりリアルな動作のたのめ物理演算、臨場感あふれる音響効果、MMOになればサーバサイドの知識などのサブトピックもかかせません。もちろん1から全部やらせるのではなく、フレームワークで「素早く作って動かせる」という前提での話です。動かした後にサブトピックを少しずつ実装できる形が好ましいのでしょう。

もしかして「ゲーム」最強?

ゲーミフィケーションって言葉もありますが、こう考えてくると…もしかしてゲーム最強かもしれません。今ならフレームワークはUnityですかね…そうすると言語はC#になっちゃうのかな? それはそれで面白く無い気もする。誰かLLベースで教育目的かつ実用でも使えそうなゲームフレームワーク、知らない?

もしくは誰か作らない?