2018/12/21 18:24

lisp系とforth系にかならずしも限った話ではないのですが。lisp系とforth系が強く持つ特徴があります。それは自己増殖型言語であるという点です。Javascriptもその一種ではあります。

これは、「ライブラリを書き溜めていく」というのとはまったく異なります。絶対とは言えませんが、多くの言語では言語そのものを別の言語にしてしまうようなことはできません。たとえば、"if" 文や "ループ" などの制御構造を新たに定義することはできません。(頑張ればどうにでもなりますが、コンパイラのソースやAPIを理解していないといけないなどの厳しめの条件がつきます。)

その点、lisp系やforth系は、その言語仕様のままで新しい制御構造(あるいは制御構文)すら定義できます。lisp系やforth系が言語定義言語、あるいはメタ言語とも呼ばれる理由です (言語定義言語やメタ言語というのは耳慣れないかもしれませんが、コンパイラ・コンパイラ、あるいはメタ・コンパイラにすこしだけ似ているかもしれません)。

そのような言語を用いる利点はなんでしょうか? たとえばそのような言語を10年間使い続けたとしましょう。その時間を活かした結果として、それぞれの児童・生徒の手元にはなにが残るでしょうか? おそらくは元の言語とはまったく異なる、各々の児童・生徒独自の言語でしょう。そして、どう考えれば、あるいはなにを考えればそれらができるかという知識と経験も残るはずです。

この点において、こうも言えるかもしれません。「わかり易さとはわかり難いこと」だと。lisp系やforth系の言語は様々な機能が隠された言語あるいは環境に比べてわかり難いかもしれません。ですが、Scratchなどは見かけのわかり易さであり、lisp系やforth系言語は見かけのわかり難さです。「見かけこそが重要」という考え方もあるかもしれません。ですが見かけを超えれば、前者はわかり難く、後者はわかり易いのです。どちらを選ぶのがいいかは自明とも言えるでしょう。

非常に多くのプログラミング言語が存在します。それらを一つ一つ検証し、どれを使っていくのがいいのかを選ぶのは大変な作業です。教員の方とそのあたりを話したこともありますが、「正直手に負えない」という感想をいただきました。そして、「だから文科省や教科書会社の推奨する言語を使う」とも。それでいいのだろうかとも思います。「プログラムを組むことができる」とはっきり言える人は、10個や20個のプログラミング言語は使えるでしょう。その全部を資料なしにというわけではないでしょうが。ならば、代表的と言えるような5,6個の言語すら検討できないというのは、好奇心の欠如か、能力の不足であるように思えます。教員の仕事が忙しいのはわかります。ですが、「だとしても」です。

そして、手に負えないのであれば、児童・生徒の血肉になる言語を選ぶのが現実的には最善の方法であるように思えます。

大学のプログラミング教育に用いる言語の選定においても、「社会に出た時に役に立つ言語を」と主張される方がいます。大学でのプログラミング教育はなんのためのものでしょうか? そこで「社会に出た時に役に立つ言語を」という基準は、本末転倒ですらあるでしょう。もちろん、そのあたりが合致している言語もありますが。

プログラミング教育は、それがどういう形態で行われるにしても、なんのためのものなのかという根本について考えてみる必要があるかと思います。そして、本プロジェクト、本企画、本企画の母体となる講習会では、「プログラミング言語は必ずしも使う必要はない」という結論から出発しています。

このような方法、あるは本プロジェクト、本企画、本企画の母体となる講習会が持っている知識・知見・経験に興味を持たれた方がおられましたら、ぜひご支援をいただければと思います。