4つの文化(新人むけ「お話」用メモ)
ソフトウエアは'70〜'80にかけて、互いにほとんど交流のない4つの領域に分裂して進化した。それが'90から相互に浸透しはじめ、インターネットの発展とともにこの4つの領域をしきる壁は消滅しつつある。これが、純粋な技術の問題であれば、「正しい」方法を見つけるのも混ぜ合わせることも容易だが、この4つの領域は「文化」と呼ぶのがふさわしいような、精神的なポリシーを持っていて、単純に混ざることにはならない。現実の文化と同様に、摩擦も起きているし、交流によって面白いことが起きているケースもある。
ひとつめはメインフレーム文化。規律主義。汎用機(大型コンピュータ)は非常にクリティカルな業務を多くの人間が組織として開発する。たくさん人を集めればコンピュータに向かない人も嫌いな人も混じる。従って規律に従うことと、担当分野を明確に分けることが重視される。
典型的なシステムがデータベース。DBはデータモデルを作成したりチューニングするには高度なノウハウが必要であるが、データの入出力はSQLという簡易なインターフェースで行なう。管理者や設計者は高度な専門家、SQLでアプリケーションを書く人は兵隊。兵隊は高度なノウハウは不要で何か失敗しても影響が局所的ですむようになっている。
次はUNIX文化。実用主義。コンピュータのハード性能が相対的に低いので、創意工夫と積極的、意識的なトレードオフが重要。100%は求めず、職人技で80%の仕事をこなすことを重視し、20%を切り落とすセンスを追及する。
C言語はこの発想でできていて、ポインタのような有用ではあるけど使い方を間違うと悲惨な結果を産む機能がある。予約語は少ないが、学ぶことは多い。芸術と呼べるような美しいプログラムも書かれているし、誰にもデバッグできない悲惨なプログラムも多く書かれている。
次はパソコン文化。刹那主義。パソコンは一人が占有して使うことが特色で、失敗しても他人に迷惑をかけない所が他のシステムと違う。そのため、根本に「とにかく動けばよい」という発想があり、準備したり勉強したりせずに誰にでも使えることが重要とされる。
VisualBasicのように言語と処理系が一体化している開発ツールがその典型。実行性能や保守性を捨てて、短期的な生産性とわかりやすさを重視している。GUIは、(非熟練の)開発者にとってもユーザにとってもわかりやすいので重視される。
最後がこのようなハードの発達とは離れた所で発生した学者文化。理論主義。ものごとの根本を考えて、ひとつの発想でできるだけ多くの領域をカバーしようとする。実用性より整合性を重視する。
Lispという言語が典型で、最も古い言語のひとつだが、ベースとなる理論が優秀であったため長く生き残っている。そのわりにはユーザが少ない。一方で、GCとかシンボルとか高階関数のように、Java/Python/Rubyのような最新の言語にも多くの影響を与えている。
これが混合している例としてはVC++。V=Visual処理系=パソコン文化、C=C言語=UNIX文化、++=オブジェクト指向=学者文化の混合で成りたっている処理系であるが、その内部で使用されているMFCというライブラリはパソコン系の人にも学者系の人にも評判が悪い。EJBは、E=Enterprize=メインフレーム文化、J=Java=UNIX文化、B=Bean(部品化)=パソコン文化の混合である。うまく育てば、品質と生産性と柔軟性を兼ねそなえた枠組になるが、修得は難しい。
セキュリティホールという問題は、UNIX文化の実用主義、パソコン文化の刹那主義が、汎用機の領分であるクリティカルな業務に進出したことから発生した。解決されないのは技術的な問題と言うより文化的な問題ではないだろうか。
この分類は、私が個人的に考えたもので確立された一般的なものではないが、現代のソフトウエア開発にはこのような意味で複数の思想が複雑に入り混じっていることは確かである。そのため、学ぶ時にある程度意識して源流を見極めることが必要ではないかと思われる。(仕事によって重視されることが違ったり、先輩が本に書いてあるとと逆のことを言ったりするかも)
オープンソースの最も重要な意味は、違うバックグラウンドを持った人が出会い、共同作業をする場であることかもしれない。