2010年2月3日水曜日

How to Prepare for Google Software Engineer Interviews

今日、CMU にある Google ピッツバーグオフィスでタイトルの通りのセッションがあったので参加してきました。11月の時点で reject されているにもかかわらず、今日のセッションに私が参加した理由は次の二つです。インタビュープロセスを再確認するためと、以前のエントリーに書いていない追加情報がもしかしたらあるかもしれないと思ったためです。結論からいいますと、新しい情報はほとんどありませんでした。

セッションの対象は、Google の今年のサマーインターン、およびフルタイムにアプライする学生さん。今日集まった学生さんは CMU からと University of Pittsburgh からで、undergrad, master, Ph.D すべての学位が混ざっていました。

すでに CareerCup の Google Software Engineer Interview Guide を購入された方は(このガイドが出たのは私が Google に reject された後でしたが、それでも構わずに購入しました)、今日のセッションで説明されたことはおそらくすでにご存じのことと思います。

以下がプレゼンのまとめです:
  • 全体の流れ
    1-2 round phone interviews ⇒ 3-4 round onsite interviews ⇒ offer
  • インタビューで聞かれること
    バックグラウンドの説明、技術面のアセスメント
    パズル問題は出さないそうです (they don't reflect your coding ability)
  • 技術面のアセスメント
    "きれいな"コードを書けるかどうか、アルゴリズムとデータ構造の知識が定着しているかどうか、分析能力があるかどうか、ソフトウェアの設計能力があるかどうか
  • Ph.D 生を対象にした Customized Interview
    研究に関する質問、基本的なアルゴリズムとコーディング能力
    You will write code in interview と書いてありました
コーディングはすべてホワイトボード上で、です。インタビューにむけてコーディングの練習をする際は、コンピュータ上ではなくホワイトボードで練習したほうがよいとのアドバイスもありました(上記の CareerCup のガイドにも書いてあります。syntax highlighter や code complete の機能があるとないでは、確かにかなり違います)。そして「Don't use pseudo code - we want actual code」をものすごく強調してました。シンタックスについては、それほどとやかく言わないから、とにかく working code を書いてくださいだそうです。

プレゼンの最中は、かなーり、clean code, clean code, clean code あるいはalgorithm, algorithm, algorithm を強調していました。私が去年の春にとった undergrad の 15451 Design and Analysis of Algorithms もレビューサイトのおススメとしてプレゼンに出ていましたが、私は、実際のアルゴリズムの実装に関しては、もしかしたら TopCoder のアルゴリズムチュートリアルのほうがいいかなと思いました。15451 は実装よりも理論を重視したコースでしたので。

その後 10人くらいのグループに分かれ、Google のインタビューに出てきそうなサンプル問題を皆で解くというセッションになりました。で、私が一番早く解いて、ホワイトボードにコードを書けたので、Google グッズをもらえました :) だって、これで解いたことのある問題だったんですもん。


▲やや大きめのバッグ

でも、ふと思いました。candidate にしてみれば、知っている問題であれば早く解けるし、初めて見る問題であれば解くのに苦労してしまう。Candidate の問題を解く際の応用力をフェアに測るのに interviewer はどうやって出す問題を選んでいるんでしょうか。まあ入試でも、出題される問題が変わると合格者の顔ぶれも変わるなんていうのを聞いたことがありますし、問題をすでに知っている知らないも実力のうちなのでしょうか。でも、それだとあまり応用力のチェックになっていない気もしますし難しいですよね。でも、ひとつ言えるのは、本当にすごい人は出される問題に関わらずなんでもかんでも解いてしまいます。

TopCoder で、自分が解けなかったときにいつもコードを読ませていただいている Red Coder の Petr さん、tomek さん、SnapDragon さんなんか、Level 3の問題で何がきてもガンガン解いてます。本当にこの方たちアリエナイ。特に SnapDragon さんアリエナイと思ったのは、SRM 234 - Div 1 - Level 3 の問題 HowUnsorted の解き方。ノートにコードを一行一行書き写してプログラムの動きを追うと、確かにそれで解けてるんですけど、・・ええ!?みたいな感じになります(詳細はこちら)。それでも、私の中で一番アリエナイのはやっぱり Petr さん。どなたか、SRM 245 - Div 1 - Level 3 の問題 SandTimers の Petr さんのコードがなぜそれで問題を解くコードになっているのか、分かる方がいたらどうか教えてください m(_ _)m

Google では、Ph.D の方でも仕事でがりがりコードを書くらしいので、そちらの方面が好きな方は絶対に面白いとプッシュしていました。Ph.D はその専門のエキスパート。その能力をプロジェクトで十二分に生かすため、研究の分野とうまくマッチするプロジェクトで仕事ができる環境があるとも言っていました。

えと、まとまりのないエントリーになりましたが、今日のセッションはそんな感じでした。

0 件のコメント:

コメントを投稿