How IT Works

プログラマーやっています。技術よりも人間学的なところが好きです。

新入社員の研修を担当して感じたこと

研修の概要

 今年の新入社員研修を担当して、一からカリキュラムを組み立ててやり通しました。

 条件は下のような感じです。

  • 5カ月間毎日行う
  • 配属される部署は不明
  • さらに配属されるチームによって必要とされる技術セットは大きく違う
    • 古い技術の保守チームもある
  • ただ、Windows FormsとWeb系の技術の基本は少なくとも身につけてほしい
  • 新入社員は2人、自分は業務と平行して教育する

研修設計で当初考えたこ

教えない

 最低限のルールはあるものの、ほとんど自由に近い条件なので、最初のカリキュラムの設計が大事かなと思いました。

 とりあえず最低限考えたことは以下の2つです。

  • 技術要素をできる限り広くする
  • 教えない教育を中心にする

 うちの会社では配属後に丁寧な教育をしないチームもあります。だとすれば、この会社で生き残っていくためには、自分で学び自分で考えるサバイバル能力がいるのではないかという考えがありました。

 それに加えて、自分で自ら学ぶことができるのであれば、どんな部署に行っても大丈夫だろうということです。

 具体的には仕様と使用する技術は指定しましたが、文法やライブラリの使い方を一から教えたことはないです。

 参考書等は必要と言われた段階で用意しました。

レベル設定

 また、レベル設定は想定される一番レベルの高いチームに合わせました。とはいえ、世間でいえば普通くらいでしょうが。

 社内の最高レベルに5か月で行けるか、行けないかという実験的な部分もありましたが、まぁ低いレベルに合わせるのもどうかなという感じです。

 具体的には以下のような感じです。

  • 極力新しい技術を使う
  • コードレビューを厳しくする
  • デザインもできる限り業務に近づける
  • 仕様変更を辞さない

カリキュラム

  • C#
    • 技術要素
    • 時計作成、計算機作成
    • 簡単な管理画面
      • ページ遷移あり
  • Web
    • 技術要素
      • Angular4
      • Node.js
        • Express
      • MySQL
      • TypeScript
    • 簡単な管理画面
      • ヘッダー、フッター、サイドバーあり
      • ページ遷移あり
      • テーブルのページング機能あり
    • Docomo雑談APIを使ったチャット
    • ボウリングスコア計算
      • 自動テスト
      • レスポンシブデザイン
      • バンドル
  • その他

結果

技術的には問題なし

 新しい技術を覚えることについては全く問題なかったです。実際丁寧に教えたことはないですが、GitやAngular4、Expressの使い方などは比較的ちゃんと理解していたと思います。

 個人的な感覚から言えば、それなりの頭があれば技術を覚えるという点は問題ないという印象を受けました。

抽象概念で躓く

 やや問題になったのは、Anuglarのコンポーネントの設計やオブジェクト指向設計、もしくは関数型に近いロジックの書き方というところでしょうか。

 あるいは具体的には再帰の使い方や高階関数の使い方は理解してもらうのが大変でした。

スピードが上がらない

 時間切れでボウリングの課題も終わりませんでしたし、スピードに関しては最後まで向上が見られませんでした。

 コードを書くというところは確実にできるようになっていましたが、管理画面に3か月かかるなど速度面は十分でないという傾向がありました。

反省

特に学んでよかったこ

PowerShell

 うちの会社は基本的にVisual Studioで作業していて、あんまりシェルは触らないのですが、あえて研修はVSCodeでひたすらシェルで作業させました。

 一度基本的なコマンドを理解すると応用がかなり効くので、なかなか便利でした。

Git

 Gitはとても便利なうえに使えるとデグレ時などにとても役に立ちます。比較的すぐに扱えるようになりましたし、コミュニケーションにもよかったので早く導入すればよかったです。

Express

 比較的自分で設定しないと動かないという特性を考えると教育には良かったと思います。  Webの仕組みを知らなくても動かせるフレームワークもありますが、あえて薄いものを選びました。

いらなかったこ

Angular4

 重すぎます。情報源も少ないですし、何をするにしても流儀が多くそれが教育に関してはノイズになっていました。

 Reactがいいかと言われるとあれも何だかんだ付随品が多いので、個人的にはjQuery推します。

 やるとすれば、jQueryで小さい課題を多めに扱って、そのうち一つをReactで書き換えるぐらいがいいかと。

レスポンシブデザイン

 デザイン面で完全に足を引っ張っていました。一度崩れると修正が難しい割りに、CSSについて学べることが多くないのが残念。

 新入社員がやってみたいと自発的に言いだしたので任せてみましたが、一部分が可変くらいでよかったんじゃないかという印象です。

座学

 座学でオブジェクト指向設計、関数型のパラダイムを時間をかけて勉強してもらいましたが、定着率が思うほどあがらなかったです。

 これは課題をそれらのパラダイムを使わないときれいに解けない課題を作って解かせたほうがよかったですね。

 教える最善の方法は座学よりも課題ということに最後のほうで気づきました。

だめだったところ

 結果的に一人は一番レベルの高いチームに行って上手くやっているようですし、もう一人も開発が関係ない部署に行ってなんとかやっているとのことらしいです。

 自分で設定した目標からするとちゃんと果たせたと評価はしていいでしょう。

 ただ個人的な感覚から言うと、満点ではない感じがします。

 プロジェクトに入る分には問題ないのですが、優秀なプログラマに迫れたかというと近づけていない感じがします。

 うちの会社の優秀なプログラマの方はこのカリキュラムにあることを優に1か月もあれば十分吸収したそうですし、自分も当初計画では3か月で今回の内容が終わると読んでいました。

 そう考えると、技術だけ繕って本質を教えきれなかったのではないか?という気持ちがぬぐいきれません。身についたのは答えを調べる能力だけなのではないか?

 なので技術セットを多少甘くしてでも、思考の仕方、抽象度の高い考え方を教えればよかったなぁというのが反省になります。

 具体的には小さな課題をたくさん用意するとか、あとはスライドを作成したLTなどが意外にいいのかなという感じがしています。

感想

 研修を通してずっと優秀なプログラマとはなんだろうということを考えていました。

 途中で感じたのはこだわりの強さがその1つの条件なのかなという風に思いました。

 コメントの入れ方、ロジックの切り方、デザインの見せ方、パフォーマンスとかそういうところに脅迫的なこだわりを持っている人が優秀な人には多いとか。

 そういうところが最後まで研修とつながらなかったのが、すごく残念でした。

 来年は多分担当ではないと思いますが、それが資質なのか、環境なのか、教育の賜物なのかとかそういうことをもう少し注視して経過を見てみたいです。

言い訳

 研修の期間だけが決まっていて目的があいまいなこと、そもそも開発に行くとは限らないのにカリキュラムが 開発限定なのはどうかという議論は置いておいといてください。

 まぁ、基本的にプログラミング未経験者しか入社してくれず、有名大学の人が来ることもなく、家にPCがないというプログラマーがそこそこいるという環境では何かしらの仕組みがいるのは確かですが。。

 よく考えたらインターンシップみたいですよね。これ。