google developer day 2010 japan: google エンジニアの日常 (山内 知昭)
DESCRIPTION
Google のソフトウェアエンジニアがどのような環境でサービスの開発を行っているかを紹介します。TRANSCRIPT
Revised v4Presenter
Life of a Google engineerグーグルエンジニアの日常
Tomoaki Yamauchi
Sep 28, 2010
Revised v4Presenter
自己紹介と今日の内容
今日の内容
どんな仕事をしているの?どうやって仕事をしているの?好きな仕事ができるの?仕事以外の職場環境は?ワークライフバランスってどうなの?どうやったらグーグルエンジニアになれるの?ケーススタディ
Revised v4Presenter
仕事内容
どんな仕事をしているの?
SWE (Software Engineer)Googleの製品・サービスを作る人
PM (Product Manager)ユーザーとSWEの架け橋になる人
SRE (Site Reliability Engineer)Googleのサービスを動かし続ける人
SWE in Test / Test EngineerGoogleの製品・サービスの信頼性を高める人
OpsGoogleの社内システムを動かす人
SWEはどんな仕事をしているの?
idea design implement launch
最初から最後まで
どんな製品・サービスがあるの?
Revised v4Presenter
仕事の環境
どんなマシンを使っているの?
専有ラップトップデスクトップ
データセンター上のVirtual Workstationを代わりに持つこともできる
大きなディスプレイ - 30 inch
共有世界中のデータセンター
コードやデータはどう管理しているの?
ソースコード基本的に全世界・全プロジェクト共通のリポジトリオープンソース・プロジェクトなどの特殊なものは別VCSのコマンドを直接実行することは少ない
さまざまなラッパーや補助システムがあるコードレビューが必須
データホームを含むさまざまなディレクトリがNFS
どの端末でも同じホームで作業できるどの端末でも同じコマンドが実行できる
ジョブの入出力などの大容量データはGFS
ビルド・ジョブ実行
ビルド内製のビルドツール自動的に分散ビルド・分散テスト
ジョブ実行世界中のデータセンターの計算クラスタが自由に使える
クォータの制限はあるが、かなり大きい同じバイナリをローカルでも実行可能
テスト実行で便利他のプロジェクトの生成ファイルにもアクセスできる
中間処理の終わったWebページなど
Revised v4Presenter
仕事の進め方
どんな体制で開発しているの?
世界中から開発に参加
分散しすぎてて効率悪いんじゃ?
プロダクト単位のコアチームの構成ある程度地理的な配置を考慮VCでつないでチームミーティング時差12時間もあるとさすがにしんどい
個々のプロジェクト少人数(1~数人)face to faceコミュニケーションは重要必要に応じて出張して開発
その他メールが中心。チャットを使う人も。グループウェア(カレンダーやバグトラッカーなど)
英語ですか?
英語です。
日本人同士なら日本語で話しますが、読み書きはそれでも英語です。
ただし、ブロークンな英語でもわりと許してくれます。(SWEの場合。他の職種はわかりません)でも、話すのはともかく、聞けないのはしんどいかも。
ローンチプロセスとかは?
製品・サービスによって詳細は違いますが・・・クォリティは大丈夫?インパクトは十分?セキュリティは?リソースは足りてる?メンテナンスできるの?法律に違反してないよね?関連チームへの確認はOK?などなど
エンジニアが主体的に関わっていく範囲は広いエンジニアへからインプットエンジニアへのフィードバック
Revised v4Presenter
個人と組織
好きな仕事ができるの?
半分Yesで半分No
Noの理由コアメンバーになるにはコアチームがいないと難しい他のエンジニアからのサポートがないとしんどい
Yesの理由20% Projectなら比較的自由にプロジェクトを選べるFull-time projectでも課題発見・解決は裁量の範囲親切な人や使えるリソースが多い
仕事以外の職場環境は?
オフィスに来るのが楽しくなる仕掛け朝・昼・晩の食事。お菓子や飲み物。(無料)オフィスデコレーション、遊具、マッサージ 各種クラブ
チームの絆を深める仕掛け仕事中のおしゃべりはOK
休憩時間とかは決まっていない各種イベント - オンサイト・オフサイト
ランチタイムのミニトークハッカソンFunイベント
ワークライフバランスはどう?
仕事が好きそうな人が多いけど、みんな大丈夫かな・・・?
仕事時間の裁量は自由度が高い有給のほかに疾病休暇(有給)もあり
病気の時のために有給を残しておくとか考えない1週間位まとめて休んで家族旅行とか普通子供の病気とかで当日の朝連絡して休むのも普通子供が生まれたら、
父親は育休(4週間は有給)をとるのが普通母親の産休(16週間は有給)をとることができる
14週間(法定) + 2週間少なくともとりにくい雰囲気はないはず
Revised v4Presenter
採用活動
どうやったらグーグルエンジニアになれるの?
エンジニアの採用は、エンジニアの大事な仕事
まずはレジュメエンジニアが見て「これは!」と思えば、面接へ
電話面接。オンサイト面接。人事や管理職ではなく、現場のエンジニアが面接技術力を問う質問が中心
ホワイトボードにコードを書くことも面接官は、面接の後、合否の判断とその客観的な理由を書いたレポートを提出
合否の決定何人も面接したレポートを元に、会議で決定
だから、具体的にどうすればいいの?
英語全然できないと入った後しんどい英語のAPIドキュメントを読んで理解できて、海外に個人旅行ができる程度の英語力があれば、とりあえずは大丈夫だと思う
技術さまざまな分野を知っているほうがいい
CPUの仕組みからソフトウェアデザインまで表層的でない理解が求められる。「なぜそうなのか?」人に指示する力ではなく、自分で作れる力を重視きれいなコードをすばやく書けると好印象
Revised v4Presenter
ケーススタディ:私の場合
経歴
大学特に情報科学や情報工学ではない
文学部:言語学工学部:工学系基礎、経営学
院進学しないで就職プログラミングとの出会いは21歳のとき
職歴大手SIでオープン系のインフラ構築支援のエンジニア中堅ソフトウェアメーカーでソフトウェア開発エンジニア
グーグルに入社した経緯
グーグルの検索広告でエンジニアを募集していることを知る
転職フェアにグーグルが来るというので話を聞きにいく
とりあえずレジュメを送ってと言われたのでだめもとで送る
なぜか面接の連絡が来て、なぜか1次面接に受かる
2次面接はカリフォルニアで、といわれて焦る
会社を休んでマウンテンビューへ
グーグルに入社した経緯(続き)
期待して結果を待つが、落ちる
ショックだったが、惜しかったからまたチャレンジして、と言われて1年後の再戦を勝手に誓う
1年間、情報科学の勉強を、仕事の傍ら、独学する
1年後、再度応募して、今度は受かる(今度はカリフォルニア旅行はなし!)
晴れてグーグルエンジニアに
平日の過ごし方(一例)7時 起床。重要なメールの確認
8時半 家を出る
10時 オフィスに到着
10~11時 メールの処理を終える
11~12時 コアチームとビデオ会議
12~13時 昼ごはん。雑談
13~16時ごろ なんとなく集中
16時から30分位 マッサージチェアでリラックス
16:30~18:40 お菓子を食べながら、もうひと頑張り
18:45 会社を出る
20:15ごろ 家に到着
24時ごろ 就寝
他の会社と違うとところ
どのオフィスに所属しても、エンジニアとしては対等時差や規模などがハンディでないわけではない
コードレビューが必須プロジェクトのコアメンバープログラミング言語毎の認定エンジニア
エンジニアがエンジニアを評価採用でも人事評価でも
豊富なリソース計算機、コードだけでない実際に使える
Revised v4Presenter
ご静聴ありがとうございました