「空前絶後、他の追従を許さない難解プログラミング言語」と評判のJ言語、Googleで検索してはアッチコッチを斜め読みしています。「難解だからチャレンジしたい」というマゾっ気は全くないのですが、「iPhoneで使えるインタプリタが欲しい」がけっこう強い動機になっています。
本来、難解・難読な言語ですから、その学習曲線は地を這うがごとくだろうとは予測してましたが、どうもそれだけではない「難しさ」を感じます。あくまでも「感じ」でして、確たる根拠はないのですが、なんか新参者を寄せ付けない壁のようなものを感じるのです。
自然言語ではないプログラミング言語であっても、言語利用者のあいだに文化や習慣が形成されるので、コミュニティの境界線のようなものは自ずと生まれるでしょう。J言語の場合は、その境界線が越えにくい、言語の難解さだけではない事情で越えにくいように感ずるのです。
例えば、J言語の本家サイト http://www.jsoftware.com/ における「p.」という演算子のリファレンスの一部は次のようです(http://www.jsoftware.com/docs/help701/dictionary/dpdot.htm)
p. c ↔(m;r)
p.p. c ↔ cIf e is a vector whose elements are all non-negative integers, then p.<c,.e gives the coefficients of the equivalent polynomial:
(p. <c,.e)&p. ↔ (<c,.e)&p.
これは、p. を単項演算子として使ったときの機能説明ですが、p. が何をするものか書いてありません。「p. c ↔ (m;r)」というのは、おそらく、p. c は (m;r) と同値だ、という意味でしょう。しかし、mやrがなんであるかは書いてありません。なにか暗黙の了解事項があるのでしょうか? 「;」はJ言語の演算子です。言語機能の説明にその言語自体を使うことはよく行われるし、それが有効なときもあります。しかし、リファレンスの原本(ultimate, authoritative source of information on J)がこれだと、入門者は途方にくれます。
このリファレンスの見出しは「p. 1 1 0」となっているのですが、ここの「1 1 0」が何の意味か分からないし、その説明(凡例)も見つからないです(どこかにはあるのだろうが)。J言語の説明のために、J言語独特の用語法/記法/習慣が遠慮なしに使われている感じです。「箱を開ける鍵は箱のなか」状態。
日本語によるクイックリファレンス http://japla.sakura.ne.jp/jlang/tutorial/doc/jqr_all.pdf の第0章「J言語超入門」も同じ感じで、入門というよりは既にJ言語を知っている人のために、コンパクトなまとめを提供しているようです。(とはいえ、日本語によるクイックリファレンスが価値ある労作であることは確かです。)
おそらく、「気力が萎える」とか言ってないで、Primerを丹念に読むのがよいのでしょうが、通読が苦手な僕には辛いなー。ご丁寧に、「ちゃんと通読しろ」とPrimerに書いてあるんですけどね。
Sections typically depend on most or even all of the previous sections having been read. Jumping around is pointless and likely frustrating.
それぞれのセクションは、通常、それより前の一部のセクション、ときに全てのセクションに依存します。拾い読みは無意味で、おそらく苛立たしい思いをするでしょう。
確かに苛立たしい思いをしてます。Primerを頭から読み通すことが、壁で囲まれた閉鎖的領域(進撃の巨人?)に進入するためのトレーニングなのか、あるいは通過儀礼なのか? ムー。