ホイールの再発明とは何を意味しますか?


8

以下のシナリオは、あなたの本の中で「車輪の再発明」として数えられますか?

  • ソリューションは存在しますが、使用したい言語ではありません。既存のソリューションは、使用したい言語とクリーンで慣用的な方法でインターフェースすることができません。

  • 原則として、既存のライブラリーに大幅な変更を加えて目的の機能を実行させることができますが、最初からやり直す方がおそらく簡単だと思います。

  • あなたが書いているものは、すでに行われているものと同じ1行の説明ですが、異なるニッチをターゲットにしています。たとえば、問題は以前に何十億回も解決された可能性がありますが、大規模なデータセットでは効率が悪く、コードは大規模なデータセットでうまく機能します。


4
「おそらく最初から始める方が簡単だろう」-それはめったに…

また、「大幅な変更」は、すべての人に適しているとは限りません。いずれにしても、「ゼロから始める」前に、既存のコードを注意深く検討することが最善です。
rwong

人々が「例」を書くとき、同じアイデアの別の抽象化ではなく例を書いてください。
表示名

1
この時点でホイールの検討をやめて、車軸が当たり前のことだと気づくべきだと思います。
Tim Post

回答:


12

目には実用的な解決策になる既存の解​​決策がある場合、それを使用せずに独自の解決策を作成することは、車輪を再発明することになります。それ以外は、非常に主観的です。

特定のシナリオについて:

  1. 常にクリーンで、メンテナンスが容易で、理解しやすいコードが必要です。それは私見、ホイールを再発明する以上です。ただし、時間の制約により、これを解消したい場合があります。
  2. ゼロから始める方が簡単な場合は、それを行います。また、コードが特定のニーズに合わせて調整されている場合は、おそらくより良い結果が得られます。
  3. ソリューションが問題の悪いソリューションである場合、ホイールを再発明して新しいホイールを作成するのではなく、より良いホイールを作成します

1
ごみをゼロから書き直すソリューションがある場合は、追加することもできます。
エリン

2
@Erin-書き直した方がいい場合は、実際には解決策ではありませんでした。
JeffO 2011年

@Jeff O、経営者はそれが解決策だと思ったかもしれません。私は本当に書き換えを必要とする多くの悪いVB6コードを扱ってきました。
Stephen Furlani

1
「私は何でも構築できますが、ライブラリに新しい機能を構築したり、バグを修正したりすることはできません!」
Kevin Laity、2011

@Kevin Laity:そして、ライブラリがオープンソースである限り、フォークすることができます
Anto

8

分析を行って自分で何かを書くべきであるのに、他の人が書いてはならないことを分析すると、他の人があなたを非難するのは、車輪を再発明することです。


2

ホイールの再発明は非常に簡単に定義できると思います。長期的に見ると、ライブラリを使用するよりも、自分で書くより多くの作業を行う場合です。長期的に見れどれだけの作業が必要になるかは必ずしも明確ではないことに注意してください。ライブラリを組み込むために既存のコードをリファクタリングするよりも速く自分でプロトタイプをハックできるかもしれませんが、長期的には、機能を追加したり、コードをサポートする必要がある場合、ライブラリはよりうまく機能します。

重要なのは、ライブラリを使用するかどうかを決定するときは、状況について慎重に検討する必要があるということです。ライブラリが、今したいことに対してより簡単であるか、将来的に何をするために簡単であるかを決定する必要があります。将来何をするかを知ることは必ずしも簡単なことではありませんが、良い計画があれば、大まかな考えが必要です。とは言っても、予測が不正確な場合があります。一般的に、ホイールを発明した後は、それを完了するまでホイールを再発明したことに気づかない場合があります。


1
場合によっては、既存のライブラリを使用するとメンテナンスコストを節約できる場合があります(たとえば、他の誰かのライブラリを使用してレジストリにアクセスした場合、Microsoftが32ビットアプリケーションがレジストリにアクセスする方法を変更した場合、簡単に自分でライブラリアクセスコードを変更せずに、そのライブラリのアップグレードバージョンを取得する)一方で、メンテナンスコストが増加する場合があります(たとえば、ライブラリは、自分で記述したコードであっても、レジストリから設定を読み取ることができることに依存しているため)しないだろう、そしてコードの作者は決して...
supercat '18

1
... Microsoftによるレジストリの再マッピングを許容できるバージョンをリリースするため、自分で変更する必要があります)。外部ライブラリの使用がメンテナンスコストにどのような影響を与えるかを予測するのは難しい場合があります。これは、認識できないもの(Microsoftが既存のコードを破壊するためにオペレーティングシステムに加える変更など)に依存する可能性があるためです。
スーパーキャット'18

1

それぞれのケースが異なるからといって、正確で正確に答えることはできません。

必要に応じてホイールを再発明することは完全に許容できます。重要なのは、前のホイールが許容できるソリューションであるかどうか、スムーズな乗り心地を提供するのに十分な丸みがないかどうかを判断することです。

これは、最良のアプローチが使用されていることを確認するために、ほぼ修辞的に尋ねられる必要がある質問です。たいていのプログラマーがそれを見つけるのにかかる時間で書くことができるよりも、あなたは本でより良いアルゴリズムをしばしば見つけることができます。


1

問題が大きく複雑になるほど、ニーズにぴったり合うホイールが存在する可能性が低くなり、再構築する正当性が高まります。

基本的な要素(プラットフォームに既に組み込まれている機能、よく知られているデザインパターンなど)、または問題の正確な解決策が利用できる場合にのみ、「ホイールを再発明しない」を適用する必要があると思いますが、それはめったにありません。

あなたの3ポイントは、私にホイールを再発明したとは見なされません。


0

場合によります ...

最初の2つについて:

  • 解決策は存在しますが、使用したい言語ではありません...
  • 原則として、既存のライブラリーに大幅な変更を加えて、望んだことを実行することができます...

これらのどちらの場合でも、独自のコードを記述することは理にかなっています。しかし、これを考慮してください:既存のソリューションには、あなたが学ぶことができるテクニック、アルゴリズム、またはルーチンが含まれていますか?これらを無視すると、車輪が再発明されます。

  • あなたが書いているものは、すでに行われているものと同じ1行の説明です...多分あなたの問題は何十億回も解決されていますが、大規模なデータセットでは非効率的です...

3つの質問:

  1. ジリオンはたくさんあります。あなたは本当にすべての既存の実装を見てきましたか?
  2. 効率が主な問題ですか?
  3. あなたは、最適なソリューションをコーディングする必要がありますか(後で再書き込み)?

これらのいずれかに対する答えが「いいえ」である場合、ホイールを再発明しています。


とはいえ、とにかくホイールを再発明することは常に悪いことだとは確信していません。

  1. これはを学ぶのに最適な方法であり、既存のソリューションを本当に理解する唯一の方法です。
  2. 他の人の車輪は良くないかもしれません。それはより良いホイールを作る唯一の方法です。
  3. 他の人のホイールが優れている場合でも、より優れたホイールを作成することでビジネスを成功させることができます。

0

最初のシナリオは、ホイールの再発明にも当てはまります。

2番目のシナリオは、既存のコードがほとんど変更を必要としない場合は適用されませんが、必要な場合は、既存のコードと同様のプロパティ、メソッド、および使用法を使用することをお勧めします。 "ホイール"。

「常に最初から始める方がよい」というアプローチには注意してください。予想よりも時間がかかる場合があります。

3つ目のシナリオは、その "実用的な"アプローチです。「与えられた車輪」はその仕事をするかもしれませんが、実際には、あまりにも多くのリソース、メモリ、速度などを消費します。

単一のテーブルからツリービューコントロールに階層データを表示する必要があるアプリケーションで一度作業しました。これを実行できるコントロールは既にありますが、アイテムごとにいくつかのテーブルをサポートしています。

それを使用するためには、多くのことを学び、あまりにも多くのプロパティを割り当て、あまりにも多くのメソッドを実行しなければならず、ITが遅くなりました。同僚は、「ホイールを再発明しない」ために、それを使用することを主張しました。

私は新しいコントロールを最初からやり、1つのテーブルを読み取り、いくつかの学習しやすいプロパティのみをプログラムしました。そして、私がそれを知る前に、共有コードリポジトリからそれを取得し、以前のコントロールを置き換える別の同僚がいました。

ボーナス:

あなたが既に持っている車輪が「二乗」されるとき。「二乗」とは、表面的には問題の解決策のように見えますが、よく見ると、結論は得られますが、そうではありません。

車輪を再発明するためのスキルと時間(および会社の承認)があるかどうかによって異なります。


0

まず、ジョエル・スポルスキーによるこの優れた記事を読んでください:発明されていないここの症候群の防衛

その後、すべての技術的な理由は本当に小さなニュアンスになります。このソフトウェアがあなたの仕事にとって重要であると感じたら、それを書き直してください。はい、それは「車輪を再発明する」ことですが、それはおそらく執筆と保守に時間を費やす価値があります。重要でない場合は、利用可能なものを使用してください。

...重要なビジネス機能をアウトソーシングしなければならなかった場合、アウトソーシングは地獄であることに気づくでしょう。顧客サービスを直接制御しないと、あなたはnightmarishly悪い顧客サービスを取得するつもりだ-種類の人が自分のブログで書い彼らは誰か、取得しようとしたとき、誰が、一部の電話会社からも、最も基本的なことを行います。フルフィルメントをアウトソーシングし、フルフィルメントパートナーが迅速な配達を構成するものについて異なる考えを持っている場合、顧客は満足することはなく、最初のフルフィルメントパートナーを見つけるのに3か月かかったので、あなたはそれに対して何もできません。場所、そして実際には、あなたも知らないでしょうあなたが顧客と話をすることができないので、あなたの顧客は不満です。あなたはあなた自身の顧客に耳を傾けないという明確な目的でアウトソーシングされた顧客サービスセンターを設立したからです。あなたが買ったそのeコマースエンジン?アマゾンが彼らが書いたオビドスで行うことほど柔軟になることは決してありません。(そうである場合、Amazonは同じものを購入した競合他社に勝る利点はありません)。また、既成のWebサーバーが、Googleが手作業でコード化し、手作業で最適化したサーバーで行うのと同じくらい高速なものはありません。

残念ながら、この原則は、「コードを再利用して良い-ホイールを再発明して悪い」という理想と直接矛盾しているようです。

私が提供できる最高のアドバイス:

    それがコアビジネス機能である場合-何があっても、自分で実行してください。

コアビジネスコンピテンシーと目標を選択し、社内で実行します...

プロットが競争上の利点となるコンピュータゲームを開発している場合は、サードパーティの3Dライブラリを使用することもできます。しかし、クールな3D効果があなたの特徴的な機能になるなら、あなたはあなた自身を転がした方がいいです...

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.