プログラマーの才気

今日会社の上司から「読んでみて」ということで、以下の本を渡されました。

ソフトウェア要求と仕様―実践、原理、偏見の辞典 (新紀元社情報工学シリーズ)

ソフトウェア要求と仕様―実践、原理、偏見の辞典 (新紀元社情報工学シリーズ)

これから新規案件の見積もり(私の嫌いな人月のExcelシートの作成ですが)の作業をやらなくてはならないので、その参考書ということかと思いましたが、この本はタイトルにこそ「要求」「仕様」とかありますが、Excel方眼紙とか分厚いWord文書とはまったく無関係でソフトウェア工学者の立場から書かれたエッセイ集のような本でした。プログラマーが読んでも実に面白い本だと思いました。それぞれのセクションは完全に独立しているのでどこからでも興味のあるところから読むことができます。(原書版はタイトルのアルファベット順にセクションが並んでいるのに対して、日本語訳だとあいうえお順に並べ替えられているというのも「辞典」ということで気が利いたところですね。)
この本の中で、「才気」というセクションがあってその中で「フレッド」と「ジェーン」という二人の対照的なプログラマーの話が出てきます。フレッドの方は「5枚の大きな出力用紙に200程の記号、そして無数の結合線」が書かれた極めて複雑なフローチャートを唯一理解できる「才気ある」開発者として管理者から評価されています。一方で、ジェーンの方は

ジェーンの前評判はたいしたものでした。だから私たちは彼女がフレッドと同じくらい才能に満ちた人物であることを期待していたんですけどね。でも彼女、まだ私たちにはその才能を見せてくれないんですよ。私たちは彼女に非常に難しそうな問題をいくつか任せてみせたんですが、彼女が解き終えた答えをみてみると、じつは残念ながらどれもこれもそれほど難しい問題ではなかったんですよ。実際大部分のものはとても単純なものばかりでね。

ということで、その管理者からはいまいちな評価しか与えられていないというお話です。
プログラマーの才気といった場合、いろいろな評価基準があるとは思いますが、少なくともプログラミングをエンジニアリングとして考えた場合はジェーンの方が優秀だということは明白ですね。もちろん中には複雑なパズルを一瞬で解いてしまったり、円周率を何万桁も暗記してしまうといった天才的な能力を持った人もいるかもしれませんし、中にはどのように複雑なスパゲッティーコードもたちどころに一瞬で解読してしまうプログラマーもいるかもしれません。しかし、一般的に工学的と呼ばれるアプローチであれば複雑な問題を簡単な問題の集まりとして分解するとか、スマートなアプローチを考える能力の方が大切なことは明らかです。業務システムの開発のようにある程度の人数のプログラマーを集めて開発するのであれば、一層のこと「誰でも理解できる」簡単なやり方を考えるプログラマーの方が価値が高いですね。
このお話を読んでその上司がこの本を私に渡した意味がなんとなく分かったのですが、そうすると普段のプログラミングに対する私の考え方と「一般的なSIerの上司の考え方」として以前に紹介した「低スキルのPGでも開発できるための仕組みを考える」というのと方向性が完全にずれているわけではないという気もしますね。つまり、「簡単に開発できる生産性の高いプログラミングモデル」を考えるということはフレッドのようなある意味「天才」PGでなくても普通のPGで効率的に開発するということにつながるのですから。だから、ジェーンのような才能を持つ人、物事を単純化して考えられる人がアーキテクトとかチーフプログラマーにはふさわしいのではないかと思いますね。
ただし、誰にでも開発できるようにするという最終目的は同じですが、Excel表からの自動生成とか1クラス1メソッドの規約とかSIer脳の一般的な方法を押し付けるアプローチが、リファクタリングしながら問題に応じて最良のやり方を見つけるというアジャイル脳の考え方と違っているということに過ぎないのかと思いました。