新人プログラマーが使えない理由

次の記事

「Tumblrで共有」ボタン、ウェブサイト運営者向けに提供開始

誰もがその悪夢を経験している。新人の開発者がやってきて、歓迎しようとしても、彼1はこちらのペースについてこられないようだ。彼の発する質問からは根本的無知が暴かれ、ようやく出来あがった作品は、ひどすぎて、結局経験者が一から書き直すことになる。しかし、彼の面接官や人事部は ― もしあなたの会社がそんな官僚的パラサイトに寄生されているならば ― 平均以上、Aクラス、上位1%の人しか採用していないと主張する。

これは大きな問題だ、特に今。景気は上向きだ。毎日リクルーターから嫌がらせメールが来る。誰もが開発者を雇おうと必死だ ― しかし、開発者は代替可能ではない。優れたプログラマーの生産性は、容易に「並」の50倍になるし、ダメなプログラマーの生産性は最終的に「マイナス」にもなる。そんなのを雇うことは、どの会社にとっても悲惨な失敗だが、スタートアップにとっては致命的な会社キラーになり得る。では何故、それほどしょっちゅう起きるのか。

近代ソフトウェア工学に付きまとう多くの後遺症と同じく、結局これはMicrosoftの責任だ2。 彼らと誰もが秘かに仕事をしたがる悪の帝国だった頃、彼らの面接では「頭の体操」的質問が出されることが知られていた ― マンホールのふたはなぜ丸い? 。そして、もちろん大学の新卒者にはコンピューターサイエンス理論に関する質問をした。「二分探索[プログラム]を書きなさい」。

誰もがMicrosoftのようになりなかった。Googleでさえ、誰もがGoogleのようになりたいと思うまで(最近まで)はそうだった。そして、あの面接の伝説は続いている。Hacker News提供による面接に関する最近の記事を2本見てほしい。一つは入社内定者から、もう一つはGoogleの面接官によるもの。後者から目立ったものを引用する。「私は必ずしもこれがよい評価基準だとは言っていない」、「慰めになるかどうか、少なくとも今はナゾナゾ質問をしていない。あれは、特に侮辱的だった」

Googleが、彼らの採用アルゴリズムに問題があると気付いたらしいことは喜ばしい。修正されないのは残念だが。Jean Hsuの「技術面接に意味はあるか?」もご一読あれ。根本的問題は、今日の業界標準ソフトウェア面接に通るのに必要なスキルは、良いソフトウェア開発者に必要なスキルではないことだ。おっと、〈多少〉の相関はある、ただしそれはオークランド・レイダーズが毎年一番足の速い選手をドラフトしては、NFLが徒競争ではないという永遠の失望にかられるのと似ている。

実際にはもっとひどい。少なくともワイドレシーバーは走らなくてはならない、しかし、私は反論を恐れず保証するが、ソフトウェアエンジニアが入社後、二分探索のコードを書かなくてはならない場面は来ない。これは、石炭と鉄と炉とふいごを使って、鋼鉄の焼き入れと鋳造をするやり方を知っているという理由で、工事業者を選ぶようなもので、実際に知るべきなのは 1)最寄りのホームセンターの場所と、2)買ってきた鋼鉄ですべきことだ。

以前Joel Spolskyは、一般に会社は社員に二つの物を求めていることを正しく説明した。Smart and Gets Things Done[仮訳「頭と実行力」、訳書『ソフトウェア開発者採用ガイド』](学界にあふれているのは前者の持ち主であって後者ではない)。しかし、それ以前に一つ必要なことがある「全くの無能ではないこと」。みなさんは、技術系面接に全く能力のない人物が多勢現れることに驚くだろう。Googleの二分探索は、彼らにとってのFizzBuzz ― 低く設定された足切り用ハードル ― なのかもしれない。しかし、FizzBuzzには、面接本番が始まる前に5分間必要だ。

では、本物の面接はどうあるべきか。私から謹んで提案をさせていただく。「業績のない人物を面接してはいけない。絶対に」資格や学歴は業績ではない。つまり、現実のユーザーのいる現実のプロジェクトのことだ。Google App EngineとAmazon Web Serviceの無料版があり、$25出せばAndroidデベロッパーに登録してAndroid Marketでアプリを配布できる今、ソフトウェア開発者がサイトやアプリやサービスを指して「私がこれを作りました、全部一人で!」と言えない〈言い訳〉はない。

旧来のシステムは、限られた情報に基づいていた ― 応募者についてわかるのは履歴書だけだった。しかし、業績のある人だけを面接すれば、ずっと広い範囲から人を選べる。FizzBuzzなどやめ、面接者に自分のコードと設計思想を説明させ、今だったらどう作るかを聞く。目の前で1つか2つ機能を実装させて、実際にどう動くか、どのように考えて作業しているかを見る。それこそが技術面接で知りたいことだ。古典的アルゴリズムやデータ構造をどう理解しているかではない。世界は前進しているのだ。

1私はここでは意識的に性差別者になっている。なぜなら、私の経験上コードを書く女性は一貫して優秀だから。

2Bill Gatesがメガ億万長者であることは気にしていない。彼は本当に面白いことや革新的なことをたくさん成し遂げてきた。私が気にするのは、多くの取るに足りない人たちが彼の威を借りてミニ億万長者の地位を得ていることだ。例えば、ハンガリアン記法の発明者。おそらくあれは、この分野で広く普及したものの中で史上最悪のアイディアだ

[原文へ]

(翻訳:Nob Takahashi)

“新人プログラマーが使えない理由” への20件のフィードバック

  1. Guest より:

    Word と Excel の開発者である、チャールズ・シモニーを dis る意味がわからん。ハンガリアン記法がいい悪いはおいといて、「ビル・ゲイツの威を借りた取るに足らない人」ではないだろうに。

  2. Efawsfqe より:

    「大阪城を作ったのは誰?」
    「大工さん!」

  3. 二分探索のコードを書く必要性がまったくないこともないはず。どちらかに寄せるよりどちらも採る考え方が必要なのかも。

  4. Guest より:

    システムハンガリアンと本来のハンガリアン記法との区別がついていない記者がTechCrunchにも居たってのは興味深い。(中途半端に知っているという意味で)

  5. Shigeru より:

    残念だが、これは日本には当て嵌まらない話だと思う。
    私は技術者として100人かもっと大勢のプログラマと仕事をしたが、
    上記のような目も当てられない新人は稀だった。日本人特有の謙虚さか
    あるいは挑戦的でない国民性の故かもしれないが、正確な理由は判らない。

    これは蛇足だが、逆に女性のプログラマが「並」の50倍だったこともない。
    もっとも、恐らくはEvans氏も私も過小なサンプルしか見てないだろうが・・・。

  6. 日本的な考えかもしれないけど、新人さんは即戦力というより、
    将来への投資で採用するものじゃないかな?
    この点で、「実績」のみを重視するのはいかがなものだろうか。

    確かに、ダメな新人というのはいる。たとえば、情熱がない人。
    もっと明確に言うと、プログラムを作りたいという意志がない人、あるいは
    プログラミングが好きではない人はプログラマとしてはダメな人が多いと思う。

    ちょっと、といっても数年だけど、前に「お金がいいから」「かっこいいから」「人気があるから」という理由でプログラマとして面接に来た人は、ほとんどが本当にダメだった。
    彼らは全く勉強しないし、壁にぶつかるとすぐに投げ出してしまった。

    一方で「プログラムを作りたいから」「プログラミングが好きだから」といって
    入ってきた新人さんはどんどん勉強して、壁にぶつかっても自力で乗り越えてしまった。

    あと、たとえ実際に二分木検索のコードを書くことはなかったとしても、
    そのアルゴリズムを理解していることは依然として必要なことだと思う。

    二分木検索に限ったことじゃなく、実際に書くことなんてないと軽視される傾向にある
    コンピュータサイエンスの知識でも理解していた方がいいと、プログラマになって10年
    を過ぎようとしている今でも感じている。

    わたしはかつて、数十万個のオブジェクトを線形リストに格納して
    頭から順番に要素を検索しているコードを見たことがある。
    「計算量」というものを知っていれば、こんなコードを書くことはないはず。
    そう、件のコードを書いた人は「計算量」という考え方を知らなかったのだ!

    情熱を持っていて、基本をしっかり押さえている人は延びる人が多いように感じる。
    新人さんを採用するなら、わたしは情熱があるかと基本を押さえているかをみたい。

  7. 日本的な考えかもしれないけど、新人さんは即戦力というより、
    将来への投資で採用するものじゃないかな?
    この点で、「実績」のみを重視するのはいかがなものだろうか。

    確かに、ダメな新人というのはいる。たとえば、情熱がない人。
    もっと明確に言うと、プログラムを作りたいという意志がない人、あるいは
    プログラミングが好きではない人はプログラマとしてはダメな人が多いと思う。

    ちょっと、といっても数年だけど、前に「お金がいいから」「かっこいいから」「人気があるから」という理由でプログラマとして面接に来た人は、ほとんどが本当にダメだった。
    彼らは全く勉強しないし、壁にぶつかるとすぐに投げ出してしまった。

    一方で「プログラムを作りたいから」「プログラミングが好きだから」といって
    入ってきた新人さんはどんどん勉強して、壁にぶつかっても自力で乗り越えてしまった。

    あと、たとえ実際に二分木検索のコードを書くことはなかったとしても、
    そのアルゴリズムを理解していることは依然として必要なことだと思う。

    二分木検索に限ったことじゃなく、実際に書くことなんてないと軽視される傾向にある
    コンピュータサイエンスの知識でも理解していた方がいいと、プログラマになって10年
    を過ぎようとしている今でも感じている。

    わたしはかつて、数十万個のオブジェクトを線形リストに格納して
    頭から順番に要素を検索しているコードを見たことがある。
    「計算量」というものを知っていれば、こんなコードを書くことはないはず。
    そう、件のコードを書いた人は「計算量」という考え方を知らなかったのだ!

    情熱を持っていて、基本をしっかり押さえている人は延びる人が多いように感じる。
    新人さんを採用するなら、わたしは情熱があるかと基本を押さえているかをみたい。

  8. 日本的な考えかもしれないけど、新人さんは即戦力というより、
    将来への投資で採用するものじゃないかな?
    この点で、「実績」のみを重視するのはいかがなものだろうか。

    確かに、ダメな新人というのはいる。たとえば、情熱がない人。
    もっと明確に言うと、プログラムを作りたいという意志がない人、あるいは
    プログラミングが好きではない人はプログラマとしてはダメな人が多いと思う。

    ちょっと、といっても数年だけど、前に「お金がいいから」「かっこいいから」「人気があるから」という理由でプログラマとして面接に来た人は、ほとんどが本当にダメだった。
    彼らは全く勉強しないし、壁にぶつかるとすぐに投げ出してしまった。

    一方で「プログラムを作りたいから」「プログラミングが好きだから」といって
    入ってきた新人さんはどんどん勉強して、壁にぶつかっても自力で乗り越えてしまった。

    あと、たとえ実際に二分木検索のコードを書くことはなかったとしても、
    そのアルゴリズムを理解していることは依然として必要なことだと思う。

    二分木検索に限ったことじゃなく、実際に書くことなんてないと軽視される傾向にある
    コンピュータサイエンスの知識でも理解していた方がいいと、プログラマになって10年
    を過ぎようとしている今でも感じている。

    わたしはかつて、数十万個のオブジェクトを線形リストに格納して
    頭から順番に要素を検索しているコードを見たことがある。
    「計算量」というものを知っていれば、こんなコードを書くことはないはず。
    そう、件のコードを書いた人は「計算量」という考え方を知らなかったのだ!

    情熱を持っていて、基本をしっかり押さえている人は延びる人が多いように感じる。
    新人さんを採用するなら、わたしは情熱があるかと基本を押さえているかをみたい。

  9. Abc より:

    新人のニュアンスが少し違うような。

  10. Asd より:

    はげしい誤訳だらけ。よめん。

  11. Asd より:

    はげしい誤訳だらけ。よめん。

  12. 土田崇 より:

    IT業界ほどアバウトな業界は無い。ひとりの人間としてのプログラマの個性に頼る開発手法をしているからこんなくだらない批判が生まれる。教育と製造指針の明示を会社が行えば済むだけの話。教育もしない、開発方法の明示もない現場に突然放りこまれて使えない呼ばわりされる新人がかわいそう。こう言った批判は自己完結アーティスト型システムエンジニアの悲しい遠吠え。

  13. guest より:

    異業種より。
    育ててる暇がないなら、未経験者を採るな。ってことみたい。

    そうかもしらんね。結局人は余ってるし。

    未経験者しか採れなさそうなら、育てる覚悟をなさい。と。

  14. guest より:

    異業種より。
    育ててる暇がないなら、未経験者を採るな。ってことみたい。

    そうかもしらんね。結局人は余ってるし。

    未経験者しか採れなさそうなら、育てる覚悟をなさい。と。

  15. guest より:

    異業種より。
    育ててる暇がないなら、未経験者を採るな。ってことみたい。

    そうかもしらんね。結局人は余ってるし。

    未経験者しか採れなさそうなら、育てる覚悟をなさい。と。

  16. Zenobia より:

    優秀なプログラマは自分で勉強してきた人だから、後輩や部下にも同じ事を要求する。「こんな事から教えて育てなければならないの?」と考えてしまう。新人に「自分で考えて解決しろ」と考えてしまう。でも、自分で考えない人間をプログラマに育てる方法はあるのか?私には出来なかった。プログラマは考えるのが仕事だ。

  17. Zenobia より:

    優秀なプログラマは自分で勉強してきた人だから、後輩や部下にも同じ事を要求する。「こんな事から教えて育てなければならないの?」と考えてしまう。新人に「自分で考えて解決しろ」と考えてしまう。でも、自分で考えない人間をプログラマに育てる方法はあるのか?私には出来なかった。プログラマは考えるのが仕事だ。

  18. むぅくん より:

    ヒヨコがタマゴを産まないことで真剣に怒る人がいるとは思わなかった。
    「新人プログラマーが使えないままになる理由」ならば、考察する余地もあると思いますが。

  19. yamada tarou より:

    何か記憶に引っかかるなーと思って検索したら出てきた。これだこれ。
    http://okajima.air-nifty.com/b/2010/01/post-abc6.html

  20. Niro より:

    知識ではなく思考を育てる、世界がどう変わろうがそれに耐えうる思考を。

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中