• このエントリーをはてなブックマークに追加

  • ドワンゴのエンジニア新人研修2016

    2016-06-22 18:0063
    ドワンゴでエンジニアの教育も担当している清水(@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年新入社員の活躍にどうぞご期待ください。

    おまけ

    そんなドワンゴでは、今夏のエンジニアインターンシップの募集を開始しています。
    ご興味ありましたら是非ご応募ください!
  • はてな×ドワンゴ合同ハッカソン@東京レポート

    2015-12-05 13:591
    ドワンゴの清水(@meso)です。

    去る11月28日に、株式会社はてなさんとドワンゴの合同ハッカソンをドワンゴセミナールームで開催いたしましたので、そのレポートをお届けします。

    イベントページは http://dwangohatena.connpass.com/event/21717/

    この合同ハッカソンは、京都と東京の2ヶ所で開催されたもので、京都で開催した際のレポートは、はてなさんからあがっておりますのでご参照ください。

    東京会場には、39名の学生さん(高校生、大学生、専門学校生など)にお集まりいただきました。参加者同士でチームを組みやすいよう、言語ごとにゆるくグループ分けして座っていただいたのですが、半分近くの参加者が事前にチームを組んでの参加だったのが意外でした。

    9014aafaaebee838313f064773e765fcefb30ad1

    10時半からご挨拶と両社のAPIの紹介をし、チームビルディング的なことをし、そこからすぐ8時間に及ぶハッカソンを開始しました。
    お昼もお弁当を用意しているため、ほとんどのチームが休憩なしのノンストップで開発に集中していたのが印象的でした。

    82396e25f520ddbdb1c91dffaca5f137e9976718

    19時にタイムアップし発表できるチームを募集したところ、最終的に15チームに発表してもらいました。

    dc0f6d4c1021b7a8d7d2f806153a99b045a342e8

    力作や迷作が色々ある中、ドワンゴ賞とはてな賞を選ばせていただきました。

    ドワンゴ賞: gochiusa.net さんの「nicoSyncPlayer」

    41dcef2f4cd92c60a481c79517140212d635b0fe

    ニコニコ動画を仲間同士で同期的に視聴するサービスで、ハッカソン中はごちうさ1期1話にしか対応してませんが、今後任意の動画に対応させていきたいとのことでした。

    はてな賞: ガミエグチさんの「Hatena Maze」

    b33a770c1abfec9185c8eab146b8f539f25c9f67

    はてなブログの記事が壁となっている迷路をつくり、スマホの加速度センサで操作し、壁にぶつかったらその壁にあたる記事ページにジャンプするという、はてなブログの新しい記事との出会いを促進するアプリでした。

    893f4a6ff6fc2b93e592ff6958287486a541f65e3906f7a4904ef3a0bc642df44c4b9beec9585eba

    その他にも、スマホの裏面をタップすることで動画の盛り上がり場所を共有するサービスや、はてブページを開く前にコメントのネガポジが分かるChrome拡張や、動画投稿者の全投稿動画の再生数を株価と見立てて投資するサービスなど、面白いアプリがたくさん誕生していました。

    1ce73cbd75735c9045e527c39777a04ea486ddb8973dc43c52a950cecb618c5b8fa98bf9f5815dc0

    ご参加いただいた皆さん、快く共催を引き受けていただいたはてなさん、ありがとうございました。

    67db371ea58c29b40c6c61e00583867f22e76765
  • ドワンゴのエンジニア新人研修2015

    2015-07-14 19:192110
    ドワンゴでエンジニアの教育も担当している清水(@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
        -   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名以上増えた!と言えると思っています。

    この Scala 教材は、の形で社外にも提供していきたいと考えております。

    そんなドワンゴでは、現在、エンジニアインターンを大募集しております。
    ご興味をもたれ方は是非 こちら からご応募ください。