ドワンゴでエンジニアの教育も担当している清水(@meso)です。
昨年に引き続き、今年もエンジニアの新人研修を担当いたしましたので、その内容をご紹介いたします。
今年は、昨年までと異なりエンジニア以外へのプログラミング研修を開催したり、エンジニアへのプログラミング言語の研修を Scala に変更したりしたので、その辺りを重点的にご紹介いたします。
合同プログラミング研修
ドワンゴに入社したエンジニア、デザイナ、企画の新入社員と、KADOKAWAに入社した新入社員の方の全員を対象にしたプログラミング研修を行いました。
プログラミングをバリバリやってきたエンジニアたちと、プログラミングをしたことがない非エンジニアたちを合同で教育するには、どのようなカリキュラムにすべきか悩んだ結果、エンジニアに積極的にTA的な立ち回りを演じてもらうことにしました。
そもそも4日間という短い期間で、プログラミング未経験者に対してある程度達成感のある教育を行うというのは、講師一人だけの力では困難です。そこで、エンジニア2人に非エンジニア1人という3人組のチームを作ってもらい、講師が出す課題についてエンジニア2人が非エンジニアに教える、という形式を取りました。
カリキュラムの内容は以下の通りです。
初日:
- PCの構成要素
- ハードウェア / ソフトウェア
- OS / アプリケーション
- PCでないコンピュータって?
- Webとは
- Webブラウザ
- Chrome をダウンロード
- Webページが表示されるまでの流れ
- URL/IPアドレス/DNS/NAT/DHCP
- HTTP/HTML/CSS/JavaScript
- WWW以外のインターネットって?
- 課題例
- HTMLの基本
- チーム紹介のページ作成せよ
- エディタは Atom
- 文字コード/改行コード
- プログラミングとは
- JavaScript
- テキスト: ノンプログラマのためのJavaScriptはじめの一歩
- 2.2節 文字列と数値 まで
2日目:
- JavaScript
- 2.3節 配列とオブジェクト から 2.6節 繰り返し まで
- 課題(例)
- 1から1000までの3つの整数a, b, cが直角三角形の各辺になるようなa, b, cの組み合わせを、重複なく全て出力せよ
- 回転したりひっくり返したりして重なる三角形は重複とみなす
3日目:
- JavaScript
- 2.7節 関数 まで
- 課題(例)
- 素数を判定する関数 isPrime を定義し、1から100までの素数の数を求めよ
- JavaScript
- Node.js の導入
- 課題(例)
- コンソール上での数当てゲームの実装
- require, readline, Math.floor, Math.random, 再帰
- Twitter API
- アプリケーション登録/AccessToken生成
- クライアントライブラリの導入/npm
- タイムライン取得、ツイート生成
4日目:
- Twitter API
- ユーザストリームの取得
- JSON, Stream, 非同期処理とコールバック関数
- 最終課題
- 数当てゲームができるTwitterBotを作る
- String.split, parseInt, isNaN
5日目:
- 最終課題続き
- 振り返りとまとめ
この研修だけで終わるのではなく、研修で学んだ内容を今後も継続的に業務に活用していってもらえることを願っています。
エンジニアへの Scala 言語研修
昨年までは Java を言語研修で教えていましたが、今年は Scala で言語研修を行いました。
教材も自社で作りました。幸いドワンゴには、日本Scalaユーザーズグループ代表でJapan Scala Association 代表理事の @kmizu を始めとして、Scalaz や sbt のコミッタである @xuwei_k などの優秀な Scala エンジニアが揃っておりますので、彼らの手を借りて教材を作り上げました。
教材のメインターゲットは、大学の講義で Java をひと通りは習った経験のある新入社員、です。
教材は2部構成になっており、前半のScalaの文法解説に2週間、後半のPlay2を用いたアプリケーション開発に1週間掛けて教育していく予定でした。実際には、前半に1週間半、後半に1週間半ぐらいの割合になりましたが。
教材の目次をざっくりと紹介すると
前半:
Scalaとは / sbt インストール / Scala の基本 / sbt でコンパイル・実行 / Scala の制御構文 / IDE(IntelliJ IDEA) / クラス / オブジェクト / トレイト / 型パラメータと変位指定 / 関数 / コレクションライブラリ / ケースクラスとパターンマッチング / Implicit / エラー処理 / Future と Promise / テスト / Java との相互運用
後半:
Typesafe Activator と Play Framework / モジュールとレイヤ / 画像変換サーバ開発
となっています。
目次には現れてないトピックとしては
- メソッドのカリー化, 自分型を使ったDI, トレイトの継承を使ったDI, モノイド則, モック
- アクターモデルとAkka, RabbitMQ, Specs2
演習問題の例としては
- Immutable な Stack 型を定義せよ
- トレイトを使ったリファクタリング
- foldLeft を用いて reverse を実装せよ
- 二分木を表す型を定義し、sort メソッドを実装せよ
- Option での例外処理を Either でリファクタリング
- CountDownLatch の実装
などがあります。
結果として、弊社に Scala エンジニアが40名以上増えた!と言えると思っています。
そんなドワンゴでは、現在、エンジニアインターンを大募集しております。
ご興味をもたれ方は是非 こちら からご応募ください。
(ID:4408542)
楽しそう