ドワンゴでエンジニアの教育も担当している清水(@meso)です。

昨年に引き続き、今年もエンジニアの新人研修を担当いたしましたので、その内容をご紹介します。

今年は、昨年とカリキュラム上は大きく変更した点はありません。しかし、実施の方法を大きく変えました。具体的には「アクティブ・ラーニング」的な考え方を取り入れましたので、その辺りを重点的にご紹介出来ればと思います。

合同プログラミング研修

ドワンゴのエンジニアだけではなく、デザイナや企画職の新入社員、また、KADOKAWAやカドカワなどのグループ会社に入社した新入社員の方も含めた合同のプログラミング研修を行いました。

昨年は、基本的には私が講師を行い、エンジニア新入社員にTA的な立ち回りをしてもらったのですが、今年は、カリキュラムの考案からテキストの作成、当日の進行や講師役まで全て新入社員が中心に行う形式となりました。

内容としては、コンピュータやインターネットの基礎を学び、その上で、JavaScript を用いた簡単なプログラミングを行う、というものです。

チームを組んで、チーム内のエンジニア新入社員がそれ以外のメンバに教えていく形式なので、チームメンバの理解度に寄り添いながら進めて行っていたのが印象的でした。

1週間という短い時間でしたが、初めてプログラミングに触れたという方も多く、とても有意義な時間になったと感じております。

ドワンゴのエンジニアに必要な基礎知識

4月の最終週からGW明けの10日までの6日間は、ドワンゴでエンジニアとして活躍するために押さえておいてほしい基礎知識の修得にあてました(ドワンゴでは超会議の振替で5/2,6が休日でした)。

1. ドワンゴエンジニアとしての心構え
- 世間で言われているエンジニアにとって大事なこと
- ドワンゴエンジニアが特に大事にすべきこと
- エンジニアに限らずドワンゴ社員が大事にすべきこと

2. Webの基礎知識

3. セキュリティ
- IPAが配っている脆弱性体験学習ツール AppGoat で脆弱性攻撃体験

4. よいプログラマになるために

5. チーム開発の進め方
- ドワンゴ社内でのアジャイル開発の資料

教科書を何冊か配布しておりますし、他にも教材をいくつか指定しています。これは、単純に講師が講義形式で読み進める、とか、自習として読んでおしまい、というものではありません。

今年は以下のように本読みを進めるよう指示をしました。

1. 本を読む範囲(章やページなど)を指定する
2. 1人で読む時間を指定する(18時まで、等)
3. 読み進めながら
  - 知らなかったこと
  - 重要だと思ったこと
  - これは違うんじゃないか?と思ったこと
  - その他気になったこと
  を読書ログとして(社内Qiitaクローンの)Potmum に記述する
4. その記述を元に、チーム内で議論する
5. 議論の結果をチームごとにまとめて発表する

これによって、ただの受け身の知識獲得ではなく、能動的な学習を行うことができ、より深い理解に繋がったのではないかと思います。特に、「プリンシプルオブプログラミング」は項目の網羅性は高いが項目ごとの深掘りや具体性の記述は浅いため、その点を議論で深められたのはとても相性が良かったと思います。

ちなみに、18時まで読書でその後に議論だと、新入社員なのに就業時間が遅過ぎないかと思われるかもしれないので補足しておくと、新入社員はコアタイムが11時-15時のFLEXのため、出社時間も新入社員で話し合って決めてもらっています(裁量を持つ訓練も兼ねて)。だいたい10時半出社になることが多いため、19時半が退社時間になります。

スマホアプリ開発体験

今年の新入社員の特徴として、競技プログラミングが得意なアルゴリズムを考えるのに長けたエンジニアが多い傾向があります。とはいえ、昨今のサービス開発の流れを考えると、スマホアプリの1つでも作った経験がないと、エンジニアとして流動性が低い人材だと捉えられかねません。
というわけで、Android の公式ドキュメントを読みながら、3日間でスマホアプリを1つ作りあげるという研修を行いました。

スマホアプリ開発についての基礎知識を得ることはもちろんですが、英語の公式ドキュメントを読み解く訓練も兼ねています。当初は何らかの本を配る予定でしたが、直前で Android Studio のバージョンがあがったこともあり、方針を変更しました。
もちろん3日間でマスターできるようなものではありませんが、「スマホアプリ作ってくれ」と言われたときに「いや、作ったことないので無理です」と断るのではなく、「はい、あんま経験ないので調べながらになると思いますが、やります」と返事ができるようになることを目標とし、それは達成出来たのではないかと思います。

こちらも、ドキュメントを読みながら開発を進めつつ、上記の本読みと同様にログを残してチーム内で問題点を解決しながら進めてもらいました。

Scala 研修

Scala Matsuri 2016 で公開した、ドワンゴの Scala 研修テキストを用いて、Scala の基本文法から Play を用いた Web アプリケーション開発まで10日間で学習してもらいました。

こちらも、本読みと同様に、各自読み進めながら理解できなかったことなどをまとめてチーム内で議論し、発表する形式で進めました。

昨年は、講師が前で読みながら説明をしていくスタイルだったのですが、それと比べると積極性や理解度が上がったと感じています。

また、今年も昨年同様、学んでいる新入社員からテキストに対して pull request が飛んでくることも多く、よりテキストとしても洗練されてきていると感じています。
実は、公開しているテキストは前半の Scala の文法部分だけで、後半の Play を用いた Web アプリケーション開発はまだ公開されていません。こちらもそのうち公開できるようにしたいと考えています。

チーム開発実習

Scala 研修ののち、6月からは、チーム開発実習ということで、お題を与えてチームでの実践的なアプリケーション開発に取り組んでもらいました。

例年は、チーム間でコンペ形式で競い合う形式でしたが、今年はチーム間で担当するパートを分け、協力しあって全体として1つのアプリケーションを作成する形式に変更しました。

お題としては「Slackとめっちゃいい感じに連携するタスク管理システム」です。
  • Webフロント/Slack bot/Android アプリを作るフロントチーム
  • API サーバを作成するAPIチーム
  • 社内の営業日情報の取得やIDと本名とメアドを変換する基盤など、今回のシステムにかかわらず使えるような基盤システムを作成する基盤チーム
に大まかに分かれてもらい、各チームで要件をもとにAPI仕様を話し合い、ドキュメントをきちんと整備しながら進めてもらっています。

433a02ee1db6d45eed3aecb3fac9e28da8d2d157

ちょうど今週いっぱいで終わる予定だったのですが、今日になって Slack に Message Button というまさにこのシステムにうってつけの機能が追加されたため、これに対応してほしいという仕様変更を先ほど投げたところです。こういうのも実践的ですね。

まとめ

今年は、講義形式をやめ、自習 + ディスカッション + 発表という形式をメインに据えたことで、より研修に主体的に参加している姿を見ることが出来ました。
また、チーム開発実習も、より現場の開発の実際に近い形にしたことで、チーム間のコミュニケーションが重要だということを肌で感じることができたと思います。

これからの、2016年新入社員の活躍にどうぞご期待ください。

おまけ

そんなドワンゴでは、今夏のエンジニアインターンシップの募集を開始しています。
ご興味ありましたら是非ご応募ください!