web-dev-qa-db-ja.com

悪いコードを書かざるを得ない。どうすれば顔を保存できますか?

私はジュニア開発者ですが、私の仕事は本当にひどいPHP code(あなたが見た中で最悪のPHPコードについて考える;コードについては2倍悪いことを考えます。私は通常、バグを修正し、コードベースと戦って新しい機能を追加しようとします。時々、ダーティハックを伴うことが多い、できるだけ早く機能するように命令されます。

この製品は以前はオープンソースでしたが、将来オープンソースになる可能性があることを懸念しています。誰か(特に潜在的な雇用主)がいくつかのチェンジセットの隣で私の名前を見つけることができたら、私は恥ずかしいでしょう。私の名を守るために何ができますか?

これが関連するかどうかはわかりませんが、上司も同僚もコードが悪いことを認めたくないと付け加えますが、私はそれらのせいでそれらを責めることができるかどうかはわかりません-多くの場合、これは彼らの責任です最初の仕事。

70
Ashamed One

ローマは1日で建てられませんでしたが、あなたは良い「ボーイスカウト」になることができます。コードに触れるたびに、それを以前より良くしておいてください。賢明な関数名、優れたコーディング標準を使用し、作業中にきち​​んとしたコメントを入れるのに、それほど多くの時間はかかりません。

危険なのは、それが全部かゼロかを考えていることだと思います。エレガントなコードを書きたいと思う時間を費やすことができないからといって、完全にあきらめてゴミを書く必要があるわけではありません。

133
Amy Anuszewski

コメント*からS.Lottに同意します(1回限り:)不正なコードを書くように強制されている人はいません。事は、ジュニア開発者です。多くの場合(このサイトはそのせいでもあります)、ベストプラクティス、「美しいコード」で迷子になります。または彼らはそれを成し遂げるが多くの時間を浪費します。彼らに悪いコード(これも機能するコード)を書くように指示することで、「それを介して」というよりも、何かを提供するだけです。時間が経過すると、ジュニア開発者(現在はもはや:)は非常に迅速に迅速でダーティなソリューションを思い付きますが、残りの時間を費やして改善します。そして、時間が経つにつれて、さらに学習し、ある時点で、実際に優れたコードである迅速で汚れたソリューションの提供を開始します。

しかし、最初から完璧なコードを書き始めたとしたら、おそらく多くの時間を費やしてほとんど何もしなかったでしょう。

だから...悪いコードを書いて...かろうじて動作するコード...そして反復する。反復ごとに少しだけ良い!

完璧なソリューションを初めて書いた人はいません。

*これは、コメントになれば短くなります

59
Rook

コードのコメントはあなたの友達です。

プレッシャーのために安っぽいハックを書く必要があると感じたときはいつでも、「このコードは時間の制約のためXを実行します。理想的には、代わりにYを実行します。-Ashamed One、2011年7月5日」のように言います。

次に、潜在的な雇用主がそれを見ると、優れたコードを書くことを好むことに気づくでしょうが、コーディングスタイルをビジネスニーズに合わせて調整することもできます。ほとんどの雇用主はそれらの両方を良いものと見なします。

40
Bob Murphy

それはあなたをどのように強制するかに依存します。

私の経験では、2つの可能性があります。

あなたは厳しいスケジュール、レガシーコードなどによって強制されていると感じます

この場合、他のほとんどの答えがすでに言っているように、「クールさを最適化する」のはあなた次第です。コードベースをMVCに書き換える時間はないかもしれませんが、たとえば、最初のステップとして、SQLを手動で接着するのをやめ、代わりにexecute_sql($query, $params)と書くことができます。これにより、fetch_customer($filter_params)など。覚えておいてください。すべてのベストプラクティスは、最終的には上司が製品を早期に入手することです。そのため、将来と現在に投資する時間には矛盾があります。

適切なコンテキストを設定するとき(「6か月以内に、余分な時間をかけずに、モノリシックコードをMVCにリファクタリングしました」)、コードに名前を残し、脳卒中の犠牲者を教えるセラピストのように誇りに思うようにしてくださいもう一度一言言ってください。

不適当と思われる方法で実装するよう明示的に命令されます

モデルからビューを分離しようとしても、レビューは成功しません。「複雑すぎるので、単純なSQLクエリを実行しないのはなぜですか」です。君の execute_sql「規律のあるコーダーはそれを必要としない」ため、缶詰になります。

この事件は最悪だ。私の経験では、それは通常、成功のためではなく、政治的な理由でそこに昇進したマイクロマネージメントとチームリーダーと一緒に来ます。本当の問題は、あなたが自分で制御できない何か(コード)を任されていることです(自分のやり方でやらなければなりません)。最善の解決策は、根本原因を解決することです(つまり、あなたはうなり声として扱われます)。 2番目に良い(そして私の経験では、通常の)解決策は、終了することです。

利点は、このシナリオでは、チームリーダーがすべての成功を評価するため、とにかくあなたの名前が公開される可能性は低いということです。

10
keppla

あなたの上司があなたに何かを速く届けることを要求すると私はかなり確信していますが、あなたがそれを故意に悪いものにするために余分な努力を払うというわけではありません。つまり、本当に悪いコードと少し悪いコードのどちらかを選択し、両方のオプションを実装するのに同じくらい時間がかかる場合は、少し悪いオプションを選択することになります。これは短期的な解決策であり、何もする必要はありません。

長期的には上司に相談してください。ここで15分投資することで、時間をどのように節約できるかを説明してください。あなたが納得のいく例を持っていることを確認してください-「私がこれをここでやったら、来年これを他のことができるようになることを望んでいます」というタイプではなく、「見て、ここで私はこのことをしたので、そのうち、問題を見つけるのに3時間かかりました。これと同じ方法でそれを実行した場合、バグはすぐに明らかになっていました。」ここでの警告:エレガントで保守可能なコードの方がはるかに良くて効率的ですが、そうでない場合もあります。ずさんなクイックフィックスが完全に正当化される状況があります。場合によっては、使い捨てのコードを書いていることもあれば、古いジャンクを存続させて本物を待っていることもあります。時々、適切な解決策の利点がその努力を正当化しないことがあります(上司が関心を持っているのは金銭的にです)。

他のすべてが失敗した場合は、別の仕事を探しに行きます。

8
tdammers

だれもあなたに悪いコードを書くことを強制しません。この状況を好転させ、ポジティブにすることができます。ポリシーと手順の先駆的な変更。また、常に「はい」の男性/女性になることもできません。 1日の終わりまでに機能xが必要だと彼らが言った場合、それは実行不可能であると伝えますが、実際にはそうではない理由を説明します。問題がある場合は、解決策を提供します。盲目なだけでなく、もっと悪いことに...それに加えて。

厳格に設計されたコードを維持したいという願望を抱えながらも、開発ショップは厳格な期限を設定する最初のものではありません。

3
user29981

どの企業も、豊富なドキュメントと単体テストを使用して優れたコードを記述し、妥当な予算と時間で製品を市場に投入することのバランスを見つける必要があります。

それがリリースされる前に廃止されていても、世界最高のコードは問題ではありません。

実用的であることは、そのバランスを見つけようとすることです。機能をすばやく修正することは、現時点では商業的に不可欠である場合がありますが、常にそうであるとは限りません。

このバランスを正しくするには、多くの経験(ほとんどのプログラマーがこれまで以上に経験している)が必要です。どちらの極端に行くのも非常に簡単です。真ん中の道を見つけるのはもっと難しいです。

あなたの上司が正しいと言っているのではありません。コーダーとして、商業的に実行可能ではない美しいコードを常に作成しようとする誘惑があります。この誘惑に注意することは、これらのハッキングの一部がそれほど悪くないことに気付くのに役立つかもしれません。

十分な時間が経過した後のほとんどのコードには、コストがかかりすぎて一般的なフレームワークにリファクタリングできない特定の状況に対するハッキングが含まれます。

3
Jeremy French

私はあなたが今しているように続けるべきではないことを付け加えたい。

あなたは立ち上がって具体的なコードを指さし、何が悪いのかを彼らに伝える必要があります。明確にし、コードメトリックを使用してクレームをバックアップします。コードが悪いと主張することほど恥ずかしいことはありませんが、実際にはそうではありません。

PHPコード分析に無料で使用できるツールがたくさんあると思います http://en.wikipedia.org/wiki/Code_analysis

また、もちろんこれ http://en.wikipedia.org/wiki/Code_smell

それを読んで、アプリケーションで見つけられるものをまとめてください、そしてもちろんalternativesをリストしてください。立ち上がって「これがどのように行われるのが好きではない」と叫ぶのは、それを行うための代替の(できれば)より良い方法を提示せずに行うのが悪い習慣です。

迅速なハックには費用がかかります。そしてそれを完全に否定的に見ないでください-あなたは今この仕事から多くを学ぶことができ、あなたが今あなたが次に作る経験から利益を得ることができます。

hth

2
UrbanEsc

何よりもまず、何らかのソース管理を使用しますよね?そうでない場合は、そこから始めます。それは最初にあなたを助け、チームの他のメンバーにすぐに採用されます。

ソース管理がある場合は、コードに名前を入れるのではなく、会社の名前を入れてください。不正なコードでは、ファイルの先頭にあるコメントに変更履歴を入れるのが一般的です。これはソース管理に委任する方が適切です。

これで、コードの品質に関して、ビッグバンアプローチとして変更することはできなくなります。ゆっくりと、1つずつ、さまざまな問題に新しいアプローチを追加します。正しく実行すると、時間が節約され、全体的な品質を向上させるために使用します。

私の例を示すために、すべてのHTMLがコード内にあるPerl/CGIアプリケーションを使用したプロジェクトの途中にたどり着きました。アプリ全体が明確な構造のない単一のファイルに含まれていました。バージョン管理されたものはありません。私はCVSリポジトリ(その時点ではSVNは利用できません)を構成することから始め、顧客用にWebインターフェースを配置しました。最初は、同僚からのコミットを自分で処理していました。次に、すべてのメソッドを異なるモジュール(ファイル)に分割します。その時点で、同僚はCVSを採用し始めました。次に、HTMLをコードから移動しました。次に、コードの一部を変更する必要があるたびに、少し時間をかけてコードの一部をリファクタリングしました。結局、開発のスピードは非常に速くなり、顧客は非常に満足しました。彼らは表面的な変更を要求し、私たちに「2日かかります」と言う代わりに、開発環境でオンザフライで変更しました。

ただし、このアプローチは、コード全体を十分にマスターした場合にのみ機能します。全体像を理解していない場合、アプリケーションの一部が理解できないままになっていると、仕事が本当に難しくなります。

最後に、完全な書き換えが唯一のソリューションである場合もありますが、通常、管理コストを正当化することは非常に困難です。

0
Eric Darchis

あなたはジュニア開発者なので、これは実際には良いことです。コードの大規模な混乱の真っ只中に放り込まれることは、完全に「クリーン」なコードで作業することだけが行うよりも、すべきでないことについてはるかに多くを教えてくれます。この状況を利用して、不良コードをリファクタリングし、ゆっくりと管理しやすいものに変換する方法を学びます。そして、それができるだけ早くなければならないことについて文句を言わないでください。それがポイントです-厳しい期限内で物事をしながらコードをリファクタリングしてクリーンアップすることを学びます。結局のところ、利用可能な時間が無限にあれば、誰でも完璧なコードを書くことができます。

0
GrandmasterB