ソフトウェア・コードの重要性は日々増している。
高性能な半導体の普及が大きい。先進国では一様に人口が減少し始めいるため、知的労働の相当部分をコードが置き換えていく必要があるだろう。
コードの不具合や脆弱性、生産性低下などにはおそらく1つの共通要因がある。
それは情報量の不足である。
情報量不足の例
コードの簡易的な例として、ネットワークの設定例を仮定する。
ソフトウェアごとに書き方は異なるが、簡素なYAML形式では以下のような書き方になる。
host: example.com
この例で指定している値はアルファベット10文字プラス区切り文字の".“であり、区切り文字などを除くと情報量は10バイト(80ビット)である。
現在の多くのソフトウェアではこれ以外の書き方が許されないため、この10バイト程度の記述は妥当な設定として受け入れられている。
本来必要な情報量
妥当な情報量(エントロピー)は、事象の確率から計算できる。
上のネットワーク設定の例では、適切なドメイン文字列を誤りなく記述しなくてはならない。
ドメインはアルファベット26文字、数字10文字、またはハイフンの計37種類の文字の組み合わせからなる。
モデルを簡略化してドメイン文字列(”.“を除く)を20文字長とすると、あり得るパターンは 37^20
(37の20乗) = 2,312穣程度となる。
この文字列パターンから特定の1ドメインを指定するために必要な情報量は、log2(37^20) = 104.189
ビット程度となる。
この仮定では24ビット程度の情報不足が生じている。
実際には、YAMLに指定しうる文字種や文字長はもっと制約が緩いため、必要な情報量はもっと多くなるはずだ。
そして、一般的に設定項目は1項目といわず無数にあるため、情報不足は幾何級数的に拡大する構造になっているだろう。
情報量不足は暗黙知で補完されている
このように、コードには慢性的なエントロピー不足の構造があると考えられる。
情報不足であるにも関わらず正常動作しているコードは、試行錯誤などによる偶然の結果である。
試行錯誤は生産性の低下の形で表面化する。
またナレッジマネジメントのいう「暗黙知」は、この情報量不足を補填するようなクロス・エントロピーの形で計測できるだろう。
試行錯誤は、失敗ケースの除外として表現でき、これはヘーゲルの止揚の形式とも合う。
より一般的に「智恵」「インテリジェンス」といった概念も一定水準以上のエントロピーとして知覚されているのではないか。
コード量はもっと増える必要がある
現在のエンジニアの慣行として、コードはより簡素であることが好まれている。
これは、主観的に人間が苦痛と感じる情報量を超えている状況を示唆している。
しかし既述のとおり、求めるインテリジェンス水準に比して、実はコード量は絶対的に不足している可能性が高い。
YAMLの例の延長では、XMLのようにスキーマ情報を付加する工夫はまず必要だろう。
スキーマは、暗黙知の形式知化に相当する。
何をもって十分条件を満たすかはケースにより異なる。
現時点の本質的なネックは、たとえばYAMLに追加情報を書くことが許容されないといった点にある。
意味のあるコードを追加できる手段を増やすことが、より知的に進化する際のブレークスルーとなろう。