池澤あやか、Facebookの日本オフィスに突撃!――コーディング面接にチャレンジしてきました

池澤あやか、ついにフェイスブッジャパンのオフィスに初潜入!エンジニアが働く環境やカルチャー、エンジニア向けの入社後研修やプロダクト開発など、いろいろお話を伺ってきました。さらに、Facebookのコーディング面接も体験させてもらうことに…果たしてその結果は!?

Facebookのオフィスは超インスタ映えする!

皆さん、こんにちは!池澤あやかです。

「Facebook」は世界の月間アクティブユーザーが21億人を突破したことでも話題ですね。そんなFacebookのオフィスは、東京都港区の超高層ビル内にあるんです。

さっそく突撃してみましょう!

今回オフィスを案内してくれたのは、Facebookのソリューションズエンジニアリングマネージャー 安藤祐介さんです。


「わ~!眺望抜群でとても開放的なオフィス!
そして壁のいたるところに、アート作品が飾られていておしゃれですね」


「その国にゆかりのあるアーティストに描いてもらっています。
ここ東京オフィスでは、日本の四季を表現したアートや、金剛力士像をモチーフとしたアートなどで“日本文化”を演出しています。

ただし、アート作品で独自性を出しつつも、基本的にはどの国のオフィスも同じ造りにしています。
執務スペースはもちろん、軽食スペースやミーティングスペースの造りも同じだし、会議室予約システムや備品請求システムなどといった社内システムも同じです」


「なるほど!他国のオフィスから出張で来たメンバーでも、普段と同じようにすぐ仕事に取り組めるよう工夫されているんですね!」

アート作品が飾られている廊下

軽食スペースでは、お菓子や飲み物、カップ麺、シリアルなどが食べ放題!

キーボードやイヤホンなどPC周辺機器が買える自販機も。社員証をかざせば経費で購入できます

Facebookの日本オフィス内最大のインスタ映えスポットで記念撮影

Facebook Wallには来訪者のサインがギッシリ

私もサインさせていただきました!

ゆったり寛げるスペースが随所に。眺望も抜群でリフレッシュできそう♪

Facebookグッズが入ってるガチャもありました!

8,568通り、あなたはどのタイプ?

エンジニアの働く環境を深掘りインタビュー!

すっかりFacebookのオフィスが気に入ってしまった私。

エンジニアカルチャーや仕事のやりがいについて、安藤さんに深掘りしてみました!

安藤さんはフリーランスエンジニアとして活躍した後、IT企業数社を経て、米Linkshare incにおいてアプリケーションエンジニアとして勤務。

帰国後、米 Engine Yardの日本展開に参加し、2015年に Facebookに転職したとのこと。

「Facebookならばインパクトの大きな仕事ができそうだし、ちょうどFacebookが買収したOculusにも興味があったから」なのだそうです。

安藤さんがマネージャーを務める「ソリューションズエンジニアリング」は、広告関係のテクノロジーにかかわる部署。

広告主へのAPIインテグレーションの提案や、広告代理店やアドテク系企業のソリューション開発のコンサルティングをするほか、Facebookのプロダクトに足りない機能については自ら開発も行っています。


「入社したら、配属はどのように決まるのですか?」


「入社時に決まっている場合もありますが、まずは新入社員は全員、米国本社で2カ月弱の「ブートキャンプ」という研修を受けます。それを通して配属先が決まるケースも多いですね」


「ブートキャンプ?なんかスゴそう…」


「まさに『新兵訓練』ですよ(笑)。初日にラップトップを開くとタスクがアサインされていて、第1週はそれに対応するのがマイルストーン。メンターがつくので、一人で放り出されるわけではありませんが、高い対応力が求められます。

1週目が終わったら、また別のタスクがアサインされます。面白いのは、ランダムにいろいろなチームやプロダクトのアサインが飛んでくること。

これにより、さまざまなチームにコネクションができますし『自分にはこのチームが合いそう』『この分野を深めてみたい』など個人の適性や興味の対象、深めたいキャリアに気づくこともできます」


「へ~!面白いカルチャーですね。安藤さんもやったのですか?」


「もちろん!アサインされているタスクを達成するには、自分の限界を越えなければならない場面が出てくるのでものすごく大変でしたが、それまでに参加したどのカンファレンスよりも内容が濃くて面白かったですね。

…ただ、研修を終えて現場に出てみると、やっぱりあれは研修だったんだ、仕事よりも全然簡単だったって思いました(笑)。

SNSの会社だけあって、研修時からいろいろな人と幅広くコミュニケーションをとったり、ディスカッションしたりする機会が用意されているとも感じました」


「社内で使っているメッセージングツールもFacebookメッセンジャーなのですか?」


「以前は通常のFacebook上に社内用のグループやメッセンジャーのスレッドを作り、使っていたのですが、昨年それを企業向けSNS「Workplace(ワークプレイス)」として製品化。今では全社員はこれを使っています。

通常のFacebookと同じくビデオ通話機能や、グループ投稿機能があり、社内システムやメールアカウントと連携できるようになっているのでとても便利ですよ。それでいて、基本的な使い方は通常のFacebookやメッセンジャーと一緒なので、誰でもすぐ操作できます」


「なるほど~。メッセンジャーがあれば、他国のオフィスとも密にコミュニケーションできますね」


「確かにそうですね。ただその一方で、他国のメンバーと定期的に集まり、交流する「オフサイト」が推奨されています。

私は韓国と香港のチームのマネージャーでもあるのですが、定期的にシンガポールに集まったり本社に集まったりしています。デジタルツールもフル活用しますが、face to faceも大切にしています」


「私も出張したい(笑)!刺激を受ける機会が多そうですが、ほかにもエンジニアが成長できる環境はありますか?」


「ハッカソンがいい機会になっていると思います。Faceookの重要な機能は、たいていハッカソンから出てくる…というぐらい。

ものすごい数のプロジェクトが生まれているので表に出ていないものも当然ありますが、パブリックになっているもので言えば、2015年に行った『Facebookプロフィール写真を虹色にする機能』が挙げられます」


「かなり話題になりましたね!アメリカ全州で同性婚が認められたことを受けた機能でしたよね」


「実は、ハッカソンでインターンの学生が作ったものなんです。完成度の高さが社内で評判になり、ハッカソン後わずか72時間でプロダクトになりました」


「すごいスピード感ですね!!…仕事面でもそうですが、Facebookは世の中の動きを先取りして動いている印象を受けます。

CEOのマーク・ザッカーバーグ氏が2カ月間の育児休暇を取ったのには驚きました。グローバル企業のトップが2カ月間いないって、スゴいことですよね!?」


「ダイバーシティには早くから取り組み、多様な人材がイキイキ働ける環境づくりに力を入れています。

例えば、いま例に挙がった育児休暇は4カ月間取ることができ、該当する人は立場や男女問わず、取得を強く推奨されています。

また、女性のキャリアに関するセッションも頻繁に開催されていて、COOのシェリル・サンドバーグを囲んでのセッションもありますよ」


「うわ~!直にお話を聞けるなんて、うらやましい!」

8,568通り、あなたはどのタイプ?

池澤あやか、Facebookエンジニアの面接に挑む!

安藤さんの話を聞いて、ますますFacebookで働きたくなっちゃいました!

Facebookはホームページ上で、全世界での募集ポジションをオープンにしていますが、随時1000職種は募集しているのだとか。

東京オフィスでも、10~20職種を募集しているとのこと。これはチャンスがありそう!ということで、面接に臨んでみました。

面接官は、安藤さん。普段はすべて英語で行われるということですが、今回は読者の皆さんにより伝わりやすいように、特別に日本語で行ってもらいました。


「池澤さんが最近手がけたプロジェクトの内容を教えていただけますか?」


「現在は、あるプロダクトの量産ツール作成を手掛けています。チップへの書き込み方を調べて、リサーチしながら環境を決めています。

今回は、Windowsでしか書き込めないチップがあったので、Windows上で動くパッチをPythonで書いています」


「そのプロジェクトの中で感じている、技術的な課題は何ですか?」


「実はWindowsを触るのも、製品に使うチップを扱うのも初めて。書き込み方を調べるだけでも大変ですね。

汎用的なソフトと違い、情報がクローズドだったり、ドライバ対応していなかったりして、手を焼いているところです」


「では、池澤さんが集めた情報を周りのメンバーに伝える際に工夫していることはありますか?」


「社内用の情報共有ツールを使って、具体的な情報を残すようにしています」


「なるほど、調べた情報をツールで共有してコミュニケーションをしているんですね。わかりました。ではコーディングテストに入りましょう」

いよいよ、Facebookのコーディングテストに挑戦!

コーディングテストはホワイトボードやオンラインで画面共有ができるエディタなどを使い、面接官とコミュニケーションを取りながら実際にそれを解いていきます。今回はエディタを使って進めます。


「今日の問題は、『数値の入った配列から、指定された数値より小さい数値の数を返す関数』です。今、問題文をエディタにも貼りましたが、これを見て、どういう関数を実装するつもりか、教えていただけますか?」

# 数値の入った配列から、指定された数値より小さい数値の数を返す関数
# list = [4,1,3,2]
# num = 3
# 2


「う~ん…。配列から要素を1つ1つ取り出して、numと比べて小さい数をtempに入れて、全部リストを取り出し終わったらtempをリターンするという感じでしょうか…」


「では実際に書いてみてください。プログラミング言語は何にしますか?」


「Rubyにします」


「引数はどうなりますか?」


「2つ必要ですね…。あ、この方法でいいのかな?」

# 数値の入った配列から、指定された数値より小さい数値の数を返す関数
# list = [4,1,3,2]
# num = 3
# 2
#

def return_small_num(list, num)
  temp = []
  list.each do |l|
    if l < num
      temp.push(l)
    end
  end
  temp.length
end

list = [4, 1, 3, 4]
num = 3

return_small_num(list, num)


「シンプルな流れとしてはこれでいいのですが、このやり方だと問題があるケースがあるとしたらどういうケースが考えられると思いますか?」


「えっ??何だろう…(熟考)」


「このプログラムの計算量とメモリの使用量はわかりますか?ビッグオー記法は知っていますか?」


「大学で勉強しました!」


「では計算量はどうなりますか?」


「(熟考) O(n)かな」


「そうですね、ではメモリの使用量は?」


「(さらに熟考) これもO(n)かな」


「そうです。つまり計算量もメモリの使用量も入力に応じて大きくなります。リストが30万件とか100万件とか入っていたら、どういう点が問題になるでしょう?」


「領域が確保し切れなくなり、スピードも遅くなります」


「ではこのプログラムを改善できますか?今の記述では入力をどのように処理していますか?」


eachで展開して、その後比較してtempに入れます」


「なるほど。でもこの書き方だと、tempがものすごく大きくなってしまう。このtempを配列を使わずに実装するにはどうすればいいでしょう?」


「削除していく?」


「それも面白いけれど、eachを使っているので、8行目で使っているtempを配列ではなくて…」


「あ、書けます!これでだいぶメモリが減らせました」

def return_small_num_count(list, num)
  count = 0
  list.each do |l|
    if l < num
      count = count + 1
    end
  end
  count
end

list = [4, 1, 3, 4]
num = 3

return_small_num_count(list, num)


「メモリの使用量はどうなりましたか?」


「えっと…(熟考)…O(1) でしたっけ?」


「その通りです。では、次は計算量をどうやって減らせるか。eachでなめていく以外の方法で何かアイディアはありますか」


「データを二つに分けてから処理する……二分探索でしょうか」


「はい、ただ二分探索をするには事前に……」


「そうだ!ソートされていないといけない。このリストはソートされているのでしょうか?」


「そうですね、ソートされているということでいいでしょう。これでかなり計算量を減らせました。いつもは実際に書いていただき、コードをチェックしますが、今回は時間もないですしここまでで大丈夫です」


「まるで授業みたい!緊張しました!…そして、選考結果はいかがでしょうか?」


「コミュニケーションを取りながら進めていた点が高ポイントです。

実際の業務でも、解き方がわからない問題をみんなで協力して解決していくので、何が問題なのか洗い出し、他の人からのサジェスチョンを受け入れてコミュニケーションをとりながら進めていくことは大切です。

そして考えをコードにする流れがスムーズなのも良かったです。ぜひ、次の選考に進んでいただきたいと思います」


「やったー!!!うれしいです!」

課題を把握する力、コミュニケーション力が大事

面接は、問題に対して一人で答えるのではなく、わからない点は質問しつつ、コミュニケーションをとりながら進められるので面白かったです。ただ、課題を把握する力、コミュニケーション力は必要だと感じました。

実際は、これらのやり取りがすべて英語で行われるとのことですが、コーディングに自信があれば乗り切れそう。
我こそはと思う方は、ぜひチャレンジしてみてくださいね。

安藤さん、今日はありがとうございました!

レポーター:池澤あやか

東宝芸能所属。慶應義塾大学 環境情報学部(SFC)卒。タレント業のかたわら受託開発もこなす「ギークなタレント」、「Rubyの女神」。最近はディープラーニングに興味があり、Pythonを勉強中。著書『アイディアを実現させる最高のツール プログラミングをはじめよう』(大和書房)など。TwitterIDは@ikeay

※本記事は「CodeIQ MAGAZINE」掲載の記事を転載しております。

PC_goodpoint_banner2

Pagetop