本の虫

著者:江添亮
ブログ: http://cpplover.blogspot.jp/
メール: boostcpp@gmail.com
Twitter: https://twitter.com/EzoeRyou
GitHub: https://github.com/EzoeRyou

アマゾンの江添のほしい物リストを著者に送るとブログ記事のネタになる

筆者にブログのネタになる品物を直接送りたい場合、住所をメールで質問してください。

Jacob Kaplan-MossのPyCon 2015における基調講演: プログラミングの才能という都市伝説

Keynote - Jacob Kaplan-Moss - Pycon 2015 - YouTube

The programming talent myth [LWN.net]

PyCon 2015で、Djangoの貢献者であるJacob Kaplan-Mossが興味深い基調講演をしているので紹介する。LWM.netでほぼ全面書き起こしに近いまとめがあったので助かった。

自己紹介

Kaplan-MossはDjangoの貢献者であり、Herokuのセキュリテイ部門の部長である。PyCon参加者としては歴史が長く、その他のカンファレンスでもよく発表している。Pythonコミュニティは「自分にとってこの業界におけるとても重要なもの」であり、PyConの基調講演を行うということは、「自分のキャリア上の絶頂」である。

自分の最初のPyConの発表は2005年のことで、PythonとAppleScriptを結びつけるツールについてのものであった。ワシントン DCで開かれた当時のPyConで、Adrian HOlovatyは、自分の働くカンザス州Lawerenceの新聞社のWebサイトを構築するためのツールの技術デモを行った。このツールは、後にDjangoとなるものであった。今や、Djangoは10歳になり、世界中で使われている。PyCon参加者が300人から3000人に膨れ上がるまでを見てきた。コミュニティは新規参加者で膨れ上がり、別物になりつつある。そのため、「自分のキャリアにおける絶頂」というのは、文字通りの意味だ。

しかし、頭の中でふと思うに、自分はこの発表のステージに立つのにふさわしくないのではないか。この成功を受けるほどの価値ある人間ではないのではないか。脳内で、謙遜が起こる。

今までの業績は誇らしい物だ、実際、自分の過去の業績は、自分をこの場に立つ価値があるものにしている。しかし、自分は聴衆が考えているような人間ではない。

聴衆の多くは、自分がここで基調講演を行っているのは、「Djangoの発明者」であるからだと考えているだろう。しかし、それは違う。Djangoの由来を知っているものは、「Djangoの共同開発者」であると考えるだろう。しかし、これも過大評価である。実際には、自分はAdrian HolovatyとSimon WillisonがDjangoを発明して共同開発した一年後に、新聞社に雇われて開発に参加した者である。そんなわけで、自分は「すでに出来上がって1年以上たったものを開発するために雇われた人間」である。

皆、自分のことをDjangoの発明に関わりのある人物だと考えるのは、自分が「素晴らしいプログラマー」であると考えているからだろう。つまり、「ロックスター」とか「ニンジャ」とか、あるいは「転職エージェントが最近よく使う言葉」のプログラマーであると考えているからだろう。皆、自分はプログラミングの能力によって成功したと考えている。しかし、それは違うのだ。「私は、言うてありきたりなプログラマー」である。

ランニングについて

[ライドにウルトラマラソンランナーのAnn Trason] Ann Trasonはスポーツの歴史上素晴らしい成果を上げた者だ。ウルトラマラソンとは、26マイル以上走るマラソンのことだ。大抵は、山道を走ったり、川を横切ったりするもので、難しいものになると、何日も走り続けなければならないものだ。走る距離はたいてい50kmから160kmほどだ。Trasonは10年、20年後も破られない記録をいくつも作っている。彼女の記録に一時間以内に入れる人間はいない。Trasonはこの業界を独占していて、実にずば抜けて優秀な人物である。自分がこれを話すのは、自分もこの間、50kmのウルトラマラソンを走ったからだ。

しかし、自分はTrasonには遠く及ばない。同じブランドの靴を履いているだけだ。自分はどこにでもいるありきたりなランナーであり、1000人中535位であった。ランニングのパフォーマンスを評価する数値は多数ある。ペース配分、コースの距離や高度などだ。ランナーのスコアを計算して、そのランナーがどのくらい優勝者に近いかをはじき出すWebサイトがある。自分は68%であり、Trasonは98.58%だ。つまり、彼女はだいたい優勝するということだ。

この差は驚くに当たらない。レースのタイムのヒストグラムを描いてみると、よく見慣れた曲線が描かれる。ベル・カーブ、あるいは正規分布と呼ばれているものだ。ほとんどの人間は平均的で、ごく一部の例外的に優秀か、ダメな者が、極めて細い曲線の終わり付近にいる。我々が計測方法を知っているおよそすべての能力は、この曲線のような分布をする。

ありきたりということについて

さて、じぶんはありきたりなプログラマーであるが、聴衆の中には、信じない人もいるだろう。何故だ? ここにいる聴衆のほとんどは、Kaplan-Mossと共同作業をしたことがないはずなのだが、なぜ自分のコーディング能力が例外的に優秀であると言えるのか。評価すべきデータが存在しない状況では、曲線の中央辺りに位置すると考えるべきではないのか。そもそもの問題として、コーディング能力を評価する方法がないということがある。我々はソフトウェアを作成する能力を評価する方法を模索している赤子のようなものだ。評価基準としては何がある? コード行数か? 一体それは何を評価しているのだ? ストーリーポイントか?[訳注:スクラム用語、ストーリーを完了するために必要な作業時間の見積もり]。そもそも、ストーリーポイントって何なんだ?

プログラマーは論理的な解析的な現場で働いていると思いがちであるが、実際のところ、プログラミング能力を機械的に計測する方法などないのだ。人間は、データが与えられない時、逸話を作る。この逸話は、単純でステレオタイプになりがちである。そこで、我々は、「プログラミングのできないザコ」とか、「プログラミングのできる神」などと言ったりして、その中間を完全にすっ飛ばしてしまうのだ。人というのは誰でも、素晴らしいプログラマーか、あるいは、「椅子を浪費するだけの無能」のどちらかに分類される。

しかし、その場合、プログラミング能力というものは、U字型の曲線を描くことになる。ほとんどの人はその両端のどちらかに属している。これはいかにもありえないことだ。思うに、人間というものは経験を積むにつれて学んでいくものだろう。どうやって、何もできないザコからガチ勢まで、中間を経ずして能力の向上ができるのだろうか。両極端な2つの分類しかできないため、多くの者は自分を「素晴らしいプログラマー」に分類するのだ。あいつはDjangoの関係者である。するとクソなプログラマーの方に分類することはありえない。自然として、もうひとつの方を選ぶようになるのだ。

しかし、もし、何らかの方法でプログラミング能力を評価できるとしたならば、その曲線は正規分布するはずである。ほとんどのひとはほとんどのことにおいて平均である。Wobegon湖[架空の地名。過大評価する例えに用いられる]ではないのだから、大多数が平均より上であることはありえないのだ。

危険な都市伝説

この、プログラミング能力がバイモーダル分布(U字型)するという考えは、危険であり、都市伝説である。この都市伝説は、ロックスターかニンジャでなければプログラミングできないという雰囲気を作り出す。これは人々をプログラミングの学習から遠ざけるという害悪をなしており、将来のためによろしくない。

アメリカ労働省の統計によれば、2020年には150万人のプログラマー職の求人数にたいする労働者の供給不足が生じると予測されている。これは、多くの職場で人手不足ということになる。これは5年後のことだ。EUも似たような数字を出している。2018年に120万人。3年後だ。つまり、我々はなんとかしてもっと多くの人材をこの業界に呼び込まねばならない。しかし、この都市伝説はプログラミングを仕事に選択しようと考える人たちを躊躇させるものとなっている。この都市伝説は、プログラミングというものは生まれながらにして持つ先天的な才能であるという考え方からも支持されている。まだソフトウェアを書いたことがなく、都市伝説を信じるものは、用意にこの罠に引っかかる。年齢が30か、あるいは20か15になって、まだ一度もコードを書いたことがないので、一生コードを書けるようにはならないだろうと考えてしまう。

もし、選択肢が神かザコしかないのであれば、仕事に対してやりがいを感じなければやってられないと考えるようになるだろう。いつなんどきでも四六時中プログラミングのことを考えている奴、ほんの僅かでもよそ見をすれば、すぐに神からザコに落ちてしまうという考え。この考えは、人々をして長時間労働させ、プライベートな時間でも常にプログラミングについて学ぶようにさせていたりする。

しかし、他の業界については、我々はそのようには考えない。去年マラソンを走った50万人の参加者の全員が、先天的にランナーとしての才能を持っていたのであろうか。疑わしいものだ。私はそんな才能は持っていない。ほとんどの参加者は、かなり悪く走っていた。極めてひとにぎりの者達が、とてもよく走っていた。ランナーとなるためには、靴が一足あればいいだけのことだ。ランナーとなるために、走ることを好きになる必要はない。

自分がランニングで一番好きなことは、ゴールすることだ。マラソンを走るのは難しい。訓練と継続が必要だ。ソフトウェアを書くことは、Pythonを書くことは、マラソンを走るより難しいだろうか。なぜここには50万人の聴衆がいないのか。コーディングという能力に対してはそういうは話をしておきながら、ランニングという別の能力にはそういう話をしていないではないか。

自分は数年前、カンザス大学のGISデーで、カンザス川の反乱の予測に関する素晴らしい発表を聞いた。この学生が使ったツールは、このPyConでは使い慣れたものが多いであろう、Amazon Web ServiceとかLinuxとかPostgreSQLとかPytonとかDjangoとかGeoDjangoといったものだ。この学生はPythonで数千行のコードを書いたばかりだった。自分はうちの会社の採用面接を受けるつもりはないかと聞いてみた。学生は、「自分にはできない」という。なぜならば、「自分は本物のプログラマーではないから」と。この学生は自前で分散GISデータ処理パイプラインをたったいま実装した者であるが、本物のプログラマーではないという。これはプログラミングとは都市伝説の中の話で、自分に関係のあることではないという考えによるものだ。

実際のところ、プログラミングというのはやりがいとか才能によるものではない。プログラミングとは学ぶことができる能力を寄せ集めたものでしかない。そもそもプログラミングとはひとつではない。ここまで、プログラミングというひとつのものがあるかのように話してきたが、プログラミングには実に多くの能力が必要であり、コーディングはその能力のうちのひとつでしかない。設計、コミュニケーション、作文、デバッグも必要だ。そうそう、それからUnicodeについて理解している者が最低一人は必要だ。[聴衆の笑い声]

実に多くの独立した能力があるが、我々は人をスキルセットのうちの最も貧弱なもので評価しがちである。ほう、君はデザイナーとして優秀で、人前で話すこともできれば作文もできる。しかもプロジェクトマネージャーとして優秀である。結構なことだ。しかしリンクリストを理解していないだと? 「おうちに帰んな坊や」とね。他の能力と同じように、プロとしてプログラミングすることもできれば、たまにプログラミングすることもできるし、趣味としてプログラミングすることもできる。パートタイムかフルタイムかどちらでもよい。プログラムを下手に書くこともできるし、うまく書くこともできる。しかし、大半は平均的なプログラマーだ。

「そこそこの実力で十分だ」という考え、平均的な能力でよいという考えが広まれば、新参者がプログラミングに抱く恐れが少なくなる。もし、成功のハードルが、ずば抜けて優れているのではなく、そこそこで十分だとなれば、コミュニティに新たにやってきた人にも、やすやすと飛び越せるだろう。実際、コミュニティにやってきた人に、才能の都市伝説が与えた悪影響は一度限りではない。人々を技術から遠ざける結果となってしまう。

技術業界は、性差別、人種差別、同性愛差別などのあらゆる差別が渦巻いている。これは一つの問題ではないし、原因も一つではないのだが、才能の都市伝説も問題のひとつだ。我々の業界では、才能の都市伝説は、優秀なクソ野郎の都市伝説としても存在する。つまりこうだ。世の中には10倍以上の生産力を発揮するプログラマーがいて、仕事があまりにも素晴らしいので、その挙動が難ありだとしても、周りはなんとか協調してやらねばならないというものだ。現実には、正規分布を考えれば、その手の人間は、それほど例外的に優れているものでもない。しかし、もし仮にそういう10倍プログラマーがいて許容するとしても、そいつ一人を維持するために何人のプログラマーを拒否しなければならないというのか。

[スライド:優秀なクソ野郎というタイトルでLinusがnVidiaに対して中指を突き立てている画像を表示、聴衆は大笑い]

10倍プログラマーはどういう見た目をしているのか。

さて、現実には能力は正規分布するのに、プログラマーは神かザコのどちらかに分類されるという考えには、危険なバイアスが待ち構えている。さて、10倍プログラマーはどのような見た目をしているのかということを考えてもらいたい。

[スライド: 映画ソーシャルネットワークで、Mark Zuckerbergを演じたJesse Eisenbergの写真]

我々はこのような見た目を思い浮かべるであろう。これはMark Zuckerbergだ。若い白人の男だ。なぜならメディアで目にするのはそういう人間だからだ。ネタバレしないでもらいたい[聴衆から笑い声]。だがこれはMark Zuckerbergではない。先ほどから笑っている人もいるように、これはMark Zuckerbergを演じたJesse Eisenbergだ。大手映画会社で、その内容は・・・若い白人の男がIT起業するという話だ。

[スライド: Sutarday Night LiveというアメリカNBCのコメディバラエティ番組のキャストで、Mark Zuckerbergを演じたJesse Eisenbergを茶化して演じたAndy Sambergの画像 ]

これがMark Zuckerbergだ。[聴衆から笑い声]。いや、これはMark Zuckerbergではない。これはAndy Sambergで、Jesse Eisenbergを演じていて、その演じられたJesse EisenbergはMark Zuckerbergを演じている。

[スライド: Mark Zuckerbergの写真]

これが、たぶんMark Zuckerbergだ。

[スライド: 三者の顔]

とにかく、ここで言いたいことは、若い白人の男という典型例は極めて一般的で、3人とも同じ人物を演じているというわけだ。どれが本物だっけ? とにかく、この3人に似通わないような人間は本物のプログラマーには見えないので、本物のプログラマーとはみなされない。自分の知るこの業界の女性のほとんどは、プログラマーだとは思われなかったという話を持っている。このPyCon、今年のいまここで、複数の女が、どの男と来たかとたずねられたと聞いた。ここに来る理由は、配偶者の男がプログラマーだったからというわけだ。もし、男だったならば、そういう質問はされただろうか。

逆に、ステージに上がった自分は、そういう典型例に似ている。そこで、聴衆は自分を本物のプログラマーだと推定する。このような推定は、かなりの数の人間をこの業界から遠ざける。

National Center for Women & Information Technologyによれば、コンピューターサイエンス科の学位を得た女の半数は、雇用にその学位を使っていないとのことだ。40%の女は10年以内にこの業界を去る。男はたったの17%だ。女性の半数以上はキャリアの途中で業界から去るわけだ。

もちろん、性差別だけが原因ではないだろうが、何十年もの経験ある女が、ド素人だとみなされるのは極めて不快だろう。この差別を克服するには大変な努力が必要だ。我々がプログラマーというもの、プログラミング能力というものについて考えなおさなければ、解決は望めない。

ランナーには様々な人がいる。短距離走者、長距離走者、マラソン走者などなど。体格や性別や年齢や人種も様々だ。皆、成功の条件が違うし、その条件にあった成功を収めることができる。この業界にも、そのような考え方が必要だ。

何年も前に、Lynn RootとPyConで話した内容が、この発表の元ネタになっている。Rootはプログラマーで、PyLadiesのサンフランシスコ支社の創始者で、Python Software財団の委員で、このコミュニティに長くいるものだ。PyLadiesは、その当時はまだ新しいもので、その集団の能力や意欲には期待すべきものがあった。その時自分はRootに、「そういう強者の女プログラマーが出てきたのはよいことだ」などと言った。するとRootは、「まあ、そうだけど、本当に成功するためには、大量の平均的な女プログラマーが必要だ」と答えた。

我々の言う才能の都市伝説は、参入のハードルを不可能なほどに上げてしまう。この都市伝説を元に考えれば、今ここに我々がいるという事自体が驚きだ[訳注: ほとんど者はその資格がないはずのため]。この都市伝説は捨て去る必要がある。コミュニティは、「平均は実際とてもよいことだ」という考えを持つ必要がある。さて、私はありきたりのプログラマーで、皆にもそうなってほしいし、普通にやることをこなそうじゃないか。

人間のたいていの能力の評価値をグラフに描くと正規分布するのでベル曲線を描く。ザコと神しかいない、プログラミングには生まれながらの天性の才能が必要だという都市伝説に従えば、正規分布していない。すごくできない奴とすごくできる奴ばかりで中間がほとんどいないという、バイモーダル曲線を描く。とはいえ、前に紹介したふたこぶラクダの論文は、現実の評価結果がバイモーダル曲線だったと報告している。

本の虫: 60%の人間はプログラミングの素質がない

ドワンゴ広告

ドワンゴはベル曲線の良い方の端にいるC++プログラマーを募集しています。

採用情報|株式会社ドワンゴ

CC BY-ND 4.0: Creative Commons — Attribution-NoDerivatives 4.0 International — CC BY-ND 4.0