悪いコードを書くことを余儀なくされています。どうすれば顔を保存できますか?[閉まっている]


69

私は若い開発者ですが、私の仕事は本当にひどいPHPコードで作業することを余儀なくされます(あなたが見た最悪のPHPコードについて考えてください;そしてコードを2倍悪いと考えてください)。私は通常、バグを修正し、新しい機能を追加するためにコードベースと戦います。時々、私は物事をできるだけ早く動作させるように命じられます。

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

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


21
どのようにして悪いコードを書くことを強制されますか?なぜ立ち上がって、悪いコードに名前を付けるのをやめて、問題、解決策、時間、労力、お金の面でのコスト、そして今すぐ上司に問題を解決することの利点を説明できないのですか?
トーマスオーエンズ

17
「迅速で汚いハッキングを奨励する」?励ましますか?どちらが悪いですか。あなたの誇り(そして新しい仕事を見つける)またはこの仕事に固執する。正しいことに立ち向かうことは悪くないかもしれません。何があなたを止めていますか?暴力の脅威?恐Black?刑事訴訟?真剣に。良いコードを書くのを妨げるものは何ですか?具体的にご記入ください。そして正直。
S.Lott

113
慰めとなると、今日書いた良いコードでさえ5年後には見た目が悪くなります。
キラレッサ

7
それに直面して、PHP 落胆せ、実際に問題を簡単にすることによって「迅速で汚い」を奨励します。特に経営陣が同様に行動を奨励している場合、停止するのは難しい。機能しているように見える最後のコードでは、プラクティスに関係なく、会社にとってコードがまったくないよりも価値があります。

7
申し訳ありませんが、そこにあるコードを書くための善悪の方法は。正しい方法では、標準的な業界慣行を使用します。悪い方法は、たわごとをハックして、「動作する」と言います。
ウェインモリナ

回答:


132

ローマは1日で建てられたわけではありませんが、優れた「ボーイスカウト」になることができます。コードに触れるたびに、以前よりも良くしてください。理にかなった関数名、優れたコーディング標準を使用し、作業時に適切なコメントを入力するのに特別な時間はかかりません。

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


2
+1。簡単に修正するためだけに、あなたが信じているすべてを犠牲にする必要はありません。
tdammers

4
+1:すべてのために、または何のためにも-非常に真実。
アンバーフェルール

3
間違った手でのボーイスカウトルールがまさに問題の原因になる可能性があります。なぜなら、彼の上位の「賢明な関数名」の定義は「bolChkLst」(スタイルガイドを満たすためのハンガリーの表記法、チェックリストではなくChkLst ')。ここでは、従わないようにしようとしたさまざまなジョブで遭遇したボーイスカウトルールの実装をいくつか示します:「関数に参加し、できるだけ少なくする」、「3回の呼び出しで引数を渡さないで、代わりにグローバルを使用する」、「ビューでインラインSQLを使用する」より速く」
ケプラ

40
+1Every time you touch the code, leave it better than it was before.
Qwerky

3
+1。多くの明確な改善をコミットしている場合、実際にあなたの貢献を見ている人は誰もあなたがくだらないプログラマだとは思わないでしょう。プロジェクトが安っぽいのであなたが安っぽいだと思っている潜在的な雇用者は、あなたが働きたい人ではありません。
マシュー

59

コメントからS.Lottに同意*(一度だけ:)誰もあなたに悪いコードを書くことを強制しません。問題は、ジュニア開発者です。多くの場合(このサイトもそのせいです)、ベストプラクティスである「美しいコード」で迷子になります。または彼らはそれを成し遂げますが、多くの時間を無駄にします。悪いコード(これも機能するコードです)を書くように彼らに言うことで、それは「それを通して」ではなく、単に彼らに何かを届けさせます。時間が経つにつれて、(今ではもはやない)ジュニア開発者は非常に迅速に迅速で不潔なソリューションを思いつきますが、それを改善するために残りの時間を費やします。そして時間が経つにつれて、あなたはより多くを学び、ある時点で、実際には良いコードである迅速で汚いソリューションを提供し始めます。

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

だから...悪いコードを書いて...それの多くを...ほとんどかろうじて動作するコードを、そしてITERATE。繰り返しごとに少しずつ改善されました!

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

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


1
+1この回答に強く同意します。2回賛成します。
Vitor Py

3
同意する。これは、問題の「完璧な」解決策を見つけようとするときに、「分析麻痺」を切り抜ける素晴らしい方法です。StackOverflowでようなものを書きました。
キラレッサ

4
+1。私はすでにプログラマーでこれを読んでいます(しかし、ソースはわかりません):2つのグループは、与えられた時間枠内で陶器を作成するように命じられました。1つは可能な限り最高の品質のアイテムを作成し、もう1つはできるだけ多くのアイテムを作成します。最終的に、後者のグループはより良い品質のアイテムを提供しました。なぜなら、繰り返しが習得への道だからです。熟考だけでは何も得られません。結局、私たちは皆、やることによって学びます。何か悪いことをすることへの恐怖は、試み、おそらく失敗することを阻みますが、間違いから間違いなく学びます。
back2dos

1
結果として、リポジトリを使用してください!たとえあなたが自分のマシンでセットアップした個人的なものであっても。それらの使用を開始すると、多くの変更を加えて、それが機能しなかったことを見つけてロールバックすることがいかに自由であるかを理解します。私の個人的なお気に入りは化石です
スペンサー

1
「だから...悪いコードを書いて、...たくさん...かろうじて動作するコードを、それからITERATE。すべての反復が少しだけ良くなった!」新しいプロジェクトが山積みになっているために繰り返したくない場合はどうでしょうか。そして、プロジェクトが終了するまでアルファ版が固執する傾向があることに気付き始めます。もちろん、最初はくだらないコードと更新の欠如の結果、どちらが高速化されます。多くのジュニア開発者が、最初から「美しいコード」を書く必要があると考えるようになるのは、このような状況だと思います...
Serhiy

40

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

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

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


4
まさに。コメントとコミットメッセージも。私はそれをやったことがありませんが、いくつかのvcでそれらに起因する注釈付きのチェンジセット以外に基づいて開発者を評価することは興味深いでしょう。
timdev

まあ、あなたはコミットのコメントが「修正済み」、「完了」、「blahblahblah」である誰かについて何かを伝えることができます:)
gbjbaanb

+1これを数回行いましたが、ピア開発者の場合は機能します。
ヤチェクプルシア

7
私は通常、それらに出くわすたびにそのようなコメントを削除します。TODOまたはFUTURE-ENHANCEMENTとマークされたコメントは残る価値があるかもしれませんが、謝罪は単なるごみです。
クリストファージョンソン

1
最適ではないソリューションが実装された理由(およびそのソリューションが何であるか)として説明を含めることに同意します。しかし、私はそれを恥じたり、謝罪したりすることはないと思います。これは、そのコードに取り組んでいたときに行うべき重要なことがあり、実装が十分だったことを意味します。
ジャスティンオームズ

10

それは彼らがあなたを強制する方法に依存します。

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

厳しいスケジュール、レガシーコードなどに追われていると感じます。

この場合、他の回答のほとんどがすでに言っているように、「クールさのために最適化する」のはあなた次第です。コードベースをMVCに書き換える時間がないかもしれませんが、最初のステップとして、たとえば、SQLを手で接着するのをやめて、代わりになどのexecute_sql($query, $params)抽象化の基礎を築く素敵なを書くことができますfetch_customer($filter_params)。最終的には上司がより早く製品を入手するという慣行が存在するため、将来と現在の投資にどれだけの時間を費やすかが対立するだけです。

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

あなたはそれをあなたが不適当だと思う方法でそれを実装するように明示的に命じられている

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

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

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


8

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

長期的には、上司に相談してください。ここで15分投資することで、時間を節約できることを説明してください。説得力のある例を持っていることを確認してください-「ここでこれをやったら、来年もこのことをできるようになることを願っています」というタイプではなく、その中で、そこで問題を見つけるのに3時間かかりました。もしこれをやったなら、バグはすぐに明らかになりました」ここでの警告:エレガントで保守可能なコードは、はるかに優れていて効率的ですが、そうでない場合もあります。ずさんなクイックフィックスが完全に正当化される状況があります:時には使い捨てのコードを書いているときもあれば、本物を待っている古いジャンクの断片を生かしているときもあります。時には、適切なソリューションのメリットはありません」

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


3

誰もあなたに悪いコードを書かせることはありません。あなたはこの状況を好転させ、それをポジティブにすることができます。ポリシーと手順の先駆者の変更。そして、あなたも常に「はい」の男性/女性になることはできません。一日の終わりまでに機能xが必要だと言われたら、それは実行可能ではないが、実際にはそうではない理由を正当化してください。問題がある場合は、ソリューションを提供してください。目をつぶっているだけでなく、さらに悪いことに...それを追加しています。

開発ショップは、厳密な期限を設定するのは初めてではありませんが、適切に設計されたコードを維持したいという願望を持っています。


4
-1:米国では、上司が「高速でくだらないコードを書く」と言って、あなたがそれを拒否した場合、彼らはあなたを解雇することができます。合法的なことをするための直接の指示に従わないことは、強制終了の理由です。ですから、それはあなたを「強制」するものではないかもしれませんが、上司の言うことをする代わりの方法ははるかに悪いかもしれません。
ボブマーフィー

それはすべてあなたのアプローチ次第です。理想的には、あなたの専門知識を大切にする優れた人物がいて、あなたの判断は高く評価されるべきです。多くの場合、タイムラインを決定する人々は開発者ではなく、何が可能か、何が不可能かを考慮する必要があります。もちろん、カバーの下で「安っぽい」コードを書くこともできますが、誰もが満足できるように、プッシュバックで十分かもしれません。良いコードからの良い結果です。

1
あなたが実際に働いていない理想的な優れた人物は素晴らしいですが、あなたの給料に署名する人はあなたが喜ばなければならない人です。あなたが本当に仕事をしていないとき、請求書コレクターにいつでも電話をかけてもらうのは本当にうんざりです。
ボブマーフィー

1
それには生の自己利益以上のものがあります。私はマネージャーであり、起業家でもあります。すべての顧客の支払いが迅速で汚い場合、お金を失う良い仕事をすると解雇されることになります。会社全体を一度解雇しなければならなかったので、二度とやりたくありません。だから私は間違いなく道徳的立場を支持しますが...くだらないコードを書くことは通常道徳的な問題ではなく、ある時点で個人的な好みと仕事を持っているかどうかの人々の実際的な問題の間で選択する必要があります。
ボブマーフィー

1
私は大規模システムの大規模な書き直しを提唱することはほとんどありませんが、それはあなたが将来書くコードが恐ろしくなければならないという意味ではありません。
-PeterAllenWebb

3

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

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

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

このバランスを正しく取るには、多くの経験が必要です(ほとんどのコーダーがこれまで以上に経験しています)。どちらの極端な場合でも非常に簡単です。中間の道を見つけることはより困難です。

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

十分な時間の後のほとんどのコードには、一般的なフレームワークにリファクタリングするには費用がかかりすぎる特定の状況のた​​めのハックが含まれます。


2

私は、あなたが今やっているようにただ続けるべきではなく、何も言わず、ただハッキングとハッキングするだけだと付け加えたい。

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

PHPコード分析に無料で使用できる多くのツールがあります 。http://en.wikipedia.org/wiki/Code_analysis

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

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

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

hth


0

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

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

現在、コードの品質に関しては、ビッグバンアプローチとして変更することはできません。ゆっくりと、一つずつ、さまざまな問題に新しいアプローチを追加してください。あなたがそれを正しくすれば、それはあなたにいくらかの時間を節約し、あなたは全体的な品質をより良くするためにそれを使うでしょう。

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

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

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


0

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.