web-dev-qa-db-ja.com

ジュニア開発者からの「ほぼ良い」コードをどのように処理するのですか?

チームの管理について質問を受けました。現在、私は、コーディングファクトリからリモートで作業しているジュニア開発者を扱っています。その男は批判を受け入れ、学ぶ意欲がありますが、私はいくつかのものをどれだけプッシュすればよいのか疑問に思いました。

現在、何かがまっすぐで明白な違反がある場合、SRP、神のオブジェクト、メソッドまたは変数の意味のない名前の違反など。私は彼が修正しなければならないことを指摘し、なぜそれが間違っているのかを説明しようとします。

私の質問は、いつ停止しますか?現時点では、間違った言語での変数名などのコーディングスタイルにいくつかのマイナーな違反がある場合(以前のチームはスペイン語と英語が混在しており、それを修正しようとしています)、またはいくつかのマイナーな構造上の問題がある場合は、手放して修正します余暇があるか、問題のあるクラスを変更する必要があります。これはチームの士気に良いと感じているので、初心者にコードを常に押し戻すのではなく、細かいことのように見えるかもしれません。何かをする方法を学ぶことから。

男を教えることと絶え間ない批判で彼を燃やさないことの間の線のバランスをどのようにしたらいいですかジュニアにとって、彼の目には効果があることをやり直すように言うとイライラするかもしれません。

100
Zalomon

マージする前にコードを修正する必要があると思われる場合は、コメントしてください。できれば「なぜ」で開発者が学習できるようにします。

コードは書かれたよりもはるかに頻繁に読み取られることに注意してください。したがって、「マイナー」に見えるものは、実際にはreally重要(変数名など)になる可能性があります。

ただし、面倒に思われるコメントをする場合は、次の点を考慮してください。

  • CIプロセスはこれらをキャッチする必要がありますか?
  • 参照する明確な「開発者ガイド」はありますか(またはすべてが頭に文書化されていますか)?
  • これらのコメントは実際にコードの品質に貢献していますか?

多くの人々は、プロセスや完成の祭壇で生産性を犠牲にしています。これを行わないように注意してください。

可能であれば、同僚を直接訪問してみてください。またはビデオ通話を使用します。関係を構築すると、批評(コードレビューも)が管理しやすくなります。

コードの一部に問題のバック/フォースが多すぎることがわかった場合は、より小さなコードのレビューをリクエストしてください。インクリメンタルな変更は、本質的に小さいため、より重大な設計上の問題のいくつかを回避する可能性が高くなります。

しかし、絶対にnotをマージしてから、戻って修正してください。これはパッシブアグレッシブであり、開発者がこれを実行していることを発見した場合、あなたは彼らの士気を殺します。

85
enderland

ライターではなくコードに対する批判を続けてください。

制作された作品には、本質的に感情的な愛着があります。ライターとコードの関連付けをできる限り外して、これを緩和することを検討してください。コードの品質は、あなたとあなたとの摩擦点ではなく、あなたが共に直面する相互の目標として一貫して確立されるべきです。

これを達成する1つの方法は、あなたの言葉を賢く選ぶことです。 STEMの個人は自分自身を非常に論理的であると考えるのが好きですが、感情は人間の本性の一部です。使われる言い回しは、傷つけられた感情と免れた感情の違いになる可能性があります。 「この関数名は、英語の方が慣例と一致している」と言う方が、「この関数名を間違って書いていて、英語である必要があります」よりも望ましいでしょう。後者はまだ飼いならされており、一人で問題ないように見えますが、前者と比較すると、その欠点が明らかになります-直接話すかメールで何を言うかを準備するときに、コンテキスト、単語、およびフォーカスに焦点が当てられているかどうかを調べます人ではなく問題

ボディランゲージ

言葉は重要ですが、ほとんどのコミュニケーションは非言語的です。ボディランゲージに注意を払います。多くのシニアジュニアインタラクションは対面で行われますが、サイドバイサイドアプローチは、望ましい結果をはるかに助長します。

正直な肯定的なフィードバックを与える

多くの研究は、悪い行動を罰するよりも良い行動に報いるほうが、情報がより早く学習され、より適切に保持されることを示しています。単純な「良い仕事」またはより具体的な「最近、あなたのスタイルが私たちの基準をティー、素晴らしい仕事に一致させていることに気づきました!」彼らがこの改善の認識を補足することでさえ、彼らが修正した問題について他の誰かに助言することで、あなたのジュニア開発者と彼の仕事にすべての違いをもたらすことができます。

19
Legato

あなたの説明に基づいて、私はそれを残します:「これは良いことです。私が違った方法で実行したであろういくつかのことがありますが、それらはそれほど重要ではありません。」

あなたが理解しているように、批判には代償があり、細部に細かいことに多くの時間を費やすと、それは士気の問題になります。理想的には、すべてのコーディング標準が自動的にチェックされ、それらに従わない限りビルドできません。これは時間を大幅に節約できるので、仕事に取り掛かることができます。 「重要なこと」のためにあなたの批評を留保すると、あなたのアドバイスははるかに大きな影響を与え、あなたは価値のあるメンターと見なされます。良くないことと正確にそうでないことを区別することは本当に重要です。

教えられる瞬間 の概念を信じています。開発者に十分なメンタルキャパシティがある場合、開発者はあなたが異なる方法で行うことの詳細について尋ねることがあります。 (S)彼はそうしないかもしれません、そしてそれは大丈夫です。人々は燃え尽きてしまい、キャリアの早い段階で、後で簡単に見えることを成し遂げるには多くの精神的エネルギーが必要になることがあります。

5
JimmyJames

私は彼の仕事を完全ではなく受け入れられるときに受け入れることを検討します。次に、次のタスクは、ディスカッションの後で、必要なすべての小さな重要な変更を加えてすぐにリファクタリングすることです。

ですから、仕事が最初に受け入れられたとき、あなたのメッセージはそれが悪くなかったということです、そしていくつかの場所はそれを十分に受け入れました-しかしあなたが彼の貿易を適切に学びたいジュニア開発者になりたい場所ではありません。

それで、あなたは「それは十分ではないので私はあなたの仕事を拒否します」とは言いません。あなたは、(a)「それで十分なので、私はあなたの仕事を受け入れます」と言い、次に(b)「もっと良くしたい」と言います。

5
gnasher729

その男は批判を受け入れ、学ぶ意欲がありますが、私はいくつかのものをどれだけプッシュすればよいのか疑問に思いました。

あなたができるすべてを押してください。男が学んでいて、彼のコードをレビューするのがあなたの仕事である場合、彼が良い仕事をする場合、あなたは両方とも多くを得ることができます。

つまり、将来レビューするコードが少なくなり、チームに採用ターゲットを与えることができます。

また、あなたが抵抗するならば、あなたは助けていませんが、ひいきにしています。

あなたがここに質問を投稿し、やりすぎているかどうかを尋ねたという事実だけで、この特定のアドバイスは必要ないことをすでに私に知らせていますが、他の人にとっては、ここに来ます:強く押すことは意味しないことを覚えておいてくださいジャークであること。

メンターになるのは簡単なことではありません。また、彼がいくつかの間違いをして自分で修正できるように、ある程度のスペースを与える必要があります。彼が実際のダメージを与えない場所でそれを行うことを確認してください。

5
Machado

かなり公開された質問ですが、ここにいくつかのアイデアがあります。

  1. ピアレビュー(ジュニア開発者による)

    誰かが「正しい」方法を学ぶための最良の方法は、他の人がそれをするのを見ることです。すべての開発者がコードレビューを実行していますか?後輩の開発者にもそれらを実行させることは悪い考えではないかもしれません(ただし、上級の開発者にも少なくとも1つのレビューを要求する必要があります)。そうすることで、優れたコーダーの動作を見ることができます。さらに、自分以外のエンジニアに向けられたレビューコメントがあることを観察します。つまり、それは個人的なものではありません。

  2. 早期フィードバック/タスクレビュー

    開発者が自分のタスクの内訳に参加できるようにします。目的の設計をタスクノートに記録し、変更セットなしでタスクのみを含む「コードレビュー」を送信してもらいます。そうすれば、彼が1行のコードを書く前に彼の計画を確認できます。タスクがレビューされると、コーディングを開始できます(その後、別のコードレビューを送信します)。これは、開発者がたくさんのことを書いて、あなたにそれを書き直すように言わなければならないという士気を失わせる状況を避けます。

4
John Wu

コードが客観的に記述された明確な標準に違反している場合は、すべての問題が修正されるまで、押し戻し続けるべきだと思います。確かに、最初の数回のコミットは開発者にとって少し煩わしいかもしれませんが、ガイドラインを後で評価する人よりも早く評価するかもしれません。

また、標準の違反をあちこちで許可すると、それらは悪い先例を設定します 壊れたウィンドウ理論 を参照してください。また、コードベースにすでに一貫して適用されている場合は、標準に従うことを覚えるのがはるかに簡単です。そのため、実際には、問題のジュニア開発者を含む全員が勝利します。

コーディング標準が書かれている限り、士気は大きな問題ではないと思います。それがより主観的になった場合にのみ、「まあ、[〜#〜] i [〜#〜]は別の方法でそれを行ったであろう」領域、それからあなた開発者のアプローチも同様に有効である可能性があるため、心配する必要があります。

2
JacquesB

開発者がGithub Pull RequestsまたはPhabricator Diffusionなどのツールに提案されたコミットを投稿し、変更を共有マスターブランチにランディングする前にピアサインオフを取得するコードレビューワークフローの採用を検討してください。

この方法では、過去にさかのぼって批評したり、既に行われたことをやり直すように誰かに要求したりするのではなく、ピアレビューを通過するまで、作業はまだ行われていないです。ピアとの往復は、コンパイラとの往復と同じくらいソフトウェアエンジニアリングプロセスの一部です。

懸念事項を特定の行へのコメントとして投稿し、それらについてのディスカッションをスレッド化することができます。彼はあなたのコードに同じことをすることができます。議論は特定の提案されたコードの変更に焦点を合わせたままであり、一般的に誰かのパフォーマンスや能力ではありません。

私の会社の優秀な上級エンジニアでさえ、コードレビューがタイプミスを見つけたり、より明確にするように強制したりすると感謝します。新規採用者がより多くの反復を必要とすることは完全に正常です。時間の経過とともに、コメントを引き付けることがわかっている種類の問題を再帰的に修正し始めますbefore差分を投稿します。最初の試行で受け入れられる差分のパーセンテージを高くすることで、改善していることがわかります。

2
closeparen

私は初心者にコードを常に押し戻すのではなく、細部のように見えるかもしれませんが、それは非常にイライラするかもしれませんが、あまりにも「ソフト」すぎると、男が何かをする方法を学ぶのを妨げる可能性があることも心配しています。

これらは両方とも本当の可能性と正当な懸念です。 開発者にそれについてどう思うかを尋ねます。

1
Kevin Krumwiede

プルリクエストまたはコードレビューのワークフローがあり、そうであると思われる場合、「重要ではない」または「推奨される」ことに注意することをお勧めします。

あなたが説明しているのと同じような状態のPRを見つけた場合、軽微な文体上の問題があるか、重要でないリファクタリングが必要な場合は、コメントを残してください。 「将来的には、descriptiveMethodNameのようなものを優先して、このようなメソッド名を避けるようにしてください」と言うと、強制的に変更したり、開発をブロックしたりせずに、意見を文書化します。

今、彼らはあなたの好みを知っています、そして彼らが改善しようとしているなら、うまくいけば将来そのような状況に気付くでしょう。それはまた、彼らがあなたに同意し、それを十分に批判的であると見なした場合、彼らがドアを開いたままにして、実際にその時点でそれを変更します。

1
zak

「あまりにも多くの批判」に対処するための別のアイデアは、時々自分でタスクを実行し、ジュニア開発者にコードレビューを行わせることです。これには少なくとも2つの利点があります。

  • 彼らはあなたが物事が行われることを期待する方法を見ることができます。
  • 良い解決策や変数名が複数ある場合、私は別の(ほぼ?)同じように良いアプローチの提案を受け入れます。誰かのコメントのためにコードを修正するときは、尊重されていることを人々に示しようとしています。そして、批評は常に、作者が誰であるかに関係なく、コードのみに関係しています。
0
BartoszKP

私は、コーディングファクトリーからリモートで作業しているジュニア開発者を扱っています。

つまり、残念ながら、理想的な状況ではありません。1人の初心者プログラマーを担当する1人の上級プログラマーが地理的に離れています。多少の緊張があることは当然のことですが、格差は緩和できます。

「コードファクトリー」とはどういう意味ですか?私にとってその用語は、あなたが言及した管理上の問題のいくつかを悪化させているかもしれない厄介な態度を示しています。

…SRP、神のオブジェクト、メソッドまたは変数の意味のない名前の違反。私は彼が修正しなければならないことを指摘し、なぜそれが間違っているのかを説明しようとします。

問題は、あなたの後輩が適切な設計プロセスを経ずにコードを吐き出していることだと思います。これは、マネージャーおよび上級開発者としてのガイダンスを提供し、適切なソフトウェア開発の習慣を教えることの失敗です。最初に一緒に作業してアウトラインをスケッチする場合は、最初に不良コードが書き込まれるのを防ぐことができます。それは、効率と士気の両方の観点から、生成されたコードを批判して書き直すよりも望ましいでしょう。

おそらくワークフローを再調整する必要があります。現在、彼があなたに製品を届けることを期待しているようです。必要なのはより緊密なコラボレーションであり、開発のすべてのステップでガイダンスを提供できます。コーディングを開始する前に、デザインとインターフェースについて話してください。コーディングが行われている間、より頻繁にチェックポイントを実行し、問題を早期に発見します。可能であれば、オーディオチャネルとの画面共有を介してペアプログラミングを試してください。

これらすべてはあなたの側でより多くの努力を必要としますが、あなたが現在持っている問題のある関係を考えると、それはおそらく価値があります。

0
200_success