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さんのツッコミへのお返事。
ひとつだけ、ユーザビリティの議論は、どういうユーザを対象としているかを明示しておかないと無用の混乱を引き起こすと思われますので、そこは何卒宜しく。
もっともです。
ですが、正直なところプログラミング言語のユーザビリティについては客観的に評価を行うために必要な 研究などの蓄積はないと思います。ですから、現状では「私にとってはこうするのが良い」と提示し、 それに賛同するか、反対するかで議論を深めていくしかないと思います。
あえて対象を明示するならば、「現代的なコンピュータ(と数学)の基礎知識を持っているプログラマ」でしょうか。 より具体的には「わ・た・し」です。
Windows に未だ慣れることができない私としては、『「慣れる苦労」を少なくしようという試みがユーザビリティ』というお言葉には同意できないかも。それはともかく、ABC 順とかあいうえお順のキーボードとかは初心者対応かもしれないけど、ユーザビリティは高くないと思います。
ところで、中置記法が前置記法よりも読みやすいのは数学教育のせい、即ち、慣れの問題じゃないでしょうか?数学教育を受けてなければ、英語とかなら前置記法、日本語とかなら後置記法が読みやすいのかも。まあ、でも、自然言語にせよ、形式言語にせよ、読む時にはもっと大きな単位を意識してる気もしますが。
明日を楽しみにしております:-)
ひとつだけ、ユーザビリティの議論は、どういうユーザを対象としているかを明示しておかないと無用の混乱を引き起こすと思われますので、そこは何卒宜しく。
ともさんへ
>Windows に未だ慣れることができない私
どんな理由でWindowsに慣れないとお考えですか?できればお教えください。
-Windowsの設計には一貫性が無く、使い方が分りづらい。
-Helpを見ようとしても、目的の項目が無いもしくは見つかりにくい。
-Windowsというシステムは十分に複雑で、1個人が学習できるものではない。
-WindowsというかMicrosoftが嫌いなので慣れるのが嫌だ。:-)
あとMatzさんも書いていますし、ともさんもご存知でしょうが抽象化で複雑さをやわらげる事はできますが、排除はできません。つまり学習する苦労も、一定以下にすることはできないでしょう。ファイルの圧縮と一緒で、どんな方法を使おうとも一定以下のサイズには圧縮できないこことほのかに共通点が有るのではないかと私は愚考します。
> 具体的には「わ・た・し」
ありがとうございます。そういう前提がないと、最近のcomp.lang.pythonでのマクロ議論のツリーみたいになってしまうんじゃないかと危惧したもので。
大学時代はLisp(といっても大型機の古いLisp)を使っていたので嫌いではないのですが,やはりデータの意味が,リストの構成に依存してしまうのはイヤですね。SematicsとSyntacsが分かちがたいのがLispの欠点のような気がします。もちろんこれはLispの最強部分でもあるのですが,私のようなぬるいエンジニアには辛いです。
set!は例として不適切なのではないでしょうか。
schemeでは、なるべく破壊的代入を使わないようにして、
set!が頻繁には現れないようにするのではないかと思います。
別に不適切だとは思いませんが。
言語がそれを許しているのは事実だし。
それにset!なしで、arefだけでも論旨は変わりませんし。
Windows 云々はまつもとさんの解釈の反対で、初心者でもとりあえず使える、すなわち、慣れる苦労を少なくしようとする試みが行われてるけど、私にはユーザビリティが低いように思われるということが書きたかったんですが、例も書き方も良くなかったです。私が Windows に慣れることができない理由はゆあいさんが挙げられている前3つは全部該当してる気もしますが、でも、システムの複雑さはあんまり関係ない気もします。最後のとはちょっと違うけど、使ってて心地よいかどうかは関係するかもしれません。似たようなものだと思うのだけど、Mac OS X は割と心地よく思うのが不思議です。フォントの美しさのせいかもしれないけど。論理的に説明できないんですが、使いやすい UI には身体的な快感が関係していて、慣れとか一貫性とかは後付けの理由になってることが多い気がします。それから、またまた脱線ですが、自然言語の構造を考えると一貫性を追求し過ぎるとかえって使いにくくなることがあると思います。
一方、慣れ vs. 常識(伝統)の問題ですが、これは 20 世紀の思想にけんかを売ってるようで、いっそ小気味いいですが、一般論としては突っ込みどころが多いと思います。でもまあ、対象者がまつもとさんという前提だというなら私としては納得です。(関係ないけど、数学でも理論系の人は前置記法を多用してたような気が)
WindowsとLinuxをLevel.1の人に使わせてみたという記事。
http://slashdot.jp/article.pl?sid=03/08/18/2358220
とテスト内容(PDF)
http://www.linux-usability.de/download/linux_usability_report_en.pdf
false assumptionの比較対照を両方反転させるとfalse assumption。
というか結論としてはプラシーボだと思った。
そしてゆあいさんに座布団一枚あげたくなった。
学習するっちゅーことは情報のやりとりなんやね。