Skip to content

Instantly share code, notes, and snippets.

@kenichi-fukushima
Last active March 2, 2024 13:56
Show Gist options
  • Save kenichi-fukushima/c58345502a99a1f218eb143bf17aa303 to your computer and use it in GitHub Desktop.
Save kenichi-fukushima/c58345502a99a1f218eb143bf17aa303 to your computer and use it in GitHub Desktop.
未経験から独学でプログラミングを身につけて新卒でグーグルに入った話

2008年に新卒でソフトウェアエンジニアとしてグーグルに入社しました。2019年時点ですでに退職しています。

学生時代

東京大学の電子電気情報学科という申し訳程度にコンピューターサイエンスをかじっているところから、そのまま修士課程に進学しました。研究分野は自然言語処理でした。大学がつまらなくて行かなくなった時期があり、留年して学部2年生を2回やっています。ただ勉強はかなりできたほうだと自覚しています。線形代数の試験で満点を取って授業中に名前を読み上げられたのを覚えています。大学院に進学してからは研究が面白くて土日や正月も関係なく研究室に通っていました。1月3日にどうせ誰もいないだろうと思いながら研究室に行ったら普段は忙しくて姿を見せない教授がいたのには驚きました。

プログラミングの経験

プログラミングは大学に入ってから99%独学で身につけました。所属していたサークルのウェブサイトの管理をやることになったのがきっかけで、手打ちのHTMLを少しだけ書き変えることから始まり、JavaScriptでダイアログを出したり、Perlで掲示板CGIをつくったりと少しずつステップアップしていきました。できることが増えるたびに作りたいものが増え、作るたびにできることが増えと、どんどんプログラミングに没頭していきました。

最初の1〜2年のあいだは周囲にプログラミングをする人がいなかったので独りで手探りでやっていました。また、時代的にも、自分自身のリテラシー的にも、ウェブで自分が知りたいことをピンポイントで見つけることは現実的ではありませんでした。なのでプログラミングやコンピューターの知識はもっぱら本で身につけました。大学の図書館や本屋に通って棚の端から端まで目をとおしては今の自分に必要な知識を授けてくれそうな本を探すという毎日を送っていました。これはとても効率の悪いやりかたで、標準ライブラリ以外の、いわゆるサードパーティー製ライブラリというものがあることをしばらくのあいだ知らずにいて、ウェブクローラーをつくるのに生のTCPソケットの上に自前でHTTPを実装するところから始めるというような感じでした。大学を留年して暇を持てあましていたからできたのだと思いますが、このときのあらゆる困難を自力でブルドーザーのように薙ぎ倒していった経験は今でも自身のよりどころになっています。

留年期間が終わって専門課程の講義が始まるとプログラミングの講義も学期に一コマぐらいはありました。たしかC言語入門のような内容だったと思いますが詳しいことは覚えていません。そもそも毎週90分の講義で何が変わるでしょうか。チンタラしたペースで講義が進む間に、私は「詳説C++」という本を10周ぐらいしました。

大学4年生になって研究室に配属されると自分よりもプログラムが書ける人がたくさんいて感心しました。しかしプログラミングの得意な先輩や同期から教わることはほとんどありませんでした。研究では(特に自然言語処理のような分野では)、どういうコードを書くかは関心の対象ではありません。議論の準備としてのプログラミングは各自やっておくというのが、院生とはいえども研究者のスタイルでした。

競技プログラミングの経験は、研究室のつきあいでコンテストに出たことが一回あります。面白いとは思いませんでした。

英語

誰も英語を話さない普通のドメスティックな家庭に育ち、センター試験の点数はたしか200点中160点ぐらい。初海外は修士課程のときに行った学会。それ以外で英語を話す機会なんてなかったし、特に人より英語にアドバンテージがあったり力を入れていたということはありません。

ただ院生時代は好奇心にまかせて英語の論文や専門書を乱読しました。おかげでリーディング力だけはついたと思います。論文を1本読むとリファレンスをたどって読みたいのが3本増えるという感じで、研究室と自宅の机の上には紙に印刷した論文がうず高く積もっていきました。英語が読めるようになったのは、まさに必要がもたらした適応と言えるでしょう。これだけでTOEICが200点ぐらい伸びて卒業前に840点ぐらい取れました。

他には、当時出版されたばかりのPattern Recognition and Machine Learningを毎朝3時間頭がカチカチになりながら読んでいた時期もあります。こちらは1日10ページ進めばいい方で、英語の上達にはそれほど役に立たなかったかもしれませんが。

リーディングができても英語面接では役に立ちません。しかし、私がグーグルの選考を受けた年はなぜか英語の要求水準がガバガバでした。5回の面接のうち1回だけ英語チェックという名目で15分ほど英語を使わされましたが、それ以外は日本語でした。この年以外にグーグルを受けたら私は間違いなく落ちていたでしょう。

面接の準備

当時修士課程に在籍していた私は就職せずに博士課程に進学するつもりでした。それでもグーグルの選考を受けたのは、工藤拓さんという憧れのスーパースターがグーグルジャパンに在籍していたからです。(今も在籍している。)自然言語処理にどハマりしていた当時の私にとって工藤拓さんとはまさに神のような存在。グーグルの選考に申し込んで面接を受ければもしかして工藤さんと直接お話しできるんじゃないかというミーハーな気持ちで応募しました。アイドルの特典会に並ぶオタクのような行動です。実際に工藤さんが面接官として出てきたときは本当にうれしかったです。

このような経緯で面接を受けたので準備はしませんでした。

面接中

1回1時間の面接を5回受けました。そもそも入社するつもりで受けた面接ではないのでスーパースター集団の胸を借りて腕試しをするぞ!という感じで楽しみました。さすがに少しは期待を抱いていたのですが、あるアルゴリズムを実装する問題で「このコードは無限ループに陥りますね」みたいな指摘を受けたときは終わったと思いました。

面接後

自分程度のプログラマーが万が一にも採用されることはないだろうと思っていたのですが、なぜか採用されて驚きました。中央線に乗っているときに人事の方から電話がかかってきて、御茶ノ水駅で降りてから電話に出ました。「おめでとうございます。内定です。」という声を聞いたときは人生で初めて体が震えました。博士課程と天秤にかけて2ヶ月ぐらい悩んだ末にグーグルに入社することを決めました。

まとめ

未経験からの独学でも、寝ても覚めてもコンピューターやプログラミングのことばかり考える日々を4年間ぐらい続けたらグーグルに入れました。4年×365日x8時間で1万時間を余裕で超えますね。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment