日本語プログラミング言語について話していると「日本語は曖昧だからプログラミング言語に向いていない」というコメントを頂くことがあります。
私は20年ほど日本語プログラミング言語を作って使ってきましたが、なぜ「日本語が曖昧である」ことが「プログラミング言語に向かない」ことになるのか、その思考が理解できないでいます。
ただ、ここ最近「日本語プログラミング」というキーワードをあさっていて、気が付いたことがあったので、まとめてみたいと思います。
“日本語は曖昧でプログラミングに向かない”の意味
言語学者でもない私が「日本語は曖昧な言語である」ことについて説明することすら恐れ多い気がしますが、日本語は文法として「主語がいらない」とか、文化的に「物事をはっきりと言わない」ということは知っています。確かに人間が話す自然言語としての日本語は、表現が曖昧ということは言えそうです。
一方、すべてのプログラミング言語は、文法が論理的に決められた形式言語であり、文法通りに指示しなければ、意図通りに動作してくれません。例えば言語仕様と違う文を書けば構文エラーになりますし、定義した事と違う指示を書けばコンパイルエラーや論理エラーになります。
そして「自然な日本語でプログラミングができる日本語プログラミング言語」というフレーズを聞いて、「(自然言語である)日本語は曖昧だから(形式言語である)プログラミング言語に向かない」と思うのは、、、まともですね。なるほど。。。
「日本語プログラミング」の異なる2つのゴール
「そうではない。」となるわけです。
以前コラム記事で「日本語プログラミング」という言葉からイメージするものはひとそれぞれ違う、ということを話題にしましたが、これもまた誤解されてしまっているようです。
「日本語プログラミング」という言葉に好意的な方の話をよくよく聞いていると「日本語プログラミング」というキーワードで夢見るゴールは、方向が異なる2つがあるのではないかと分かってきました。
- 自然な日本語文から要求や仕様を抽出して、実行可能なプログラムを生成する自然言語プログラミングツール
- 日本語という表記を使って、自然に読み書きできる明確な文法(形式言語)で論理的に記述するプログラミング言語
「日本語プログラミング」というキーワード以上に「日本語プログラミングのゴール」を共有する機会は皆無ですが、1,2どちらかの違うゴールをイメージされていると思います。
プロデルのゴールは自然言語プログラミングではない。
もし仮にプロデルを見て、1.のゴールを期待した人はごめんなさい。プロデルは2.です。1.は無理です。プログラム作りで行う、
- 作りたい物を決めて
- 必要な機能を挙げ
- その仕様を決め
- 実行できるコードを生成する
この一連の流れを自動的にすることなど不可能です。これを実現するのであれば、コンパイラに形態素解析器をくっ付けて完成。という簡単な話では済まないです。私はプログラムを曖昧に書きたいとはこれっぽっちも思っていません。夢です。
ただ近年のスマートスピーカーのような機械学習によるアシスタント機能が発展して、自然な言葉で指示して動くツールはもっと実用的になるかもしれません。そうすれば、今までプログラミングする必要があった物がこのようなツールで必要なくなる。ということはありそうです。
このゴールは自然言語処理や機械学習に詳しい方にお任せしたいと思います。
日本語表記で読み書きできるプログラミング言語
最近までプロデルでは「自然な日本語でプログラミングができる」というフレーズを多用していましたが、「自然な」という言い方では自然言語と誤解してまう人がいたのではないかと反省しています。
プロデルやTTSneoをはじめ今ある「日本語プログラミング言語」は、自然な日本語に近いですがあくまでも形式言語であり、すべて明確な文法が決まっています。プログラムも論理的に意味が通る内容を書いて動かします。PC上で日本語が不自由なく扱える今、半角アルフベッドと記号表記に頼ったプログラミングに固執する必要は無く、単純に日本語表記で普通にプログラムを書きたいのです。
ただ「日本語入力は不便だから」などデメリットを挙げられてしまいがちな中、「日本語で書けることがメリットだ」と単に主張するだけでは力不足です。日本語表記,日本語文法らしい表記を活かしたコーディング方法(言語仕様)をもっと考えだす必要はあると思います。そのために日本語で書かれたプログラムがたくさん必要ですし、 明確な文法で論理的に記述する形式言語という枠組みの中で、日本語で書くことの良さを十分に議論できるように日本語プログラミング言語を改良していく必要があります。
それには自然言語処理の考え方を取り入れる必要はあります。実際プロデルにも自然言語処理で使われる形態素解析器を内蔵しています。字句,式と言った文法の構造も、もっと自然言語解析の言葉で考えるべきかもしれません。
まとめ
10年前プロデルを作り始めた頃からずっと「日本語プログラミング言語で何をしたいのか」ということを私自身でよく理解していなかったと思います。今回の記事のようなコラムを書くことで一つ一つ考えをまとめて行ければと思います。