できる気がしてきた。

僕の興味のあることを共有します。

なぜ文芸的プログラミングなのか

OSSソフトウェアとしてソフトウェアを公開するとき、僕が一番気にするのはソースコードの読みやすさです。 どんなに優れたソフトウェアでも、開発を継続するにはソースコードが読みやすくないとモチベーションが維持できません。

読みやすさには、いろいろな観点がありますが、その一つとして僕は「どのサブルーチンをから読むべきか」を経験則として挙げます。 例えばC言語で書かれたソフトウェアのソースコードを読むとき、main関数から下る方向に読んでもどのように動作するのか全くわかりません。 なぜなら開発者自身がmain関数からプログラムを書き始めないからです。

普通プログラムを作るとき、僕達は欲しい機能に関するサブルーチンを作り、 それをまとめる形でプログラムが完成しさせていきます。 ですから、main関数から読んでもそのソフトウェアの開発者の意図というのは読み取れません。

そこで僕はプログラムを書くときに文芸的プログラミングをすることを提案します。 文芸的プログラミングというとドナルド・クヌース氏の超絶技巧を尽くした芸術的なものを想像しますが、 僕には到底無理なので以下のようにします。

  • 開発した順番・読んで欲しい順番で章立てする
  • 機能ごとに節替えする。
  • 内容は「何をしているか」ではなく「どういう理由で何をしたいか」を書く。
  • 可能であれば目次を作る。

以上を守ることで、そこそこまともな文芸的プログラミングが出来ます。

宣伝

実現するためにCommonLisp向けのシンプルなライブラリPapyrusパピルス)」を紹介します。 Papyrusは、リードマクロ上で実現されたMarkdownCommonLispの文芸的プログラミング支援ライブラリです。

リードマクロ上で実現されているため、一切のコード生成を開発者は行わなくて良くなります。 これは、他のコメントベースの文芸的プログラミングツールでも実現されていました。

しかし、それらはドキュメント生成にはコンパイルが必要でした。 Papyrusは、全体をMarkdownで書くことが可能なので、 ドキュメントをコンパイルせず、そのままでGithubなどで綺麗にレンダリングしてくれます。

文芸的プログラミングをするのは面倒だと思いがちですが、 Markdownで書きはじめることができるので気軽に始めることが出来ます。

エレガントなソースコードを書くには相当の技量が必要ですが、 解読しやすいソースコードを書くのでしたら文芸的プログラミングで解決可能です。 これを機会に、どうでしょうか?

github.com