文学としてのコード
エンジニアとしてポエムを書くこと
最近のエンジニア界隈ではポエムを書くのが流行っているという。ただこの「ポエム」というのはいわゆる中原中也などの詩のことではなく、主にエンジニアの仕事に関連する心情を吐露した内容を指す。
例えば、「日々学び続けることの重要性」とか「未経験の私がエンジニアになるまでにしたこと」のような日記ともいえるようなものから、はたまた「〇〇というプログラミング言語を使うべき(使わないべき)10の理由」などの技術的な主張を含んだものまである。
このようにある程度の幅広いテーマを「ポエム」と呼んでいるわけだが、共通しているのは「(ポエムと前置きしているので)この内容は独断と偏見を含んでいます(そのため、間違ってたり独断と偏見があっても許してね)」という免罪符として使っているということだ。
なるほど、であればちょうど5年前に自分が書いた技術ポエムが見つかったので加筆修正したものを以下に載せることとする。
コードとは何か?
ここでの「コード」とは、ローレンス・レッシグの言う「コード(アーキテクチャ)」ではなく端的にプログラミング上のソースコードのことだ。以下、単に「コード」と呼ぶこととする。
しかし、コードを単に「プログラミング言語の言語仕様に従って書かれており、コンピュータに対する一連の指示である(Wikipedia)」と言える人は幸せな人だ。
また単なるツールと考え、プログラムが動作することが最上の目標だと言う人はある面では正しい。コードの目的はコンピュータを動作させることだ。
ポケットにあるスマートフォンから、普段仕事やプライベートに使っているパソコン、コンビニのATMや競馬場の券売機まで、いたるところで何らかのコードが動作している。
このようなコード群によって私達の生活や社会システムが壊れることなく滞りなく動き続けているのは本当に素晴らしい。
美しいコード・汚いコード
しかし実際には、プログラマは「動作する」以上のことをコードに求める。「美しい」もしくは「汚い」と。
ある面では、その審美眼は保守性や拡張性を高めるための理性的な判断としてみなされる。しかしもちろんそんな訳なく、実際には「このコードは汚いから気に入らない」というのを後付けで説明していることはよくある。誰もが連番のクラス名を嫌うのは単純にそれが「醜い」からにすぎない(もしあなたが「連番のクラス名」の意味を知らないなら、これほど良いことはない)
以前、あるプログラマが言っていたが「常に重要なのは、どう書くかということだ」。つまり、動作としては同じプログラムをより良い別の方法で書く道を模索することが重要で、それがプログラマのやるべきことだと。昔流行っていた議論のテーマの一つである「オブジェクト指向が良い」や「関数型が良い」というのもどう書くかという問題だ。
文学としてのコード
しかし一体プログラマはなぜこんなにも、どう書くか(How to)に気を配るのか? もちろん、誰かに読まれるためだ。それは見ず知らずの他人かもしれないし、来週の自分かもしれない。ある人はコードを「手紙」に例えたが、むしろ「小説」に近い。そこには葛藤があり、物語があり、人の感情がある。実際、プログラミングの多くの時間は誰かのコードを読むことに費やされる。あるときは感嘆し、天を仰ぎ、眉をひそめる。