発見
2020年の5月、私は初めて自分のElixirライブラリをHexに登録しました。この時、ドキュメントを生成することが求められました。ExDocというライブラリをインストールしてElixirスクールの説明を見ながらやっているとだんだんとそのコツがわかってきました。それと同時にこの仕組み、ずいぶん前から知っているような気がしました。私は思い出しました、クヌース先生の文芸的プログラミング WEBシステムです。WEBシステムはドキュメントとPascalコードが一体になったものから、きれいに整形されたドキュメント文書を生成するものでした。
今は昔
その昔、文芸的プログラミングということをクヌース先生から提唱されたことがありました。手元にある本はアスキーから1994年に出版されたもので、クヌース先生の本を有澤誠先生が翻訳したものでした。共立出版からも「クヌース先生のプログラム論」として有澤先生編で出版されています。クヌース先生は完全主義者です。バグのないプログラムを追求するうちに文芸的プログラミングというものに行きついたように思います。共立出版の本からこの文芸的プログラミングの要点を引用します。
「クヌース先生のプログラム論」有澤 誠 編 共立出版 p68
ほとんどのプログラムはあまり読みやすくないものです。コメントとコードの内容が一致していなかったり、コメントがほとんどなかったりします。クヌース教授は、大きなプログラムを書く仕事をするのなら、ついでに、彼が考えるところの良いプログラム設計の例や、プログラムで使われたデータ構造やアルゴリズムをわかりやすく説明するドキュメンテーションの例にしたいと考えました。やがてプログラムそのものを、ドキュメンテーションのための文書にしようというアイディアが生まれました。プログラムはもともとコメントとコードでできていることが多い。それなら、プログラムに章やセクションを付けて、最初から最後まで本のように読めるように整形してもいいのではないかと考えました。クヌース先生はこのアイディアを文芸的プログラミングと呼んでいます。
なんか似てるよ
ExDocを起動すると自動的にhtmlファイルを生成してくれます。関数に付しておいたドキュメントが整形され統合されてひとつのドキュメント文書になっています。詳細はElixirスクールの例をご覧いただくとして、ドキュメントに対話環境で実行したコードを埋め込んでおくことができます。これはテストの実行対象にもなっています。常にコードの使用例が正しいことを保証してくれます。なんだか、クヌース先生の発想と似ています。Elixirの作者のJoseさんはとても研究熱心な方のようです。Elixirには古いLispやPrologの特徴が織り込まれていたりします。Joseさんのことです、クヌース先生の本も読んでいたのではないでしょうか。ExDocでクヌース先生の文芸的プログラミング、WEBのようなことができそうに思います。
自分を説明モードにする
あまり深く考えずにちょっちょっと書いたコードはあとでデバッグで苦労します。簡単だと思って手抜きをしているとあとでつまらないバグに苦しめられるものです。一方、難しい部分のコードはかなり熟考し、整理してから書き始めます。不思議とこういうコードはすんなり一発で動いたりします。文芸的プログラミングの手法によれば自分を説明モード、熟慮モードにすることができます。ドキュメント文書を書く過程で、ほんとに説明通りのコードになっているか自分で見直しをせざるを得なくなります。なぜそのコードでうまくいくのかを自分で説明していくことでバグを取り除くことができます。結果として詳細なドキュメントが残りますので、他者にも親切です。
Joseさんに聞いてみたい
Joseさんに会う機会があったらこのExDocのアイディアの源泉についてお聞きしてみたいと思っています。クヌース先生の文献も詳しく研究していたのではないのだろうか?
というわけで何の根拠もない整理されていない雑文でした。ポエムということで間違いがありましたらごめんなさい。