Googleの面接のために8ヶ月間フルタイムで勉強した理由

by Googley as Heck

Dijkstra の単一ソース最短経路アルゴリズムで飾られた、私の使い古したホワイトボード

本当のことです。 私は何千時間も本を読み、コードを書き、コンピュータサイエンスの講義を見ましたが、すべては Google ソフトウェアエンジニアの面接のために準備したのです。

Google の面接に備えたい方は、私の学習プランをご覧ください:

jwasham/google-interview-university
google-interview-university – A complete daily plan for studying becoming a Google software engineer.github.com

How I Got Here

I started programming in middle school, but when it came for college I pursue a degree of Economics. 私が卒業するころには、プログラマがたくさんいて、仕事を探しているだろうというのがその理由です。

その後、プログラマーになるために陸軍に入隊しましたが、採用担当者の口利きで軍の情報部に配属され、その後2年間は韓国語の勉強に明け暮れました。 その後2年間、韓国で勤務しました。

陸軍を去る前に、プログラミングに戻ろうとしたのですが、その難しさに驚きました。 中学生のときにBASICを習い、高校までプログラミングを続けていたのです。 しかし、C++でプログラミングの勉強を再開したところ、その飛躍が大きすぎました。

ただ、ホームページを作るのは楽しかったのですが、ホームページを公開するのに使ったのは、Wordのようなインターフェースのソフトでした。

陸軍の後、私は韓国に1年間滞在して英語を教えることにしました。 夜と週末を利用して、Perl、HTML、CSS(当時は新しかった)、JavaScript、SQLを使ったWebプログラミングを勉強しました。

1年間熱心に勉強した後、シアトル地域で仕事を見つけ、それ以来ずっとここにいます。 そのため、このようなことが起こるのです。 私は大小の会社で働き、新興企業の立ち上げと成長を助け、チームを採用し管理してきました。 プロダクトマネージャー、CEO、デザイナー、マーケターと、さまざまな役割を担ってきました。 しかし、まだ終わっていません。

転職を考える

コンピュータサイエンスの学位を取得していないことをお忘れですか? 3828>

数年前、私はどこでも雇ってもらえると思っていました。 自分はホットな存在で、つかみどころのないフルスタック Web 開発者だと考えていました。 しかし、2013年の就職活動中に、自分のスキルが不足していることに気づきました。 私は、暇さえあればスタートアップを経営し、お金を追いかけることに時間を費やしてきたため、自分のスキルが萎縮してしまっていたのです。 何年もの間、私は生きていくために必要なことだけを学んできました。 誤解しないでください、私はまだ雇われることができましたが、私が働きたいと思った技術や分野ではありませんでした。 私のように、技術スタックがいくらか時代遅れになっている分野では採用される可能性がありました。 そこには大きなお金がありますが、わくわくするような展望は見えませんでした。

その実感は、昨年のキャリアフェアでピークに達しました。 ベンチャーキャピタルが運営するスタートアップラボのような地元企業で働けるかもしれないと興味を持ったのです。 しかし、私にはコンピュータサイエンスの学位、およびそのような学位に付随するスキルや知識がないという事実は、私にチャンスがないことを意味しました。

当時、私は自分のビジネスにフルタイムで働いており、現在もそうです。

2016年の初め、私はWeb開発者からソフトウェアエンジニアにキャリアチェンジする時が来たと判断しました。 コンピュータサイエンスの学位を数カ月に圧縮するためには、猛勉強と練習が必要ですが、それができれば、新しいキャリアをスタートできます。

皆さんは、ウェブ開発とソフトウェアエンジニアリングを異なる職種と見ていないかもしれません。 どちらもプログラミングと職人技を必要としますが、ソフトウェア工学では、データ構造とアルゴリズム、コンパイルされた言語、メモリの考慮、コーディングとアーキテクチャの決定がそれらが存在するマシンに与える影響の理解などの知識が加わります。

ソフトウェア工学ポジションで働く大企業は、候補者にこれらの知識を期待しています。

別の接触により、面接の候補者に提供されるGoogleのコーチングノートのコピーを受け取りました。 3828>

Google は働くにはかなり素晴らしい場所ですが、それを知る前に、Google が私の目標でした。

Why Google? 最高の人だけを雇いたいと考えているのです。 Googleについて知れば知るほど、そこで働きたいと思うようになります。

簡単に言うと、Googleは、賢くて創造的な人を雇い、彼らをよく扱う会社です。 Googleは功績に報い、大きなアイデアを奨励し、ユーザーのために良い決断を下す自由を従業員に与えます。

採用プロセスは、賢く、情熱的な人々を引き入れるように調整されています。 Googleは、長年にわたって採用や面接のプロセスを磨いてきました。 頭の体操になるような質問はとっくになくなりました。 現在では、候補者は、コーディング能力、技術的知識、そしてグーグルらしさに基づいて選ばれます。 その一言に尽きる。

2015年のロードトリップで、マウンテンビュー本社を訪問したときのこと。 それが種をまきました。

マネジメントが違う。 管理職はマイクロマネジメントをしません。 彼らはエンジニアが正しい決断を下すことを信頼しているのです。 従業員を信頼することで、Googleにおける管理職の役割は、多くの人が管理職について考えるときに思い描くものとは異なっています。 また、マネージャーは一方的に雇用、解雇、昇進をすることはできません。

Google の人事部は、何が効果的かを時間をかけて学び、データと従業員のフィードバックを使って、評価システム、雇用プロセス、昇進、報酬、福利厚生などを改善してきました。 詳しくは、ラズロ・ボック(ピープル・オペレーションズ担当SVP)の「ワーク・ルールズ!」をお読みください。

そう、福利厚生がすごいんです。 ワシントン州カークランドにあるグーグルのオフィスを見学に行ったのですが、期待以上のものでした。

Google Interview University

何を勉強したらいいのか、コーチングノートをもらったのを覚えていますか? トピックのリストは、何も知らないのに、なんとかなりそうでした。

私は、ノートのトピックをアウトラインに変え、MITやUCバークレーからの講義のYouTube動画でトピックを埋め始めました。 あるところではリンクリストの動画、別のところではキューについての動画。 3828>

Github で公開したのは、私の Github アカウントがかなり空っぽだったからです。 私がビジネスや仕事で書いたコードはすべてプライベートなものだったので、私の Github アカウントは、私がまったくコードを書いていないように見えていました。 ポートフォリオを作る必要があったのです。 当初は「プロジェクト9894」と呼んでいました。 Googleは1998年9月4日にローンチしました。 だからこの名前なんです。 その後、「Google Interview University」に改名しました。

時とともに、途中で発見したオプションのトピックを追加しました。

私の夏のリーディングリスト。

CPU がどのようにプログラムを処理するのか、メモリがどのように機能するのか、そのいずれも知らないまま、ここまでキャリアを積んできたことに、私はとても驚いています。 3828>

私の小さな Github プロジェクトは、いくつかの星を獲得し始め、星 20 個を祝うブログ投稿を公開しました。 夜中に有名な誰かがそれについてツイートしたため、Github の日次トレンドレポートに載ることになりました。 数日間、Github のトレンドで 1 位になりました。

多くの親切な人たちが、私に感謝し、励ましてくれました。 Google で働きたいだけでなく、ソフトウェア エンジニアとして働きたい人が何千人もいることがわかり、このリストはまさに彼らが必要としていた To Do リストでした。

現在、星は 21,000 個を超えています。

Google のソフトウェア エンジニアとして採用されることを目標に、時間をかけて勉強してきましたが、たとえ失敗しても、どの会社でもソフトウェア エンジニアとして働くために必要なスキルと知識を身につけることができます。 15 年のソフトウェア エンジニアとしての経験がないのですから。 このようなことに関しては、私は CS の新卒と同等です。

しかし、私には新卒の熱意もあります。 これは私にとって新しい世界なんです。 まだ始まったばかりです。 失敗を恐れない。 そうなることは分かっています。

Don’t Study As much as I Did

Yes, I took 8 months. しかし、そのプロセスを短縮することもできたはずです。 大きな目標を持ったスタートアップと同じように、失敗もするし、時間を浪費するようなこともする。

必要ないことも勉強しましたし、面接に必要だと思ったことも、就職したときのために手元に置いておきたかったこともあります。 配属されたチームの負担になりたくなかったからです。

私は3週間かけて、1,000ページもあるC++の本を読みました。 1,000 ページ分を覚えているわけではありませんが、C++ についてそれなりに知っています。 結論から言うと、私は面接で C++ ではなく Python を使っています。 C++、C、Javaのどれかが必要だと思い込んでいたのだが、それは間違いだった。

私は必要以上に多くの本を読みました。 読むべき本は3、4冊しかありません。

私は、レビューするアルゴリズムのコードカタログを何十冊も持っていますが、そのほとんどは面接で予想もしないようなものです。

レビュー用にプリントアウトしたアルゴリズムの束。

YouTube のビデオを何時間も見ましたが、もっと少ない時間で、時間をかけて話題を広げることができたはずです。 そうすれば、学んだトピックを応用するのにもっと時間をかけることができたでしょう。

間隔のあいた繰り返しは、暗記するための鍵です。 一度覚えたことは、後でもう一度、そしてさらに後で復習する。 繰り返すたびに、学習が強化されます。 一度に何時間も優先キューに費やしても、エキスパートにはなれません。 何度も何度も復習して、エキスパートになるのです。

復習のために、私は1,792枚のフラッシュカード(デジタルフラッシュカード)を作りました。 これは多すぎるくらいです。 クリスマスの買い物の時など、暇さえあればスマホやタブレットで復習しています。 フラッシュカードとスペーシングリピートは相性がいいんです。 フラッシュカードは一度正解したら、既知のものとしてマークしません。 赤黒い木について質問されたらどうしよう」という恐怖感から、必要以上に多くのトピックを勉強してしまいました。 つまり、時間、スペース、および I/O のコンピューティング リソースを節約するアルゴリズムを知ることです。

最大流アルゴリズム (Ford-Fulkerson) を知る必要はないかもしれませんが、状況が生じたときにそのツールを利用でき、(実装を記憶せずに)問題空間へのその適用を認識できることは素晴らしいことです。

結論

初期のころは、これらの学習をスキップして、急いで採用され、代わりに参加したチームの言語とツールの学習に時間を費やせたらと思いました。 しかし、その過程で、この知識がいかに重要であるか、そして、そのほとんどが日常的には適用できないかもしれないけれども、私はこの努力に満足しています。 コンピュータの歴史、この分野の偉人たち、データ構造とアルゴリズム (そして、それらがどのようにお互いを補完しているか)、そして、コンピュータシステムがどのように低レベルで動作しているかについて、新たに認識することができました。 ここまでの道のりは長く、ほぼ丸 1 年かかりました。 1月に始まったのですが、フルタイムで勉強することを約束できたのは4月でした。 いつまでも勉強して、出願を先延ばしにしているわけにはいきません。 ある時点で、私は飛躍しなければなりません。

私には明るい未来が見えます。

私の話を読んでくださってありがとうございます。

アラビア語、ベトナム語、韓国語の記事もあります。

更新:2017年1月10日

私は採用されませんでした。 続きを読む 皆さんの素晴らしい、圧倒的なサポートに感謝します!

更新日:2017年3月6日

物語はハッピーエンドです!

更新日:2017年3月6日

物語はハッピーエンドです。 私はAmazonに採用され、Amazon Web Servicesでソフトウェア開発エンジニアとして働くことになりました!

Where to Find Me

I blog over at Startup Next Door.

Googleインタビュー大学 on Github:

jwasham/google-interview-university
google-interview-university – Googleソフトウェアエンジニアとなる勉強法の完全日計。github.com

この記事は、Googleインタビュー大学(google-interview-university)についての記事です。

コメントを残す

メールアドレスが公開されることはありません。