web-dev-qa-db-ja.com

独自のコードを作成するよりも、既存のコードを読み取って変更するほうが優れていますか?

私は経験の浅いプログラマーです。私は、Firefoxプラグインの開発に割り当てられており、経験はありません。それで、私はMDNのチュートリアルに従いました。たくさんのことを学びましたが、同時に刺激的で圧倒的です。

ようやくプログラミングを始めたとき、チュートリアルが提供してくれた拡張機能を使い、それを修正しました。そして、私の拡張機能が行うことのほとんどすべてを行うコードがたくさんあることに気付いた後、私はこれらのコードを分析し、自分のニーズに合うようにいくつかの変更を加えてマイニングするためにそれらを埋め込んでいます...

だから、ええ、基本的に私が求めていることは、多くの時間を費やして人々のコードを観察し、それを修正する代わりに、自分自身でプログラマとしてのスキルを向上させることですか?

28
rpgs_player

他の人のコードを読むことは実際には非常に良い習慣です。何がそこにあるのか、そしてプログラマーコミュニティがおそらくなじみの深いものを理解するための最良の方法だからです。あなたのコードは、あなた自身とそれを維持する必要のある他のすべての人が理解できる必要があります。そのため、たとえ何が読み取り可能で何が読み取り不可能であるかを理解することが重要です。例。

再利用と独自の実装の比較については、他の人のコードを読んで理解せずにコピーすることは、要件を満たすことを期待して悪いことです。

しかし、あなたが望むことをする既存のコードを検出して再利用することは良いことです。なぜなら、それはあなた自身のバージョンを書くよりも効率的であり、それを見つけてそれが実際に望ましいことをすることを決定することによって、あなたはできることを証明しました。原則として、必要に応じて自分でソリューションを書き直してください。その結果、時間を節約できますand学習をお見逃しなく。実際、既存のソリューションを研究することは、何かを行う方法を教える重要なポイントであり、新しい何かを学ぶことができますand同時に時間を節約できます。

他の誰かのコードをコピーするためのリトマステストは次のとおりです。時間を節約するためにコードの機能を理解して再利用しますか、それとも問題のあるバージョンを次々と投げて、うまくいくものを見つけますか?

42
Kilian Foth

他の人々のコードを読んで使用することは、学ぶための優れた方法ですが、それはまた罠になることもあります。 Cargo Cult Programmerになりたくありません。

http://en.wikipedia.org/wiki/Cargo_cult_programming

カーゴカルトプログラマという用語は、熟練していないか初心者のコンピュータープログラマー(または、目の前の問題を経験したことがないプログラマー)がプログラムコードを1つの場所からコピーし、別の場所に貼り付けるときに、コードの動作をほとんどまたはまったく理解していない場合、または新しい位置で必要かどうか。

重要なテストは、使用しているコードを理解しているかどうかです。コードを取得して変更した後、コピーしたコードを参照せずに、最初からコードを書き直す必要がある場合はどうでしょうか。

まったく同じコードをもう一度書き出すことができるという意味ではありません。同じアルゴリズムを同じまたはより良い方法で適用して、同じ結果を得ることができるということです。

コードを適切に理解している限り、他の人から学ぶことは素晴らしいことです。ただし、プログラムにコードを挿入するときは、コードのすべての行を理解する必要があります。それが何をするか、どのようにそれを行うか、そして最も重要なのはなぜそこにあるのかを理解することです。

15
Tim B

" The Psychology of Computer Programming "の中でGerald M. Weinbergはプログラミングは一種の執筆であると書いています。小説家はより良い小説家になるために何をしますか?彼らは学ぶことができるように非常に良い作家によって書かれた多くの本を読みます。プログラマーがコードをほとんど読み取らないという事実に、著者は驚いています。

他の回答で書かれているように、私たちが読むコードを理解することは、それについての知識を得るために不可欠です。

読み取る高品質のコードを見つけるのに適したソースは、たとえばgithubやgoogleコードで見つかったさまざまなオープンソースプロジェクトです。注意:すべてのオープンソースプロジェクトに、クリーンでよく書かれたコードが含まれているわけではありません。もちろん、それらのプロジェクトの量は、私たちが書く言語に強く依存します。

実際には、既存のソリューションを探すことをお勧めします。ビジネスの世界では何が重要か:あなたは問題を解決しましたか?そして、もしそうなら、どのくらいの時間がかかりましたか?それは良い解決策ですか?

このコメント に記載されているような(ここでは合法的な)良い解決策については、著作権で保護されているもの、ライセンスされているもの、そうでないものに常に注意してください。チュートリアルは、コードの使用例を示すために存在し、適用すると、プログラムのベースとして機能します。

既存のソリューションをコピーすることは、作業を加速するために不可欠な方法です。また、それを行わないと、常に ホイールの再発明 になります。

経験を積むと、ある種の作業を生成、自動化、一般化などできることに気づくでしょう。効率的な既存のコードをコピーするのは悪いことではありません、ニース。他の人が言ったように、あなたが何をコピーするかを理解することが重要であり、あなたはそれを最適化できるかもしれません。あなたが実際に何をしているのかを理解することで、あなたは一般化を行うことができ、おそらく恐らく恐れる「コピー・ペースト・プログラミング」を回避するでしょう。

指摘することが重要です。あなたの仕事に適切なAPIを見つけることは、プログラマーの仕事の一部です。実際には、APIを使用してコードをコピーすることも、この観点では同様の作業方法です。
APIを使用して2日間で問題を解決し、30日間で新しいコード(一般的にはAPIと同じことを行う)を書くことは無関心であると誰もが思うリソース管理の問題です。

3
CsBalazsHungary

やりたいことのほぼ80%がすでに完了していることがわかります。これについてのことわざがあります"車輪を再発明しないでください。もっとうまくできる場合を除いて。"

プログラミングの大部分は、コードの作成ではなく、動作の研究です。ユーザーの行動、行動、ベンダーの行動、職場の行動。コードレビューはこれの重要な部分です。

プログラマーとして、コーディングの仕方を知ることはあなたの仕事ではありません(それは確かに必要ですが、それは仕事の核心ではありません)-プログラマーとしての仕事の核心は研究者になることです。ドキュメントの読み方を知る。問題を解決する方法を知ること。 IDEコーディングで費やす時間が、ブログやチュートリアルをグーグルで読むよりも少ないと思うでしょう。

いいえ、これは悪い習慣だとは思いません。

2
Ciel