this の質問に従って:自分のクライアント/トラッカーを作成するためにBitTorrent仕様を実装することにしました。
今、私は仕様を検討していました。誰かが書いたC#のBEncodingの実装へのリンクを見つけたとき、私は約70%がBEncodingの実装を完了していました。
通常、プロダクションコードで作業している場合は、それをリファレンスとして使用して自分の作業をチェックし、ベースラインを使用してコードを実行するためのテストを記述しますが、「私はこれを作成しています。期限のないおもしろいプロジェクトです。本当に自分で実装する必要があります。たくさん学ぶことができました」と頭の中で声を上げたところ、「なぜわざわざホイールを再発明する必要があるのですか? 「スタイル/命名規則があれば完了です。」
だから私は少し矛盾しています。最終的には後者をやるようになり、その一部は自分が書いたものよりも優れていると感じましたが、ほとんど「だまされた」ような気がします。
あなたはどう思いますか?それは私をだますことですか?完全に正常ですか?自分で学ぶ機会を逃した?他の人の例から学んだ良い機会ですか?
さらに見たなら、巨人の肩の上に立つことです。
アイザック・ニュートン
コードがオープンソースであり、時間をかけて理解したとしても、不正行為とは言えません。明らかに、これは時間の制約により常に可能であるとは限りませんが、使用しているコードの概要を常に把握してください。 CはBから派生したものであることを常に覚えておいてください。
1つからコピー、それは盗作です; 2つからコピー、それは研究です。
良いリスナーはどこでも人気があるだけでなく、しばらくすると彼は何かを知るようになります。
つまり、必要なものはすべてコピーしますが、そこから何かを学びます。優れた研究者/科学者/エンジニアは、自分の仕事だけに頼ってどこにも行けませんでした。
ニュートンが「他の人より少し遠くを見たのは、巨人の肩の上に立っていたからだ」と言えるのに対し、「今日、私たちはお互いの立場に立っている」と言わざるを得ません。おそらく、私たちすべてのコンピュータサイエンスで直面する中心的な問題は、ささいに異なる方法で作業をやり直すのではなく、他の作業の上に構築する状況にどのように到達するかです。 方法。
— R.W。ハミング 、1968年チューリング賞講演[強調鉱山]
その状況では、それは本当にあなたがそれについてどのように感じるかに依存します。私はいくつかのことを経験し、Markdownに準拠させました。 PHPでマークダウンパーサーを書き換えましたか?いいえ、他の人のものを借りました。また、PDF変換を追加しました。独自のPDFコンバーターを作成しましたか?Zend_PDFのドキュメントを一見すると、丘に向かって叫びたくなったので、他の誰かのコードを使用することを再び告白します。
期待が学習プロセスである場合、私はそれをガイドとして使用します。自分で書いて、比較します。比較を使用して、独自のコードを改善します。
この質問に答える最良の方法は、あなたの目標を評価することです。どうしてこのペットプロジェクトを始めたのですか?
テクノロジーを学びたいですか、それとも新しい言語やテクニックを試したかったですか?もしそうなら、あなた自身のものを書いてください。
それとも、完成した製品が欲しかったので始めましたか?プロジェクトはあなたのいくつかのニーズを満たしていますか?もしそうなら、借りて頻繁に借ります。
さてここに私の2セントがあります...なぜ大学は、学生が既存のライブラリを使用するのではなく、独自のハッシュテーブル、リンクリスト、配列などを書くように主張するのですか? 1)彼らがそれらのデータ構造の根本的な概念を理解できるように...
しかし、私はプロの開発者として、何か新しいことを学んだり、現在の「ホイール」を改善したりしない限り、ホイールを再発明しないことに全力を注いでいます。私は他の人のコードから学ぶことに全力を注いでいます。新しいライブラリを書く時間がなかったり、内部の仕組みを知らずに機能モジュールが必要なだけだったりすることがあります。機械...
しかし、個人的な充実のために-まあそれは完全にあなた次第です:P。できる限り多くのことを学びながら、車輪を再発明しないことは良い原則です。または...ホイールに代わるものを考え出す...
C#を使用しているので、すでにフレームワーク(.NetまたはMono)を使用していると思います。 .Net Frameworkには、すでに行われている多くの機能(tcp通信など)が付属しており、stackoverflow.comなどのサイトで見つけたコードスニペットもコピーしていると思います。
さらに、他の人のコードを理解し、いくつかの点で自分よりも優れていることを理解するのに十分な(自分で70%を実行することによって)をすでに学習しました。
コードがニーズに適合し、オープンソースである場合は、それを採用してください。しかし、その一方で、私がやらないことは、コードを変更してそれをより多くすることですyoursのように。コメントを追加し、ヘッダーを設定して、どこからコードを抽出したかを確認しますが、拡張できない場合は変更しないでください。
「最良のコードは、記述する必要のないコードです。」 - わからない
コードが自由に使用でき、ライセンス条項がそれを使用する目的に適している場合、問題は何ですか?
他の人のコードを使用することは、時間と労力を節約するための優れた方法であり、合法的にそれを実行している限り、良いことしか得られないと思います。
私の答えは確かに私のポイントから偏っていますが、他の人からのコードを使用することはブラックボックスで遊ぶようなものです。毎日ホイールを再発明する必要はありません
サードパーティのコードがどのように記述されたかに応じて、「ここから未知の結果の領域に入る」という警告とともに線を引くこともできます