6

G'day、

これは、スター開発者に関する私の質問と、誰かに悪いコードを書いていることを伝えることに関するこの質問に関連していますが、私はより具体的な状況を見ています。

つまり、私が書いたプログラムへの変更が、「自分のもので遊んでいる」誰かにイライラしているように聞こえることなく、不十分に行われ、一貫性のない実装になっていることを「スター」に伝えるにはどうすればよいですか。

追加された新機能は、このシェルスクリプトの元のバージョンから意図的に除外されており、負荷がかかっているシステムで発生するエラーがわかるまで、可能な限りシンプルにしています。

基本的に、私は、すべてのエラー状況をもう一度推測することは不可能であり、実際、多くの作業を行った後、完全に間違った道を進む可能性があると主張しました。

追加する必要があるものを確認した後、誰かが飛び込んで追加を行いましたが、残念ながら次のようになりました。

  1. ロジックに一貫性がありません
  2. 変数名は、それらに含まれるデータを記述しなくなりました
  3. コメントはほとんどありません
  4. 変数の使用方法を理解するのは簡単ではなく、読みやすさ、ひいては保守性が大幅に低下します。

私は常にダミアン・コンウェイの観点からコーディングに取り組んでいます。「常に、あなたのシステムがあなたの住んでいる場所を知っているサイコパスによって維持されるかのようにコーディングしてください。」つまり、私は自分の輝きの宣伝としてではなく、フォローしやすいようにしています。「このコードは何をするのですか?」演習は楽しく、難読化コンテストIMHOに任せるのが最善です。

どんな提案も大歓迎です。

乾杯、

4

10 に答える 10

10

正直に言うと。必ずしも間違っている細部をすべて指摘する必要はありませんが、これから行う一般的な指摘の例をいくつか挙げておく価値があります。推論に異議を唱える場合に備えて、最初の簡単なフィードバックでは呼び出さない他の例についてメモをとることができます。

フィードバックが人ではなくコードに関するものであることを確認してください。例えば:

良い例:の引数の検証は、の引数の検証foo()と矛盾しているようですbar()。では、呼び出し元がを渡すとfoo()aがスローされますが、はがスローされます。NullPointerExceptionnullbar()IllegalArgumentException

悪い例:あなたの議論の検証はいたるところにあります。あなたは投げ込みますNullPointerExceptionが。一貫性を保つようにしてください。foo()IllegalArgumentExceptionbar()

「お願いします」と言っても、2番目の形式はコードではなく開発者について話します。

もちろん、多くの場合、それほど注意する必要はありませんが、彼らがそれについて非常に敏感になると思うなら、努力する価値があります。(フィードバックが書かれている場合は、あなたが書いたものを注意深く読んでください:私は誤って最初のバージョンに「あなた」を含めました:)

ほとんどの開発者(スーパースターであろうとなかろうと)は、「いいえ、問題Xがあるため、その機能を実装しませんでした」を受け入れることについてはかなり合理的であることがわかりました。でもラッキーだった可能性があります。

于 2009-06-06T17:52:41.540 に答える
6

別の見方をすれば、彼らの立場で考えてみることをお勧めします。「架空の」体験について説明します。

覚えておくべきいくつかのこと:

  • 男は何か良いことをしようとしていました。
  • プログラマーは心を読むのがひどいです。彼らは自分が読んだものしか知らない傾向があります。
  • 何をする必要があるのか​​(または何をする必要がないのか)、彼は完全なガイダンスを与えられていない可能性があります
  • 彼はおそらく彼が知っている最善を尽くしているでしょう。

それを念頭に置いて、彼らと話してください。それらを教えます。怒鳴ったり小便をしたりする必要はありません。彼らは意図的にあなたの人生を困難にしようとしているのではないことを覚えておいてください。

于 2009-06-06T17:54:53.503 に答える
3

特定の種類の開発者にどう対処するかについて、多くの質問をされているようです。それはあなたにとって共通の糸のようです。あなたはあなたの周りの人々を変える方法について尋ね続けます。これがあなたにとって絶え間ない問​​題であるなら、おそらくあなたが問題です。

今、あなたは難しいと思う人にどう対処するかを学ぶために質問をしていることを知っています、そしてそれは良いことです、しかしあなたは人を変える方法について質問し続けます(そして答えを得ます)。

あなたは変える必要があるように私には思えます。これらの人々と協力して、コードを希望どおりに変更します。彼らと一緒に。彼らにそれをさせようとしないでください。ただそれをして、あなたが何をしたのか、そしてその理由を彼らに伝え、さらなる改善のための提案を求め、そしてお互いから学びましょう。お互いの経験と強みをプレーオフします。ちょうど私の2セント。

于 2009-06-06T18:05:21.987 に答える
1

プロジェクトのコーディング標準を明確に定義している場合は、それらの標準を満たすためにコードを変更する必要があることを指摘してください。あなたが持っているリストはかなり合理的なフィードバックのようです(#3はかなり議論されていますが、他の3つのポイントを修正すると、コードの混乱が少なくなるので、本当に混乱している部分を文書化するだけです)。

于 2009-06-06T17:51:31.387 に答える
1

この開発者のリポジトリに数か月前の例が他にある場合は、その例を見せて、何をしているのか尋ねてください。(数ヶ月でこれを彼に見せてください)。彼が変数に実際に何が含まれているかを調べるために圧縮し、コードのすべての行を分解して、それが何をしているのかを理解する必要がある場合。すぐそこにコードレビュー/ペアプログラミングセッションに侵入します。一緒にリファクタリングして名前を変更し、うまくいけば、これらのことが重要である理由を正確に理解し始めるようにします。

于 2009-06-06T17:52:34.990 に答える
1

率直に言って、これは政治的な問題であり、コーディングの問題ではないと思います。具体的には...

  1. この人は「スター」だと誰が言ったのですか?これがあなたが他の質問で説明したのと同じ人である場合、あなたはすでにそこにあなたの答えを持っています:この人は「スター」ではありません。

それで、あなたは政治の他の影響に入ります...

  1. この人をスターだと誰が主張しているのですか?なぜあなたはその人に「これはがらくたコードだ」とだけ言うことができないのですか?誰が彼らを保護している/彼らを擁護しているのですか?あなたはそれをすることができますか、それとも「解雇される」山に爆破/降格/配置されますか?

あなたは、実際には単独では答えられない質問をしている。コードががらくたである場合は、それを捨てて自分で正しく実行してください。それができない理由がある場合は、この場所のメリットがネガティブを上回っているかどうかを自問する必要があります。

乾杯、

-R

于 2009-06-06T18:09:39.390 に答える
1

プログラムを作成し、それをリリースして他の開発者が作業できるようにするのは困難です。あなたは自分のコードを他人の開発スタイルやコーディング規約などに翻弄されています。

それらの開発者に、コードが挿入された後、コーディングが不十分であることを伝えることは、あなたができる最も難しいことの1つです。彼らがあなたのコードで働き始める前にあなたの懸念に対処することが最善です。これは2つの方法で行うことができます。詳細なコーディング標準を維持する、提出されたコードがこれに準拠することを要求する、開発ロードマップを維持する、新機能がいつ導入されるかを概説するだけでなく、そのような事故を回避するための依存関係を作成する。

状況に応じて、批判しないことが重要です。そうしないと、敵意やコードの悪化を引き起こす可能性があります。おそらく、その開発者と協力して標準ドキュメントを作成できます。基準がどうあるべきかについて自分の考えを表現することができ、苦痛を感じることなく彼らの意見を得ることができます。

コードの良い点を常に指摘し、それらを構成する弱点について議論するときは、それがすべての人(開発者を含む)に利益をもたらす理由を指摘し、決して批判しないでください。

幸運を。

于 2009-06-06T18:10:45.473 に答える
1

私は次のことをします:

  • 彼の努力が評価されていることを彼が知っていることを確認してください(できれば、これは真実でなければなりません)
  • 大したことではなく、簡単に修正できるように、いくつかの変更を加えてもよいかどうかを尋ねます。
  • なぜ問題なのかなど、問題を説明し、彼を正しい道に導くための具体的な変更を提案します。

うまくいけば、この演習が彼が文化プロジェクトにうまく溶け込むのに役立つことを願っています。

于 2009-06-06T18:32:01.353 に答える
1

私たちはこれらの潜在的な「問題」を積極的に解決しようとします。

  • 人々が一緒に働くすべての「より大きな」プロジェクトには、プロジェクト「コードリーダー」(開発者の1人)が割り当てられます。これにより、すべてのプロジェクトがローテーションされ(好み、特定のタスクの経験に基づいて...)、全員が「貢献」および「コードプロジェクトリード」の役割を担うようになります。
  • 私たちは、これらのプロジェクトの「リーダー」が他のプロジェクトのコードの貢献によって何でも決定できることを明示的に合意しました(一時的な独裁政権のようなものです:変更、提案、人々にやり直しを依頼するなど)。プロジェクトコード「リード」は、集約されたコードが機能するための完全な責任を負います。

これらの形式化された「リード」(および役割の変化)により、人々は自分たちが貢献している部分に対する(建設的な)批判の問題が少なくなると思います。

于 2009-06-06T18:52:41.270 に答える
1

はい、フィードバックを可能な限り感謝し、専門的かつ技術的に保ち、考えられる「最悪の場合」のシナリオで懸念事項をバックアップして、これらの機能やこの特定の実装の欠点が明らかになるようにします。

また、これが非常に具体的でほとんどのユーザーにとって役に立たない機能/コードに関するものである場合は、コード/使用率についての懸念を表明してください-コードベースの複雑さの増加などについての懸念を示してください。

理想的には、懸念事項を自由形式の質問として提示します。「ただし、この方法が長期的には機能するのではないかと思いますが、...」という意味です。貢献者間の活発な対話を実際に奨励するためです。

仲間の寄稿者とユーザーにこれらの懸念について意見を述べてもらい、実際、他の人/寄稿者にこの追加について何を考えているか(賛否両論、要件、コード品質の観点から)尋ね、あなたが喜んでいることを表明してください他の貢献者/ユーザーが対応する洞察を提供できる場合は、現在の位置を再検討します。

あなたは基本的にそのように非公式のレビューを奨励しており、あなたのコミュニティに提案された追加も調べてもらい、長所と短所について話し合うことができるようにしています。

したがって、決定がどうであれ、それは単にあなたが下しただけではなく、コミュニティの支援を受けたものになります。

あなたは元の設計のアーキテクトであり、何かが(まだ)包含/展開に適していないというアーキテクチャ上の理由を提供するのにも優れた立場にあります。

安定性、複雑さ、またはコード品質が実際の懸念事項である場合は、他の貢献も受け入れられるようにするために特定のレビュープロセスを経なければならなかったことを説明してください。

また、特定のコードが現在のデザインと実際に一致していないことや、現在のデザインの将来の拡張に合わせて拡張しすぎない可能性があることについても言及できます。同様に、特定のものが明示的に省略された理由を強調することもできます。

機能やコアアイデアが実際に気に入った場合は、適切に実装および統合された場合にこれらの機能がもたらす優れた追加を強調してください。ただし、いくつかの理由により、既存の実装は実際には適切ではないことも強調してください。

可能であれば、改善のための具体的な提案を行い、物事をより良くする方法の例を提供し、何を避けて希望を表明するかを示します。これは、プロジェクトのコミュニティの助けを借りて追加できるように作り直すことができます。

理想的には、この貢献を実際に受け入れるための要件を提示し、要件の背景について言及してください。実際、これらの要件のいくつかを自分で嫌っていると言うかもしれません。

できれば、あなた自身が同様のコード(またはさらに悪いコード)を提供し、あなた自身のコードが原因で大きな問題に直面することになった事例を提示して話し合い、そのような問題を防ぐためにこれらのポリシーが実施されるようにします。あなた自身の悪いコードについて実際に話すことによって、あなたは実際に非常に主観的になることができます。

一般的に努力自体に感謝し、問題のコードをより良い形と形にするために必要なヘルプとポインターを提供する用意があることを強調します。また、同様の問題を回避するために、将来的に同様の貢献をコミュニティ内で適切に調整することをお勧めします。

コードではなく、常に機能と機能の観点から考えてください(そして、貢献者に同じことをするように注意してください)-徹底的なコードレビュープロセスのように想像してください。最終的にコミット/受け入れられる最終的なコードには、ほとんど共通点がない可能性があります元の実装。

これもまた良い可能性です。あなた自身がコードを開発し、そのコードの大部分が大幅に作り直されたため、その多くがはるかに優れた実装に置き換えられた例を示します。

同様に、アクティブなメンテナがいないコードには常に問題があるため、メンテナンスされなくなる可能性のあるコードについて心配していることを簡単に示唆できます。対応する開発者がそのコードのメンテナンスを喜んで手伝ってくれるかどうかを尋ねることもできます。 、おそらく別のブランチにあります。

同じ意味で、常に新しいコードに適切なコメント、ドキュメント、その他の更新を添付する必要があります。つまり、新しい機能を追加したり、既存の機能を変更したりするコードには、関連するすべてのドキュメントの更新を常に伴う必要があります。

最終的に、近い将来、そのコードを受け入れることができず、受け入れることができないことがすぐにわかった場合は、少なくとも開発者をプロジェクトに分岐またはフォークするように招待できます。おそらく、リポジトリ内で、あなたの助けとガイダンスがあれば、プロジェクトでの作業に引き続き感謝の意を表します。

于 2009-06-06T19:03:16.557 に答える