Qual è il nome dell'antipasto opposto a "reinventare la ruota"? [chiuso]


101

L' antipasto " Reinvent the wheel " è piuttosto comune - invece di usare una soluzione pronta, scrivi il tuo da zero. La base di codice cresce inutilmente, interfacce leggermente diverse che fanno la stessa cosa ma in modo leggermente diverso abbondano, si perde tempo a scrivere (ed eseguire il debug!) Funzioni che sono prontamente disponibili. Lo sappiamo tutti.

Ma c'è qualcosa dall'altra parte dello spettro. Quando invece di scrivere la propria funzione che è due righe di codice, si importa un framework / API / libreria, si crea un'istanza, si configura, si converte il contesto in tipo di dati come accettabile dal framework, quindi si chiama quella singola funzione che fa esattamente ciò di cui si ha bisogno, due linee di logica aziendale sotto un gigabyte di strati di astrazione. E quindi è necessario mantenere la libreria aggiornata, gestire le dipendenze di compilazione, mantenere le licenze sincronizzate e il codice di istanza di essa è dieci volte più lungo e più complesso di se si "reinventasse la ruota".

Le ragioni possono essere diverse: la gestione si oppone rigorosamente alla "reinvenzione della ruota" a prescindere dal costo, qualcuno che spinge la sua tecnologia preferita nonostante la sovrapposizione marginale con i requisiti, un ruolo decrescente di un modulo precedentemente importante del sistema o l'aspettativa di espansione e più ampia l'uso del framework, che non arriva mai, o semplicemente fraintende il "peso" che un paio di istruzioni import / include / load portano "dietro le quinte".

C'è un nome comune per questo tipo di antipattern?

(Non sto cercando di iniziare una discussione quando è giusto o sbagliato, o se è un vero antipasto o qualcosa basato sull'opinione , questa è una semplice domanda di nomenclatura semplice e obiettiva.)

Modifica: il "duplicato" suggerito parla di sovrastima del proprio codice per renderlo "pronto a tutto", completamente separato dai sistemi esterni. In alcuni casi questa cosa potrebbe derivare da essa, ma generalmente deriva da "avversione al reinventare la ruota" - riutilizzo del codice a tutti i costi; Se una soluzione "chiavi in mano" per il nostro problema esiste, ci sarà usarlo, non importa quanto male si adatta ea quali costi si tratta. Favorire dogmaticamente la creazione di nuove dipendenze rispetto alla duplicazione del codice, con totale disprezzo per i costi di integrazione e manutenzione di queste dipendenze rispetto ai costi di creazione e manutenzione del nuovo codice.


52
Inferno di dipendenza . Questo è il più vicino a cui riesco a pensare.
Machado,

5
@Machado: Bello, anche se direi che l'inferno di dipendenza è il risultato diretto dell'abbondanza di questo anti-schema; nel caso di sistemi estremamente complessi, può derivare da un risultato diretto della complessità.
SF.

27
Lo chiamerei "dipendenza da creep" analogo a Feature_creep o Scope_creep dove al prodotto vengono aggiunte sempre più funzionalità originariamente indesiderate.
k3b,

21
Il fiasco padiglione sinistro è un esempio reale di questa sindrome in azione.
SF.

13
Consiglio di iniziare collettivamente facendo riferimento a questo come LeftPad.
RubberDuck,

Risposte:


9

No. Non esiste un nome anti-pattern comunemente usato che copre ciò che stai descrivendo.


4
Appare con il numero di idee, suggerimenti e discussioni che ha suscitato, questo è in realtà corretto.
SF.

3
Mi sento sporco a farlo.
SF.

Eh? "Non esiste XXX" è un'affermazione molto forte e molto difficile da dimostrare, soprattutto considerando che ci sono diversi candidati citati nei commenti.
AnoE

1
@AnoE "Esiste un nome comune per questo tipo di antipasto?" Le prove in detti commenti e risposte implicano fortemente che non ci sono. È vero, non risponde al titolo, ma risponde alla domanda stessa.
Kroltan,

@AnoE Non puoi provare un aspetto negativo, tesoro. Forse il termine si nasconde sotto una roccia nel Borneo da qualche parte e non ci siamo ancora lasciati cadere? Che ci siano 10 risposte invece di 1 con un milione di voti è una prova sufficiente per me.

49

Martello d'oro

Il martello d'oro è uno strumento scelto solo perché è elegante. Non è né conveniente né efficiente nell'esecuzione dell'attività prevista.

fonte: xkcd 801

(Nonostante i voti negativi, sostengo questa risposta. Potrebbe non essere esattamente l'opposto di reinventare la ruota semanticamente, ma si adatta a tutti gli esempi citati nella domanda)


5
Eseguito l'upgrade e puoi anche cercarlo da wikipedia: en.wikipedia.org/wiki/Anti-pattern , en.wikipedia.org/wiki/Law_of_the_instrument
Pierre.Sassoulas

3
Voterei questo voto se avessi il rappresentante. Non risponde alla domanda nel suo insieme, ma offre un termine (preciso) che risponde solo a uno degli scenari suggeriti.
David,

3
È stato chiesto il contrario. È come insistere sul fatto che "Becquerel" (radiazione, unità è s ^ -1) può essere usato per la musica invece Hertz (hz, unità è s ^ -1) perché entrambi significano "al secondo".
Thorbjørn Ravn Andersen,

@ ThorbjørnRavnAndersen Ho sentito della musica piuttosto pericolosa ai miei tempi.

34

Robert Martin usa il termine " Framework Bound " per riferirsi alla più ovvia conseguenza negativa di questo anti-pattern. Poiché non credo che ci sia un nome comune per il modello stesso, un riferimento a questa conseguenza potrebbe essere sufficiente per la maggior parte degli scopi.


1
Esistono frame per accelerare il processo di sviluppo. Sono come un razzo ripetitore: esaurito non appena usato. La soluzione è: rilasciare la versione uno, ora dove eravamo rimasti? Esatto, sviluppo di software. Il prossimo! La manutenzione è una preoccupazione separata, e penso che al giorno d'oggi non dovrebbe essere importante. Porta il prossimo framework alla prossima soluzione, post fretta.

18

Questa pagina di Wikipedia su " Invented Here " descrive una situazione leggermente diversa ma con risultati finali molto simili. Descrive l'avversione di una squadra verso la creazione del proprio codice quando si possono trovare funzionalità equivalenti là fuori.

Direi che il nome è un po 'fuorviante però. Ha senso quando viene messo in contesto con il suo opposto Not Invented Here che IMHO è praticamente un sinonimo di Reinventing the wheel.


13

Ho sentito " Buy Versus Build " e " Invented Here " come nomi anti-pattern per una propensione a sviluppare le cose internamente, anche quando può avere senso farlo. (E anche se la frase "compra contro build" dovrebbe indicare una scelta tra alternative praticabili, trovo che di solito sia menzionata quando qualcuno crede che "comprare" sia la scelta corretta.)



8

Bloat è un termine generico , ma può includere ciò che descrivi. Il nostro software diventa eccessivamente complesso (gonfio) a causa di tutte le trasformazioni e le astrazioni aggiuntive richieste e sia la complessità che le dipendenze stesse contribuiscono a ridurre le prestazioni / meno efficienza e un consumo di risorse più elevato (disco, larghezza di banda).

Se lo desideriamo, potremmo chiarire con un termine come dipendenze gonfie .


5

Penso che usare una mazza per rompere un dado sia abbastanza vicino. È qualcosa che è possibile, ma ha bisogno di una quantità eccessiva di lavoro per rompere un dado in quel modo, senza che si verifichino numerosi possibili effetti collaterali indesiderati. (E c'è un sacco di noci da rompere ...)

La frase ha anche il vantaggio che non sta calcolando il gergo, quindi può essere molto utile nel fornire un indizio a qualcuno che non ne ha.

A proposito, c'è una distinzione da tracciare con l' inferno delle dipendenze . Se qualcuno ha già racchiuso tutte le complessità all'interno di un incapsulamento che crea interfacce semplici, chiare e facili da usare e ha fornito la penalità nei cicli della CPU o nell'utilizzo della memoria non eccessiva, e è improbabile che le future modifiche del codice incapsulato siano necessario, quindi un argomento rimanente contro l'utilizzo è l'inferno di dipendenza che potrebbe causare.


5

Non credo che esista un analogo esatto, ma direi che il design eccessivo o l'ingegnerizzazione eccessiva si avvicinano.

Almeno, direi che questo è ciò che stava realmente accadendo quando ho incontrato qualcosa di simile a quello che descrivi.

Utilizzare una libreria invece di scrivere il proprio codice per implementare la stessa funzionalità non è quasi mai dannoso.

Anche nel tuo esempio ipotetico, l'uso di una libreria per sostituire "due righe di codice" potrebbe non essere necessario, ma è improbabile che ti causi molto dolore - se è davvero una libreria destinata a fare la stessa cosa delle tue due righe di codice .

Una libreria per fare una cosa semplice sarà anche semplice. Non è probabile che ti dia il mal di testa che implica la tua domanda.

Usare una libreria complicata per fare qualcosa di semplice probabilmente implica che stai cercando di fare qualcosa di più che implementare la funzionalità richiesta.

Come funzioni integrate che non sono necessarie, prepararsi per un futuro che potrebbe non arrivare mai, ecc.

Il problema qui non è proprio l'incapacità di reinventare la ruota di per sé .


4

Se non hai reinventato la ruota, molto probabilmente si sta utilizzando un set di ruote esistente fornito da un fornitore o da terze parti.

Se si tratta di un modello anti-pattern, in genere viene chiamato blocco del fornitore.


6
Non penso davvero che sia la stessa cosa. Il blocco del fornitore è un particolare risultato negativo derivante dalla dipendenza dalla soluzione di un fornitore, indipendentemente dal fatto che l'uso del fornitore sia stato conveniente o meno al momento della scelta. L'OP chiede di più un termine per la scelta di una soluzione di terze parti quando il costo di integrazione è superiore al costo dello sviluppo di una nuova soluzione da zero (e probabilmente il blocco del fornitore non sta nemmeno accadendo, nei casi in cui sarebbe essere economico per sviluppare una nuova soluzione invece di affidarsi al fornitore).
Ben

@Ben - Ok, mi piace Framework associato piuttosto che il blocco del fornitore in meglio. Questa domanda è basata sull'opinione e questa è stata la prima cosa che mi è venuta in mente.
Jon Raynor,

0

Sicurezza sul lavoro?
Lei menziona tutti gli sforzi per mantenere le cose sincronizzate, ecc. Alcune persone preferiscono gestire il codice di altre persone piuttosto che scriverne uno proprio. I gestori, in particolare.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.