コードを書いた後、なぜ私はしばらくして「もっと良く書いただろう」と感じるのですか?[閉まっている]


12

私は2年以上、C ++で趣味のプロジェクトに取り組んでいます。モジュール/関数を作成するたびに、多くのことを考えてコーディングします。今、問題を見て、

do {
  --> write the code in module 'X' and test it
  --> ... forget for sometime ...
  --> revisit the same piece of code (due to some requirement)
  --> feel that "This isn't written nicely; could have been better"
} while(true);

ここ'X'に任意のモジュールがあります(小/大/中)。これは、コーディング中にどれだけの労力を費やしても発生します。そのため、ほとんどの場合、動作するコードを見ることは控えています。:)

これは多くの人に共通の気持ちですか?この言語特有の現象ですか?(C ++では、同じことを異なる方法で書くことができるため)。

現実の製品コードでこのリファクタリングの感覚が得られたら、どうすればいいですか?作業中のコードを変更しても賞賛は得られませんが、失敗するとトラブルが発生する可能性があります。


14
古いコードで問題が見つからなかった場合、私はもっと心配になるでしょう。これは、スキルが向上していることを示しています。
ダレンヤング

1
あなたがあなたの古いコードを見てない場合ではないと思う「くそがなぜ私はそれをしなかった、この後、帰り?」あなたは、コードを書いているので、あなたは十分に学んでいません。
SBI

回答:


17

この現象は非常に一般的であり、プログラマーに固有のものではありません。知的なタスクを実行するたびに、ある程度の距離を置いた後、改善できる可能性のある場所が何十箇所もあることに気付くでしょう。論文を書いたことがある賢明な(女性)男に尋ねると、彼らはあなたに一つのことを言うでしょう:「それを見ないでください。一目で間違い見つけるでしょう。」

リファクタリングループを回避するには、基本的に2つのことがあります。

  1. 執筆および設計中に、できるだけ早く遠方の視点を得るようにしてください。同僚にデザイン/コードを見てもらいます。週末の後もう一度見てください。酔っているときや高いときに見てください(ただし、注意してください:冷静になるまで何も変更しないでください)。
  2. 不完全さとともに生きる。単にきれいではないが、うまく機能している場合(読み取り:拡張性や読みやすさを含むすべての要件を満たすのに良い仕事をしている場合)、それをそのままにして、完璧な仕事を求めずにあなたがした良い仕事に満足してください。

これを読む。 en.wikipedia.org/wiki/Buyer's_remorse 非常に参考になりました。
S.Lott

3

継続的なリファクタリングが方法です。動作中のコードを変更しても問題は発生しないため、適切に実行することをお勧めします。コードが完全に単体テストされている場合、自信を持ってコードをリファクタリングできます。

実際の製品コードについて予測できる唯一のことは、それが変化するということです。それがどのように変化するのか、明日どのような新しい技術を学ぶのかを推測しようとしないでください。要するに、コードを「完璧」にしようとしないでください。あなたの現在の知識でできるだけ良いものにしてください。また、コードが徹底的にテストされ、拡張可能であることを確認してください。

既存のコードのリファクタリングに時間の20〜30%を費やしています。私はハイテク企業で働いており、「経営者」は既存のコードを変更することについて文句を言ったことはありません。ただし、一部の企業ではこれが問題になる可能性があることを認識しています。マーティンファウラーは彼のリファクタリング本でそれのセクションさえ持っています。

要約すると、それは私の経験では一般的な感覚ですが、否定的なものではありません。


2

すべてのモジュール/機能が生まれ、優先順位の世界で進化します。外側の世界の目標を達成するのに十分であれば、停滞することがよくあります。そのすべてが最終的にはより高い目的にサービスを提供する足場になります。はい、私たちはコードに執着する必要があり、そしてそれは私たちが停滞する原因にもなります。コード自体から少し焦点を移し、コードのプロデューサーであるあなたの内部で行われるプロセスをもっと熟考することはあなたにとって良い動きかもしれません。


2

これは多くの人に共通の気持ちですか?この言語特有の現象ですか?

それはあなたがあなたの知識と見解を拡大していることを意味します。

優先度の高いタスクがない場合は、常に戻ってコードを改善する必要があります。


「...戻ってコードを改善してください。」-これを行うために誰があなたに支払いますか?コードが機能したら、次に進みます。プログラマーとして学び成長するにつれて、常により良い方法を見つけ、以前の努力を改善できると感じます。それについて何でもしたいという衝動に抵抗してください-古いコードに戻って改善することは、ほとんど時間の無駄です。
ダウッドはモニカを復活させると

1
@David Wallace-誰も古いコードに戻る必要がなければ、そのような大騒ぎはしません。
ジェフ

1
「コードが機能したら、
先に進み

@ジェフO-それは非常に本当です。古いコードを維持する場合は、それが私のコードであろうと他の誰かのものであろうと、修正することを検討します。しかし、そのコードを維持する必要のある予算の背後にあるプロジェクトがない限り、それを片付けるのに費やした時間を正当化する方法はありません。もちろん、バグがない限り。
ダウッドはモニカを復活させると

@VJovic-本番環境にバグがあった場合、それはコードが機能しなかったためです。OPは正しく動作するコードについて話していたと思いますが、butいです。
ダウッドはモニカを復活させると

2

私はいつも前のクラスのスキルを強化するために数学のクラスを受講していると思います。あなたが代数IIを取るまで、代数は難しいように見えました。その後、代数で学んだスキルが役立ちました。それはプログラミング、執筆、木工、その他何でも同じです。

プログラミングコースを受講するとき、If-then-elseについて学びました。スイッチについて学ぶまで、多くのことをしました。あなたが新しいことを学んでいるとき、あなたはこの進歩を経験します、誰もがします。


2

過去に自分で書いたほとんどのコードを読むたびに、同じ気持ちになります。これは良いことです。これは、長年にわたって知識とコーディングスタイルが改善されたことを意味します。

稼働中のプロダクションコードの変更に関しては、明らかなバグを発見していない限り、これは大きな問題です。時間の無駄になるだけでなく、作成されたソフトウェアバグの大半はリリースされたプログラムに変更が加えられたときに発生するものであるため、さらに重要です。統計的には、予期しないバグが発生する可能性があります。壊れていない場合は修正しないでください。


1

アプリケーションの開発とは、アプリケーションを改善し、改善することを意味します。これは継続的なプロセスであるため、プログラミング中に経験と知識を増やすことができます。また、開発中であることも意味するため、古いコードを振り返ると、改善できることがわかります。

この感覚がない場合は、次の2つのいずれかを意味します。

  1. あなたはまだ同じレベルのスキルを持っています。
  2. あなたのコードはすでに完璧です(ほとんどありません)。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.