ルール14コードには種類が4つある
ここで、過度に単純化されてはいるものの依然として有用な、コードについて考えるためのモデルを紹介しよう。解かなきゃいけないプログラミング上の問題が、「やさしい」と「難しい」の2種類あると想像してほしい。
「やさしい」問題とはどういう問題か、もう察しがついていると思うが、とりあえず一般的な例をいくつか挙げよう。「数値の配列から最大値と最小値を求める」「ソートされた二分木にノードを挿入する」「配列から奇数の値を取り除く」あたりだ。
「難しい」問題も、簡単に見分けられる。例えばメモリーの確保で、要は「C言語の標準ライブラリーであるmallocとfreeの実装」だ。後は「スクリプト言語の構文解析」「線形制約問題ソルバーの作成」とか。
さて、ここで定義した「やさしい」と「難しい」は、実際には連続的範囲内の2点にすぎず、範囲の端の極点というわけでもない。例えば、2つの数の和を求めるとか、「やさしい」問題の例よりさらにやさしい、自明な問題もある。また、ジャーナリング†1ファイルシステムをゼロから作るとか、「難しい」問題の例よりずっと難しい問題もある。
†1 訳注:ジャーナリング(journaling)とは、データ書き込み時に、ジャーナル(journal)と呼ばれる変更履歴のログを別途保存すること。ジャーナルには書き込む実データや実データの属性を記述したメタデータを含めることができ、ジャーナルを利用してある時点の状態へロールバックしたりできる。
でも、この「やさしい」と「難しい」の2点は、有用だ。「やさしい」と「難しい」の間には、プログラマーが日々解決している問題のほとんどが存在している。参考までに、ぼくはここで挙げた例の全部について、解法を書いた。いや全部じゃない、ジャーナリングファイルシステムをゼロから構築するってのは除く。とはいえ、それもやってみれば面白そうだが。 ...