(私は(プログラミング言語ではなく)HTML/CSSコードについて話していますが、プログラマーと同じ問題にも直面していると思います。)
私はチームのシニアフロントエンドデザイナーであり、後輩のアウトプットを厳しい期限でやり直す必要があることがよくあります。
私は2つの問題に直面しています:
彼らのコーディングスタイルは、適切な規則や標準のない混合バッグです。私はコードをクリーンアップするか、単にコードを処理する(それらがどのように行われるかをコピーすることさえ)の間に引き裂かれています。
私は悪い習慣を学ぶかもしれないと思うので、彼らのコーディングスタイルに従うのはイライラします。しかし、それが締め切りを守るための最速の方法です。
より多くの経験を持つ人にとって、どちらがより効果的ですか?後日のためにクリーンアップを保存する必要がありますか?または、変更を加えながら途中でクリーンアップしますか?
(私は傲慢に聞こえたくありませんが、それは現実です。より良いコードを書くのにさらに数年かかるでしょう。私が知っていたのは、私が始めたときに乱雑なコードを書きました。)
私はあなたが問題を間違った方法で見ていると信じています-あなたは後輩にもっと良いコードを書く方法を教える大きな機会を逃しています。
あなたが習慣的に彼らのコードを書き直すなら、あなたはジュニアに彼らの仕事を評価しないという印象を与えるかもしれません、それは彼らの士気を下げ、そして彼らが次にコードをより良くするのを助けません。
私の考えでは、より良いアプローチは、チームの開発プロセスにコードレビュータスクを追加することです。それはコミットされたコードのすべての部分についてである必要はありません、そしてそれはあなただけによって行われる必要はありません(私はそれはすべきではないと主張します)-チームのメンバーが彼がすべき十分に大きなタスクを終えるときはいつでも彼のチームメイトの1人(または複数)とペアを組み、コードを彼らに説明し、彼の設計、コーディングスタイル、起こり得るバグやセキュリティ問題などについて建設的な意見や批判を受け取ります。
コードレビューチームメイトがあなたである場合、彼らはあなたが単に彼らのコードを書き直すときよりもはるかにあなたの専門知識から学ぶでしょう(彼らは理由コードを変更する必要があることを聞く機会を得ます)、そして、より少ない攻撃を取るかもしれません。
彼らにコードレビューを実施する機会を与えることは、彼らの能力をさらに高めます-他の人々がどのようにコードを書いているか、そしてその理由を見てください-そして彼らの自尊心を高めます。
yourコードを確認する機会を与えると、彼らは多くのことを学びます。あなたも何かを学ぶかもしれません-だから、ショーのためだけにそれをしないでください!
私は以前にこれを言ったことがあり、もう一度言います。「動作するコードはかなりのコードより価値がある」.
コードを変更すると、その動作を変更する可能性が高くなります。これがテスト済みのコードである場合は、すべてのテスト作業を無効にしただけなので、テストを繰り返す必要があります。
後輩にきれいで理解しやすいコードを書くように奨励しますが、彼らが書くすべてのものを書き直すつもりなら、あなたは雇用主のお金を何倍も無駄にしています。彼らはあなたの後輩にお金を払わなければならず、それから彼らがあなたの後輩にすでに支払ったことをするためにあなたにお金を払わなければなりません、そして彼らが実際に雇った仕事をするためにもう一度あなたにお金を支払います。
簡単に言えば、いいえ。時がきついときは、頭を下げて審美的な弾丸をとらなければならないこともあります。 ;)
より実用的な答えは、タイムボックス化することです。コードの1つの特定の側面を実行してクリーンアップするために、1時間の予算を立ててください。次に、チェックインして実際の作業を行います。ただし、制約を課すことについては、自分に正直に言いましょう。
ただし、少しクリーンアップを行うと、作業が速くなる場合があります。いくつかの迅速な検索および置換タイプの変更でさえ、すべてをはるかにアクセスしやすくします。
スタイル戦争に注意してください。特に締め切りの厳しい状況で、他のプログラマーが再実行するスタイル設定を取り消す場合は、それらに対処する方法を実際に検討する時間があるまで待つのが良いでしょう。共同で文体の問題。 (これは、いくつかのギブアンドテイクを意味します。)
しかし、答えには判断の価値があります。 「適度に」重要だと思います。クリーンなコードは実際に作業をより速くすることができ、コードの品質は結局のところ、成果物の一部です。クリーンアップに少し時間を費やすことなくコード(自分のものでも)に触れることができないと思います。ただし、スタイルとフォーマット、およびスタイルの乱れに煩わされることなく、コードを本番環境に導入するよりもmore重要にならないようにしてください。
コードを修正し、期限がある場合、私は通常2つのルールを使用します。
コードはひどいですが、妥当な時間で問題を見つけて修正することは可能です
問題を修正して残りをそのままにします。
コードは非常に面倒なので、そこで問題を見つけるのは本当に難しいです。何かを修正すると、すぐに何かが壊れます。そのコードを修正するよりも、ゼロから書く方がおそらく速いでしょう。
次に、コードをローカライズしてバグを修正するのに十分クリーンになるまでrewrite/refactor以外の選択肢はありませんを使用します。
borderlineの場合:
コードは乱雑で本当に悪いです。妥当な時間内にバグを修正することはまだ可能ですが、コード構造により、保守が非常に難しくなります。新しい機能があると、新しいバグが発生したり、パフォーマンスが大幅に低下する可能性があります。
その場合、コードは修正されますが、新しい機能を実装する場合にのみ、アイドル時間中に、期限に直面してバグ修正時間にしないでください!
プロセスのどの時点でこの問題を見つけているのか知りたいです。
厳密に言えば、私たちの誰も住んでいないこの魔法の理想的な世界では、昇格またはデプロイされたすべてのコードは完璧でなければなりません。そうではないので、実用的である必要がある場合もあります。
ただし、コードレビュープロセスがある場合は、テストする前にこれを強調する必要があります。常に納期に間に合っている場合、問題の見積もりは、開発プロセスの重要なコンポーネント(コードレビューなど)が問題になっていることを意味していますか?
あなたがそれを彼らの開発プロセスの一部にするために時間をかけなければ、あなたの後輩は後ろに座り、物事を行うより良い方法を吸収することを学ぶつもりはありません。あなたはそれをしていないように思えます。
文化全体に依存します。厳しい期限が散発的である場合は、後でクリーンアップを行う必要があることを受け入れます。それらが一定である場合、構造的に技術的負債を積み上げるよりも、経営者の問題を取り上げるべきです。彼らがあなたの懸念に対処しない場合は、企業文化がダーウィンの原則にすぐに会う可能性が最も高いので、他の仕事の機会を探すことをお勧めします。
将来の問題の抑制に役立つように、すべての従業員が従わなければならない社内のコーディング基準と実践文書を作成します。
現在のバッチの場合、コードをリファクタリングするときにS&Pドキュメントに従ってコードをクリーンアップしますが、リファクタリングするときのみです。
ベストプラクティスは、コーディングスタイルガイドを用意し、定期的にレビューを行うことです。そうすることで、締め切りが迫っていても、この問題に直面することはありません。
私が推奨するのは、リーダーシップを示し、定期的なコードレビューを先導することです。定期的にコードレビューが行われるようにするために、経営陣は上から押し付けられませんが、私の経験では、プログラマーが定期的なコードレビューをスケジュールして保持するためにステップアップすると、彼らは感心します。
あなたの人々には多くのメリットがあります。
そしてあなた自身のためのいくつかの利点は、あなたは次のようになります:
その理由は、「機能しているものを修正しないでください」と「クライアントにとって重要ではないものに時間を費やさないでください」という回答でわかります。 PMはリスクを心配していますが、これは問題ありません。
また、ほとんどの人がこの種の修正をうまく受けていないことも理解しています。私もこれを理解しています。
つまり、ほとんどの締め切りは人為的なものだと私は信じています。実際のシステムは期限を超えて生き続けており、今日の悪い設計は永遠にあなたと戦います。人々は数ヶ月で何かを提供するために走り、この後、本番環境で実行されているコードのいくつかの悪い決定を修正します。
ハイテク債務は言葉です。それはいつか戻って来て、誰かがそれを支払うでしょう。
IMO、壊れたデザインを正しく修正していると思います。プロフェッショナルであること(特にジュニアの場合)は、礼儀正しくなくても、批判の仕方とそこから学ぶ方法を知る必要があることを意味します。実際、人生のほとんどはとにかく礼儀正しくありません。
私はプログラミングにかなり不慣れです。しかし、学生として、私はプロジェクトのピアレビューとパートナーシップを約束します。プロジェクトを完了する十分な時間があれば、わかりやすく読みやすくするために、チームメンバーのコードをクリーンアップします。たいていの場合、最初の100行程度をふるいにかけることさえ難しいと思います。これらの場合、私は仲間のプログラマーにより良い習慣とコーディングを教える手助けをする用意があります。時間が足りない場合は、単にコピー/貼り付けを行い、貧弱なインターフェイスを扱う全体像にプロジェクトを取り組みます。その後、私はコーディング手法についてたくさんのアドバイスを提供すると確信しています。査読に関しては、建設的な批評(歓迎されないかどうかに関係なく)は、長期的には彼と彼女と私自身の両方にのみ利益をもたらします。今後、同じ個人とコラボレーションする場合、有益なガイドラインが頭に浮かんだことを知って安心できます。次のラウンドがよりスムーズに進むことを願うだけです。
全体的に、時間に余裕がある場合は、それを利用して、初心者に仕事の進め方を教え、誰もが利益を得られるようにします。少し時間をかけて、何が効果的で何が効果的でないかを教えてください。時間がない場合は、とりあえず彼らの作業に目を通し、機会があれば必ず連絡を取ってください。特に将来的に一緒に作業する場合は特に、より良い方法があることを知らせます。
全体的な品質の向上は、より大きなグループの「フィルター」として1人の人間を使用するよりもはるかに優れています。そのメモについて:
正直な答えは極端になります。明らかに、締め切りが厳しくて醜いコードを使用しなければならない場合や、コードがとても醜くて締め切りを忘れて改善する価値がある場合があります。必要なのは、自分がどちらにいるかを判断する方法、そしておそらく、より良いコードを書く時間を与える現実的な期限を設定する方法です。
後でクリーンアップを保存しないでください。習慣的にリファクタリング以外に何もしない期間がない限り、コードを整理することが現在よりも優先されるようになる「後で」はありません。ルーチンは「赤、緑、リファクタリング」であり、「赤、緑、2週間、まったく異なる何かを行う、リファクタリング」ではありません。現実的には、次に何か別の理由で再度アクセスするまでコードを変更せず、おそらく締め切りになるでしょう。あなたの本当の選択肢は、今それを修正するか、そのままにすることです。
もちろん、もう一度読む予定がある場合は、スタイルの整ったコードの方がスタイルの悪いコードよりも優れています。二度と読まないつもりなら片付けないでください。テストに合格した最初のものを出荷します。しかし、それはかなりまれなシナリオであり、ほとんどのプログラマーにとって、それはほとんど起こりません。そのケースを無視すると、修正するのにかかるコストと修正しないために(将来のメンテナンスの増加)にかかるコストを判断するには、実際のケースの詳細を知っているのはあなただけです。
コードのメンテナンスが必要な時点で修正するのが、今修正するよりも難しいことはありません。これらは、実際に修正してもあまりメリットはありません。最も明白なのは修正が簡単なこと(空白エラーなど)なので、この質問をする時間はあるが、修正しない時間があると想像するのは難しい;-)簡単ではなく、この種の問題の場合はOK 、理想的ではないコードがありますが、実用的でなければなりません。それは機能し、締め切りです。これを使って。
後で修正するよりも、今すぐ修正する方がはるかに簡単な特定の事項があります。 (b)それらに依存する、またはそれらを模倣する他のものが書かれている。これらは今修正する価値が非常に高いため、優先順位を付けます。期限にこれらを修正する時間がない場合は、期限が長くなるようにできるだけ強くプッシュする必要があります。これは、次回の訪問時におそらく支払う必要があるコードベースの負債を増やすためです。コード。
コードを修正する推奨方法は、レビュープロセスです。それに関してあなたが抱えている問題についてコメントしてくださいそしてそれを後輩に送り返して変更してください。意味の例を挙げ、ジュニアに任せて、適用されるコードのすべてのケースを見つけることができますが、それらのコードを完成させるだけではありません。そうするならば、あなたは彼らに改善する手段を与えません。
一般的な問題は、「これを行わないで、代わりにこれを行う」というスタイルガイドに記述し、その理由を説明する必要があります。最終的には、「コードを美的に一貫させるため」という理由が許されますが、ルールを正当化して書き留める準備ができていない場合は、おそらくを強制しないでください。どちらか。各プログラマを自由に選択できるようにしておきます。
最後に、無期限に調整する傾向に注意してください。収益は減少しますが、それでもまだ良いところを経験を通して学ぶ必要があります。何が十分であるかについての現実的な考えを形成することは絶対に不可欠です。そうしないと、締め切りが「十分な」コードを作成する時間を確保できるような交渉ができなくなります。十分ではないものに時間を費やしてください。
非常に多くの人が以前に言ったように、空中に投げたものは何でも常に戻ってきます。私はコードベース全体での強い均一性を信じています。もちろん、実際にはそれほど重要ではないものもあります。たとえば、プロシージャ内のローカル変数の命名規則。ただし、構造的なものについては、メイントランクに最後にマージする前に、すぐに修正する必要があります。個々のプロシージャまたはクラスを見ると、少しお粗末なだけかもしれませんが、全員が「やや醜い」コードをコミットすると、全体として本当に速く醜くなります。
うまく機能しない醜いコードは、多くの場合90%の時間で正常に機能しますが、端で壊れます。いくつかの単純なルールに従うだけで、通常、それが十分でないことを確認するのは十分簡単です。まず、すべてのプログラマーが、作成するすべてのプロシージャまたは機能ブロックの正確な制約を定義して文書化することが必須です。
次に、すべての手順について、これらの制約に対するテストが必要です。これは、コミットする前に、プログラマーが自分のプロシージャに対してローカルで実行できる(そして実行する必要がある)単純なユニットテストである必要があります。明らかに、これは適切なテストスイートを使用して管理する方が簡単ですが、テストがなくても作成し、ビルドから除外できる部分クラスでコミットする必要があります。
第三に、ツールが事前構成された一連の標準化された開発環境は非常に貴重です。 TSサーバーはこれに最適です。誰もがまったく同じツール(およびバージョン)、同じ構成、同じアップデートを持っています。標準に事前設定されたCodeRushやResharperなどのリファクタリングツールをインストールし、警告が残っているコミットを拒否することをプログラマに指示します。これで、チームのコードレビュー時間を使用して、フィードバックからルールセットを実際に改善できます。その後、チームは後から絶えずクリーンアップする必要なく、問題を修正できます。また、標準が恣意的に定義されていたり適切に理解されていなかったりする同僚や上司よりも、適切に構成されたツールからプログラマがコードを批判する方がはるかに簡単です。 IDEによってコードがお粗末なものであると通知された場合、誰もそれについて議論せず、修正されます。コードの品質が劇的に向上し、チーム全体が費やすことになります。数週間後のリファクタリングとクリーンアップにかかる時間が大幅に短縮されます。プログラマーもルールに慣れ、がらくたコードの作成を停止します。
最後に、ここでの簡単な修正は、プログラマに改善のインセンティブを与えることです。プログラマーは本質的に競争力があります。誰もが最も優れた、または最も速いコードを望んでいます。全員のやる気を引き出し、生産性を向上させ、能力のない人を根絶するための良い方法は、拒否されたコミットや期限切れなどのポイントを取り、全員の週ごとの加重スコアボードを計算することです。毎週のチームミーティングで上位Nを表示します。月の平均の最初の人にランチを支払うこともできます。