このタイトルは少し広いですが、適切に質問する前に、少し背景を説明する必要があるかもしれません。
私は同様の質問が既に 尋ねられたここ であったことを知っています。しかし、私の場合、私はメンタリングをしているべきかどうか、またはその人がに適しているかどうかについて尋ねていませんソフトウェア開発者。それは私の判断する場所ではありません。私は率直に尋ねられていませんが、私と他の仲間の上級開発者がここから始まる新しい開発者を指導することは明らかです。私はこれで何の問題もありません、そして多くの場合、それは私に物事に新鮮な視点を与えて、私はその過程で最終的に学びます。また、私のキャリアの初めに、誰かが私に何かを教えるのに少し時間がかかったとき、それがいかに有益であったかを覚えています。
私が「新しい開発者」と言うとき、彼らは大学を卒業したばかりから1年か2年の経験を持っているところまでどこにでもいる可能性があります。
最近、私とは異なり、開発やプログラミングに対する態度が私とは異なり、調整するのが難しいと思われる人々をここから始めました。彼らはタスクを実行するのに十分な情報を抽出しますが、実際にはそれから学びません。私は彼らと何度も何度も同じ問題を繰り返しています。この部分は個性的なことかもしれませんが、最善を尽くして、いわば私の翼の下にいる間に彼らを巣から押し出すのが私の仕事だと感じています。
どのようにすれば、彼らが問題を解決するほど多くを与えずに学習できるように、十分な情報を与えることができますか?
多分:
抵抗を最小限に抑え、本質的に、簡単な方法をとるのではなく、強制的に学習するように設計された質問に対する適切な応答は何ですか?
これらの質問はおそらくより一般的な教育用の質問であり、特にソフトウェア開発に関して行うことはそれほど多くありません。
注:彼らが取り組んでいるタスクについては発言しません。管理はタスクを実行します。それは、非常に単純なバグ修正から、アプリケーション全体を自分で開始することまで何でも可能です。これは決して理想的ではなく、明らかに課題が山積していますが、別の質問には残しておくべきトピックだと思います。だから私ができる最善のことは、手元にある問題を彼らに手伝い、それをより簡単な問題に分解し、彼らのコミットログをチェックして彼らが犯した間違いを指摘する手助けをすることです。
私の主な目的は次のとおりです。
かつてこの辺りにこの種の情報を含む質問がありました、そして私に最もくっついたのはキーボードに触れないでくださいでした。
要するに、ジュニアにhowを伝えて、彼らがやろうとしていることを成し遂げますが、彼らのためにそれをしないでください。
しかし、それに加えて、他のいくつかのヒントがあります:
彼らの過ちから学ぶのを手伝ってください。間違いもあるので、間違いは学習の一部であり、学習の機会として使用する必要があることを必ず説明してください。
(以下のRuneFSから)何かをする方法を教える代わりに、彼らが自分でそれを理解するのを助けるようにしてください。これにより、問題を論理的に処理する能力が向上し、学習能力が向上します
私は約4年の経験があり、ジュニア開発者としての経験から、メンターについて私が望んでいたことを説明できます。私が始めたときに私がそうであった開発者のタイプを実際に説明しているようです:)
基本的に、あなたは彼らに学ぶことを奨励したいと思います。大学を卒業したら、本を読んだり、もう勉強したりする必要はないと考える人もいます。この種の態度は、ショートカットを探して、ただ「やり遂げる」ことにつながる可能性があります。
「Pragmatic Programmer」を入手して、読んでもらいます。この本は、プログラミングが単なる仕事ではなく技術/キャリアであることを理解するのに役立ちます。彼らが四半期ごとに読むために本をお勧めします。彼らが「知識ポートフォリオ」を構築するのを支援します(プラグマティックプログラマーで言及)。私は強くお勧めします Safari Books Online これには、CS /プログラミングの本がたくさんあります。
知識ポートフォリオを使用することで、問題があるかどうかをどこにあるかを知ることができます。どこを見ればよいかを教えます。私自身、最近StackOverflowの有用性を発見しました(ご存知のように、ここではGoogleだけのほうがいいです)。
彼らと多くの時間を過ごすことはできないようですが、ペアプログラミングは非常に役立ちます。それができない場合は、少なくともCodeCollaboratorまたは他の同様のツールを使用してコードレビューを行ってください。彼らはあなたが思っているほどの時間はかかりません。
単体テストも非常に重要です。特に継続的インテグレーションと組み合わせると、悪い開発慣行をすぐに明らかにすることができます。
単に彼に語るのではなく、主要な質問を返して答えを導きます(サーバー名やデータベースに情報が格納されているなどの基本的なことを彼に伝えることができます)。彼に答えを見つける方法を見せてください。
また、コードが間違っている場合はコードを書き直さないでください。何が悪いのかを伝え、修正を期待してください。あなたはあなたが期待するものを手に入れます。あなたは彼をあなたに依存させることによって誰も助けません。
コードレビューも重要です。また、プログラムをペアリングする場合は、キーボードを頻繁に使用できるようにします。あなたが何をタイプするかを彼に言っているとしても、彼はあなたがプログラムしている間あなたの隣に座っているだけで学ぶよりタイピングをすることから学ぶでしょう。
アプリケーションがどのように構造化されているかを示す典型的なソフトウェアの例をいくつか取り上げ、各行が必要な理由とそれが何をするのかを彼が理解していることを確認しながら、行ごとに説明します。彼がコーディング標準を理解し、コードがどのように構成されているのか、なぜ(会社として)自分のやり方でやっているのかを確実に理解するのはあなたの仕事です。
彼が提案する別の方法を持っている場合は、注意深く聞いてください。そもそも彼は正しいかもしれない。第二に、聞くことは、彼が示唆することが実用的でない場合、彼の理解の弱さがどこにあるかを教えてくれます。さらに、あなたが彼らに耳を傾けるなら、人々はあなたをより尊重する傾向があります。彼が間違っているときは、最初の質問に戻って、アイデアが間違っている理由を自分で確認してもらいます。彼が正直に近づいている場合でも、彼のアイデアを時々実行します。あなたのアイデアが無価値であると常に言われるほど、落胆するものはありません。
彼の経歴について質問します。彼はあなたが仕事をする機会がなかったいくつかのことを知っているかもしれません。もしそうなら、それらを使用する機会が出てきたら、彼の知識について質問してください。
アプリケーションがまったく古い場合、おそらく誰かが知らない方法よりも卑劣な「落とし穴」があります。したがって、これらの落とし穴が1つ以上ある領域で彼が作業を開始するときは、コーディングの前に彼が速度を上げているときにそれらについて話し、次に、コーディング時に落とし穴に落ちたかどうかを確認します。
最後に、あなたは敬意を払うことによって部分的に敬意を得ます。メンター全員に丁寧に接してください。彼らを軽蔑したり、愚かにしたりしないでください。あなたが彼らを敬意をもって扱うならば、彼らはあなたにもっとよく耳を傾けるでしょう。
私はジュニア開発者で、メンターはこれらのことを非常にうまく処理していると思います。一般的に、彼は私に何かをする方法をいくつか教えてくれますが、それをする方法は教えていません。次に、私はそこに座って両方の方法を試し、どちらが問題に対する最もクリーンな解決策であるかを決定しました。
また、もし彼が私に役立つかもしれない何かをしているなら、彼は彼がしていたこととその理由をウォークスルーするためだけに私に電話をかけてきました。
その結果、私と一緒に少しの時間を費やし、本質的に私は自分自身で正しい答えと実装方法を学ぶ必要があったことを意味しました。もちろん、私が行き詰まってしまったら、彼は助けに行くでしょうが、これはほんの数回でした。たった5か月後に彼と一緒に働いた後、私はおそらく大学の全コースよりも物事について多くの知識を得ました。
覚えておかなければならない重要なことは、私は個人であり、私がどのように、そして彼がいかに優れているかによって、これは私にとってうまくいったということです。それはあなたの両方を助ける適切な構造を見つけることです。
与えられたタスクに応じて、いくつかの異なるアプローチをとるように誘惑されます。
タスクを完了するために次に何を試すかを尋ねます。これは、「何をすべきかわからない」から「まあ、これを試してみますが…」カテゴリまでのアイデアを与えることができます。 。
彼らが何をしたいのかをざっと見て、ヒントを提供して、彼らが問題を理解するようにします。これは、「このコード行を削除する」という答えを与えるのではなく、そこにあるものを見て、それがすべて必要かどうかを提案します。
最初のカップルが機能しない場合は、問題を解決するために何をすべきかについて私の指示に従うようにしてもらいます。これは進行の次のステップであり、どこから始めればよいかわからず、ヒントが機能しない場合、これが次のポイントです。
最後に、他に何も機能しない場合、私は彼らのために仕事をしますが、これは、誰かがオフロード作業の見方をする可能性があるため、システムを親密に知っているような問題が作成される方法であるため、これをできるだけ回避しようとしますこのシステムについて私によく知っているようです。
私の仕事の中で私が本当に便利だと思った1つのことは、内部Q&Aのためにフォーラム(つまり、PHPbb)を設定し、質問および/または回答に5分以上かかる場合は、フォーラム経由で質問し、答えた。メリット:
私はここで傾向を打ち消し、あなたに提案するつもりですnotジュニア開発者が彼ら自身で答えを見つける方法を学ぶことを奨励するようにしてください。 「持ってるけどあげない」というゲームのようです。
代わりに、答えを見つける際にペアを組んでください。とにかくそれをグーグルするつもりなので、彼らと一緒に座ってそれをしてください。彼らはこれが答えを見つける方法だと気づくでしょう。
あなたが彼らと密接に協力していれば、彼らはIDE;データベースを正規化する方法; DRYコードを外す方法を使用する方法をピックアップします。 ..知っていることなら何でも知っておく価値があります。
キーは次のとおりです。1つ-自分が利用できるようにして、彼らがあなたの働き方を確認できるようにする。そして、2つ--大声で言うなぜあなたはあなたがしていることをしているのですか「このコードは繰り返されるので、リファクタリングします」ではなく、「これらの3行で抽出メソッドを使用します」。
ジュニアプログラマーを訓練する必要があったのは一度だけです。それは私が構築したシステムを維持するのを助けることでした。目標は、最終的にシステム全体を彼に渡すことでした。
彼が私を影にした短い期間の後、私は彼を火に投げ込みました。私は彼にケースを割り当て、それらが完了することを期待します。もし彼が問題を抱えていたら、私は彼に問題が何であったか、そして彼がどこを見たのか説明してもらいます。次に、最も一般的な用語で次にどこを見るかをアドバイスします。 (どのアプリ、おそらくどのモジュールを見るかなど)。私は彼を困惑させたままにすることは決してしませんでしたが、私は仕事もしませんでした。指示のみを提供します。それでも問題が解決しない場合は、肩をすくめて「コードの追跡を開始します」と言います。そして、私がそう言うたびに、彼はうんざりしていた-彼が退屈な運動に参加していることを知っていた。お尻から降りて手伝うだけなら10分で問題が見つかるだろうと私たち二人は知っていたので、彼は気が狂いました。
数年後、彼はより大きなものに移り、今では自分の後輩を訓練しています。そして、彼のお気に入りの話は、私が常に「コードを追跡する」ように彼に言う方法であり、それらのコード追跡演習が彼を今日のプログラマーにするためにいかに重要であったかです。
Googleのクイック検索で解決できることがわかっている質問が出されたときはいつでも、ドキュメントまたは関連記事を見つけ、それを質問者に中継します。
どこを調べればよいかを知ることは重要なスキルであり、新しい開発者が考えるよりも難しい場合もあります。彼らは彼らが探しているものを知らないかもしれません、そしてこれはあなたが彼らを助ける必要がある場所です。
手に入ると、記事やドキュメントは、他の開発者に素早く答えるのではなく、ソリューションについて読むことを強制します。
これにより、次のことが実現します。
特に彼らが学びたいように見えない場合は特に、あなたは彼らにいくつかの厳しい愛を与える必要があります。答えを出さないでください。ただし、正しい方向に向けてください。
私はあなたが持っている実際の割り当ての一部を与え始め、彼のコードを使用できるようにすべてを作ることをお勧めします。つまり、自分の代わりとして彼を訓練します。
このようにして、ジュニアと一緒に仕事をする時間を割り当てることに専念すると、彼は「実生活」を見ることができます。実際の課題に取り組み、活発なフィードバックを聞くことで、彼はかなり早くPを習得することができます。
他の答えは非常に良いですが、私はこの一文についてコメントしたいと思いました。
最近、そして過去に、私とは異なり、私が調整するのが難しい開発/プログラミングに対する態度を持っているように見える人々をここから始めました。彼らはタスクを実行するのに十分な情報を抽出しているように見えますが、実際にそれから学ぶわけではありません。
ほとんどの人は何かをしたい方法を知りたいです。この態度は、新しいことを学び、仕事のやり方を学ぶことに圧倒されている最初は問題ありません。
知りたい人はまれなぜ何かが行われる。これらは、たとえ時々管理するのが難しい場合でも、賢いマネージャーが望む人々です。
一部の人々は、上手に支払われるようにコーディングします。他の人はコーディングのために喜んでお金を受け取ります。デザインとコーディングに情熱を持っている人々と仕事をするほうがずっといいです。残念なことに、それもかなりまれでした。少なくともスタックオーバーフローが見つかるまでは。
ジュニア開発者のためにこのすべてのメンタリングを行う見込みに興奮している人のために、注意する必要があります:経営陣が何が起こっているかを理解していることを確認してください。
一般に、他の人に教えることは大変な作業です。集中力と集中力、計画と努力が必要ですが、何よりも時間がかかります。どのようなアプローチをとっても、真剣に指導や指導をしているとしたら、それはあなたの時間に食い込むことになるでしょう。
上級開発者がトレーニングを引き受けることを期待して、経営陣が経験の浅い開発者を採用する場合は、それが明確であることを確認してください。時間枠を確認し、開発スケジュールがトレーニングに費やした時間と労力を反映していることを確認してください。経営陣が、合意された時間にメンター活動の成功を評価するための計画を持っていることを確認してください。 (もちろん、彼らが指導とメンタリングを必要とする開発者を雇っているが、経営陣がそれを計画しているではない場合、それは明らかに深刻な問題です。)
誰もが優れた教師やメンターであるとは限りません。私は無愛想や苦い音を出すつもりはありません。私は好きです教え、たくさん。しかし、(自分の才能にもかかわらず)誰もが上手になると期待するのはばかげていますし、誰もがプロセスを楽しむことを期待することはできません(覚えておくのは簡単ではありません)。さらに、あなたがメンタリングを楽しむではないを行うシニアデベロッパーである場合、または教師またはメンターにとって不適切な選択であると本当に感じている場合は、経営陣があなたが行うことを含む計画を理解していることを確認してくださいこれらの義務は重大な欠陥のある計画です。一方、あなたが教えたりメンタリングを上手にしたいなら、それもコミュニケーションの対象です。
指導とメンタリングが上級開発者の集団全体で不均等に分担される負担である場合、それらの割り当てが製品開発の成果が認識されるのと同じ方法で会社にとって価値があるものとして認識されることを確認してください。
私はこれまでさまざまな科目を教えてきましたが、最も印象に残っているのは、ほとんどの人が問題解決能力を持たないことです。つまり、あなたが彼らに正確な解決策を示した場合、彼らがそれを認識したり、必要だと言われたりした場合、彼らは後でそれを再利用することができます。
しかし、そのような状況はごくわずかです。あなたの仕事が、ツールAでウィジェットAをウィジェットBに貼り付けることを含む「メンタルファクトリ」でない限り、いくつかのアイテムが必要になります。
たとえば、 私が投稿したこの回答を見てください を例にとります。これは、多くの人が持っていない問題解決方法をカバーしています。カレッジはCompSciプログラムの誰にもこれを教えていませんでした。あなたはすでにそれを知っているか、自分で理解しました。
ジュニア開発者が問題を解決する方法を理解したら、問題を解決するための一連のツールが必要になります。
ジュニア開発者に不足しているものを特定し、それらの改善を支援できます。一部の人々は、自分の問題を解決する方法を学ぶことに本当に興味がなく、「明らかに一歩一歩」の解決策を彼らに渡したいだけだということに注意してください。これらは良い開発者ではありません。
うまくいけば、あなたはそれらのどれも持っていないでしょう。もしそうしたとしても、どれだけの時間を費やしても、彼ら自身がすべてを助けるわけではないことを理解してください。それは努力を必要とし、彼らのためにそれをするように頼むだけの方が簡単です。それは福祉問題に似ており、経済理論で説明されています。
啓発された自己関心は、人々がどんな彼らの見方も、与えられた状況で最も有利なオプションと見なすだろうと言っています。これがtheのビューであることに注意してください。私は、最も重要なことは、自己完結的で学習的であると考えています。だから、私は自分で物事を行います。しかし、期限までに作業コードを提供するだけでよいと考える人もいます。したがって、彼らはそうするための最も費用のかからない方法を探します。彼らに「景品」を提供することにより、彼らは目的を達成するために最小限の労力を費やす必要があります。あなたがその松葉杖を取り除くまで、彼らは成長しません。
あなたが説明するあなたの組織は私のものとは非常に異なります。私は後輩の仕事をコントロールしており、それを判断する私の役割と考えています。したがって、多くの点が異なります。
とにかくあなたに忠告したいのは、特に最初の2週間は頻繁に彼らの机を頻繁に訪ねることです。最初の週に1日に3回のように、徐々に減少します。
私がこの方法で送ろうとしているメッセージは、私は彼らの生産性を気にかけているということです。私は彼らが行き詰まらないようにします。私は彼らがルールに従っていることを確認し、車輪を再発明しないでください。私は彼らにできるだけ頻繁にコミットするように教えます。段階的に開発する方法を学び、設計について段階的に考えます。
私の最悪の悪夢は、機能を完成させるためにあと1日で十分だと毎日言っている開発者です。数週間の遅延の後、作成者が最初からハッキングした過度に複雑なデザインを取得します。要求されていない余分なバグのある機能は、遅延を補正するためにミックスに投入されます。これは、設計の自由な副作用であったためです。
多くの開発者がこのアプローチに傾倒していると思います。自分でcompexタスクを実行している場合、自分で実行できることを証明しようとするのは自然な反応です。しかし、それは間違った反応です。品質はチームワークであり、彼らが学ぶのが早ければ早いほど良いです。
私はあなたにそれを見てもらいます。
基本的に、私は次の場合によく学びます。
さて、あなたは自分自身で世話をするプロジェクトがあり、いつも時間があるとは限らないと言っていました。 StackOverflow に恵まれたのはそのためです。彼らは彼が彼のコードをデバッグするのを手伝ってくれると確信しています。話題になっていない質問については、こちらから質問できます。
そうは言っても、あなたはそれでも定期的に彼と協力する必要があります。一般的な「タイムライン"は:
上記のほかに、誰かを独立させる最も簡単な方法は、彼らに学ぶのが難しいトピックを与え、彼らにインターネット以外の何ものも与えないことです。彼は自分で学ぶことを余儀なくされ、彼は自分のことを知っているでしょう。
彼があなたに彼に知ってほしいことを知ったら、彼を解放します。彼が離れて彼が学びたいことを学ぶのを許します彼にその言語で働き続けてほしい)。
これが役に立てば幸いです!ちなみに、彼にこれを読んでもらいましょう: 10年後にプログラミングを教える 。
私の個人的なヒーローである Randy Pausch について言及している人はここで見たことがありません。
私は、プログラミングを実際に行ったり、教えたり、指導したりする人(または有意義な人生を送りたい人にとっても)にとって有益であると思います。あなたおよび/またはあなたの同僚は、私のように、これらの講義を見る価値があると思うかもしれません。
学習の低レベルと高レベルを区別します。それが知識、理解、またはアプリケーションに関連している場合、私は彼らに答えをすぐに与えるだけで問題はありません。次に彼らがそれをどのように調べることができるかについて簡単に説明します。これは学校ではなく、不正行為ではありません。そして、彼らはそのように永遠にあなたに依存することはありません。最初の1週間か2週間は他のことをするつもりはないので、そうしなくても気になりません。
最初の2週間後、これらの種類の質問が頻繁に中断される場合は、ポモドーロタイマーを使用し、ポモドーロが終了するまで質問に答えないでください。何を検索すればよいかわかっているので、Googleはあなたにとって簡単です。彼らは頻繁にそうしないので、もしあなたが彼らにグーグルに何かを言う必要があるなら、彼らに最良の結果を得るのに使用するどんな検索語を教えてください。
問題が分析、合成、または評価に関連している場合は、そのトピックにより多くの時間を費やします。これは、あなたの決定の背後にあなたの推論を提供し、彼らが同じ結論に達するのを助ける場所です。これは、デザインとスタイルの問題で最も頻繁に発生します。特定のデザインを使用するよう指示するだけではなく、なぜshowが最初の選択肢より優れているのかを説明します。彼らに間違いを犯させ、彼ら自身の間違いを修正させてください。