【教育】2017年度:プログラマの新人教育について簡単にまとめてみました

はじめに

前職で3年ほどプログラマの新人教育に携わってきました。
この時期になると、みな同じことを思うのか2013年に書いた記事への
アクセス数が多くなる傾向があります。(2年見たので間違いない)

転職して1年経ち、今の会社の新人教育も見てきたので
今一度、自分が思っている(考えている)プログラマの新人教育について
書いていきます。

なお、このエントリーは個人の見解であり、所属する組織の公式見解ではありません。

今回のエントリーについて

新人教育というと広く考えられるので
今回は、以下の状況を想定して書いています。

共通の定義

  1. Webサービスを作っている会社を想定
  2. 会社の大きさやサービス数は関係ない
  3. フロントエンド、サーバーサイド、インフラという分野があるが、Webサービスを作ることを想定

新人の定義

今回、対象としている新人の定義は以下の通りです。

  1. 社会人1年目の新人
  2. 大卒、専門卒、高専卒などは関係ない
  3. 学生のところから、アルバイトでシステム開発に携わっていない
  4. 入社直後からメンター(先輩)がいる(またはいない)
  5. 学生のレベル
    1. 文系:プログラミング経験なし
    2. 理系:授業でプログラミングを経験、基本情報処理技術者の資格を取れるレベル

3以外は、ほとんどの人に当てはまるのではないでしょうか。
3についてすでに社会人としてやっているようなものなので問題ないと判断します。

なので、今回は上記の定義を元に書いていきます。

社員の定義

逆に社員の定義も明記していきます。

  1. メンター(教育担当)として抜擢された
  2. プログラマとして、一通り(要件、設計、開発、テスト、リリース)のシステム開発は携わった
  3. 新人教育に対して、ある程度のモチベーションがある

こんなところでしょうか。 1番大時なのは、3だと考えています。
これがないと、結局「他人に対して何かをしてあげている」という考えになり
新人教育に対してのモチベーションが下がってくると思います。

本題

メンター(教育担当)になった場合

大体は、内定式〜入社式1ヶ月前ぐらいに上司から言われるのではないでしょうか。
ここで断ってもまったく問題ないと思います。自分の力をつけるのも必要なことですし。

逆に引き受ける場合、以下のことを考えて引き受けるのがいいと思います。

  • 教育を通してメンバーになってもらうことで、チームを作り上げるため
  • 自分の力を棚卸しする目的として、とても良い機会のため

教育は何すればいいのか?

何をすればいいのかは以下の通りです。

  • 開発の全体フローを教える
  • Webシステムの概要を教える
  • 実際に開発をしてもらう

詳しく書いていきます。
なお、教育コンサルな人ではないので「自分だったらこうする」レベルで書きます。
もっと効率良いやり方やうまいやり方などは実際にそういう会社にお願いした方が良いです。

開発の全体フローを教える

自分もそうだったのですが、おそらく学生は「プログラミングをしたい」という気持ちが強いです。
特にテストなんて苦痛(今もですが)なことなので、まず開発の全体フローを教えることが大事です。

ちょうどいい本はこれでしょうか。

ずっと受けたかったソフトウェアエンジニアリングの授業1 増補改訂版

ずっと受けたかったソフトウェアエンジニアリングの授業1 増補改訂版

Webシステムの概要を教える

いきなり、JavaPHPをやっても
「その言語で書けるだけあって、全体を把握していない」
という状況にそのうちなります。
※自分がそういう状況なので、今苦労しています。

なので、最初の内にしっかりと教育した方が良いです。

ちょっと古いですが、この本が1番わかりやすく読みやすいと思い昔から使っています。

「プロになるためのWeb技術入門」 ――なぜ、あなたはWebシステムを開発できないのか

「プロになるためのWeb技術入門」 ――なぜ、あなたはWebシステムを開発できないのか

最近はもっとコンパクトなものが出ています。

イラスト図解式 この一冊で全部わかるWeb技術の基本

イラスト図解式 この一冊で全部わかるWeb技術の基本

実際に開発をしてもらう

講義形式はある程度で終わらせて、実際はここがメインになると思います。

パターンとしては二通りあります。

  • 研修期間がある場合
    • サンプルプロジェクトを立ち上げて実際にアプリを作ってもらう
  • プロジェクトに参画した場合
    • メンター(教育担当)と二人三脚で開発をする

サンプルプロジェクトの場合
「メンター(教育担当)が顧客として、新人にシステム開発を依頼する」というので
仮想プロジェクトを動かす形でいいと思います。

作るものは、研修期間にもよりますが、短い期間でも「Webサービスとして動くもの」とします。
新人に要件定義をさせて、設計、製造、テスト、リリースを実際にやってもらうことで
全体を把握してもらうことを目的としています。

プロジェクトに参画した場合
研修期間もあまりなくすぐに業務に入る場合、プロジェクトの上層部に相談して
「新人とセットでシステムを作る」スケジュールにします。

それぞれが業務に入るとお互い何をやっているかわからなくなり、意思疎通がやりにくくなり
メンター(教育担当)としての意味がなくなってしまいます。

Q/A

会社が新人教育をまとめてやり、その後配属が決まるパターンがある

場合によって、このパターンがあると思います。
この場合、メンター(教育担当)のアサインが数ヶ月遅れるだけであまり変わらないです。
なので、自分がメンター(教育担当)になる動機を考えた上で引き受けるのがいいと思います。

すごい新人で要領がいい

この歳になると、自分もかなり感じることです。
メンター(教育担当)はどうすればいいのかは自分も悩みました。

そして、結論として
「逆に新人から教われるところは教わる」
「逆に質問がきたら答えられる範囲で答え、わからなければ一緒に考える」
ということです。

メンター(教育担当)になったとしても、すべてを知っているわけではなく
「すべて答えられるようにしないと!」というのも難しい話です。

なので、変なプライドなどは捨てて「教えてもらう」「一緒に考える」をして
「メンバーとしてお互いを助け合って、信頼関係を作る」というのを考えながら
やっていった方がいいです。

新人の成長速度が異なる

新人も人間なので、成長スピードに差が出るのは当たり前です。
例えば、数ヶ月で物にする人がいて、半年経てば「後は1人でできるだろう」と思える人もいれば
根気よく教えて、1年後急成長する人もいます。

メンター(教育担当)として、新人の性格と成長速度をちゃんと見て
その人にあった教え方、教育プランを考えてあげる必要があります。

教育が段々と辛くなってくる

目標があり担当となったが、教えることはとても大変なことです。
担当になったからには「1人で頑張ろうという」という気持ちになります。

ただ、それでは限界があるので対策としては
「他の人にも教育してもらうようにする」
これを事前にチームメンバー(または上司)に伝えておくことが大切です。

まとめ

考えていたことをまとめようとすると文章にする難しさを感じました。
しかも、具体的な方法を書いていないので読んでくれた人のためになるのかな?と思いつつ
教育の何かのためになれば嬉しいです。

また、具体的に何か話したい(聞きたい)ことがありましたら
気軽に連絡してもらえればと思います。