毎年少なく吸いますか?[閉まっている]


10

毎年少なくなる-Jeff Atwood

私はこの洞察に満ちた記事に出くわしました。投稿から直接引用

私は、謙虚なプログラマーが改善する方法を毎年吸うことが少ないとしばしば思っていました。1年前に書いたコードに不満があるはずです。そうでない場合は、A)1年間何も学習していない、B)コードを改善できない、またはC)古いコードに再度アクセスしないことを意味します。これらはすべて、ソフトウェア開発者にとって死の接吻です。

  1. これはどのくらいの頻度で起こりますか?
  2. コーディングが実際に改善されるまでにどのくらいかかりますか?月、年?
  3. あなたはあなたの古いコードを再訪しますか?
  4. あなたの古いコードはどれくらいの頻度であなたを悩ませますか?または、技術的負債にどのくらいの頻度で対処しなければなりませんか。

古いバグを修正することは間違いなく非常に骨の折れるコードであり、期限とそれらの迅速な修正に迅速に対応するために行った可能性のある汚いコードです。それについての議論はありません。

私が出会った開発者の何人かは、彼らがすでに進化の段階にあり、コーディングを改善する必要がないか、もはや改善することができないと主張しました。

  • これは起こりますか?
  • もしそうなら、特定の言語でのコーディングに何年かかりますか?

関連:

あなたの古いコードのいくつかを振り返って、苦痛に満ちていますか?

コード内のスターウォーズモーメント 「ルーク!私はあなたのコードです!」「いいえ!不可能!できません!」


3
自分は完璧だと思っていて、改善する必要がないと思う私見人は正しいです。彼ら改善することできません。賢明な人なら誰でも自分が完璧ではないことを知っています。常に新しいものを改善/学習する余地があります。自分自身を向上させることができないとわかったら、私は恐怖を感じるでしょう-私には天井があるとは思わないでください。
MAK、2011年

私は非常に新しいときに作成したプロジェクトに戻り、自分で書くのが非常に難しかったコードを見るのが好きです。多くの場合、コードは非常に単純です。それは私を笑わせます。
マフィンマン

回答:


6
  > Sucking Less Every Year ?

いいえ吸うことは毎年異なります :-)

何年も前に私の最初のレビューをした後、私は命名規則の欠落に苦しみました。

それから私は私のコードが可能な限り一般的であるように(不必要に)実装されていることに苦しみましたが、それはコードを理解し維持することを困難にしました。

次に、私はテスト駆動開発、InversionOfControl、どのドットネットジェネリック、どこに、そしてもっと多くのものをリースしました。

結論

古い悪い習慣の苦しみは減りましたが、私がもっと学んだので、私が得た新しい苦しみによって過剰に補償されました。


19

興味深いことに、私がこれまでに取り組んだすべての「ロックスター」プログラマーは非常に謙虚で、学ぶことに熱心で、彼らがすべてを知っているわけではないことを認める用意ができていました。ヘック、多くの人は、少なくとも気楽な瞬間に、実際には完全に自己非難していました。

コーディングを「改善できない」と思っている開発者に会ったことはないと思いますが、穏やかな言い方をすれば、これらの人たちはロックスターからできるだけ遠く離れていると私に伝えています。


2
100%同意します。彼らは沈黙の暗殺者です!ああ、素晴らしいユーザー名、xkcd?:)
jamiebarrow 2011年

@jamiebarrow:もちろんです。:)
ボビー・テーブル

別の失敗例は、「すべてのソフトウェアが悪い、そのすべてがハッキングされている、改善のためのアイデアは問題ではない」という人物です。それらのタイプで動作するように落ち込んでいるようなもの。
Doug T.

13

次のポイントはアドバイスではなく、個人のログです。

  • 使用するグローバル変数が少ない
  • 変数または関数名に省略形を使用しない
  • [いくつかの]テストコードを書く
  • ベンチマークなしでコードを遅い(または速い)と判断しない
  • アプリの負荷テストの方法を学ぶ
  • それが壊れていなければ、それを修正しないでください
  • ソースコード管理ツール(git / hg)を使用する
  • リファクタリングはクールですが、それがもたらすテストのコストを過小評価しないでください
  • セキュリティは難しいので、できるだけ早くこれに注意してください
  • いくつかのオープンソースプロジェクトのバグにパッチを適用する
  • 何か新しいブログ
  • ユーザビリティは機能のリクエストではないかもしれませんが、それは重要です

私は一年以内にすべてを学んだわけではなく、すべてに時間がかかります...


「[テストコードを書く]」というのが好きです。プログラマーとして間違いを犯さないような完璧に達した人はいないと思います。私たちは皆人間であり、時々間違いを犯します。単体テストと統合テストにより、ミスを減らすことができます。そして、私はあなたが「いくつかの」テストを言っていることに気づきました、それは重要です、私は時々私が本当に役に立たなかったテストを書くことに夢中になっているからです。
jamiebarrow 2011年

実際、「壊れていない場合は修正しないでください」の下に、「壊れていて複雑な場合はテストコードを使用してバグを再現して修正する」と追加します
jamiebarrow

2
いくつか追加できますか?APIの場合は、必要以上に内部の詳細を公開しないでください。非表示にすると、後で変更できます。文書化および変更が容易であるため、マジックナンバーの代わりに常に定数を使用してください。不変性は、特に並行性が関係する場合に非常に役立ちます。他人のコードベースに取り組みます。他人に正当化しなければならないときに自分のコーディングスタイルを判断することは、非常に貴重なプロセスです。移動中のターゲットにぶつかるのが難しいため、(可能な場合は)仕様を凍結します。
Evan Plaice、2011年

オンサイトまたはクライアント周辺で作業する場合は、無許可の高出力カードを梱包します。仕様外の変更を求められた場合は、(私は持っている)権限のないカードを引き、次に高出力のカード(参照先)を引きます(できれば、要求を受けられるオフサイトのPM)。最良の場合は、開発に専念できるようになります。最悪の場合、ドライブバイ機能リクエストの数が減ります。(物議を醸す)早期に復帰し、頻繁に復帰します。復帰がコードブロックの最後で発生するように意図されていた場合、そのキーワードはありません。うまくいけば、私は毎年吸い続けています。
Evan Plaice、2011年

4

多くの場合、優れたコードは突然発生するだけだと考えられますが、私たちのほとんどにとって、私たちのコードベースでは優れたコードが成長します。つまり、要件が絶えず変化し、完璧なプログラマーでもないため、マネージャーやプログラマーから愚かな決定が絶えず行われるため、最初から完璧なソフトウェアを作成することは非常に困難です。次に、各要件が古いコードの一部をより良いコードにリファクタリングし(そしてその代償を払うことになります!)、技術的な負債の少しを返済する良い機会を変えることがわかります。彼らが言うように、「コードをコミットするたびに、コードリポジトリを少し良くする」。その後、システムはより理想的なシステムに進化します。

私は彼のソフトウェアを誇りに思っているプログラマーはいないことを知っていますが、それは良いことです。Thanは、プログラマーがその過程で学んだことを意味します。

また、「クリーンコード」という本を読んだ場合、独自のコードの「サックファクター」が数回増加します。:D


1
私はある点であなたに同意しません、あなたが誇りに思うことができるいくつかのコードを信じます。皮肉なことに、1つのプロジェクトを非常にうまく進めて、それを誇りに思うことができます。次に、次のプロジェクトでは、1時間あたりのWTFが高くなります...独自のコードでは!:D
jamiebarrow

1
たぶん、あなたが今いるステップに依存します。1年前に書いたコードを見つけましたが、名前やメソッドの目的を理解するのが難しいと感じました。また、テストなどで発見されたコードを見つけました。私が改善し続けると、そのようなことは標準ではなく例外になる傾向があり、以前は重要ではないと思われていた問題に当惑し始めます...
Rafa de Castro

クリーンコードの+1ですが、その比較は常にあなた自身と行われます。
Aditya P

4

私は実際にはこれのためにコインの両面を持っています。

一方では、古いコードを見ると、それがバグでいっぱいであり、当時知らなかった手法や言語機能を利用することで簡単に達成できる複雑な方法が行われていることがわかります。

一方で、問題に対する特にエレガントな解決策を見つけ、その当時の巧妙さで独善的なにやにや笑いを解くことは避けられません。

そして、CでGOTOを使用したという事実を、恐怖の中で数行スクロールしてゆがめます。


3

うーん...私はしばしば、私の古いコードの多くがどれほど優れているかにかなり嬉しく驚いています。

今日それをしていると、私はしばしばそれを違うように書くでしょう、私が時間の制限に耐えなければならないなら、私はそうするかどうかわかりません。少なくとも数GBのRAMを備えた典型的なマシンを頼りにできる場合、大容量ハードドライブが100メガバイトの場合とは少し異なる方法でコードを書くことができます(多くの場合、そうすべきです)。


3
  1. これはどのくらいの頻度で起こりますか?

  2. コーディングが実際に改善されるまでにどのくらいかかりますか?月、年?

  3. あなたはあなたの古いコードを再訪しますか?

  4. あなたの古いコードはどれくらいの頻度であなたを悩ませますか?または、技術的負債にどのくらいの頻度で対処しなければなりませんか。

  1. 私が何か新しいことを学ぶたびに、うまくいけばそれは毎日です。

  2. 私が学んだことを実装するようになれば、それを実装したときからすぐに。

  3. はい、(1)新機能、(2)バグ修正、(3)ノスタルジア、(4)解決方法を確認する場合にのみ役立ちます。

  4. 1.に関連して、何かをより良くする方法を学んだとき、いくつかの古いプロジェクトはより良く「できた」と気づきました。そのままにしておきます。次のプロジェクトがより良い方法で行われることを確認してください。実際のバグでない限り、私は心配しません。


3

別の質問は、被験者は自分のコードの品質を評価する方法についてでした。私の提案の1つは、数年後にそれをレビューすることでした。その経験は、コードが書かれたときよりもはるかに高くなっています。この別の質問に対する私の回答の 1つの引用は、直接あなたの質問に関連しています。

「私の場合、寿命は1年です。つまり、6か月前に書いたコードを変更できることを意味しますが、コードが2年前に書かれた場合、スローされて完全に書き直される可能性が高くなります。吸いすぎるだけだ」と語った。

はい、実際には、すべてのコード私が書いたは、1年のうちに私の観点から耐えられなくなります。また、使い捨てコードについてではなく、品質、保守性、読みやすさを念頭に置いて作成したコードについても触れています。現時点では、例外はありませんでした。

寿命についての2番目の質問に答えるには、さまざまです。使い捨てのコードの存続期間は0秒です。コードを書いた直後に吸引されますが、それは問題ではありません。私が書いたコードのいくつかの作品は我慢した2年後のリファクタリングのビット、StyleCopルールなど平均では、私の正確な場合には、寿命が変化するの強制:いくつかの化粧品の変化はなく、必要に応じて8ヶ月と1年の間についてC#、PHPの場合は2か月から6か月。

以前のコードを再確認しますか?はい、もちろん、すべての開発者として、DRYを気にせず、自分のホイールを何度も再発明しない限り、です。また、多くのプロジェクトで使用する共通のコードベースがある場合コードを頻繁に確認および改善する可能性もあります。もう1つのポイントは、巨大なプロジェクトに取り組んでいると、数年かかる場合があるため、古いコードを再検討する必要があるということです。

私が出会った開発者の何人かは、彼らがすでに進化の段階にあり、コーディングを改善する必要がないか、もはや改善することができないと主張しました。

自分が完璧で、何も学ぶ必要がないと言うとき、それは彼女がどれほど完全に馬鹿であるかを理解することすらできないことを意味します。

コンピュータ/プログラミングで20年の経験があっても、物事はあまりにも速く変化するため、常に新しいことを学び、コードを改善するための新しいテクニックがあります。たとえば、.NET Framework 3.0がなかったときに書かれたC#コードは、今日の新しいもの(Linq、コードコントラクトなどを含む)で読みやすく、より良くできます。これは、古いコードであっても最も賢い開発者によって書かれました。


これを尋ねると、良いコードの書き方を知らない人のように見えるリスクがあります。
Aditya P

@AdityaGameProgrammer:バギーで醜いコードと良いコードの間には違いがあり、1年以内に、よりエレガントな方法で記述される可能性があります。(1.)いつまでも完璧なままである完璧なコードを誰も書くことができないので、私たちはコードが時間とともに改善できることを認めなければなりません。(2.)私たちは、時間の経過とともに経験と知識を得ます。これは、古いコードの改善の源でもあります。
Arseni Mourzenko

1

コードを見ていて、「これを書いたとき、私は何を考えていたのですか?」

コードの整理、コードのスタイリングなどの新しいアイデアが思い浮かぶこともあるので、通常は常に改善があり、それは大きな改善ではないかもしれませんが、すべての小さなことは役立つ価値があるかもしれません。

作業環境によっては、同じコードベースで作業を続け、そこに何があり、何を管理するかを十分に理解しているため、数年前のコードが表示される場合があります。

通常、私は既存のシステムを変更するか、システムを置き換えるので、古いコードはほとんどいつも私を悩ませています。どちらの場合でも、既存のシステムの癖を知って、それらが新しいシステムにあることを確認する必要があります。

Jon Skeetのように完璧なコードを考え出せる人もいると思いますが、コードを改善できないと言っているほとんどの人は、魅力的ではないかもしれないエゴの点から言っています。同時に、毎回大きな改善を見つけるという点では、常にそうなるとは限りません。


1

1.これはどのくらいの頻度で起こりますか?

古いコードに不満を感じる頻度はどれくらいですか?ほとんどいつも。私が本当に誇りに思っているコードがあるというまれな例外があります...しかし、繰り返しになりますが、それらはまれです。数年前に書いたコードは良かったと言われました...私はしがみついて、「あなたが私が書いたゴミよりも悪いものを見たので貧しい貧しい人」と思いました。

2.コーディングが実際に改善されるまでにどのくらいかかりますか?月、年?

それは通常段階にあります...私はスタイルまたは方法論に本当に入ります(たとえば、流暢なインターフェイスを使用します...それは私が巨大なウェットスタイルを持っていた最後のスタイルだったためです)、1か月または4か月間書くすべてを肉屋にします。それからそれはよりよく見え始めます。

3.古いコードを再確認しますか?

私が望むほど頻繁ではありません。私の古いコードのほとんどは、以前の雇用主が所有しています。個人コードは頻繁に白塗りされます。

4.古いコードでどれくらいの頻度で問題が発生しますか?または、技術的負債にどのくらいの頻度で対処しなければなりませんか。

以前の雇用主は私の古いコードのほとんどを持っているので、私はほとんどの個人コードをホワイトウォッシュします...それほど頻繁ではありません。


ホワイトウォッシュ=リファクター?あなたはプロジェクトコードまたはあなたの個人的なコードベースを参照していますか?
Aditya P

1
@AdityaGameProgrammer:ホワイトウォッシュ=全部捨てて、最初から書き直します。私の個人的なコードについて話している。
Steven Evers
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.