«前の日記(2003年09月08日) 最新 次の日記(2003年09月10日)» 編集

Matzにっき


2003年09月09日 [長年日記]

_ [言語]Lispのわかりやすさ

nobusunからツッコミをいただいたが、ちょっと考えさせられるものがあった。

LISP が読みにくさは、慣れの問題ではないでしょうか。

うむ。しかし、「慣れ」については、いくつか気になることがある。

まず第一に、Lispを知って数日の人に「Lispわかんない」と言われた時の反応としては、 「慣れの問題」というのは適切かもしれないが、 私はLispに関して決して初心者ではない(上級者だとも言わないが)。 数千行のLispプログラムを継続的にメンテしていたこともある。 それでもなお読みやすいとは思えない人に「慣れの問題」というのは不適切ではないかと。

第二に、ユーザビリティの話をしている時に「慣れ」の話は反則ではないだろうか。 人間の適応能力はすばらしいものがあって、どんな悪いものでも、 強固な意志をもって、ある程度時間をかければたいてい慣れることができてしまう。 しかし、そんな「慣れる苦労」を少なくしようという試みがユーザビリティではないだろうか。

では、「慣れ」の問題を排除して考えると、はたしてLispは使いやすいか。

nobusunは以下のように述べておられる。

すくなくとも Scheme については以下のように思います。
  • 表現の種類がすくなくても、抽象化力が強いので、「冗長」というよりは「簡潔」である。
  • データ部分とコード部分を区別しないでいいのは利点。
  • 閉鎖的というのは、最近の実装にはあてはまらない。
  • マクロについては、たしかに別の言語を許すようなものですが、簡潔に書くためには便利。
  • 本来複雑なプログラムを如何に抽象化するかが、読みやすさにつながる。抽象的な表現力がつよい言語で記述できるほど読みやすくなる。

Lispの冗長さについてはPaul Grahamの「Being Popular」(翻訳)にもある。端的には

a = b[x,y]

(set! a (aref b x y))

の違いだ。 この冗長さは細かいことではあるが、プログラマに与える精神的な負荷という点では無視できない。

「データ部分とコード部分を区別しなくていいのは利点」というのは、 マクロ以外の点では成立しないのではないかと思う。 そして私はユーザビリティの観点からはマクロに否定的だ。

では、言語のユーザビリティはなにによって決まるか。続きはまた明日(おいっ)。

_ [言語]ツッコミへのお返事

まず、ともさんのツッコミへのお返事。

Windows に未だ慣れることができない私としては、『「慣れる苦労」を少なくしようという試みがユーザビリティ』というお言葉には同意できないかも。

えーと、論理がよく分かりませんでした。私もWindowsには慣れることができてませんが。 この文を解釈すると「Windowsはユーザビリティが高いはずだが、慣れる苦労は大きいぞ」 という意味に読めるんですが、それはfalse assumptionかも。

それはともかく、ABC 順とかあいうえお順のキーボードとかは初心者対応かもしれないけど、ユーザビリティは高くないと思います。

ええ。「初心者にも優しい」と「初心者だけに優しい」は混同してはいけませんよね。 今回はプログラミング言語のユーザビリティについて考えていますが、 プログラミングが本質的に複雑で、その結果プログラミング言語も習得にそれなりにコストがかかるものである以上、 「初心者(だけ)に優しい」ユーザビリティは不要だと考えています。

ところで、中置記法が前置記法よりも読みやすいのは数学教育のせい、即ち、慣れの問題じゃないでしょうか?

違います(きっぱり)。これは「常識(or 伝統)を活用する」という立派なテクニックです。

「慣れ」との違いは個人的かどうかですね。どんなツールでも慣れることはできますが、 その「慣れ」は個人にとどまります。しかし、数学的記法のような広く使われ受け入れられているものは、 個人の範囲を越えてユーザビリティ向上のために用いるに足る「常識」として利用できると思います。

次にshiroさんのツッコミへのお返事。

ひとつだけ、ユーザビリティの議論は、どういうユーザを対象としているかを明示しておかないと無用の混乱を引き起こすと思われますので、そこは何卒宜しく。

もっともです。

ですが、正直なところプログラミング言語のユーザビリティについては客観的に評価を行うために必要な 研究などの蓄積はないと思います。ですから、現状では「私にとってはこうするのが良い」と提示し、 それに賛同するか、反対するかで議論を深めていくしかないと思います。

あえて対象を明示するならば、「現代的なコンピュータ(と数学)の基礎知識を持っているプログラマ」でしょうか。 より具体的には「わ・た・し」です。


«前の日記(2003年09月08日) 最新 次の日記(2003年09月10日)» 編集