侘しい気持ちになったので、車で閉店時間間際の池袋のジュンク堂に出かけてみました。この時間なら客もいないし道中は車だから例の疫病も大丈夫でしょう。本屋はいつものように本屋で、ジュンク堂は池袋に残された数少ない大型書店の一つなので、西口の芳林堂書店や西武のリブロみたいにいつの間にか潰れていたら困るから、出来ればここで買っておこうと折に触れて立ち寄るのですが、洋書コーナーが弱いのが玉に瑕です。リブロの跡地は三省堂になったけど、あれって本当にWaveとかの西武文化憎しの堤義明の怨念のせいなんでしょうか。

駐車料金もあるのでさっさと買い物して帰ってきたのですが、今回の獲物はシャーリー・ジャクスンの「鳥の巣」「プログラミングElixir 第2版」です。前者は国書刊行会のドーキーアーカイヴシリーズの一冊。ドーキーアーカイヴというのはその作品中に必ずド・セルビーというマッドサイエンティストが登場するというアイルランドの著名な作家フラン・オブライエンの傑作「ドーキー古文書」に由来するのですが、この作家は変名も多くて書誌をまとめるのも大変そうなんですよね。何を隠そう、記憶が正しければ昔々インターネットでYahooとやらにアクセスすれば自由にキーワード検索ができると知って最初に検索したのがフラン・オブライエンの名前でした。当時は自分の専用のマシンなんて持っていなかったのですが、図書館の検索端末のデフォルトのアプリケーションをとあるキーの組み合わせで落とせばtelnetも使い放題、謎の(おそらくMicrosoftによるOEM製品の)ウェブブラウザもあったので簡単にインターネットにアクセスすることができると気づき、それ以来ずっと図書館に入り浸って半ば自分専用の端末として使っていたんですよね。ラッキーなことにフラン・オブライエンのファンサイトはダブリン大学かどこかに当時もう出来上がっていて、いろんな変名を調べることができたと記憶しています。大学のレポートにド・セルビーの陰謀をサミー・ソーサがコルク入りバットで打ち砕くという内容の文書を提出したことがありますが、レジャーランドと呼ばれた90年代の大学であっても流石に単位はもらえませんでした。

さて、Elixirの本なんですが、プログラミング言語といえばなんでも近頃Railsの影響力に翳りが見え始め、少なくともフロントエンドのマニアックなエンジニアたちによればまたウェブアプリケーションを構築する際に選ばれるプログラミング言語の覇権をめぐる争いが激化しているんだそうですね。筆者の周囲では圧倒的に人気なプログラミング言語はPython、Ruby、Rust、Goなのですが、よく考えたらJavaScriptもプログラミング言語なのでここにカウントしなければいけません。いや、これ冗談ですけど、私の年代の人なら結構通じると思うんです。悪意はあるけど他意はないので許してくださいね。JavaScriptでサーバーサイドなんてゴメンだと思っているだけだから。

以前、Elixirで自分用にビデオ会議用のアプリケーションを作ったことがありました。もうずっと前、コロナ以前の話ですが、画面の中央に共有のドキュメントがあってGoogle Docsみたいに互いに更新し合うことができて(two-way mergeで衝突を避けようとする)、ビデオで顔を見ながら通話し、終わったら共有ドキュメントがそのまま議事録として配布されるというもので、今になってみればZoomの会議よりよっぽど仕事に向いていたなと思います。一緒に試してくれていた客先の人が転職してしまったのでそれっきり使っていないのですが、もったいないことをしました。Elixirに手を出すのはそれ以来になります。

どうしてさほど人気もなさそうなElixirをわざわざ選ぶのかですって?いやそんなこと質問していないですけどと面食らった顔をしているイマジナリーなあなたのイマジナリーな問いにお答えすると、うん、全く自分でも理解できませんね。どう考えても身近な仕事環境を見ればGoを覚えておくほうが得策です。Pythonはそこそこやればできるので何度かアルバイトしたことはあります。例えば工場に設置する虫取りシートをどこにどの時間に設置すれば最も効率が良いかを調べるために、これまでは設置したシートを剥がしたものを集めてそこにくっついている虫の数を人が数えていたのを写真を撮ってアップロードするだけに簡略化するというのもありました。OpenCVをPythonからあれこれいじって、画像の中から虫と思しき姿をカウントすることで対処したのですが、数えた証拠に虫の影を縁取りして画像として保存するようにしたので、アウトプットはこれまでにやってきた仕事の中で最も不気味な画像になりました。数日のハックにしてはいいギャラだったので、Pythonが人気なのも宜なるかなと納得しました。

しかし、Pythonにときめきを感じるかといえば、まあそんなことはないのも事実。マリエ・コンドーに選択を迫られたら残るとは限らないポジションです。ではどうしてElixirの本なんかに手を出したのかというと、思い当たる節は一つしかありません。ジョーのせいです。

プログラミング言語の本で感動したりグッときたりする経験って普通はそんなにないと思うんですが、ジョーだけは違ったんですよね。昔々、今よりずっとへっぽこプログラマだった頃、このままではいけないがこの先どうしていいかさっぱり見当もつかないので手当たり次第に本を読んでいたのですが、そんな迷える中年なら誰もがそうするように、ある日ふとErlangの本を読んでみたんです。ErlangはなんというかCっぽい言語の見た目に慣れている人にはとてもエソテリックで、確か当時は普段こちらがやっているような文字列の処理もなかなかおぼつかない不思議な言語でしたが、稼働しながら更新されることや並行処理をいかに継続していくかについて鬼のように最適化された機能とライブラリを抱える異色の存在でした。この本はそのErlangという言語の作者であるジョー・アームストロング自身が書いていたのですが、読み進めるうちに突然ジョーがErlangという言語が何をしているのかについて熱く語る箇所に出くわしました。いわく、オブジェクト指向はモノを描写し、それで現実を模写しているというわけだが、ジョーによれば現実というのはそんなものじゃない、というのです。例えば世の中には交通信号というものがあり、オブジェクト指向的に考えるならそれには赤だの緑だののライトがあって、オンオフしたりする機能があり、きっと信号クラスを継承していて、歩行者信号という別のクラスもあるのでしょうが、それが現実の描写だとしたらそれは大間違いだとジョーは断言します。そうではなく、その信号とやらが町中のあちこちで並行して動いていることこそが現実であり、並行処理というのはオブジェクト指向よりももっと現実の姿をした現実の描写だというのです。グッときませんか?きましたよね。皆さんの袖を絞ってもまだ溢れ出す涙がその証拠です。当時のわたしもなんて熱いおっさんなんだと感動したのを覚えています。内容はうろ覚えですが。

注)ElixirはErlangと同じBEAM virtual machine上で実行される、Erlangで実装された言語です。

プログラミングの仕事は、強迫観念的に次から次へと新しい技術が登場するので、常にそれらを追いかけていないといけないものとされています。まあ9割ほどはその通りで、それらが常に新しいとは限らないという点が違うだけです。そのため往々にしてプログラマは何を勉強するのかについて厳しい選択に迫られることになります。何せ人生の時間は限られていますし、振り分けられるリソースにも限りがあります。だから、出来ることなら最短距離で現在にも将来にも役に立ち、自分の知識を深め、それを使って高い給料で仕事ができて、塩分控えめでカロリーも少ないのが望ましいと誰もが思っています。そのことをこんな風に言い表していた人がいましたので以下に引用します。毀誉褒貶の激しいQiitaですが、誰でしょうね、とっても良い文章ですね。

技術業界というのは、誰もが最安の航空機のチケットを買おうとしている貧乏な旅行客のようなもので、自分が選択した技術が果たして最適なものなのか、他のを選んだ連中の方がずっと楽をしていたんじゃないのか、と常に疑心暗鬼の目で周囲を見ています。誰だって損をしていると感じるのは嫌ですからね。だから、新しく出てきたあれやこれやの製品がちょっとトレンドになれば目の色を変えてすぐさま飛びつき、そこであれこれ試してうまくかず、また別のもう少し良さそうなものが出てくると今度はそちらにふらふらと吸い寄せられるのですが、結局どれも下地となる知識の裏付けがなければ同じように苦労するだけだという単純な事実の繰り返しでしかない、という「まるで、だめな、追っかけ」スパイラルから抜け出すことができません。そして、そんな厳しい現実なんて毎朝鏡で見るだけで十分だからと、今日もまた別の希望にすがってしまう。

いいぞ、言ってやれ大将、皆さんのそんな声が聞こえてきます。コネクティングドットは後から振り返らないと見えないし、ミネルバの梟は夜に飛ぶものなので、世界中の情報を一手に集めても未来の自分を最大限に益する選択肢は何かなんて見つかりっこないことに、皆さんも早く気づいたほうがいいと思います。それでも学ぶべきプログラミング言語に迷っている人は、ではこう考えてみるのはどうでしょう。人間が常に情報を集め学び続けるとして、ではいつの時点で最適な選択ができるようになるのかといえば、その答えは常に明日だということになります。いつの時点で決断したとしても、常に明日の自分の方がより良い選択ができるなら、最短距離を進もうとか、最も効率がいいやり方を採用しようとか、そういった考え自体があまり突き詰めると今度は何も選択できないというジレンマに陥ることになるだけなのです。だから、そこには決断が必要だし、跳躍が求められるのです。ポール・グレアムが「下手くそなバージョン0.1を早く出せ」みたいなことをどこかに書いていたように記憶していますが、ソフトウェアを作るのも、文章を書くのも、次に何をするか決めるのも、常に明日の自分には敵わないのであれば、今この時点で決めてしまって、まあ最悪の場合でも明日以降の自分に直してもらうしかありません。

筆者は本格的なプログラミングの教育を受けたことがなくて、好きで独学していたのが、バイト先で隣の席に座っていたウェブサーバの管理者が産休に入ることになり急遽後を引き継いだことからこの世界に入ったので、計算機科学的な素養は全くありませんでしたし、今でもその辺は相当怪しいと思います。でも、PerlやPHPから学び始めたとしても、例えばどうしてファイルを開くときの変数をみんな「fp」にするんだろう、file pointerというのか、でもそれってなんだ?といった具合にほんの少し探ってみるだけで、そこにはファイルシステムについての理解があり、ファイルディスクリプタなるものに出会い、そこにはソケットとロック機構があり、というかなんでこんなに何でもかんでもファイルなの?という疑問に突き当たり、やがてはC言語で不慣れながらもインタプリタの実装を追いかけ、謎のマジックナンバーを見つけては大笑いし、いつの間にかLinux Kernelの基本的な挙動の理解へと進んでいくようになるわけで、今になって思い返せばドットはちゃんとつながっているし入り口がなんだったかは大した問題ではないことがわかります。

それでもまだ決断が出来ない、ギャンブルなんてやってられないという方は、ではちょっと待って一緒に考えてみてください。「ネコ」という言葉で皆さんが思い浮かべるネコはきっと私の頭に浮かぶのとは違うネコでしょう。ちなみに私の方はといえばさっきこれを書くのを邪魔するために左腕を占領していた飼い猫の姿です。こんな風に私たちは同じ言葉を使いながら全く違うことを頭に浮かべつつも、そうだよね、ネコは可愛いよねえ、などと共感しあっている奇妙な生き物です。私たちのコミュニケーションにはこの手の断絶が常につきまといます。人間なんて突き詰めれば口を開けばギャンブルしている様なものじゃありませんか。どうせ何か始めなければ明日には新しい技術を手にした誰かに後ろから断崖に蹴り落とされるのがこのプログラミングの世界なのですから、いま跳んでおく方がお得ですよ。