「車輪の再発明」の反対のアンチパターンの名前は何ですか?[閉まっている]


101

車輪の再発明」アンチパターンは非常に一般的なものです-すぐに使えるソリューションを使用する代わりに、独自にゼロから作成してください。コードベースは不必要に成長し、同じことをするわずかに異なるインターフェースがわずかに異なりますが、わずかに異なりますが、すぐに利用できる関数を書く(そしてデバッグする)時間は無駄になります。私たちは皆これを知っています。

しかし、スペクトルの反対側に何かがあります。2行のコードである独自の関数を作成する代わりに、フレームワーク/ API /ライブラリをインポートし、インスタンス化し、構成し、フレームワークで受け入れられるようにコンテキストをデータ型に変換し、必要なことを正確に行う1つの関数を呼び出します。ギガバイトの抽象化レイヤーの下の2行のビジネスロジック。そして、ライブラリを最新の状態に保ち、ビルドの依存関係を管理し、ライセンスの同期を維持する必要があります。また、インスタンス化のコードは、「車輪を再発明」した場合よりも10倍長く複雑です。

理由はさまざまです:コストに関係なく「車輪の再発明」に厳密に反対する経営陣、要件とわずかに重複しているにも関わらず、彼らの好みの技術を押している人まだ到着していないフレームワークの使用、またはいくつかのインポート/インクルード/ロード命令が「舞台裏」で伝える「重み」を誤解している。

この種のアンチパターンに共通の名前はありますか?

(それが正しいか間違っているか、それが本当のアンチパターンまたは意見に基づいたものである場合、私は議論を始めようとはしていません。これは単純で客観的な命名法の質問です。)

編集:提案された「重複」は、外部システムとは完全に離れて、「すべての準備を整える」ために独自のコードをオーバーエンジニアリングすることについて語っています。このことはある場合にはそれから生じるかもしれませんが、一般的には「車輪の再発明への嫌悪感」に由来します。問題に対する「既製の」解決策が存在する場合、それどの程度適合しておらず、どのような費用がかかっても、それを使用します。新しいコードの作成とメンテナンスのコストと比較した場合、これらの依存関係の統合とメンテナンスのコストを完全に無視して、コードの重複よりも新しい依存関係の作成を独断的に支持します。


52
依存地獄。それは私が考えることができる最も近いものです。
マチャド

5
@Machado:いいですね、Dependency Hellはこのアンチパターンの豊富さの直接的な結果だと思います。非常に複雑なシステムの場合、複雑さの直接的な結果として生じる可能性があります。
SF。

27
Feature_creepまたはScope_creepに類似した「依存関係クリープ」と呼びます。ここでは、元々不要な機能が製品に追加されています。
k3b

21
Tle left-pad fiasco は、この症候群の実際の実例です。
SF。

13
これを集合的にLeftPadと呼び始めることをお勧めします。
ラバーダック

回答:


9

いいえ。説明している内容をカバーする一般的なアンチパターン名はありません。


4
それは多くのアイデア、提案、議論を伴って現れ、実際に正しいです。
SF。

3
私はこれをしているのが汚いと感じています。
SF。

え?「XXXはありません」は非常に強力な声明であり、特にコメントで言及されている候補がいくつかあることを考えると、証明するのは非常に困難です。
-AnoE

1
@AnoE「この種のアンチパターンに共通の名前はありますか?」上記のコメントと回答の証拠は、存在しないことを強く示唆しています。確かに、タイトルには答えませんが、質問自体には答えます。
-Kroltan

@AnoEネガティブ、ホンを証明することはできません。たぶんこの用語はボルネオのどこかにある岩の下に隠れているのかもしれませんが、私たちはまだ転落していないのでしょうか?無数の賛成票で1つではなく10の答えがあるということは、私にとって十分な証拠です。

49

ゴールデンハンマー

金色のハンマーは、それが派手だからこそ選ばれた道具です。目的のタスクを実行する上で、費用対効果も効率的でもありません。

ソース:xkcd 801

(ダウン票にもかかわらず、私はこの答えを支持します。意味論的にホイールを再発明することの正反対ではないかもしれませんが、それは質問で言及されたすべての例に適合します)


5
Upvoted、あなたはまた、ウィキペディアからそれを調達することができます:en.wikipedia.org/wiki/Anti-patternen.wikipedia.org/wiki/Law_of_the_instrument
Pierre.Sassoulas

3
担当者がいれば、これに反対票を投じます。質問全体に答えるわけではありませんが、提案されたシナリオの1つだけに答える1つの(正確な)用語を提供します。
デビッド

3
反対が求められました。これは、 "Becquerel"(放射、単位はs ^ -1)をヘルツ(hz、単位はs ^ -1)の代わりに音楽に使用できると主張するようなものです。
するThorbjörnRavnアンデルセン

@ThorbjørnRavnAndersen私は今日、かなり危険な音楽を聞きました。

34

ロバート・マーティンは、「フレームワークの限界」という用語を使用して、このアンチパターンの最も明白な否定的な結果を指します。パターン自体に共通の名前はないと思うので、この結果への参照はほとんどの目的に十分です。


1
開発プロセスを高速化するフレームワークが存在します。それらはブースターロケットのようなものです。使用されるとすぐに消費されます。解決策は、リリースバージョン1です。そうです、ソフトウェアを開発しています。次! メンテナンスは別の関心事であり、私は最近では重要ではないと思う。次のフレームワークを次のソリューションに持ち込み、急いでください。

18

Invented Here」に関するこのウィキペディアのページでは、わずかに異なる状況を説明していますが、最終結果は非常に似ています。同等の機能が見つかった場合に独自のコードを作成することに対するチームの嫌悪感を説明します。

私は名前が少し誤解を招くと主張します。それと逆の文脈で言えば意味があります。ここでは、Not InventedはIMHOが車輪の再発明の同義語です。


13

社内で物事を開発することに対するバイアスを意味するアンチパターンの名前として、「Buy Versus Build」と「Invented Here」を聞いたことがあります。(「購入対ビルド」というフレーズは実行可能な選択肢の選択肢を示すはずですが、「購入」が正しい選択であると誰かが信じる場合に言及されることが多いと思います。)


9

蚊を殺すために大砲を使用しないでください

孔子

別名オーバーキル


5
一般的な(英国)英語のフレーズは「ナットを割るためにハンマーを使用する」です。
nigel222


また:「戦車での鹿狩り」
ジュートナルグ

「叩きはハンマーでハエ」

ハエを殺すためにハンマーを使用しないでください
-jeffmcneill

8

膨張は広義の用語ですが、説明する内容を含めることができます。私たちのソフトウェアは、必要なすべての追加の変換と抽象化のために過度に複雑になり(肥大化)、複雑さと依存関係自体の両方がパフォーマンスの低下/効率の低下とリソース消費(ディスク、帯域幅)につながります。

必要に応じて、肥大化した依存関係のような用語で明確にすることができます。


5

ハンマーを使ってナットを割るのはかなり近いと思います。それは可能なことですが、望ましくない副作用が多数発生することなく、1つのナットをそのように分解するには、途方もない量の作業が必要です。(そして、クラックするナッツの袋全体があります...)

このフレーズには、専門用語を計算していないという利点もあるので、持っていない人に手がかりを与えるのに非常に役立つかもしれません。

ところで、依存関係hellで描かれる区別があります。誰かがすでにカプセル化内にすべての複雑さをラップしており、シンプルで明確で使いやすいインターフェースを作成し、CPUサイクルまたはメモリ使用量のペナルティが過剰ではなく、カプセル化されたコードの将来の変更が提供される可能性が低い場合必要な場合、それを使用することに対する残りの引数は、それが引き起こしている可能性のある依存関係の地獄です。


5

正確なアナログはないと思いますが、過剰設計または過剰設計が最も近いと言えます。

少なくとも、あなたが説明したものに似た何かに出会ったとき、これが本当に起こっていたと主張します。

独自のコードを記述する代わりにライブラリを使用して同じ機能を実装することは、ほとんど有害ではありません。

仮の例でも、ライブラリを使用して「2行のコード」を置き換える必要はないかもしれませんが、実際に2行のコードと同じことを行うことを目的としたライブラリである場合は、それほど悲しむことはありません。 。

シンプルなことをするライブラリもシンプルになります。あなたの質問が暗示している頭痛をあなたに与える可能性はありません。

複雑なライブラリを使用して簡単なことを行うことは、おそらく、必要な機能を実装する以上のことをしようとしていることを意味します。

必要のない機能の組み込み、今後はないかもしれない未来への準備など。

ここでの問題は、ホイール自体を再発明することに失敗したことではありません。


4

ホイールを再発明していない場合、おそらくベンダーまたはサードパーティから提供されている既存のホイールセットを使用している可能性があります。

これがアンチパターンである場合、通常はベンダーロックインと呼ばれます。


6
私はそれが同じことだとは本当に感じていません。ベンダーのロックインは、ベンダーのソリューションに依存するという特定のマイナスの結果であり、ベンダーの使用が選択時に費用効果があったかどうかに関係します。OPは、統合コストが単に新しいソリューションをゼロから開発するコストよりも高い場合に、サードパーティソリューションを選択する条件についてさらに質問しています(そして、ベンダーロックインは、おそらく、ベンダーに頼るのではなく、新しいソリューションを安価に開発できます)。
ベン

@Ben-わかりました。ベンダーロックインよりもフレームワークバインドが好きです。この質問は一種の意見に基づいており、これが私の頭に浮かんだ最初のものでした。
ジョンレイナー

0

雇用保障?
物事の同期を保つためのあらゆる努力などに言及します。自分のコードを書くよりも他の人のコードを管理したい人もいます。特にマネージャー。

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