新人教育をしてて一番大事なのは「試行回数」だと思った

3ヶ月~半年くらいで他の社員と遜色無い人もいる。数年やっても向いてないんじゃないかというくらいできない人もいる。少しずつ着実に成長してる人もいる。

新人教育を1~2年10人くらいやってるのだが、いったい何が違うんだろうとずっと思い続けてきたがようやく自分なりにまとまってきたので書いておく。


前提

新人とはプログラミング経験年数2年以下くらいのwebエンジニアの初心者を想定している。(自称初心者ではない)

今勤めている会社では大学生インターンや未経験のような新人を積極的にとってきた。自分はお節介を焼くのが趣味なので、勝手に教えてたら(知識をひけらかしてたら)思ったよりも成長してくれる人が何人かいたし、逆もまた然り。

最近はAWS業務やrailsを書きつつ新人の育成が仕事になっている。

僕自身は所々で教えてくれる人はいたものの、ちゃんと「教育」をされたことがないのでよくわらないし、コーチング技術なんてものはわからないし、脳筋なのでフィーリングで書いていく。(大学は情報科いたけど中退しちゃったので専門的なことはわからん)

新人教育はなんでやるの?

ジュニアを採用しない連中はシニアに値しないという記事にまとまっている。

エンジニア人口が増えることは人手不足のIT業界にとって良い影響を与え、またOSSにも貢献できると思う(利用することも貢献の一種)。

幸いなことに、今の会社はそれなりにちゃんとしたエンジニア組織があり育成環境があるのでちゃんと育成すればワークする。母数の少ないシニアエンジニアを採用をするのは難しいので育成するという選択を取るのはそれはそれで正しい判断だと思う。

個人的には、自分の仕事を 押し付けられる できる人材が増えると自分の時間が空くので、他の技術に時間を投資できるようになると思っている。

一番大事なのは試行回数

どの分野でもそうだが、結局の所「試行回数を増やせば増やすほど成長をする」ので「試行回数を最大化する」ように取りくむのが最善だと思う。

試行回数に関して明確に定義はできないが、「目の前の問題を解決した回数」や「言語やライブラリの仕様を理解すべく取り組んだ回数」などを想定している。「Rubyの四則演算を学ぶ」のと「Rubyのcompilerの実装を読む」のようなレベル差があるものを同等に扱うべきではないが、一旦無視する。

急速に成長する人は上手に試行回数を増やす方法を知っており、それを忠実に実践できる。そうではない人この限りではない。

試行回数を増やすには以下のような取り組みが考えられる。

  • 問題に取りくむ時間を増やす
  • 既知の問題から推測できるように既知の問題の理解を深める
  • 常に最新の情報をキャッチアップできる仕組みを作る
  • shellやエディタをカスタマイズし効率的に検証できるようにする
  • 必要な情報を取得するために効率的に検索をできるようにする
  • ショートカットキーを駆使し余計な時間を使わないようにする
  • 小さく検証できる環境を用意する
  • 健康的な生活をして集中的に取りくめるようにする
  • 友人や知人にプログラマを増やし、教えてもらえる環境を作る
  • PCの画面を広く使う
  • ひたすらコードを書いて検証する
  • 自分の得た知識が正しいかどうか他者に説明して検証する

如何に余計なものを排除して試行回数を稼げるかが最も重要だ。

新人にはざっくり4タイプくらいにわけられる

なんとなく自分の中で4タイプにわけて、それぞれに合った方法で教える。

別分野で既に一定の技量があるタイプ

既に別分野でスキルの身につけ方を知っていて、webプログラミングにも応用できるような人。

そもそも別分野で知識を深める方法や試行回数を増やす大事さを知っているので勝手に勉強して勝手に伸びるので、こちらから教えることはそんなになくて非常に楽。

難しい文章を読むのにも抵抗がないので、すぐに普通のプログラマを追いこす場合が多い。

高負荷に耐えられ、時間で殴れるタイプ

自分も割とこれなので、一番教えてて楽しいタイプ。

時間で殴れるので、新しい知識やツールを試す回数が多く成長がめちゃくちゃ速い。

高負荷に耐えられるので仕事を大量にこなせるし、twitterや社内の技術的な情報のキャッチアップも難無くこなせる。

高学歴や高専出身が多いイメージ。

普通のタイプ

普通にプログラミングを仕事にして、普通に勉強をしているタイプ。

プログラミングのためだけに生活しているわけではなく、プライベートも重視してるケースが多い。

twitterにはプログラミングの休憩がてらコード書く狂人だらけだけど、real worldでは普通のタイプが一番多い。

教える時は情報量をしぼってパンクしないように気をつける必要がある。

全く向いていないタイプ

自分なりのやり方に異常に固執したり、こだわりが強い(の割りにデタラメなことを言う)人や、そもそもプログラミング好きではない人だ。

申し訳ないが、全く向いていない人は一定数いる。

しょうがない、向いてないのはしょうがないので本人の希望によるけど向いていないものはしょうがない。

もしかしたら何か別の才能があるかもしれないのでそっちを頑張った方が良いかもしれないし、他の指導者の元で大成するかもしれないので頑張ってほしい。

新人にはどうなってほしいのかなどを書く

会社的には「さっさと業務を一人前にこなせる人材になってほしい」というのが本音だろう。

個人的には上記の通り、「試行回数を最大化するための取り組みを自分で考えて実行してほしい」と思っている。 ツールにこだわるのも一つの方法だし、業務でタスクをこなすのも大事。 「先輩に聞くのは申し訳ないかな...?」って思う必要は全くなく、それが必要なら躊躇するべきではない。

多くのエンジニアは3年くらいで転職するので、きちんと職務経歴書に書くことがある状態にしてほしい。 いつでも転職できるくらい選択肢をもてている状態にしてあげたいなと思う。

普段自分が教える時に試してること

まずは何にせよ信頼関係を築くことから始まる。これほど大事なものはない。 どんなに技術的に正しいこと、成長に必要なことを熱弁しても信頼関係がなければ何もはじまらない。 なので雑談をしたり、食事に行ったりして兎に角仲良くなることが大事だ。

自分が1人に教えられるのは精々週に2時間くらいで、それ以外は基本的に本人が頑張る時間だ。 問題に取りくむ時に障害になる部分をなるべく排除するべく、まずは以下のようなことをやっている。

  • fish shellなどの便利ツールを入れる
  • dotfilesを作らせる
  • 便利なショートカットキーを教える
  • 良い記事にたどりつけるような検索ワードの作り方を教える
  • slackのfeedのチャンネルを教えるたり、お勧めのブログを教える

慣れてきたら次のことを意識して指摘してる。

  • コマンドや函数の挙動について説明させる
  • 「今やりたいこと」と「どうやるのか」を説明させる
  • 技術用語を技術的に説明させる

意外と「技術的に説明」できないことが多いのだ。 ちゃんとした技術用語を使えるのがちゃんとしたエンジニアだと思っているので、こういうのをきちんと答えられるようになってほしいと願っている。 わからないことに関してはわからないと言うのも大事だ。

例えば「Rails勉強しました!」って人に「CookieとSessionの違いはなんですか?」と聞いた時に前者で答える人が多い。

  • sessionはサーバで管理してcookieはブラウザで...
  • serverからのresponse headerにset-cookieでsession_idが送られてきて、それ以降はrequest headerのcookieにsession_idを付与してやりとりをする

ペアプロをする時は、良いコードを書くというよりは悪くないコードを書けるように意識して教えている。 変数名や函数分割など悪くないコードを書くテクニックは世の中にいっぱいあるので実践させている。

新人の質問の仕方について

twitterで新人エンジニアの質問の仕方について話題になっていた。鉄板ネタの話題だ。

個人的にはそもそも持ってる情報量が少ない新人がかちっとしたフォーマットで質問するのはそもそも無理だと思う。

経験上大体は情報不足だし、そもそもそのアプローチちがくね?みたいに思うことが多い。

新人から見ても「適当なこといってるとか思われないかな」とか「自分の調査不足を指摘されないかな」とか不安になるだろう。

「timesのような個人チャンネルを作ってやったことをlog感覚でながしてもらう」というのが一番良い気がする。 後で自分でも振りかえることも出来るし、logが既にあるので説明も省けるし、質問へのハードルが低くてすむ。

できない自分を見られるのが恥ずかしいと思っている人もいるが、「試行回数を最大化する」ことが大事なので気にする必要はないと思っている。 実際、ひたすらtimesに自分の作業を書きまくってものすごく成長した人もいる。

おすすめの勉強法や考え方や記事など

書籍/記事

ぱっと思いつくのはこのへん。モチベーションが上がる。

youtube

ベテランちというyoutuberの勉強のコツについてすごく面白かった。超おすすめ。

ブレイクスルー佐々木の動画も面白い。


人のこと偉そうに書いて自分はどうなんだって気持ちになるけど、こういうのは思考を整理するという意味でも大事だよね。

こういうポエムは自分のブログだからこそ書けるのがやっぱ良いね。