非エンジニアだった新人君を教育してみた記録


年末というのと、新人教育?みたいなものがそろそろ一区切りがつきそうな感があるので
せっかくだし、まとめてみよう、という試み。
超絶まとまっていないので、長文が嫌な方は戻ったほうが良いかと思います。。。

別段、誰かを教育はしたことないけど、こんなやり方をやってみた、って感じで見ていただけると嬉しいです。

目的

いわゆる情報系を出てこなかった新人君に対して僕が教育係になった。
ただ普通に教えても面白くないし、本人にとって「血となり肉となる」ような知識を教育したいと思ったのが先駆け。
(ただし、内容なんかはちゃんと考えてなくってその場その場でやってたりしました。)

ちなみにこれを書いてる人のスキルセット

クラウド関係のインフラエンジニアとして構築・保守・運用
 ・VMware系(vCenterとかESXiとか)が得意
 ・Linux/Windowsの基礎的な知識以上は持っているはず
 ・Oracle/MS-SQLのミドルウェアも良く触る。
 ・DNS、NTP、Syslogなんかのミドルウェアも業務上必要なので触っている
 ・物理的なキッティングとかはあまりしないけど、概要はわかってる。
 ・NWが致命的に弱い。ストレージサーバはちょっと触れる。
 ・最近はAnsibleでコード書いてたりしてる
 ・簡単な運用ツールはPythonとかPerlとかGoで書きたい!(願望)
 ・暇な時には新しい技術をちょこちょこ触ったりしている。(はてブを読む感じ)

いわゆる広く浅く動けるエンジニアである、と自負してます。

第一印象

個人的に新人教育を行う時って新人君が自分を見る第一印象が一番重要だと思う。
「この人、なんかやだなぁ」っていうネガティブイメージは正直ずっとついて回るし・・・

それと同時に、こちらも第一印象でどういう人かを見ます。

 ・人となりはどんな感じだろう
   ・軽いノリかな、とか。
   ・こちらの軽口に乗ってくれる感じかな?とか
   ・(言い方はアレかもしれないが)頭は回るほうなのだろうか?とか
     → どこまで意地悪な質問ができるかな?という確認。意図は後ほど

 ・基礎的なITスキルは?
   ・例えば、ショートカットキーの存在がわかるか?(新人君の操作を見ればなんとなくわかる)
   ・自宅(個人)で使ってるPCは?
    → 個人情報というより、自分でそういうのを買おうとする人かどうか。

 ・突出したITスキルは?(いわゆる普通にPC触っているだけではわからない技術を知っているか。例:nginxとか、ansibleとか)
   あるとしたら、どういう事をやってきた?
    Web系なのか、数学屋さんだったり、とかとか。
    コーディングをしたことがあるか。(トラブルシューティング能力はありそうか?)

このタイミングで、新人君が思った僕の第一印象は・・・聞いてないから後で聞いてみよう。
僕が思った新人君の第一印象は、「かなりな真面目君で、C言語でコードは少しだけ書いてたらしいけど、いわゆる基礎的なIT知識もあまり無い感じ」だった。

第一フェーズ

まずは、情報を引き出さないと何も始まらない。
第一フェーズの目的は
 「何をどこまで知っているか」を聞き出すとともに
 「どういった方面に興味を持ちやすいか」とかを気にしていた。

ここで一番重要だと個人的に思ってるのが先に全てを伝えてしまうこと。
僕が新人君に伝えたのは

「僕の嫌だと思う教え方があったらいつでも言って欲しい。僕もこういうのは初めてだから試行錯誤している」
「将来的に、新人君は僕の後釜になれるように、今の僕が持ってる知識とかそういうのはなるべくトランスファーしていきたい」
「やりたいことを見つけたらすぐに言って欲しい。そちらに方向転換する。興味が無いことを続けることほど苦痛だろうし」

とか。こんな事を言った気がする。
(かなり真面目な子だったので、もっとフランクに話していいよ、とはあまり言わないようにしている。)

ぶっちゃけつつおちゃらけた感じで話を進めていった。
 ・Linux触ったことある?ってか知ってる?とか
 ・普段って家のPCで何してる?とか
   → ここで僕の失敗は、昔話おじさんに一瞬なりかけてしまったこと。
     なので、せめてものフォローとして、「自分はこういう目的で家でこんなことやってたよ」って話をした。
     例えば、iPhoneの容量が無いのに音楽はたくさん聞きたくて困ったからストリーミングサーバ立てたけど、通信料が上限に達して死んだ、とか
 ・新人研修で何やってきた?
  → Javaのコードは書いたり、MySQLっぽいのを触っていたりした。
    が、「知識が定着した」という感じはあまりなかったので、無いものだと個人的には思いつつ
    データベースとかを触るタイミングで新たに教え直そうと思った。

第一フェーズは、どちらかというとヒアリングに徹した感はありました。
プラス、新人君には「何をやってもらうか」、それを実現するために「どういうスキルセットが必要か」を伝えた。

理由は、「開発やってもらうから」とか「コード書いてもらうよ」とかそんな抽象的すぎることを説明しても
真面目な子はきっと、言葉尻だけを理解しそうだな、と思ったので
描けるなら絵とかを使ってきちんと説明した。

 何をやってもらうか
  ・Ansibleでコード書いてもらう
   → 今はこういう風になってるけど、今後は例えば「ユーザの追加を自動化したい」とかを伝えて
     実際に手動でコード書いてもらう
  ・具体的にはここに書けませんが、開発業務とか。
   → 今何やってるか、をきちんと説明して、将来的にどうするかを説明する。
  ・

 スキルセット
  ・Linuxの基本動作(cdとかlsとか)
   → LPICレベル1あたりの知識を想定
  ・Linuxの仕様
   → LPICレベル1あたりの知識を想定
    1.ディレクトリ構造とか
    2.Linux上で業務上動いているサービス
     DNS、NTP、SYSLOG、LDAP、nginx、mysql(LAMPとかね)とか。
     ↑については概要だけ説明して、フェーズ2送り

  ・Windowsの基本動作
    → まぁ、多少は触れているけど、ActiveDirectoryとか業務で触ったりするしね。

と言っても、僕自身にも業務があるので、申し訳ないが下記は自分でやってもらった。
(新人君に渡せるPCが業務上では使えないPCしかなかったのでそれで。。。)

 1. 開発にあたりGitを使うのでそれが何するものか、を実際に触ってもらった。
   → これ使った。ただ、概要を学ぶには良かったが「実際にデータがどう動くか」を理解できなかったらしいので
     次の子が来たタイミングでは、もうちょっと違うやり方(例えば、バージョン管理が無い状態での開発とか)をやってもらおうかな?

 2. Ansibleについて調べてみてね。
  

第一フェーズ終わったタイミングで今後の方向性を考えてみた。

 新人君に必要だと思った足りてないスキルは下記
  1. Google力
  2. 時間を区切ってもらう力

第二フェーズ

ここまでだいたい1ヶ月かからないくらい?

第二フェーズでは、以下にターゲットを絞った。

 ・知識定着のために以下を実行
   1. 新人君にお願いした作業の内容について質問しまくる
     → 不明なところはきちんと説明し直す。
      (曖昧なまま覚えてもらうことを回避したい)
   2. 今やってる作業の中で使ってる技術要素について質問しまくる
     → わかるのであれば自分の口から説明してもらうし
不明なところはGoogleで調べなおしてもらう。
       → Google力の向上
   3. 性質が違う作業を1週間単位ぐらいで切り替える。
     → 例えば
       1週間目:Ansibleのコードを自分の検証環境上で書いてもらう
            ・NTPサーバを構築してみよう
       2週間目:Gitについてお勉強
       3週間目:(僕がやってる)VMwareプロダクトを触ってみよう
       4週間目:将来的にAnsible化してもらう部分を手作業で実際にやってみよう
     とかとか。

座学で学ぶことを悪とは言わないが、色々なことを
それなりに短いスパンでガリガリと手を動かしてもらいながら
やる作業や使うプロダクトを変更することによって、頭の回転を無理やり挙げてもらおう、と思った次第。

このフェーズの中で、意識して新人君に口頭で伝えたことは第一フェーズで伝えたこととあわせて下記になります。

「分からないことはわからないときっちり言おう」
  → 無知の知を知る、じゃないけど、自分が知っている範囲と知らない範囲を明確に口に出して欲しいから。
    内容によっては僕が口頭で補足するか、Googleで調べてもらう。

「分からないことは新人君の問題じゃなくて、僕の教え方が悪い可能性があるので、分からない事は恥でもなんでもない」
  → 萎縮して質問とかしなくなるのを防ぐため。
    それに、僕は新人教育のプロではないのもあるし・・・

# 第二フェーズ - 2nd

第二フェーズの中で、僕は新人君にはちょくちょくと
「ショートカットキーを使い倒してね(tabキーでコマンド保管とか)」とか
「Macの仮想デスクトップは1アプリを原則としてね」とか
「それ、tmuxでちゃんとペイン分けてね」とかを伝えていた。

最初は理由を伝えなかったけど、これは実際に不便だと思って貰おうと思ったためです。
上記を使う理由って個人的には「人間が悩まず、やるべき事に専念するため」だと思うんですよね。

たまに目にするMac上でアプリを何回も切り替えながら作業する人とか、ショートカットキーを使えば一発なのにマウスで操作し始める人とか
がいますが、やっぱり、「本来やるべき事ではない事(アプリ切り替えとか)をやってる間は思考が切れる」と思ってます。
エンジニアとして必要な素養かどうかはちょっとわからないですけど、人間が本来やるべきことに集中しようね、と実演しつつ話をしてます。

おかげで、最近は新人君のショートカットキーを使う率が上がってきて良い感じになってます。

総括

いや、全然まとまって無くて大変申し訳無く。。。
新人君の知識は以前に比べてだいぶついてきたなー、と思うようになりましたし
キーボードなんかの操作もこなれてきた感じはあります。

慣れてもらうってやっぱり大事だなー、と思った数ヶ月でした。