Cを愛して… 著者： Michael Feathers 日本語訳： yomoyomo

以下の文章は、Michael Feathers による On Loving C.. の日本語訳である。

文中の固有名詞などについて理解の助けとなるよう Wikipedia へのリンクを加えさせてもらった。

認めなければならないことがある。私は C を愛している。しばらくはそれを意識していても、忘れがちだ。Ruby、Haskell、OCaml、C++、Java、そして C# に心移りしたこともある――今も多くの言語に時間を割いているが、C の元に戻ってくると、私は故郷に帰ったような気持ちになる。

私は何十年も前に Kernighan と Ritchie の本をパラパラとめくったときのことを覚えている。C にはとても欲求不満を感じた記憶もあるが、とても満足を与えてくれたことも覚えている。C にはヘンなところがあるが、振り返ってみると、それは多くの他の言語のヘンさに比べれば不可解なところはずっと少ない。深読みする必要がないのだ。構成要素の動作は定義されるか、さもなければ定義されない。未定義の動作にはとても大きな代償が生じるので、人々は慎重になる。そうならざるを得ないのだ。

友達の Kevlin Henney は、ソフトウェアにおけるアフォーダンスについてよく語る。アフォーダンスとは基本的に、モノに備わる知覚できる行為可能性の許容範囲のことだ。多くの場合人はこれを「ソフトウェアが許可すること」のことだと考えるが、私はここに C を解説するより発展的な手法があると考えている。C は過敏なので、そのアフォーダンスに注意しなくてはならない。注意して C のコードに取り組まないと、トラブルに巻き込まれる。C の概念的な単純さとその過敏さは強力な組み合わせなのだ。

C のもう一つ良いところは、私の見たところ回復性にある。これを何度も繰り返すのは好きではないが、自分の時間の大半をものすごく汚いコードベースに手をつけ、そのコードベースが抱える問題を乗り越えるのを助けるのに費やしており、私が頻繁にコードを見るすべての言語の中で、もっとも回復が難しいのは C++ であると言えば少しは分かっていただけると思う。それにはいろいろ理由があって、私はここでそれに深入りするつもりはないが、実際のところ、質の落ちた C++ のコードベースのある段階で C++ はあなたの敵になっている。私は思い出せない数の依存性の悪夢を見てきた――ビルド時は何をするにもキチガイみたいに時間がかかるシステム――それを直すのは、少なくとも病に至る道と同じくらい痛みを伴うものだ。一方で C はより回復性があるように見える。さもなければ、単に私がこれまで幸運だっただけかもしれないが。

C++ の問題（またそれは C++ だけに言えることでは決してない）は、新しいフレームワークに飛び込むのではなく、既存のフレームワークの中でうまくやろうと尽力したことにある。より良いものに向って調整しようとしたが、多くの場合それは大失敗に終わる。それにも関わらず我々は努力を続けている。我々は Java や C# といった言語を、実際とは異なる言語に変えようとする――が、その言語に対する知識や敬意がなければ、失敗することになる。

皆が習得できるわけではないが、ベル研にいた人たちは間違いなく掴んでいたソフトウェア開発における何か深いものがある。それは「ニュージャージー・スタイル（New Jersey Style）」、「悪いほうが良い（Worse is Better）」、そして「Unix 哲学（Unix philosophy）」の底流である――またそれはベル研のソフトウェアの特徴というだけに留まらない。それはパケット衝突が当たり前のものと考える元々のイーサネットの仕様にも見出せる……し、同じ種類の理念はインターネットのプロトコルにもある。それが設計の副次的影響に関する深い認識であり――大きな混乱を避けるためにより小さな混乱と共存しようとする意志――想像ではなく現実にエレガンスさを見出そうとする意志である。

数週間前に私はある雑誌記事を読んだのだが、その著者はインターネットの設計者は健全なシステムの設計原理を体現するアプローチを偶然発見しただけだとほのめかしていた。すごく嫌な気持ちになった。その記事を部屋の反対側に投げ捨てたかった。そんなことはない、設計者の人たちは分かっていたんだ。彼らは深くシステムについて考えるスキルを持っていたし、それは苦労して獲得したものである。その種の設計は、問題をじっくり考え、その性質と折り合いをつける方法を理解しないと実現しない。C はそうした性質と折り合いをつける言語なのだ。

私は Dennis Ritchie、Douglas McIlroy、Ken Thompson、または他の開拓者たちの誰にも会ったことはないが、彼らは人間にしろソフトウェアにしろその完璧性を信じてなかったのではないかと私は睨んでいる――彼らはその罠にはまらなかった。彼らは限界を理解しており、それと折り合いをつけた――彼らは手を広げ過ぎなかった。

C がそのスタイルを体現しているという事実こそが、C を私にとって特別な存在にしているものの一つである。それはもっと認められ、模倣されるに値するスタイルである。