nipponomia

日本人プログラマー必見!シリコンバレー式面接対策講座

日本人プログラマー必見!シリコンバレー式面接対策講座

アメリカで大学在学中にプログラミングを始め、シリコンバレーのとある巨大企IT業から内定をもらった僕だが、初めてアメリカで面接を受けた時は、非常に戸惑った。というのも、アメリカにも様々な面接のコツというものがあり、それらを知らないと、内定をもらうのは非常に困難になる。

シリコンバレーで行われている面接の傾向、対策などを紹介していきたい。プログラマにはもちろん、そうでない人にもぜひとも読んでもらいたい。




英語の重要性

残念ながら、英語ができないと面接はなかなかパスできない。これは残念だが、事実である。しかし、面接で必要になる英語は、大学受験で必要になる英語とはちょっと違う。大学受験で英語が苦手だったとしても、落ち込む必要はない。アメリカでプログラマとして働くために必要な英語の能力をまとめてみた。

  1. 読解能力
    1. プログラミングの教科書を読んだり、仕事上のメールを読んだり程度の読解力は必須だと僕は考える。つまり、TOEICで出てくるようなメールは読めるようになっておきたいと言ったところだろうか。しかし、英字新聞を読んだりする能力はまずいらない。
    2. 「Stack Overflow」というプログラミングのコミュニティサイトでは、様々な人がプログラミングに関する質問をして、それにベテランプログラマが解答を載せている。アメリカでの就職を考えている人は、その答えを英語で読めるようになっておきたい。同僚から英語で何かを説明された時、その内容や語彙はStack Overflowの答えに近いはずだから、それが読めないと厳しいが、逆にそれ以上はあまり必要ないということだ。
  2. 英会話能力
    1. もちろん、英会話ができることに越したことはないのだが、特に必要な能力と、必要でない能力に分けられる。簡単に言うと、プログラミングの話がある程度スムーズにできれば、雑談などができなくてもあまり問題ない。自分の携わったプロジェクトの簡単な説明を数分程度で英語で説明したりするところから始めてはどうだろうか?
    2. 日本生まれ日本育ちの日本人にとっては、これが一番鬼門なはずだ。一筋縄では行かないが、情報収集をし、練習する機会を設け、練習を積み重ねていけば、必ずできるようになるはずだ。
  3. 英作文
    1. 意外と見落としがちなのが、メールの書き方である。外国語で丁寧な表現で書くのは難しい。基本的に、体裁、例文などをネットで探してきて、切り貼りして少しずつ変えて送るのがいいはずだ。一番重要なのは、お願いをするときには、「Please do this」などの直接的な表現ではなく、「I am wondering if you…」「I would appreciate if you…」のように、直接的な表現を避けるということだ。
  4. 英文法
    1. これは、中学の基本的なことがマスターできてさえいれば、気にすることはない。「discuss something」を誤って、「discuss about something」と書いてしまったりしても、別に気にすることはない。また、会話中に三単元のSが抜けたり、複数単数を間違えても、問題はない。もちろんこれらもマスターできれば最高だが、優先順位はそれほど高くないはずだ。

シリコンバレーの面接ってどんな感じ?

IT企業の面接は(特に新卒は)2つのタイプがある。多くの会社では、両方を適度なバランスで行っていると感じる。

1つ目は、総合的な内容の面接。今までにどんなプロジェクトに携わってきたのか。チームワークを取るためにどのようなことを心がけているのか。そのようなことが聞かれる。

そして、2つ目は技術面接。このタイプでは、「アルゴリズム設計」に関する問題が圧倒的に多い。「競技プログラミング」などを耳にしたことのある読者はピンとくるかもしれないが、TopCoderなどの問題に近い。ここで注意しておきたいのは、ソフトウェア設計などの質問は、それほど聞かれないということだ。賛否両論はあるものの、アメリカではこのタイプの面接が非常に主流であるので、アルゴリズム設計に関する面接での注意事項を例題と共におさらいしていこう。

まずは、出題された問題をしっかりと理解する!

面接によっては、問題をわざわざ非常に曖昧な形で出す場合がある。何も知らなかったら、「問題すら理解できない」と勘違いして途方にくれてしまうかもしれない。しかしこれは「学生がどのような情報が必要かを見極めて、適切な質問ができるか」ということを見極めているのである。こう言うと非常に高度な技術に聞こえるかもしれないが、わからないことをひとつずつ聞いて、それをしっかり理解することによって対応できる。具体的には、以下のような問題が出たりする。

You are given a strictly increasing array A of integers. Find if there exists an index i such that A[i]=i.

この問題は割とはっきりしているが、それでも曖昧な点はいくつかある。

  1. どの言語でコードを書けばいいのか?
    1. ちなみに一般的には、Java、C++、Pythonなどを面接で使うことが多い。
  2. Javaなどは、int/long…と整数に関する型はいくつかあるので、どの型を使えばいいのか?
  3. 関数のみを書けばいいのか?関数のみを書く場合返り値はブーリアン型がいいのか?それともメッセージを表示するほうがいいのか?またiを返したほうがいいのか?

などなど質問できる。また実際に具体例を出して、問題を再確認するのも大事だ。

アルゴリズムを考えているときは黙りこまない!

問題を出されて、どのように解けばいいのか考えている最中はできるだけ何を考えているのか面接官に口で説明することが大事だ。面接官は限られた時間で、学生の実力をできるだけ見極めようとしている。その時黙っていたら面接官からすると学生の能力の判断が非常にしにくい。また正解にたどり着いても、たまたま解けたのか、それともきちんと問題を観察し解答に辿り着いたのかわからない場合もある。

黙って考えたいという人は、例えば、「I think that I can use ○○○○ in this problem, but I’m not sure. Let me think for a little bit.」などと、今何をしているのかを明確にするのが重要だ。

また、どうしてもわからない時は、「I am not sure what to do. Can you give me a hint?」という風に少しヒントをお願いするのも場合によってはありだ。どれだけ優秀でも調子が悪かったり、緊張していて解けない時もある。無理して一人で考え時間を無駄にするよりも、ヒントをもらってでも答えに近づくほうが結果としていいこともある。

知り合いの面接官によると、明らかに緊張していたりして、普段の実力が出せてないんじゃないかと思った場合は、その時の面接の結果だけで判断しないほうがいい旨を人事の人に伝えることもあるそうだ。

いきなりプログラムを書き始めない!

面接は、限られた時間の中で自分の能力をどれだけ正確に伝えられるかの勝負である。プログラムを実際に書きだすというのは、パソコン上でも時間のかかる作業だが、ホワイトボードだともっとかかる。必要のないプログラムをだらだらと書いて時間を無駄にするのは致命的である。プログラムを実際に書きだすときは、きちんと考えてから書き始めよう。

例えば、この問題はいくつか答えがあり、そのうちの一つはfor文で、i=0からひとつずつA[i]=iかを調べていくというものだ。しかし残念ながら、これは最適解ではない。これが最適解だと勘違いして、ホワイトボードにいきなりこのプログラムを書き始めてしまうと、貴重な時間を無駄にしてしまう。この場合、例えば「I think I know how to solve this problem. I use for loop, and start from i = 0, and check if there exists an index i such that A[i]=i」と簡単に解答を説明し、「Should I code that?」と確認するのが大事だ。

プログラムを書いている間もできるだけ黙りこまない!

考えているとき同様、できるだけ書きながら説明することには、いくつかメリットがある。書きだしたあとに最初から説明するよりも確実に時間を節約できるし、また途中で勘違いなどがあった場合、面接官が指摘してくれる可能性もある。指摘は大体質問の形で行われることが多い。例えば、「I am going to write xxx algorithm.」と実は必要のないアルゴリズムを書き始めたら、「Is that necessary?」という風に質問されるかもしれない。これはある意味「必要がないことに気づけるかな?」というテストでもあるのだ。ただ、場合によっては、本当に必要なのだが、必要性を理解しているかの確認で、「Is that necessary?」という風に聞かれるかもしれないので、面接官の言ったことに流されず、しっかりと考えて自分の答えをはっきりと説明するのが大事だ。以下に、筆者が実際にこの問題の解答を面接を受けているとき同様に解説しながらコーディングした様子を録画したものである。

 

海外で働くためには、言語や文化など様々な壁を乗り越える必要がある。面接をパスするだけでも、それは簡単なことではなかったし、仕事を始めたらもっといろんな壁にぶつかるはずだが、それは非常にやりがいのあるものであると筆者は信じている。もっと大きな世界で自分の力を試してみたい、戦ってみたいと思っている人は、ぜひとも挑戦してほしい。

About The Author

nipponomiaCo-Founder, Writerヒデノリ
平成生まれ。東京出身。
中学で英語に目覚め、アメリカ留学に興味を持つ。
高校卒業後渡米し、パブリック・アイビーの1つにも数えられるアメリカの名門州立校にて数学を専攻、オールA卒業。

現在は、シリコンバレーにて某世界的IT企業本社勤務。趣味はロッククライミング。

-----------------------------------------------

Hidenori

Born and raised in Tokyo. Moved to MN at the age of 19.
Having survived four winters there, I have moved to California.

Currently working as a software engineer in the Bay area.

I enjoy rock climbing, and I love traveling abroad! My profile picture was taken in Morocco :)

Leave A Reply

*
*
* (公開されません)