言語の「理解可能性」を測定する方法は?
質問
いくつかのプログラミング言語は他の言語よりも明確であることをよく読んでおり、抽象的な構文を考えると、言語の明確さを測定するために言語の明確さを測定する客観的な方法があるかどうかを何度か自問しました。可能。おそらく、その目的のためにある種のデザインパターンが存在するのでしょうか?
要するに、構文の最大の明確性をどのように達成できますか?言語の「明確さ」または「表現力」を定量化する方法を知っていますか?
これらの側面を測定しようとするのは理にかなっていますか?
ありがとう。
解決
私はこのフレーズを何度も不注意に異なる言語で投げかけているのを聞いたことがありますが、異なる人々が異なる基準に基づいて異なる言語を選択します。
の 美しいコード, 、Matsumoto(Ruby's Designer)は、JavaよりもRubyでHello Worldプログラムを書くのがどれほど簡単かについて議論しています。この例はスケーリングすることを意図していないと思いますが、著者のポイントは、コードに追加する必要があるraftの量は、その言語で書かれたプログラムを理解する際に不足を反映しているということです。つまり、気を散らすものが少ないほど、プログラムは「読みやすく」ます。
今、私の経験では、優れたプログラマーはプログラムするすべての言語で明確なコードを書きますが、より明確に慣れています。著者の才能と、そのレンギュージでの彼の経験の幅は、言語自体の明快さや表現力をwarります。
考慮すべきもう1つのポイントは、利用可能なライブラリの量とAPIの品質です。ジョブを完了するために「サポートコード」を少なく記述する必要がある場合、結果として得られるプログラムはより明確である可能性があります。
他のヒント
「自然プログラミング」と呼ばれるものに関するいくつかの研究があります。
http://www.cs.cmu.edu/~natprog/index.html
彼らは、コンピューターにとって最も単純なものに人々を適合させるのではなく、人間の期待に応えるために言語を設計しようとします。そして、彼らは実験に基づいています。たとえば、「何かを取り戻すことはリンゴでも梨でもない」ように指示するときに、果物の箱から梨を持ち帰る人が何人の人が持ってくるかを研究します。 (私は彼らの結果に追いついていませんが、それは有望なプロジェクトのように聞こえました。)
それでも、「透明度」と「表現力」は、測定するための曖昧なものです。もちろん、次のように言語の定量的な尺度を実行する研究があります。 コンピューター言語ベンチマークゲーム. 。一部の人々は、そのゲームで提供されたソリューションからデータを取得し、「コードサイズ対パフォーマンス」などのグラフ化されたトレンド:
http://blog.gmarceau.qc.ca/2009/05/speed-size-and condepanability-of.html
特定のタスクを効率的に実行するために必要なコードサイズの傾向に基づいて、汎用言語に関する不安定な指標ベースの命題を作成できる場合があります。しかし、あなたは「明確さ」と「表現力」が何であるかについて、かなり主観的な概念を固定しています。 (同じ作業をより速く行う短いプログラムはしばしばより明確になると信じていることに偏見がありますが、多くの反論があります。)
したがって、私は、あなたが被験者を使用してユーザビリティ研究を行うことができる定義されたターゲットオーディエンスがない場合、言語について一般化するためにこの種のメトリックよりもはるかに優れていないと思います。
(注:私は好きです Rebol そして、私はそれが信じられないほど明確で表現力豊かである力を持っていると思います...しかし、あなたが行くようにDSL方言を開発することを含む特定の方法でそれを使用する場合のみ、それは彼らがプログラムするときに多くの人々が考える方法ではありません。まだ!)
あるとは思わない。透明度は主観的であり、デザインパターンは言語の明確性の良い尺度ではありません(実際、デザインパターンは通常、言語の制限を回避するために生まれます)。
豊かで簡潔なセマンティック(Perlなど)を持つ言語が好きで、シンボルの使用を本当に気にしない人もいれば、自然言語に似た構文を好む人もいます。 'Tは本当に冗長性や曖昧さを気にします。
このような質問は通常、ペダンティックな答えをもたらします。
言語はツールのようなものです。
それらは特定の目的に合わせて構築されています。ロジックプログラミング言語は、オブジェクト指向のプログラムよりもエレガントな方法で特定の問題を解決します。同様に、多くのメインストリームソリューションは、典型的なオブジェクト指向または手続き言語によって簡単に実行できます。
ツールユーザーの気質やその他の要因、この場合、プログラマーも重要です。一部の人々はPerlで気の利いたソリューションを達成しましたが、それは私にとって常に黒魔術のように見えました。私はPythonの構造的シンプルさを好みます。一部の人にとっては、白い空間の使用は忌まわしいものでした。
言語の明確さと表現力の評価がある場合、それはせいぜい非常に主観的な評価になります。
しかし、明確な兆候は、その言語のコード生産の豊富です。 Brainfuckのような一部の言語は採用されていませんが、Python、Rubyなどは人気を博しています。ただし、これらおよび多くの要因はインジケータのみになります。良い構造にもかかわらず、いくつかの言語は多くの受験者を見つけることができないかもしれません。
ネットワーク効果は、言語の採用にも影響します。
私はlolcodeがそれらの中で最も理解できる言語であると思います:
HAI
CAN HAS STDIO?
I HAS A VAR
IM IN YR LOOP
UP VAR!!1
VISIBLE VAR
IZ VAR BIGGER THAN 10? KTHXBYE
IM OUTTA YR LOOP
KTHXBYE
言語の理解可能性を測定することは、プログラマーの理解性を測定するほど重要ではありません。
また、RW Sebestaによる最新版の「プログラミング言語の概念」という本を見ることもできます。この本には章があります(第1章または2章は正確に覚えていません)プログラミング言語を評価する基準について説明します。