web-dev-qa-db-ja.com

プログラミングに適さないジュニアプログラマーを指導する方法

私は少し不安定な立場にいます。

私は最近、ジュニア開発者を大学から直接プロジェクトに連れてきたクライアントのためにリモートで働いています。彼は物理的に彼らのオフィスで働いています。彼はコンピューターサイエンスを研究していたと思います(現時点では100%思い出せません)。

彼は2か月前に会社にいて、プロジェクトマネージャーによってアプリのテストと習得に着手し、この1か月ほどの間、小さなバグと機能が割り当てられました。

その時点で、彼はコードを1度だけコミットしたことがあり、それは私が基本的に彼に説明して書いたコードでした。 (私は彼がそれを機能させるために何日も費やした後、彼が機能するソリューションを見ることは有益だと思いました)。

私は彼といくつかの電話といくつかのペアプログラミングセッションを行ったことがありますが、彼はジュニア開発者にとってもそれほど難しいはずのない単純なJavaScriptコードにイライラしている日々を過ごしています。おそらくプログラミングは彼にとって良い道ではないかもしれないと私は考え始めていますが、彼が自分で解決策を見つけて改善するのを助けるのに役立つように、できる限りの努力をしたいと思います。

私がトレーニングとメンタリングを提供しなければならない立場になったのはこれが初めてです。離れていると、おそらくこれもはるかに困難になります。

彼が上達するのを助け、彼を動かすために私は何ができますか?

36
Matt McCormick

彼が学校に通った場所にもよりますが、彼は1か国語で非常に些細なことをするのに数ヶ月以上の経験がないかもしれません。それは修正できますが、努力する価値があることを確認してください。

彼が救われることができるかどうかを言う必要があるようです。

  1. しばらくコードを片付けます
  2. プロジェクトに存在する中小規模の問題を説明する
  3. 彼にそれをどのように解決するかをあなたに説明してもらいましょう-コードもパターンも練習もせず、基本レベルで何が起こる必要があるかを説明するネイティブタンまたはダイアグラムのみ。

彼が半分妥当な解決策または悪い解決策を思い付くことができるが、適切な問題解決プロセスを考えることによって、彼はコードを学ぶことができます。彼が解決策を正しく考案するプロセスを通して考えることができない場合、おそらく彼はよりよく考える方法を彼に教えることができません。

また、経営陣が状況を理解していることを確認してください。そうしないと、新しい担当者が追いつくまでに2人の仕事をやがて始めることになります。

16
Bill

彼らに輝く機会を与える

私は実際にはかなり前から非常によく似た立場にありましたが、今は開発者と少し進歩していると思います。結局それは恥ずかしがり屋の場合に限られると思いますが、私は彼に「コミットしてサーバーにプッシュする必要があるので、あなたが動けなくなった場合にあなたをよりよく助けることができます。プロジェクト」、そして彼はコミットし始めました。

士気を向上させるために、彼らが対処できる(つまり、自分のレベルより下の)責任を彼らに与えます。

彼らに失敗する機会を与える

彼らが決定を下して失敗するようにすることも重要です、それは学習と呼ばれます。アーキテクチャや設計の決定をほとんど行わず、彼らがどのように機能するかを確認する力を彼らに与えます。彼らが失敗したら、彼らにどのようにうまくできるかを伝え、そして彼らと一緒に座ります。

あなたが5分で彼らが5時間で行う仕事を5分で行うことがわかっているので、焦らないでください。彼らにやらせてください。

小さい割り当て

より小さな割り当てとより明確な目的を持つことで、彼らは失われている気分を減らし、目前の問題をよりよく攻撃します。もしそうなら赤ちゃんのステップ。

悲しいことに、すべての人が十分なイニシアチブを持っているわけではありませんが、イニシアチブを教えることができます。

そこにいないことでそこにいる

「失敗させる」という議論は一部継続しますが、物理的にではなく常に到達範囲(IMなど)に留まります。 IMで彼らとつながっている場合は、正しい答えで答えることができる場合もありますが、他の場合は、彼らをぶら下げたままにして、忙しいふりをして(残酷、私は*邪悪なにやにや笑う*)、「brb 、google XHRとActiveX」、「google the compiler error」、または「google」...これを行うと、部分的には彼らを良い意味で愚かに感じさせ、自分で物事を研究することへの恐怖を徐々に緩めます。

ツールを提供する

彼らはFirebugについて知っていますか、Chrome Dev Tools ?.一般的なjsの落とし穴はどうですか?。彼らは良いjavascriptフレームワークを使用していますか?(例 MooTools )。彼の仕事をできるだけ楽しく生産的なものにする武器を彼らに与えるため。

それらをあなたの過去の自己と考えてください

あなたはいつもプロではなかったですよね?どのように学びましたか?それを覚えて、同じ道にそれらを置くようにしてください。

彼らが実際に仕事のためにカットされていない場合...

何か問題があるかどうかを尋ね、パフォーマンスが十分でないことを知らせます。個人的に私は人と直接話をするのが好きです、そして私は彼らに前もって言っているので、最も恨みがありません。

あなたが彼らに言わなければ、彼らは問題があることを知らないかもしれません。

41
dukeofgaming

私はジュニアプログラマーとこのような経験をしました。私はあなたに逸話を与えます、そして彼女のために働いたことが他の誰かのために必ずしも働くとは限らないという明白な警告とともに。

彼女の問題は、宿題のセットで合理的に求められるおもちゃのシステムではない、大学で何かを扱う必要がなかったことです。そのため、何十年も進化してきた実際のコードベースで実際の問題に直面したとき、彼女は本当にどこから始めればよいのかまったくわかりませんでした。

私たちのマネージャーは彼女に現実的な困難な問題を与えました、それは他のものへのあまり多くの依存関係を持っていなかったので、私は数日で終えるでしょう。彼女がそれに引っかかっているのを見ました。しばらくして、私は定期的に彼女のところへ行き、彼女に「提案が欲しいですか?」と尋ね始めました。 1〜2か月後、彼女はようやく故障し、私の助けを喜んで受け入れました。

私の「助け」は、彼女に問題を細かい部分に分解させることでした。毎日私は入ってきて、彼女と話し、彼女にその日の目標は何であったか尋ねます。常に彼女はいくつかの定義が不十分で大きすぎる作品を切り分けました。私にはそれが大きすぎるように聞こえたと彼女に伝えます。深刻な問題が発生しなければ、昼食で現実的にできることをやらせてもらいます。昼食後、私はそれがどうなっているかをチェックします。

一週間で彼女は順調に進んでいて、リズムを理解していました。さらに1週間後、彼女は与えられた問題に対して完全に許容できる解決策を提供しました。彼女は次の問題をうまく解決し、完全にうまくいきました。

私たちのマネージャーは実際には彼女の最初の悪いパフォーマンスを期待していたことがわかりました。私は彼が最終的に介入したのではないかと思いますが、彼は私がやっていることを見て、マネージャーよりも同僚から来る方が効果的だと考えました。

20
btilly

彼の経歴と彼がよく知っていることの詳細をご覧ください。彼がコンピューターサイエンスの学位を取得している場合は、おそらく何らかのコーディングを行ったと思われます(ただし、Javascriptではないかもしれません)。彼がよく知っている言語が何であれ、その言語に関して問題/解決策を説明できるかどうかを確認してください。彼が類似点を見ることができれば、物事がクリックし始めるかもしれません。

人々はさまざまな方法で学び、彼がどのように最もよく学ぶかを理解しようとします。これを直接の質問として、または彼の経歴について調査する一環として、彼が学校で楽しんで成功したプロジェクトの種類を調べ、それらがどのように構成されているか説明できるかどうかを確認できます。一部の人々はほとんど方向性のない問題を解決するように求められ、実験/試行錯誤を行うことによって最もよく学びますが、他の人々は段階的に示されることを望みます...

彼の経歴について尋ねるもう1つの利点は、彼が本当にプログラミングの仕事に適していないかどうかをよりよく判断できることです。明らかに彼は時間を与えられて改善するのを助けるべきですが、もし彼が結局は改善しないなら、彼が得意でない仕事に挑戦し続けようとすると、それはあなたたちの両方にとって悪いことです。

彼を助けて正しいことをしようとしているようです。

(また、彼と一緒に1週間ほど現場で作業するように手配することは可能ですか?)

6
David

それは彼が無能である、それは彼を保護しないでください-あなたはクライアントに好意を示していません。

辛くて申し訳ありませんが、それはビジネスです。学位を持つすべての人が優れたプログラマーになるわけではありません

とはいえ、あなたが彼を改善したい場合は、彼がコードカタに参加し、ローカルユーザーグループに参加し、コーディングコンテストに挑戦し、一般的にコーディングが適切であるか、彼が間違った職業を選んだことに気づくまでコーディングとコーディングを続けることを提案します

いかなる状況でも、この人があなたの責任になることを許可しないでください-それが実際にあなたの仕事でない限り

6
Steven A. Lowe

難しいもの。

残念ながら、一部の人々はプログラミングコースを自分の歯の皮で、多くの場合他の人の助け(およびコード)を受けています。そのため、どこから始めるべきかについての最初の手掛かりがなく、誰かが大学を卒業することは避けられません。 (ここで私は教育システムを少し非難するかもしれません、なぜなら私はcookie-cutterコードに過度に依存する傾向と、低レベルのプログラミングのいずれかを抽象化する傾向があると思うので-私は何かプログラミングのプロセス、つまりロジックの基礎を見つける。)

ここに行く:

  • 彼はこれで完全に新しく、数千行を超えるコードを処理する必要がなかったことを理解してください(if that)。実際の結果を伴う大規模なアプリケーションに直面した場合、彼は少し暫定的なものになり、森はもちろんのこと、森とそのすべてがどのように相互に関連しているかについても理解しそうにありません。
  • 可能であれば奨励します。コードの一部が使用可能だった場合、またはコードの方向性が適切であることが確認できた場合は、最終結果がそれほど熱くなくても推奨します。その時点で、単語ごとに説明することなく、彼を解決策に導きます。 (私はすべてにグーグルすることを人々に伝えます。しかし、私を無視する人々は素晴らしいです。)
  • 失敗を許可します。可能であれば、物事が完全かつ完全に壊れたときに何が起こるかを彼に見てもらいます。それが不可能な場合は、これが直接本番環境に移行しないのですか?テスト環境rule。)成功よりも失敗から多くを学びます。 (これは、なぜ機能するのか理解せずに機能するコードを記述できるためです。コードが壊れた場合、何をすべきか、なぜ機能するのか、なぜ機能しないのかを検討する必要があります。動作しません。)
  • 背景に少し入ります。このプログラマーは、まったく異なる学習方法を使用している場合があり、同じ方法で同じ論理的飛躍を行うことができない場合があります。 (私は良い例です。私には見た目が素晴らしく、大きくて巨大な論理的飛躍を実現できます。そして、私がすでにポイントDにいるのに、なぜ他の誰もがポイントA-> Bから取得する方法を疑問に思うのでしょうか。 。そして、私は自分自身を思い出させます、私は自然に論理的です。
  • 時間をかけてください。何もしない時間はありません。いいえ、しかし時間の経過とともに、個人は物を拾い始めるべきです。そうでない場合は、しかし、それは時間になるかもしれません...
  • 敗北を認めます。優雅に。そして、そうではありません。つまり、マネージャーと率直に話し合う必要があるかもしれませんが、マネージャーを助けるために基本的に報酬が支払われていることにも気づいてください。クライアントとの良好な関係を継続したい場合は、歯を食いしばるか、クライアントを落とすことが唯一の最終的な選択肢となる場合があります。
5
Kerri Shotts

ここには明らかに変数がたくさんあります(そして他のいくつかの良い答えがあります)が、ここにあなた自身に尋ねるいくつかの質問といくつかの考えがあります:

  • 彼の立場の経営陣の期待は何ですか?彼はメンターになるために雇われたのですか?もしそうなら、どのくらいのメンタリングが期待されますか?これは、たとえ小さなタスクの場合でも、彼が速度を上げて習熟するのを助けるために費やすどのくらいの努力を決定するのを助けるために重要です。
  • 彼は自分が取り組んでいることについて「自由な時間」を自己学習していますか?たとえば、彼がJavaScriptに苦労している場合、彼は自分自身で時間をかけてスピードアップするために時間を費やしていますか?
  • 彼は行き詰まったときに仲間に近づきますか、それとも彼は自分の時間に入札していますか?私は、助けを求めるよりも画面に座ってじっと見つめる開発者数人と協力してきました。
  • 別の答えで述べたように、彼の背景は何ですか?彼は大学の前にコーディングをしましたか?彼はどんな能力でもオープンソースプロジェクトに貢献していますか?これは、役割に対する関心と情熱を評価するのに役立ちます。
  • 彼と一緒に仕事をするとき、彼が彼の思考プロセスを「リード」し、議論することを許可しますかあなたは彼が話し合いを通じて正しい解決策を見つける手助けをしますか?
  • 彼と一緒に仕事をしているとき、彼は改善の兆しを見せていますか?彼が始めたときの彼の位置と、それ以来彼がどこまで来たかを思い出してください。コンピテンシーの増加率は許容範囲ですか?
  • 彼はアドバイスをするときにあなたや他の人の言うことを聞きますか?一部の人々はアドバイスを取り、それを無視するか、または理解しないで、代わりに自分のことを続けます。これには建設的な批判が含まれます。
  • 彼は実際に他の人のためにより多くの仕事を引き起こしますか?これは、乗車のために誰かをつないでおくのが少し危険になる場所です。誰かがプロジェクトに悪影響を及ぼしている場合は、メンタリングを続けることが最善かどうかを判断するために再評価が必要になる場合があります。どんなに小さな額から始めても、積極的な貢献が必要です。
  • 彼はプログラミングに対して前向きな態度を持っていますか?態度が悪いと、自分のパフォーマンスだけでなく、他の人のパフォーマンスにも悪影響を与える可能性があります。
  • 誰もが同じではないことを認識してください。これは言うまでもありませんが、あります。誰もが少しずつ異なった方法で学習し、実行しますが、許容できるかどうかについても制限が必要です。これは、会社ごと、プロジェクトごとに異なります。

だから、本当に、これは期待、態度、適性、そして貢献に帰着するべきです。もし彼が彼が知る必要があることを学びそして拾うことができると彼が示すならば、彼はまた彼が立派な態度を持っているなら彼を維持する価値があるかもしれません。

重要なことは、彼は進歩と成長を示し、停滞したり、簡単に挫折したりしないことです。これは、忍耐といくらかの自己動機を必要とする役割です。

3
Michael Dean

タフコール。彼が欠けている根本的な基礎を特定するようにしてください。

問題が発生している領域を特定するのに役立つように、混乱する直前に、彼が最後に上手く行っていたのはいつか、最後に彼が何をしているのかを本当に理解したのはいつかを尋ねます。それは彼が会社に入る前に彼が勉強したものかもしれません。

その領域のどこかに彼が理解していると彼が信じているものが彼の混乱の本当の原因であることがわかります。変数とは何か、プログラミングの意味すら理解していないほど基本的なことかもしれません。それを数回繰り返すと、彼は「明るく」なり始めるはずです。

別のアプローチは、彼が立ち往生しているさまざまなものを見ることです。次に、「三角形分割」して、一般的な分母が何であるかを見つけます。彼がすることは何の意味もないことに注意してください。次に、これらがどのように組み合わされるかを理解してみてください。あなたがパターンを見つけることができれば、それは彼が本当に理解していないことがそれが何であるかについてかなり良い考えを与えるはずです。

別の考えられる状況は、彼がアプリケーションが何をすることになっているのか、そしてその理由を理解していないことです。アプリケーションのデモとユーザーの視点からのいくつかのコンテキストは、実際に役立ちます。

彼が理解していないことがわかったら、彼を効果的に助けることができます。それまでの間、あなたはただいじり回して、幸運になることを望んでいます。

ただし、彼をデバッグすることは、顧客が支払うものではない可能性があることに注意してください。したがって、顧客との理解がない限り、自分の目標に遅れを取らないでください。

幸運を。

0
Sylverdrag