ドワンゴでエンジニアの教育を担当しているmesoです。

今回は、新生dwangoエンジニアブログの初回ということで、今年のドワンゴエンジニアの新人教育の内容について、ご紹介します。

ドワンゴでは、入社後に約半月かけて社会人としてのビジネスマナー研修や、チームで課題に取り組むことを学ぶ合宿研修などを行います。その後、エンジニアとして採用された新入社員は、エンジニアとしての研修を受けることになります。

今年の新入社員は46人中45人がエンジニア採用でしたので、45人がエンジニアとしての研修を受けました。研修で用いるPCは各自の希望によりWindows/Macが選べ、キーボードも日本語/USが選べます。

言語研修

4月の後半から5月1日にかけての12日間で、まずは、プログラミング言語の研修を受けてもらいました。昨年まではPHPの研修を行っていたのですが、今年はJavaに変更しました。

ニコニコ動画の既存システムは多くがPHPで書かれているので、例年は即戦力となってもらうべくPHPで研修を行なっていたのですが

1. PHPが書ける人がJavaを修得するコストより、Javaを書ける人がPHPを修得するコストの方が低い
2. PHPにはデザインパターンやオブジェクト指向設計、テストの重要性などを説いた良い本が少ない
3. ドワンゴ社内では新規開発においてScalaを採用する事例が増え、PHP離れが進んできている

などの理由から、Javaを選択しました。即戦力になってもらうことよりもエンジニアとしての底上げを目指した結果です。

研修では、一般的なJavaの言語仕様から、Eclipseを用いた開発、JUnitを使ったテスト、JDBCを使ったDBアクセスまでを学習しました。
特にJUnitを使ったテストについては、テキストとして全員に「JUnit実践入門 ~体系的に学ぶユニットテストの技法」を配布して学習してもらいました。

基礎講習

言語研修までは社外の会場を借りて研修を行なっていたのですが、ここからは社内に場所を移しての研修です。
基礎講習としては、2週間でドワンゴで開発を行なっていく上で必要な、以下の知識を学んでもらいました。

1. ドワンゴエンジニアとしての心構え
   - エンジニアとして一般的に言われている大事なこと
   - ドワンゴエンジニアが特に大事にすべきこと
   - IRC, Confluence/JIRA/FeCru, GitHub Enterpriseなどの社内ツールの使い方
   - 「達人プログラマー―システム開発の職人から名匠への道」を全員に配布

2. Webの基礎知識
   - 「Webを支える技術 -HTTP、URI、HTML、そしてREST」を教科書として全員に配布

3. SCMの使い方
   - Subversionの使い方
   - Gitの使い方
     - GitHub Enterprise特有の機能について
     - git-flowやgithub-flowなどのブランチ戦略

4. Linuxの基礎知識
   - Vagrantを使って、社内のBaseBoxを元に自動でVMを立ち上げる
   - コマンドやパイプ、アクセス権限やシェルスクリプトなど

5. Webアプリ開発の基礎知識
   - JavaによるWeb開発の歴史(ServletやJSP、StrutsやSpringなど)
   - Play Framework 2.1.1 for Javaを用いたWebアプリ開発の実践
   - MVC, DBマイグレーション, テスト
     - 「テストのないコードは成果物ではなく、負債である

6. セキュリティ
   - XSS, SQLインジェクション, CSRFなど
   - 脆弱性を実際に攻撃するのを体験し、原理や防御方法を学ぶ

7. チーム開発の進め方
   - アジャイル開発の基本
   - スクラムとは
     - スクラム開発の流れと役割
   - アジャイル開発のプラクティス
     - ペアプロ, TDD, リファクタリング, CIなどのXPのプラクティスも

チーム開発研修

基礎講習が終わると、今度は新人でチームを組んで課題に取り組んでもらいます。今年の課題は「私たちが考える最高に面白いニコニコ生放送@スマホ」で、スマホ(Android 4.0端末)の標準ブラウザ上で動作するニコニコ生放送を作ってもらいます。
生放送を配信する仕組みやコメントをやり取りする仕組み、TwitterのOAuth認証などの必須要件の他に、スマホでのコメントのしにくさを解消するアイデアや、ありとあらゆる面白い要素を任意で盛り込んでもらいます。また、要件は途中で変化する可能性があるため、拡張性の高いコードを書くことも要求されます。

他にも

1. 1チームは6-7人で、期間は5週間とする。出退勤の時間はチームで決めてよいが、残業は不可。
2. 開発手法はスクラムをベースとし、1スプリントは1週間とする。
3. 毎日スタンディングのデイリースクラムを行い、そこにはメンターとして先輩社員が参加する。また毎週振り返りを行う。
4. テストを必ず書き、JenkinsでCIする。

などのルールがあります。

91b4194675f84e4979d45250da8d7760fd0b1d2c

開発が終わると、プレゼンテーションとデモを行い、投票で選ばれた最も優秀なチームには表彰がなされます。
現在は、まさにこのチーム開発研修を行なっている最中です。

配属前研修

チーム開発研修が終わるころには、実際に配属されるシステムが発表されます。そして受け入れるチームの各リーダーに、配属される前にこれだけは学んでおいて欲しいという課題をもらいますので、それを完了したら配属となります。

想定している課題としては

1. 読書系
   - Scalaのコップ本, Effective Java, Exceptional C++, パーフェクトPHPなど、を理解して欲しい
2. 開発系
   - 要件を満たすWebアプリケーションを作って欲しい

などがあります。

まとめ

研修の内容が今年から大幅に変わり、カリキュラムの立案から準備、実施までを短期間で行わなければならなかった関係上、不慣れなところや準備が不足している部分もあり、研修を受けている皆さんには多少ご不便をお掛けしている面もあるかもしれません。
しかし、今年の変革により、よりドワンゴらしい研修になったのではないかと思っています。

2013年新入社員の今後の活躍に、どうぞご期待ください。