新人教育をしていて一番大事なのは「試行回数」だと思った
3ヵ月~半年くらいで普通の社員と遜色ない人もいる。数年やっても向いてないんじゃないかというくらいできない人もいる。少しずつ着実に成長している人もいる。
新人教育を1〜2年10人くらいやっているのだが、いったい何が違うんだろうとずっと思い続けてきて、ようやく自分なりにまとまってきたので書いておく。
前提
新人とはプログラミング経験年数2年以下くらいのWebエンジニアの初心者を想定している(自称初心者ではない)
今勤めている会社では大学生インターンや未経験のような新人を積極的にとってきた。自分はお節介を焼くのが趣味であり、勝手に教えてたら(知識をひけらかしてたら)思ったよりも成長してくれる人が何人かいたし、逆もまた然り。
最近はAWS業務やrailsを書きつつ新人の育成が仕事になっている。
僕自身は所々で教えてくれる人はいたものの、ちゃんと「教育」をされたことがないのでよくわらないし、コーチング技術なんてものはわからないし、脳筋なのでフィーリングで書いていく(大学は情報科いたけど中退しちゃったので専門的なことはわからん)
新人教育はなんでやるの?
ジュニアを採用しない連中はシニアに値しないという記事にまとまっている。
エンジニア人口が増えることは人手不足のIT業界にとって良い影響を与え、またOSSにも貢献できるだろう(利用することも貢献の一種)。
幸いなことに、今の会社はそれなりにちゃんとしたエンジニア組織があり育成環境もあるのでちゃんと育成すればワークする。 母数の少ないシニアエンジニアを採用をするのは難しいので、育成するという選択を取るというのもそれはそれで正しい判断だろう。
個人的には、自分の仕事を 押し付けられる できる人材が増えると自分の時間が空くので、別の技術に時間を投資できるようになると思っている。
一番大事なのは試行回数
どの分野でもそうなのだが、結局の所「試行回数を増やせば増やすほど成長をする」ので「試行回数を最大化する」ように取り組むことこそ最善だろう。
試行回数に関して明確に定義はできないが、「目の前の問題を解決した回数」や「言語やライブラリの仕様を理解すべく取り組んだ回数」などを想定している。 「Rubyの四則演算を学ぶ」のと「Rubyのcompilerの実装を読む」のようなレベル差があるものを同等に扱うべきではないが、いったん無視する。
急速に成長する人は上手に試行回数を増やす方法を知っており、それを忠実に実践できる。そうではない人この限りではない。
試行回数を増やすには以下のような取り組みが考えられる。
- 問題に取り組む時間を増やす
- 既知の問題から推測できるように既知の問題の理解を深める
- 常に最新の情報をキャッチアップできるしくみを作る
- shellやエディタをカスタマイズし効率的に検証できるようにする
- 必要な情報を取得するために効率的に検索をできるようにする
- ショートカットキーを駆使し余計な時間を使わないようにする
- 小さく検証できる環境を用意する
- 健康的な生活をして集中的に取り組めるようにする
- 友人や知人にプログラマーを増やし、教えてもらえる環境を作る
- PCの画面を広く使う
- ひたすらコードを書いて検証する
- 自分の得た知識が正しいかどうか他者に説明して検証する
いかに余計なものを排除して試行回数を稼げるかが最も重要だ。
新人にはざっくり4タイプくらいに分けられる
なんとなく自分の中で4タイプに分けて、それぞれに合った方法で教える。
別分野ですでに一定の技量があるタイプ
すでに別分野でスキルの身につけ方を知っていて、Webプログラミングにも応用できるような人。
そもそも別分野で知識を深める方法や試行回数を増やす大事さを知っているので勝手に勉強して勝手に伸びるので、こちらから教えることはそんなになくて非常に楽。
難しい文章を読むのにも抵抗がないので、すぐに普通のプログラマーを追いこす場合が多い。
高負荷に耐えられ、時間で殴れるタイプ
一番教えて楽しいタイプ。
時間で殴れるので、新しい知識やツールを試す回数が非常に多い。成長がめちゃくちゃ速い。
高負荷に耐えられるので仕事を大量にこなせるし、Twitterや社内の技術的な情報のキャッチアップも難なくこなせる。
高学歴や高専出身が多いイメージ。
普通のタイプ
普通にプログラミングを仕事にして、普通に勉強をしているタイプ。
プログラミングのためだけに生活しているわけではなく、プライベートも重視しているケースが多い。
Twitterにはプログラミングの休憩がてらコード書く狂人だらけだけど、real worldでは普通のタイプが一番多い。
教える時は情報量をしぼってパンクしないように気を付ける必要がある。
まったく向いていないタイプ
自分なりのやり方に異常に固執したり、こだわりが強い(の割りにデタラメなことを言う)人や、そもそもプログラミング好きではない人だ。
申し訳ないが、まったく向いていない人は一定数いる。
しょうがない、向いてないのはしょうがないので本人の希望によるけど向いていないものはしょうがない。
もしかしたら何か別の才能があるだろうし、別の指導者の元の方が大成だろうし頑張ってほしい。
新人にはどうなってほしいのか
会社的には「さっさと業務を一人前でこなせる人材になってほしい」というのが本音だろう。
個人的には上記の通り、「試行回数を最大化するための取り組みを自分で考えて実行してほしい」と思っている。 ツールにこだわるのも1つの方法だし、業務でタスクをこなすのも大事。
「先輩に聞くのは申し訳ないかな。..?」と考える必要はまったくなく、それが必要なら躊躇するべきではない。
多くのエンジニアは3年くらいで転職するので、きちんと職務経歴書に書くことがある状態にしてほしい。 いつでも転職できるくらい選択肢をもている状態にしてあげたい。
普段自分が教える時に試していること
まずは何にせよ信頼関係を築くことから始まる。これほど大事なものはない。 どんなに技術的に正しいこと、成長に必要なことを熱弁しても信頼関係がなければ何も始まらない。 なので雑談をしたり、食事に行ったりして兎に角仲良くなることが大事だ。
自分が1人に教えられるのは精々週に2時間くらいで、それ以外は基本的に本人が頑張る時間だ。 問題を取り組む時障害になる部分をなるべく排除するべく、まずは以下のようなことをやっている。
- fish shellなどの便利ツールを入れる
- dotfilesを作らせる
- 便利なショートカットキーを教える
- 良い記事にたどり着けるような検索wordの作り方を教える
- slackのfeedのチャンネルを教えるたり、お勧めのブログを教える
慣れてきたら次のことを意識して指摘している。
- コマンドや函数の挙動について説明させる
- 「いまやりたいこと」と「どうやるのか」を説明させる
- 技術用語を技術的に説明させる
意外と「技術的に説明」できないことが多いのだ。 ちゃんとした技術用語を使えるのがちゃんとしたエンジニアだと思っているので、こういうのをきちんと答えられるようになってほしいと願っている。 わからないことに関してはわからないと言うのも大事だ。
たとえば「Rails勉強しました!」って人に「技術的に cookie
と session
の違いはなんですか?」と聞いた時に前者で答える人が多い。
session
はサーバで管理してcookie
はブラウザで…- serverからのresponse
- headerに
set-cookie
でsession_id
が送られてきて、それ以降はrequest - headerの
cookie
にsession_id
を付与してやりとりをする
ペアプログラミングをする時は、良いコードを書くというよりは悪くないコードを書けるように意識して教えている。 変数名や函数分割など悪くないコードを書くテクニックは世の中にいっぱいあるので実践させている。
新人の質問のし方について
Twitterで新人エンジニアの質問のし方について話題になっていた。鉄板ネタの話題だ。
本当に辛い。辛い。エンジニアになれたはいいがわからないことが多すぎる。「技術の調べ方について」自分のできうる限りの人に質問したはいいが回答が全く得られない。それよりも質問の仕方が悪いと非難される。どうすればいいのかわからない。
— ゆうき@PythonとJavascriptとPhotoshopとミニマリスト @yuuki_wifi September 26, 2020
そもそも持っている情報量の少ない新人が、かちっとしたフォーマットで質問するのはそもそも無理だと思っている。
経験上だいたいは情報不足だし、そもそもそのアプローチちがくね? と感じることが多い。
新人から見ても「適当なこといっているとか思われないかな」とか「自分の調査不足を指摘されないかな」とか不安になるだろう。
「timesのような個人チャンネルを作ってやったことをlog感覚でながしてもらう」というのが一番良いと思っている。 後で自分でも振りかえることもできるし、logがすでにあるので説明も省けるし、質問へのハードルが低くてすむ。
できない自分を見られるのが恥ずかしいと思っている人もいるが、「試行回数を最大化する」ことが大事なので気にする必要はないと思っている。 実際、ひたすらtimesに自分の作業を書きまくってものすごく成長した人もいる。
お勧めの勉強法や考え方や記事など
書籍/記事
ぱっと思い付くのはこのへん。モチベーションが上がる。
YouTube
ベテランちというYouTuberの勉強のコツについてすごくおもしろかった。超お勧め。
人のこと偉そうに書いて自分はどうなんだって気持ちになるけど、こういうのは思考を整理するという意味でも大事だよね。
こういうポエムは自分のブログだからこそ書けるのがやっぱ良いね。