ディスカッション (11件)
計算機科学のパイオニアであるエドガー・ダイクストラが、プログラミング言語APLに対して綴った1982年の書簡。独特の思考哲学を持つ彼が、当時のAPLの設計やプログラミングパラダイムをどのように捉えていたのかを知る貴重な資料です。
皮肉なことに、投稿で挙げられている例はDijkstraの主張を反証するどころか、むしろ裏付けている気がする。投稿者の意図とは裏腹にね。
シンプルさ(紙とペンで教えたり説明したりできるプログラミング言語)を追求するのは素晴らしいことだけど、コンピュータが「メタデバイス」であることを忘れてはいけない。
コンピュータが登場する前は、手書きかタイプライターで紙に書くしかなかった。だからプログラミングの考え方がテキスト中心になり、タイプライターで表現できることに重きが置かれるようになったのは当然のことだ。
でも、コンピュータで直接コードを書けるようになり、タイプライターの機械的な制約から解放されたキーボードのおかげで、活字表現の可能性は一気に広がった。キーや組み合わせを好きなだけ追加できるし、デジタルかつ無限の可能性がそこにはある。
今や2Dや3Dのグラフィックス、それに無数のHID(ヒューマンインターフェースデバイス)があるんだ。そろそろ認知の飛躍をもう一度目指すべきじゃないかな?
EWDが生きていて、UnicodeフォントでAPLの文字が画面上にすぐに表示できるようになった今、同じ意見を持ったかどうか気になるな。
彼が言語設計そのものをダメだと思っていたのか、それともTTFフォントで「rho」「iota」「grade up」のような記号がちゃんと表示できれば、彼の反論のいくつかは解消されていたのかどうかが知りたいところだ。
APLは私が夢の中で書いたことがある唯一の言語だ(文字がはっきりと見えた)。昔からプログラミングの夢はよく見たけど、大抵は解決できないバグを必死に直そうとする悪夢だったからね。
APLが好きで、全盛期に働いてみたかったという願望(いつかAPLの仕事をしてみたい!)もあって、Ken Iversonの著作や録音にはいろいろ触れてきた。DijkstraのAPLに対する考えもいくつか読んだことがある。
言わせてもらうと、Iversonは寛大で好奇心旺盛な人という印象を受けるのに対し、Dijkstraはただの偏屈な嫌な奴に見える。まあ、私の見方が偏っていて、Dijkstraのポジティブな面を正当に評価できていないだけかもしれないから、彼がそれほど不機嫌に見えない著作があればぜひ教えてほしい。
1978年から1979年にかけての大学の卒業研究で、APLをたくさん書いたよ。
とにかく楽しくて最高だった。たった1行のコードで信じられないほど大量の処理ができたからね。
唯一の問題は、その1行が後から見ると解読不能に近いということ!わざわざ難読化しなくても、最初から「書き捨て専用」言語として簡単に使えてしまった。
大学卒業後にプロのプログラマーになってからは二度と使うことはなかったし、何よりも読みやすいコードを書くことを学んだよ。
APLはPerlと同じような悩みを抱えていると思う。どちらも事前に言語を知っていないと理解しづらい独特のシンタックスが壁になっていて、競争相手がいる中で、人は結局「一番楽な道」を選んでしまうんだ。
-
今や新しい世代を中心に、デスクトップやノートPCを持っている人自体が珍しくなっている。
-
その中で、メール、SNS、Web閲覧、ゲーム以外にPCを使う人は極めて少ない。
-
さらに、プログラミング言語を学ぼうとする人はその中のごくわずか。
-
その中で、JavascriptやPython以外の何かを学ぼうとする人はさらに少ない。
-
その中で、Java/C#/C++以外、あるいはアルゴリズムやVim/Emacsといったツールまで学ぼうとする人はさらに少ない。
-
その中で、Rust/Go/Haskell/Lisp/Scheme、あるいはFortran以外を学ぼうとする人はごくわずかだ。
-
その中で、まるでコードゴルフのような未知の記号表記を持ち、習得するためにキーボードレイアウトまで変える必要がある言語を学ぼうとする人は、ほとんどいないだろう。
APLが関数型プログラミング等に与えた功績を否定するつもりはないけれど、手紙を読む限り、Dijkstraは「摩擦(学習コストや馴染みのなさ)」を全く考慮していなかったのが明らかだね。だからといって、彼がAPLを真っ向から否定したのが正しいとは言わないけれど。
https://news.ycombinator.com/item?id=16246544 (https://news.ycombinator.com/item?id=16246544) - 2018年1月27日、コメント数26件。
Russ Cox(Go言語、Google、Bell Labs)が2021年のAdvent of Codeのパズルを解くのに、Rob PikeのAPL風言語「Ivy」を使っていたのを思い出したよ:
https://www.reddit.com/r/apljk/comments/uccbd6/russ_cox_solves_most_of_the_2021_advent_of_code/
APLは「あらゆる対象に対して、この処理を行う」というオペレーターを持った最初の言語だった。関数型プログラミングの先駆けだったけれど、いかんせんシンタックスが独特すぎたな。
中世の数学表記だけでも十分奇妙なのに、さらに奇妙なものにしようとAPLが発明されたわけか。誇り高きPerl5開発者としては、まったく納得いかないね。RakuがあらゆるUnicode記号を果敢に使っているのも受け入れられない。年をとったのかな。