1.4 この本は何ではないか
これは若い白人オタク男性についての本ではありません
ステレオタイプの話をしましょう。西欧社会では、ソフトウェア開発者に対する、根強く、時にいくぶん侮蔑的なステレオタイプがあるのはご存じでしょう。開発者はギーク(geek)ないしはナード(nerd)だと決めつけるのは簡単なことです。
「ギーク文化」などと言うとギークが復権する助けになっていますが、私の経験ではビジネスの文脈における一般的な感覚は、ギークにはさまざまな好ましくない性質が伴っているというものです。さらに、ソフトウェア開発者のステレオタイプには人種や年代についてのある仮定が付随しています。その仮定とは、開発者というのは男性で、白人で、おそらく35歳未満だということです。
本当のことを言うと、ヨーロッパや北米におけるプログラマーについては、これらの仮定やステレオタイプには一定の根拠があります。現在西欧における開発者の多くは男性であり、白人であり、35歳未満です。それを示す調査や統計があります。ギーク度を測る統計を見付けるのは難しいことですが、広範囲なソフトウェア開発者と仕事してきた誇りあるギークとして言わせてもらうと、平均的な開発者は平均的な人と比べてずっとギーク度か高いというのは断言できます。
そうするとこう思うかもしれません。これはソフトウェア開発者とどう仕事をするかという本であり、ソフトウェア開発者が若い白人男性でギーク的な傾向があるなら、この本は若い白人男性のギークとどう付き合うかという話になるのではないか。これに対する答えははっきりと「ノー」です。これには3つの大きな理由があります。
第1に多数派だけに向けて提供するというのは当てにならないやり方だということ。レストランの客の大多数は致命的なピーナッツアレルギーを持ってはいませんが、だからといってすべての料理にナッツをたっぷり振りかけて差し支えないということにはなりません。教室の生徒の大半は成績が下位3分の2に属しますが、だからといって教師が上位3分の1の生徒を惹き付け、挑戦させるような努力をしないのは馬鹿げています。
同様に、ソフトウェア開発者の大半が特定の層に属していて、他の層を犠牲にしてその層の人に特に合ったやり方を考案することは可能だとしても、そのようなやり方はその層と合わないチームではたぶんうまくいかないだろうし、そういうやり方を選んで推奨するというのは無責任で見当違いでしょう。
第2の理由は、時代遅れの仮定をしている文章ほど古く感じさせるものはないことです。現時点においてプログラマーは白人で男性で若く非社交的という傾向があるのだとしても、それがずっと続くと仮定すべき理由はありません。実際それは変わるだろうと仮定すべき理由があります。
ソフトウェアを作る上で若い白人男性のナードだけが向いているような、何か本質的なものがあるわけではありません。何より、初めて公開されたコンピュータープログラムを書いたのが女性だったことを忘れないようにしましょう。
バイロン卿の娘にして聡明で狂っていたとも言われるエイダ・ラブレスが、チャールズ・バベッジの発明になる、まったく理論上のハードウェアのために書いたソフトウェアがそれであり、ソフトウェアという概念自体彼女によるところが大きいのです。
さらに、性別の偏りは世界的な現象ではないということ。ヴィクラム・チャンドラはその素晴らしい本『Geek Sublime』(Graywolf Press、2014年)で、2003年のインドにおいてコンピューターサイエンスの学位を取得した人の55%が女性だったことを記しています。
米国においても変化が起きつつあります。学生を増やそうとする試みとして、大学は女性を惹き付けようとしており、中には極めて上手くいっているケースもあります。男女の偏りをなくそうという努力の甲斐もあり、カリフォルニア州にあるハーベイ・マッド大学では2016年のコンピューターサイエンス専攻の学生の過半数が女性でした。
同様にソフトウェア開発者における人種的多様性も、わずかずつではありますが増えています。テクノロジーで億万長者になる現代の神話のおかげで、プログラミングに惹かれる20代でやる気満々の人々はどうでしょう? 彼らは年々年を取って年代の偏りを減らしています。多様性の増加で性格についての単純なステレオタイプが合いにくくなるのは言うまでもありません。
開発者がどういう人間かというある種の仮定が現在この場所で統計的におおよそ合っていたとしても、その仮定に依存するのは私たちの住む変化し続ける世界においては近視眼的でしょう。
3つ目の理由は、どういう人がソフトウェア開発者になるかというステレオタイプには自己強化的なところがあるためです。そういうステレオタイプを信じ、仮定することは、それに合わない人がソフトウェアの世界に来にくくなるような環境を作ることに繋がります。
多様性と包括性は、それ自体も、それがもたらすものも価値があると主張することに異論はないでしょう。この2つを促進するために私にできる最善のことは、その妨げとなる狭いステレオタイプを受け売りし強化するのを避けることだと思います。
そのため、この本ではソフトウェア開発者を戯画的に描くことはしません。ナード型の人と付き合うためのマニュアルを望んでいる人は失望することになるでしょう。プログラマーの心理学に目を向け、プログラマーがどのように考え、振る舞う傾向があるか、実用的な一般化は行いますが、その一般化はソフトウェア開発を生業とするのがどういうことかに基づいたもので、ステレオタイプに合うかどうかということではありません。
これはプログラミングの本ではありません
この本ではプログラムを書いたり読んだりする方法を教えようとはしないし、学ぶべきだと説得しようともしないことを明記しておくべきでしょう。私はこの職業のエバンジェリストではありません。
本書の内容は読者がソフトウェア開発者として働くことではなく、ソフトウェア開発者と一緒に仕事する助けになることに焦点を当てており、技術的な話に深入りするのは、その話題について専門家と生産的な会話をしやすくするためであって、自分で専門家になってもらうためではありません。
とはいえ但し書きとして、この本では多くのことを単純化することになると言っておくべきでしょう。技術用語の定義やプロセスの解説をいろいろしますが、それは完全なものでも正確なものでもありません。技術やプロセスに関しては、どんな定義にも但し書きや例外があるもので、私はいちいち細部へと下りてはいきません。
これには2つの理由があります。第1に、細かな議論をしているとそれだけですぐ本が埋まってしまうこと。たとえばポストSQL時代のデータベースの構成要素が何かとか、BDDでは上位レベルの機能や統合テストですでに網羅されているのと同じ実行経路を単に通すユニットテストを書くべきなのかとか。そんなことをしていたらこの本で本当に伝えたい部分にたどり着けないでしょう。
第2のさらに重要な理由は、読者はそういう詳細を気にかける必要はないということです。必要なのは仕事を成し遂げる上で役に立つ、とりあえずの定義です。だから私が「データベースは……」とか「BDDでは……」などと言ったときには、頭の中で「(ただし例外もある)」と文末に付いているものと思ってください。
これは非技術系の人を批判するものではありません
最後に、この本は過去50年のソフトウェアプロジェクトにおけるひどい実績について、ソフトウェア開発者を赦免しようとするものではありません。たしかにこの本の前提は非技術系の人の行動を変えることでソフトウェア構築プロセスの苦痛を減らすということですが、それは悪いのがすべて非技術系の人間だということではありません。
むしろ私は、非技術系の人(つまり読者)がソフトウェア開発の問題に対してもっとも大きな貢献ができると思っています。たとえその問題の元々の原因が非技術系の人の行動や態度によるものであろうとなかろうとです。