特定の問題に悩まされたら、私はGoogleで解決策を探します。
次に、コードを理解し、要件に応じてコードを微調整します。
たとえば、最近私は質問をしました Firefoxでのxmlドキュメントの読み取り スタックオーバーフロー。
Soufiane Hasso は、w3schoolsへのリンクを提供しました。ここでは、xmlドキュメントの解析の例を見つけました。この例がどのように機能するかを理解しましたが、コードをコピーし、要件に応じて微調整しました。たくさんタイプするのが好きです。
それで、私はコピー/貼り付けプログラマになりますか?
人がコピー/貼り付けのプログラマーである場合どう言いますか?
ありがとう。
私はここで唯一の反対意見になるようです。
まず、コピーアンドペーストプログラミングと貨物カルトプログラミングを区別する必要があります。 2つを融合しています。
プログラミングのコピーと貼り付け は、クラスやサブルーチンなどを作成するのではなく、同じコードをプログラムのさまざまな部分に逐語的にまたはわずかな変更のみを繰り返しコピーして貼り付けることを指します-注文コード構造は言語によって提供されます。これは言語/環境自体の欠陥の症状である場合もありますが、多くの場合、プログラマーが(または値) 抽象化 を理解していないためです。
明らかに、これがあなたがやっていることでない限り、あなたはコピーアンドペーストプログラマではありません。しかし、これはあなたが求めている質問ではないことは、あなたの活動の説明から明らかです。
あなたが実際に言及しているのは 貨物カルトプログラミング と呼ばれます。それはアンチパターンのセットであり、その1つは、プログラムの他の部分または外部ソースからのコードの大規模なコピーであり、それらがどのように機能するか、またはそれらがまったく必要かどうかを本当に理解していません。
多くのプログラマーがこれを非常に限られた範囲で行うことは事実かもしれません。たとえば、フレームワークまたはオペレーティングシステムのバグを回避する必要がある場合があります。他の誰かのバグについてはあまり知りたくないので、よく知られた回避策をコピーします。自分自身を修正します。しかし、プロのプログラマーにとっては、これらのケースは数が少なく、はるかに少ないはずです。
これを頻繁に実行していることに気付いた場合、それはあなたにとって赤旗になるはずです。そして、あなたはこの非常に説得力のない主張をしました:
[...]それから私はコードを理解しようとし、私の要件に従ってそれを微調整します。
多分これは本当です。多分。問題は、すべてのカーゴカルトプログラマーがこれを言うことです。問題は、あなたは本当にそれを理解していますか?本当に?
十分な時間があれば、必要に応じて最初から作成できるほど十分理解していますか?結果はバグがかなり少ないでしょうか?
それとも、あなたがコピーしたコードにrandom変更を加えるだけですか?
私は非難を平準化していません。私はあなたに会ったことがありません、私はあなたについて何も知りません。しかし、これはあなたが考える必要があるものです。
簡単なテストは次のとおりです。コードを「微調整」しているときに、頻繁に編集や再コンパイルを行っていますか?または、コードを1回か2回読んで、何をどのように変更する必要があるかすぐにわかりますか?
変更/微調整が1回目または2回目の試行で機能している場合、あなたおそらくは実際に適切なコードを理解しています。あなたがコピーされたコードでたくさん実験しているように見えるなら、私はあなたががカーゴカルトであると言ってすみませんプログラマー。
次回のためにそれを覚えておいてください。あなたが問題にどのように取り組むか見てください。ゲームパッドのボタンをマッシュするのと同等のコーディングを行っていることに気付いた場合は、次に進む前に、速度を落とし、使用しようとしているライブラリまたはアルゴリズムについてもう少し学ぶ必要があります。
「プログラマーのコピー/貼り付け」が否定的な場合、私は"いいえ、あなたは一人ではありません"と言います。あなたがそれを完全にうまくやっていること、そして実際、私が人々にそうすることをお勧めする方法を正確に。問題に対する他の人々の解決策を見ることは常に役に立ちます。遅く、愚かで、古くなっているため、多くの場合、最終的にそのソリューションを完全に捨ててしまいます。あなたが見つけたすべてのソリューションが良いものになるとは限りません。
しかし、あなたはこの方法ではるかに速く学ぶでしょう。
たくさんコピーして貼り付けます。他人から、そして私自身から。これには問題がありません。実際、私が開始するすべての単一のプロジェクトは、プロジェクトのスケルトンを作成するためにPasterと呼ばれる(皮肉にも、無関係な理由で)モジュールを使用することから始めます。なぜ自分でスケルトンコードを入力するのですか?
貼り付けを続けます。コードの機能と理由を理解していれば、問題はありません。
私の意見だけは(そして私は専門家ではありません)しかし、私は言わざるを得ません:いいえ。
私にとってc&pプログラマーは、なぜ機能するのか理解せずに、盲目的に何かをコピーするプログラマーです。
例が機能する理由を理解していて、修正を加えることが理解できると確信している場合は、コピーアンドペーストプログラマではありません。
私の意見では、アプリに文字通り何かをコピーアンドペーストし、コピーアンドペーストしたコードが機能する理由を知らずにコンパイル/実行することを期待している場合、あなたはコピーアンドペーストプログラマーです。
ニーズに合わせてコードを微調整できる場合は、「コピー/貼り付けプログラマ」の定義ではありません。
人がコピー/貼り付けのプログラマーである場合どう言いますか?
回答:賢いプログラマーです!
コードを盗むことをためらわないでください(ライセンスに違反しておらず、適切な場合は、Wordコードの再利用を作成します)。
私たちは宿題を自分でしなければならない学校にいません。
コードを再利用する最良の方法は、ライブラリを含めることです
アップグレードとバグ修正をお楽しみいただけるように。
罪悪感を感じてはいけません...
これで私はコピー/貼り付けプログラマになりますか? <<実際にはありません!
コピーアンドペーストプログラマーはコード自体を盗む人ですが、あなたは単にプロジェクトの些細なことについて考えているだけです。私はあなたがあなた自身のロジックを使用していると思います。
ただのんびりしてください罪悪感あなたの脳の中に家を建てましょう!
私は5歳のときに最初のコンピューター(a ZX Spectrum :)を手に入れ、それ以来プログラミングを続けています。
私が5歳のときは、コピーアンドペーストができなかったので、「コピーのみのプログラマ」でした。 「番号を当てる」のような簡単なプログラムのコードをリストした記事が載った雑誌を手に入れます。私はすべてのキャラクターを苦労してコピーします。次に、それをテープに保存して実行します。 13回目ぐらいになると実行されます。
その後、頭の中で自分のプログラムを作り始めました。インターネットを利用した瞬間にコピー&ペーストを採用しました。グーグルが現場に到着したとき、私はもっとやった。
他の人のコードをコピーして読んだり理解したりしますが、今は自分のコードをコピーしたり貼り付けたりすることはありません。
自分のコードをコピーして貼り付けると、悪いことが起こることに気づきがちです。たとえば、使用するすべての変数の名前を変更し忘れたり、どこかにリファクタリングする必要のあるコードを複製している場合があります。必然的にいくつかのバグパターンに遭遇しています。
プログラミング(php、asp、jsp)は変更される可能性がありますが、ロジックの方が重要です。
背後にあるロジックを理解すれば、すべてのプログラミングに取り組むことができます。コピー/貼り付けの場合はNpの問題。理解は重要です
ああ、悪い悪い悪いバードマン... Tsk tsk tsk .. C&Pは非常に悪い行動です。 (コードの実行内容とその実行方法がわかっている場合は、CTRL + CとCTRL + Vを使用します)非常に悪い人です。
システムにバグを引き起こさないコードをコピーして貼り付けたことはありません。ちょうど私の5¢。
私にとって、コピー/貼り付けプログラマとは、アプリケーションの別の部分で必要な作業に似たものを見つけ、そのコードをコピーして、作業しているコードのセクションに貼り付ける人です。
シナリオ1:次に、コードを変更せずにそのままにし、アプリケーション全体でコードの完全な複製を作成します。良くはありませんが、発見された場合は簡単に因数分解できます。
シナリオ2:同様のコードを見つけ、アプリケーションの新しい部分に貼り付け、それを変更します少し。後で発見されたときに除外することができますが、これらの小さな違いは、お尻の大きな痛みになります。
解決策:より一般的な解決策(クラス、コンポーネント、何を持っているか)を算出し、その新しいコンポーネントをアプリケーションの両方の場所で使用します。
インターネットでコードを見つけ、アプリに貼り付け、適切に変更することは、アプリケーションコードがまとまりのあるセットになり、ある種のフランケンシュタインコードではない場合は問題ありません。あなたがそれが何をしているか、あなたがそれを将来どのように修正するかを理解している限り、私は問題を見ません。私たちのほとんどは、これまでにないことをしようとするときに解決策を探してグーグルだと思います。 「このコードを変更することはできません。インターネットで見つけたのですが、コードの内容がよくわからないので、そのままにしておく必要があります。」
コピーアンドペーストプログラマとは呼びません。あなたは実際に(あなたが言ったように)これを盲目的に行っているのではなく、コードを使用する前に実際に何が起こっているのかを理解しています。その中には何の問題もありません。
基本的にはWord for Wordで入力することを意味する場合でも、実際には自分でコードを入力します(または、コードごとに文字ごとに入力しますか?)。貼り付けをコピーするときはいつでも、その背後にあるロジックを覚えていても、その問題がどのように解決されたか正確に忘れてしまうことがよくあります。コードを読んだだけでは登録されない微妙なニュアンスや微妙な点がたくさんありますが、その理由は理解できます。実際にタイプアウトすると、詳細や隠れた問題に直面し、他の方法では見逃してしまう間違いを犯しやすくなります。
人々は多くの場合、既存のコードベースでほぼ解決策を探し、ほぼ解決策をコピーして修正します。私はそのような重複したコードは全く悪いと思っていました。
(しかし、私はたくさんやるので、それは間違いではありません!実際問題として、私は誰もがコピー・ペースト・プログラマーであると思います)
私が今それを認識しているのは、短期的にはプログラマーを効率的にし、長期的にはマイナスの結果をもたらす手段です。
コードの複製(コピー、貼り付け、編集)でできることは、プログラマーが問題の解決策を見つけて、おそらく最初から書くよりも迅速にカスタマイズできるようにすることです。 (短期的な)時間とコストの観点からは、これはほぼ勝利です。
問題は、複製されたコードには、元のコピーに組み込まれた一連のバグと前提条件が含まれていることです。バグが1つ見つかった場合、または前提条件の基本セットが変更された場合は、すべてのコピーを再検証する必要があります。そして、人々は自分のコードがクローンでいっぱいであることを知っているように見えますが、彼らは通常、自分が変更しているコードがどこかにクローンを持っているかどうかを知りません。ですから、クローンは修正されません、そしてそれはその長期的なマイナスの結果です。
私は今、正しい答えは、プログラマーがクローンを作成するように奨励されるべきであり、すべてのクローンの場所を追跡するためにいくつかのツールを使用する必要があると考えています(プログラマーは不本意または不可能であると思われるため)、プログラマーにクローンを変更するとき、または彼女に彼女が開始する前にセットを調べ、クローンを抽象化します。
さまざまなクローン検出ツール があるので、追跡しなくなった人々に言い訳はありません。
(私は 10年以上前に1つ作成した であり、それを使用することでこの結論に至りました)。
いいえ、あなたは学んでおり、ほとんどの人は他のコードをハッキングすることで学んでいます。
最終的には、ほとんどの場合、APIを確認することになります。ナマケモノから自分のコードまたは他の人のをコピー/貼り付けするときに、自分をコピー/貼り付けプログラマと呼びます。
私はいつも「コピー・ペースト・プログラマー」はプログラミングの「スタイル」を指していると思っていました。
たとえば、コピーと貼り付けのプログラマは、コードを1か所だけに配置するようにプログラムを適切に設計したり初期関数を一般化したりする代わりに、自分の関数を何度かコピーして貼り付け、毎回少しずつ微調整します。
とにかく、これは私が「コピーアンドペーストプログラマ」と言ったときにいつも人々が意味すると思っていたものであり、この定義により、他の人のサンプルコードのコピーアンドペーストは完全に問題ありません。
これが私の5セントです。 c/pプログラマであることは、ある程度、専門分野によって定義されます。つまり、Web開発者であれば、サポートされているソースコードなどを使用して、件名に関する多数の情報を見つけることができます。このコードを使用しないのはばかげています。しかし、リアルタイムシステム、EDA、クラスターシステムなどの分野で作業している場合、1日を節約できるサンプルコードを見つけることはほとんど不可能です。特定のアルゴリズムについて考えて実装することは、はるかに簡単で効率的です。自分で。
もちろん初心者の場合、タスクに対処する最も効率的な方法は、他の人がどのようにそれを完了したかを知ることであり、したがって他の人のソースコードを研究して使用することです。それが私が始めた方法ですが、後で開発者として成熟すると、利用可能なソリューションのほとんどがそれほどエレガントではない、パフォーマンスの問題がある、または単に醜いということに気づくでしょう。あなた自身のコード。
再利用再利用は、物事が行われることになっている方法にますますなっていると思います。あなたがどれだけそれをやるのか、あなたがどれだけ自分自身を振るのかと比べて、おそらく主に気質の関数です。気性と、いくつかの悪い初期の経験と同様に、私はパッケージをコピーしたくないので、自分でそれを実装する方法を見つけたいと思います。しかし、これには明らかに欠点があります。私のような人々は、低レベルの手順の設計/構築について多くを学びますが、オープンソースで見つかる多くの既存のサブ関数を使用する大きなアプリを構築することは絶望的に非効率的かもしれません。チームに所属している場合、少なくとも1人のプログラマーがロール・ヒスン型であることは良いことです。斬新な解法が必要な場合は、彼がそれらを書くのが最善です。ただし、既存のコードの検索、評価、統合にも熟練した人も必要です。時間が経つにつれ、C/P活動の重要性が増すことは避けられないと思います。