マナティ

世界で闘うプログラミング力を鍛える本

第4回 海外で働くエンジニアは皆読んでいる"Cracking the Coding Interview"

海外のIT企業で働きたい・活躍していきたいならばコーディング面接への理解が必須です。 海外で働くエンジニアによく知られたベストセラー書籍"Cracking the Coding Interview"(世界で闘うプログラミング力を鍛える本)とコーディング面接について説明します。

9784839960100.jpg

電子書籍『世界で闘うプログラミング力を鍛える本』をマナティで発売中!
(上の書籍画像をクリックすると購入サイトに移動できます)

はじめに

世界で闘うプログラミング力を鍛える本』 でも紹介されているように、特に海外のIT企業で働きたい・活躍していきたいならばコーディング面接への理解が必須です。「面接」とは言うものの、問われるのはあくまでもコーディング力です。それは単純に「速くプログラミングができればいい」というわけではもちろんありません。与えられた課題に対して、エンジニアとしてどうすれば最適に解を求めることができるのかを考える必要があります。

そこで、今回、次回に渡って、コーディング面接に臨むにあたって、どのように対策をしていけばいいのか、また実際の面接ではどのようなプロセスを経るのかなどについて紹介していきたいと思います。コーディング面接の対策をすることは、自身のコーディングスキルを上げるうえでも間違いなく役に立つものになるはずです。

日本と海外の採用プロセスの違い

コーディング面接と聞くと、特に日本では馴染みが薄いせいもあってか、あまり重要視されていないように思うときが多々あります。実際、日本でコーディング面接を行っている企業はほぼないように思います。一方、特にシリコンバレーを中心とする海外のIT企業では、コーディング面接なしで採用が進むことはまずありません。本書内にも書かれていますが、Google や Facebook など有名な企業をはじめ、ベンチャー企業などどこでもコーディング面接は当たり前のように行われ、ここでうまく答えることができないと、どんなにすごい経験やキャリアを持っていたとしても、その企業で採用されることはまずないでしょう。

しかし、これは逆に言うと、コーディング面接の対策をきちんとできていれば、どんな企業でも働けるチャンスがあるということになります。実際のコーディングスキルも働いていくうえでは必要にはなりますが、どちらかと言うと、コーディング面接は問題が与えられたときのアプローチの仕方を見ているように思います。それは、一朝一夕で身に付くものではありません。本書などを通じて、事前に対策をしておくに越したことはありません。

コーディング面接への対策

日本ではあまり浸透していないコーディング面接ですが、海外で働いているエンジニアに話を聞くと、原著 "Cracking the Coding Interview" は当たり前のようにみんなに知られています。実はけっこうな数のエンジニアがしっかりと対策をしているのかもしれません。実際、何人かエンジニアの友人と話しましたが、「Cracking the Coding Interview を3周した」みたいな、受験時代を思い出すような勉強方法をしてコーディング面接に臨んでいたエンジニアもいました。彼はデータマイニングをずっと専門で研究し、その分野では実装もバリバリやってきた人でしたが、それでもやはり対策は必要でした。

「コーディング面接」という分野として考える

コーディング面接では、「どうやって与えられた問題をアルゴリズムに落とし込み、解くことができるか」を見るための問題が多く出題されます。なので、もし仮にウェブやアプリの開発がものすごい得意だとしても、コーディング面接でうまく答えられるとは限りません。むしろどちらかと言うと、何も準備しないで行くと撃沈する可能性が高いと思います。普段の実装で必要なものとは異なるスキルが問われるので、どうしても対策が必要になります。ここは割り切るしかないでしょう。しかし、コーディング面接で問われるスキルは、どんな分野でも必要になるものですし、自身のスキルを底上げするのにも役立つので、「コーディング面接」という分野を身につけておくに越したことはありません。

必要なのは知識ではない

「コーディング面接」という分野として考えると書きましたが、ひとつ、参考になる分野を挙げるとすると、競技プログラミングが似ている分野になるでしょう。例えば Google の Code Jam は世界的に有名です。ただし、本書では競技プログラミングでは大事になってくるアルゴリズムの個別の手法についてはあまり触れていません。本書の特長は、「考え方を鍛える」という点にあると思います。競技プログラミングでは、例えばダイクストラ法やA*法といったアルゴリズムの知識があるほうが正解にたどり着くのに圧倒的に有利です。むしろ、知識がないと解けない場合もあります。一方、コーディング面接では必ずしも問題を正しく答えることが問われているのではありません。

コーディング面接も問題が出るので「問題を解く」という意味では、アルゴリズムを知っていれば有利な点もあります。しかし、大事なのは未知の問題に出会ったときに、どういう切り口で考えていくべきなのかを適切に伝えることです。本書のいいところは、コーディング面接に向けて「問題のアプローチのしかた」を基礎からしっかりと書いてあるところです。だからこそ、コーディング面接という分野だけでなく、自身の本来の専門分野のスキルの底上げにつながるのだと思います。

著者プロフィール

巣籠悠輔(著者)
Gunosy、READYFOR創業メンバー、電通・Google NY支社に勤務後、株式会社情報医療の創業に参加。医療分野での人工知能活用を目指す。著書に『Deep Learning Javaプログラミング 深層学習の理論と実装』(インプレス刊、Packet Publishing:Java Deep Learning Essentials)がある。

5月30日に『詳解 ディープラーニング TensorFlow・Kerasによる時系列データ処理』(マイナビ出版)が発刊予定!