日本語プログラミング言語は必要か

プログラミング言語はおおむね、英語の語彙を基調として設計される。 そのためか、「英語表記が、日本の初学者にとってプログラム習得の壁となっている。 日本語でプログラムできればもっといい筈だ」といった論を唱える人は多い。 それこそ「モシ〜ナラバ〜」式に日本語プログラミングを可能とする言語は、 ぴゅう太の頃からある訳だが、実際のところどうなんだろう。 僕自身は、プログラミング言語の語彙が英語ベースであることは障害にならず、 BASIC を入口に、あっという間にこの世界に慣れ親しんでしまったので、 壁を感じた覚えがまったくない。プログラミングをまったくわかっていなかったあの頃、 プログラミング言語が英語ベースであったことについてどう感じたかはもう思い出せない。

そういう訳で僕個人にとっては日本語プログラミング言語の必要性はまったくないので、 日本語プログラミング言語を使うことは永劫ないだろうが、 自分が必要としていないだけで世間では困っている人が多いのかもしれないし、 もしそれがプログラミング学習のハードルを下げる効果が本当にあるのであれば、 どんどん研究されて然るべきだとは思っている。ただ、その効果は自明なものではないと思っているので、 ちゃんと調査した結果がない限りは信用する気はない。

実のところ「日本語でプログラムが書ければ学習しやすいに違いない」という思い込みで作られた日本語プログラミング言語は山程提案されている (ここで「俺の好きな××をけなすとは許せない!」と思われるかもしれないけど、世間で知られている数以上に学術発表などの場で発表される日本語プログラミング言語が沢山あるのです。ここで取り上げているのはそれら人知れず消えていく運命の言語のことであり、貴方が好きなそれではありません、多分)。 だが、どれもこれも根本的なところで思い違いをしているように思える。 特に、プログラムの記述がより自然言語に近付けば近付く程優れている、という思い込みはどうにかならないものか。 もしそれが真であるのなら、多くのプログラミング言語のベースとなっている英語を使って、 自然言語的にプログラムが書ける言語がもっと世界的に普及している筈だ、 というところに思い至っていない。(ここで COBOL を反例として出すようではいけない。COBOL の文法は確かに英語に近いが自然言語からは遠いし、初学者向けの教育用言語としてももはや使われていない)

そもそも自然言語に近い形でプログラムを書けることが、 書きやすさ・読みやすさにつながる、というところからしてすでに、 何かおかしなドグマに頭が侵されていやしないか。算数はなぜ、 記号を使った数式の記述を早い段階で教えているのか。それは「1足す2の結果に3をかけて…」と書くよりも、「(1+2)×3」と書いた方が圧倒的に読みやすく書きやすく、 以降の学習が効率良く進むからに他ならない。 それと同様で、いくら自然言語形式のプログラミング言語を教えたところで、 すぐにもっと効率のよい記述方式、すなわち記号や短かい単語をつなぎあわせる、 今日一般的な記述方式に切り替えることになる。その程度の使われ方しかしないのであれば、 記述用言語を日本語化するような小手先の改良で済ませず、Squeak EToys のような、テキストベースのプログラミング言語という形式にとらわれない大胆な試みの方が好感が持てる。その意味で、Squeak との融合を図るなど様々な挑戦をしている「言霊」の方向性は評価できる。

日本語プログラミング言語界においてさらになんだかなぁと思うのが、 ちょっと過剰な義憤にかられている人が結構いることなんだよね。 日本語入力環境の研究者にも多いんだけど、妙な思い込みを礎にして、 これを作ることで日本のコンピューティング環境は一変するに違いない、 とまで意気ごんでいたりするのが結構見られる。例えばたまたま見付けた 「日本語プログラミング言語、 およそ 20 年の歴史と今後(PDF)」という資料では、

これらの言語に対して、市場の反応は必ずしも良くはなかった。 (略)また、トロンプロジェクトがアメリカの圧力に屈して敗退するのと期を一にして内外の圧力もうけた。

日本語の論理性を否定する非論理的論難は、トロンプロジェクトを抑圧するために発展した文脈にあり、アメリカからの外交圧力と方向性が一致していた。

Mindは、研究者サイドからの誘いの多くを断ることによって論難を回避したために、作者の努力と相俟ってこの暗黒期をも唯一乗り切ることが出来たもののように見られる。

なんてことが書かれているのだが、一体どうして日本語プログラミング言語が外圧によって潰されたなどという妄想が出てくるのやら。この資料の著者は根本的にプログラミングというものが分かっていないのは他の資料からも伺える。 (「スタック・ベースの言語に『日本語プログラミング』を預ければ英語流のコンパイラ・インタープリタ向きに語順を入れ替えて渡すことができる」という一文は、 Mind からの発想だろうが、これを読んで笑わぬプログラマがいるだろうか)

一方で世間に目を向けてみるならば、例えば Ben Fry と Casey Reas が設計した Processing は、デザインや美術を教えるようなコースから計算機科学を専門に教えるコースまで幅広い教育課程で採用されており、日本国内でも広く使われているプログラミング言語(環境)だ。開発はオープンに行われており、着実にユーザーを増やしている。Processing 自体は Java のラッパーとして構築されており、構文自体は Java のそれをそのまま踏襲している。自然言語的であるわけではなく、プログラムの記法自体は従来の言語とたいしてかわりはない。

Processing では、プログラムを書く行為を「スケッチ」と呼んでいる。気軽にサッとプログラミングを試せるように配慮してデザインされており、特にグラフィクス表現を簡単に試せるようになっている。ちょっと書いてはすぐ実行し、それを手直ししてはまた試す、というプロトタイピングのサイクルを高速に回せるようになっている。ここらあたりが Processing の人気の理由であろう。僕自身も大学で Processing を使ってプログラミングを教えているが、ちょっとしたアニメーションプログラムを初心者の学生が書けるようになるまで、1時間とかからない。我々のところの大学院のコースには芸術学部出身の学生も多いが、最後には皆それなりのプログラムを書けるようになっている。

この経験から考えるに、プログラミング学習の壁は、プログラムを書くための記法の習得にあるのではなく、プログラムとは何なのか、アルゴリズムとはどういうものなのかを素早く体得できるかどうかにあるように思う。記法が英語風であるか日本語風であるかはおそらく小さなことであろう。†1

プログラムの習得とは記述用言語の習得であり記述用言語学習の壁さえ取り払えば誰でもプログラムが書けるようになる、という誤解はいろんなところで見ることができる。 オブジェクト指向こそもっとも直感的なプログラミングパラダイムだ、これなら誰でもソフトウェアが書けるようになる…。 いやいや、UML なら誰でも書ける、UML をプログラミング言語に変換さえできれば誰でも高品質なソフトウェアが書けるようになる…。 いや、パターンだ、パターンを組み合わせさえすればソフトウェアの設計なんて誰にでもできるようになる…。といった感じで、その時その時の流行を取り上げて、 これこそがソロモンの指輪なりと扇動するおっちょこちょいのなんと多いことか。

しかしこうした論を展開する人は、はたしてプログラムを書ける人なのか、それに挫折した人なのか。後者だとしたら、どうしてその人の言う「〜さえすればプログラムが書ける!」という言葉を信じることができようか。

(2009.7.31 に書いたものを改稿)

2011.11.23

†1
ただし反例もあって、Python は可読性の向上のために英語の語順を意識している。List comprehension なぞは僕にはちょっと読みにくい。