プログラミング言語と言文一致
[tag:]
機械に苦労させるのは問題ではないので、「機械が読む」のはどうでもいいんです。が、人間がコードを書くのと読むのとどちらを優先するかはたしかに難しい問題だと思います。私は「書くのを優先」、「読むのはツール(エディタ、IDE、コンパイラなど)が支援」というのがいいんじゃないかと思ってます。
— Yukihiro Matsumoto (@yukihiro_matz) 2018年2月6日
自然言語における話し言葉と書き言葉の違いは、
プログラミング言語におけるインタプリタ型と
コンパイラ型の違いに似ているように思う。
いずれも、前者では個々のやり取りごとの小さな
構造を頼りに内容を把握していくことが多いのに
対し、後者では全体を通じて設定された大きな
構造を軸に内容を把握していくことが多い。
プログラミング言語を「書く」行為が、自然言語を
「話す」ことと「書く」ことの両方に似ざるを得ない
のに対し、プログラミング言語を「読む」行為は、
自然言語を「読む」ことだけに似ることができ、
自然言語を「聞く」こととは似ずにいられる。
この非対称性があるために、プログラミング言語の
「書きやすさ」が「話しやすさ」を意味しながら、
「読みやすさ」が、「聞きやすさ」ではなく「読み
やすさ」を意味することで、各々のプログラマに
とってのプログラミング言語のよさが変わるのだと思う。
自然言語について言えば、明治時代の言文一致運動で、
文体としては書き言葉にも口語体が普及したが、
話したことを読めるようにするには何かしらの編集が
必要であり、文の構造としては、やはり書き言葉には、
話し言葉とは違った書き言葉としての構造がないと、
読みづらいように思う。
それはプログラミング言語でも同じだろう。
編集を経ていないコードは、編集を経ていない文章と
同じように読みづらい。
@yukihiro_matzが、
いいえ。汎用言語では何らかの制限を加えても悪い構造を作る自由をなくす/減らすことはできない(と信じている)ので、対価とかそう言うことではないのです。
— Yukihiro Matsumoto (@yukihiro_matz) 2018年2月6日
と言っているのは、そういった編集を不要にするような
制限を設定することはできないということだと思う。
この編集はlintのようなものよりもさらに大々的な
編集になるはずで、この意味でのエディタはVimや
Emacsではなく人間がやるしかないのが現状であるが、
自然言語に比べれば、プログラミング言語の方が
実装しやすいように思う。