私たちの会社は、私たちの製品の開発を手助けするために5人のジュニア開発者を雇いました。残念ながら、新機能と今後のバグ修正には、最近卒業した開発者が通常持っているよりも深い知識が必要です(スレッド化/同時実行性、複雑なシステムでのパフォーマンスボトルネックのデバッグなど)。
彼らが(おそらく)解決できるタスクの委任(および計画)、彼らの質問への回答、それらのメンタリング/管理、彼らのコードのレビューは私の時間のすべてを使い果たし、委任プロセス全体がかかるよりも短い時間で問題を解決できると感じます(私の時間のみを数えます)。さらに、システムの深い知識やより高度なスキルを必要とするタスクを解決する時間がないため、近い将来に変わるとは思えません。
それで、今は何ですか?彼らと私の時間を効果的に使用するにはどうすればよいですか?
はい、あなたは彼らができるより速く物事を解決することができます、それがあなたがシニアであり、彼らがそうでない理由です。ただし、良い先輩は後輩も上級レベルに引き上げたいと考えています。これを行う唯一の方法は、彼らに物事のやり方を学ばせることです。
メンタリングは、コーディングではなく、現時点であなたの時間を最も効果的に使用することです。
次の6か月間を効果的にメンタリングし、後輩が中間の開発者になるのに十分な知識を持っている場合、このように見てください。5人の中間開発者と1人の上級者がいます。あなたがすべてのハードワークをより速いので自分で行う場合、6か月で5人のジュニアが親指をいじるようになります(まあ、彼らの中で最高の人は、難しい仕事を与えなければ、それまでに他の仕事に移っているでしょうから、ジュニア開発者の数が少ないか、より少ない場合があります)、過労で不機嫌なシニアが1人います。
バグには通常どのような複雑な相互作用が見られるかがわかっているので、実際に問題をトラブルシューティングして見つける方法と、それらを修正するために通常必要となるメソッドの種類を特定するために、それらの種類に特化したトレーニングを開発します。次に、問題が発生したときにそれらの問題を提供します。はい、彼らはそれらを修正するために時間がかかります、あなたはあなたの時間の見積もりでそれを考慮に入れるべきです。
ペアプログラミングのアイデアは素晴らしいです。本当に進んでいる問題ごとに異なるものとペアリングします。問題を解決するのに十分な知識がなくても、原因を探すという観点から何を試すべきかを子供に教えながら、トラブルシューティングのプロセスを教えることができます。もちろん、彼らが口述を取ることを期待するだけではありません。あなたが彼らに探して欲しいものとその理由を説明してください。彼らのアイデアを求め、それらに耳を傾けます。彼らのアイデアがそうでない場合、それが良い選択ではない理由を説明してください。指導的な質問をすることにより、ソクラテスの教え方を使用します。彼らはあなたが説明なしで彼らに指示したものよりもあなたの主要な質問を通して彼ら自身で思いついた解決策をよく覚えています。彼らがあなたがそれをタイプするのを見ただけではなく、実際に解決策をタイプした方が彼らは同様によく覚えます。学習の主な原則の1つは、聴くだけではなく、維持することでより多くのことを維持することです。
ジュニアがあなたとペアの一部として特定のクラスの問題を解決するのを手伝ったら、次にそのクラスの問題が発生したときに彼を他の誰かとペアにして、相談するだけで、肩を並べることはできません。彼らは別のことを試みます。
本当に難しい5人の新しい人がいます。あなたはそれらのすべてに公平であり、あなたがペアリングしたり、ガイダンスを与える人を回転させる必要があります。お気に入りを再生しないでください。でも、誰かが成功せず、進歩していなければ、「タフな愛」を与える人になる必要があります。そのうちの1人以上を脇に呼び出して、改善する必要があることと、なぜ成功していないと感じているのかを伝える必要があるかもしれません。 SOme peopelを使用すると、ペアリングできればすべての作業を実行できます。これは、簡単なためです。その人が仕事をすることができないなら、彼らは彼らに優しく、彼らがもっと自立することを学ぶことができないか、または学ばないことが明らかなときに彼らを運ばない方がチームにとってはるかに良いです。
思い通りの結果が得られることを忘れないでください。あなたが多くを期待しないならば、あなたは多くを得ません。それらが輝いていることを期待し、それらのほとんどはあなたの基準に達するでしょう。
ペアプログラミングここで大きな可能性のように聞こえます。
この提案の逸話/例については、次のとおりです。これは、私が取り組んでいるコードベースの最も毛深い部分を紹介された方法です。私がペアを組んでいた他の比較的新しい開発者と一緒に、次のようなことをしました。
私はコードベースのその部分全体のメンテナンスを継承してきました。私が本当にそれがどのように機能するかを理解しているのは私だけだからです(まだそこにいる元の開発者は完全に思い出すことすらできません)。
それらを教える。簡単に解決できるタスクを割り当てます。
簡単に言えば、問題は、その労働力は彼らが持っている仕事で非常に生産的になるほど熟練していないということです。そのため、1)タスクを容易にする2)労働力のスキルを向上させることを試みることができます。
同様の問題ほとんど常に新しい人がチームに参加し、経験のないコードベースで作業を開始するたびに(ある程度)発生します。ツールや方法論が不明な場合、これはさらに問題になります。ツールと方法論に慣れるように人を訓練することにより、問題をより早く緩和することができます。
ただし、そのような問題の解決には時間がかかります。他の人がすべてを知っていることや、すべてを一度に学ぶことを期待することはできません。おそらく、並行性、ソフトウェアの最適化、必要な一般的な方法論についての本をいくつか紹介することから始めるのがよいでしょう。
あなたは採用決定の一部ではなかったようです。現在のタスクを処理する能力を公平に評価します。推奨事項(納期に影響を与えない限り外部トレーニングなどのタスク)を含むレポートを書き留め、マネージャーに、その人を雇った人と話し始める可能性のあるマネージャーにレポートを送信します。 1人の新しい人がチームに夢中になっているかもしれませんが、リラックスした店がない限り、一度に5人の新しい人が良い音を出すことはありません。これが計画で説明されていない限り、プロジェクト時間にそれらを教えようとしないでください。
編集:この状況では ブルックの法則 に言及するのが適切な場合があります。
サンドボックス環境の作成に時間を費やして、害を及ぼすことなく、困難な問題のいくつかに取り組むことができるかもしれません。できる限り徹底的にソリューションをテストしてもらいます。同じ問題に1つ以上を置きます。
これらすべてのものは、彼らが有用になるのに十分な熟練の可能性を彼らに与えます、そしてそれらはあなたのより少ない時間を必要とします。もちろん、あなたがそれらを(ほとんど)沈めたり泳いだりしていて、かなり沈んでいる場合は、物事を再考する必要があります。
プログラミングの専門家では、ほとんど自分で学ぶことができない人々は、おそらく彼らを教えるのにかかる努力に本当に値するものではありません。しかし、私は彼らがおそらくあなたがヘルプを削減したときに彼らがどれだけうまくやっていくかであなたを驚かせることでしょう。