Dovresti usare una libreria quando puoi svolgere l'attività senza di essa? [chiuso]


33

Sono in una situazione in cui posso utilizzare un plug-in JavaScript open source per eseguire un'attività. Ma quando ho provato a usarlo, mi sono ritrovato a dover riprogettare molte cose di quello che ho già fatto, e aggiunge una certa complessità, secondo la mia modesta opinione, al progetto. Considerando che posso svolgere lo stesso compito con un codice pulito che posso realizzare da solo e senza dover cambiare ciò che ho fatto finora.

Dovresti comunque optare per una biblioteca in questa situazione (ad esempio per un codice di qualità migliore?)


3
Come stai misurando la "qualità". Dal numero di righe di codice? Classi? Complessità? Manutenibilità? Resilienza?
Laiv

3
La risposta è NO, qualunque cosa tu consideri o no qualità. Ma se ci fornisci la tua idea di qualità, le risposte affronteranno il loro ragionamento per spiegare perché il numero di biblioteche non migliora ciò che consideri di qualità. È una semplice questione di precessione. Come è ora, un semplice NO risponderà alla domanda senza bisogno di spiegazioni.
Laiv

4
Non una risposta diretta alla tua domanda, ma l'idea che "questo numero" garantisca inevitabilmente la "migliore qualità" vola di fronte al riconoscimento delle difficoltà di aumentare la qualità del codice. Non esiste una soluzione rapida per garantire la qualità. Se ci fosse, il problema non esisterebbe. Chiunque sostenga che un certo semplice approccio sia la soluzione completa è o (nella migliore delle ipotesi) ipergeneralizzante o (nella peggiore delle ipotesi) spingere la propria idea imperfetta come verità.
Flater,

3
Cosa ti fa pensare che l'uso della libreria aumenterebbe la qualità del codice?
Smetti di fare del male a Monica il

1
Votato per chiudere perché la domanda sembra essere stata riformulata in modo significativo e le risposte superiori rispondono alla vecchia versione ... meglio ripubblicare la domanda così com'è ora da sola (oltre a aggiungere i dettagli per evitare "troppo board" "voti) ...
AnoE

Risposte:


54

Come ingegnere, forse è opportuno pensare a questo come a un problema di ottimizzazione. Naturalmente dobbiamo avere un obiettivo di ottimizzazione . Una situazione comune in questo tipo di situazione sarebbe quella di ridurre al minimo il costo totale di proprietà .

Se ritieni che l'aggiunta del componente di terze parti salverà i costi a lungo termine, dovresti usarlo. Se non lo fai, non dovresti. Assicurati di considerare il costo della manutenzione in corso (ad esempio, quando viene rilasciata una nuova versione di O / S, o quando viene rilevata una falla nella sicurezza o viene rilasciata una nuova specifica W3C).

Per molti problemi insignificanti, sarà più economico far crescere i tuoi, ma per problemi moderatamente complessi al di fuori delle competenze chiave della tua organizzazione, avrà spesso senso diventare terzi.

Ci sono anche altri obiettivi da considerare (ad esempio il rischio), ma il TCO è il più grande.


1
Penso che questa risposta abbia bisogno di più voti. - L'affidabilità a lungo termine con le librerie può essere un grosso problema. E anche se esiste una libreria, chissà se le API cambieranno? Le biblioteche sono facili a breve termine, ma possono causare problemi a lungo termine. (Nota a
margine

6
@DetlevCM La risposta sta anche dicendo che può facilmente fare il contrario. Le biblioteche non banali avranno costi di manutenzione collegati a te che tu come utente della biblioteca non devi pagare, e forse non saresti in grado di pagare se dovessi (cioè se tu fossi il proprietario della biblioteca).
Cubico

Sono d'accordo, ma non dimenticare di considerare anche il costo della libreria: bug, modifiche alla progettazione al di fuori del tuo controllo e mazzi di codice che non stai usando solo per introdurre una singola funzione. Inoltre, la libreria spesso non è espressiva come potrebbe essere la soluzione per il tuo problema. Inoltre, non è possibile eseguire il debug di una libreria esterna con la stessa facilità e, in caso contrario, è necessario affrontare più problemi di unione in un secondo momento. Non dare per scontato che una soluzione di libreria sia più leggera, considera tutti i fattori e non aver paura di codificare la tua soluzione se la libreria non si adatta perfettamente!
Bill K,

36

Bill Gates una volta disse notoriamente:

"Misurare l'avanzamento della programmazione in base a righe di codice è come misurare l'avanzamento della costruzione di aeromobili in base al peso."

Questa citazione mi viene in mente perché alla fine si potrebbe dire lo stesso per il numero di biblioteche. Di norma, non utilizzo le librerie a meno che:

  1. Non c'è altro modo per farlo. Fare a meno non sarebbe più economicamente fattibile per produrre il prodotto in tempo e nel rispetto del budget.
  2. Mi farebbe risparmiare un notevole periodo di tempo in quanto richiederei molte delle funzionalità di detta libreria
  3. La biblioteca è ben usata e ogni potenziale problema che potrei avere sarebbe ben documentato.

Idealmente tutte e tre le condizioni sono soddisfatte, ma mi accontenterei di qualsiasi due. In conclusione, non dovresti aggiungere una libreria al tuo programma a meno che non abbia uno scopo. Se devi chiedere qual è lo scopo, probabilmente non dovresti aggiungerlo al tuo programma. La qualità del codice del tuo programma è quindi vantaggiosa perché richiama elegantemente ogni libreria senza essere appesantita dalla necessità di riscrivere necessariamente le librerie all'interno del tuo programma.

In bocca al lupo!


4
@BillalBegueradj Citazione significativa, sì. Adeguato, no. Non stiamo parlando di progressi, stiamo parlando di qualità del software e le righe di codice hanno una forte correlazione con il numero di difetti riscontrati. Vedi l'articolo L'effetto confondente della dimensione della classe sulla validità delle metriche orientate agli oggetti che mostra che tutte le altre metriche non hanno alcun potere predittivo sui difetti rilevati dopo la regolazione da LOC, il che significa che LOC è il miglior predittore di difetti (o era all'epoca: 2001). E, a proposito, la carta scientifica batte la famosa citazione.
Theraot,

5
@Theraot Stai suggerendo che, poiché il numero di righe determina il numero di difetti, i programmi più grandi hanno una qualità del codice peggiore rispetto ai programmi più piccoli? Non sono d'accordo con la tua metrica, scusa. Inoltre, se la citazione ti disturba davvero, sentiti libero di ignorare.
Neil,

3
@Neil per essere chiari, il numero di righe non determina il numero di difetti, ha una forte correlazione con il numero di difetti riscontrati. Questo è facile da capire: più grande è il codice, più opportunità verranno introdotte per i difetti. Naturalmente, il numero di difetti diminuirà dopo essere stato trovato e corretto. Questa è solo correlazione dopo tutto. Addendum: LOC batte molte metriche comuni, vedi l'articolo per i dettagli.
Theraot,

5
@Theraot Il mio argomento non riguardava la correlazione dei difetti con il numero di righe. La mia argomentazione riguardava il semplice numero di difetti che equivaleva alla cattiva qualità del codice. Chrome ha avuto la sua parte di difetti nel corso degli anni, ma direi la legittimità di qualsiasi affermazione che suggerisce che è scritto peggio di un plugin jQuery a 10 righe mal scritto su github.
Neil,

3
@Theraot "la carta scientifica batte la famosa citazione". - sembra che il tuo articolo in realtà supporti la citazione piuttosto che la batte ...
npostavs

14

(Nota: la domanda originale era: il numero di librerie migliora la qualità del codice?)

Probabilmente puoi rispondere a quello da solo: no, ovviamente il semplice fatto di usare le librerie non migliora il tuo codice. Se lo facesse, sarebbe facile scrivere un ottimo codice per tutto senza sforzo.

Ciò che le persone intendono quando raccomandano di riutilizzare su roll-your-own è che il codice in una libreria ben nota è probabilmente più corretto, efficiente e / o utilizzabile di quello che vorresti inventare, semplicemente perché gli autori hanno trascorso molto più tempo su una particolare area di funzionalità che tu (con la tua scadenza per l'intero progetto) puoi permetterti.

Ma questa è solo una tendenza, non una legge. Sicuramente ci possono essere librerie che non sono così utili da usare come sarebbe il tuo rotolo. Spesso questo accade quando la libreria fa davvero molto di più di quello che ti serve e lo fa in un modo che ti costringerebbe ad adattare la tua base di codice alle loro convenzioni molto più di quanto sia ragionevole. Sembra che questo sia esattamente quello che hai trovato in questa istanza.


4

Mentre l'utilizzo delle librerie giuste può farti risparmiare molto lavoro, ci sono anche molti costi nascosti:

  • Le biblioteche devono essere aggiornate. È necessario controllare regolarmente se hanno ricevuto aggiornamenti (che potrebbero essere rilevanti per la sicurezza!) E applicarli. Ogni aggiornamento della libreria potrebbe potenzialmente interrompere qualcosa nella tua applicazione. Ciò significa che in seguito è necessario eseguire un test di integrazione completo. Pertanto, ogni libreria da cui dipende il progetto aumenta le spese generali di manutenzione a lungo termine.
  • Alcune librerie Javascript sono così potenti e utilizzano schemi così unici che le persone iniziano a percepirle come aree tecniche separate di competenza. Pertanto, ogni libreria aggiuntiva aggiunta potrebbe spaventare gli sviluppatori che non si sentono sicuri nel modificare il codice che si basa su un framework che non hanno familiarità. Assumere nuovi programmatori di manutenzione che hanno familiarità con tutte le librerie che usi potrebbe diventare difficile.
  • L'aggiunta di una libreria al tuo sito Web aumenta i tempi di caricamento, poiché l'utente deve caricare l'intera libreria, anche se ne usi solo una piccola parte. Alcune librerie popolari ti consentono di scaricare build personalizzate con solo le funzionalità di cui hai bisogno, ma anche in questo caso di solito includerai ancora molto codice che non verrà mai eseguito (o peggio ancora: codice che viene eseguito, ma non fa nulla di utile, perché prepara solo strutture di dati per funzionalità che non usi).

Quindi, prima di aggiungere un'altra dipendenza al progetto per includere qualcosa che potresti scrivere, fai un'analisi costi / benefici.


E ripeti quell'analisi quando hai davvero dati reali. Potresti aver sottovalutato il costo / sovrastimato il vantaggio o la situazione potrebbe essere cambiata.
Deduplicatore,

1

Questa non deve essere una decisione binaria: utilizzare solo una libreria OSS o programmare una nuova soluzione da zero. Un'altra opzione potrebbe essere quella di riutilizzare parti della libreria, se la licenza lo consente.

Ad esempio, nel mio campo (software numerico) una libreria può avere moduli core fini e alcuni moduli specializzati di cui sono soddisfatto solo all'80%. Quindi userei i moduli core e scrivo un wrapper per i moduli specializzati. Oppure posso sviluppare i miei moduli specializzati usando il design e il codice dei moduli OSS. I bit algoritmici più difficili di solito vengono riutilizzati da quelli, con solo il codice di scaffolding modificato. Potrei anche ripulire parte del codice originale. Ciò ha dimostrato una buona esperienza di apprendimento e un risparmio di tempo, rispetto allo sviluppo da zero.


0

Se qualcuno ha già fatto il lavoro per te, ovviamente dovresti usarlo.

L'eccezione alla regola è javascript. Dove avranno importato una dozzina di altre librerie (ovviamente versioni obsolete) per aggiungere le funzionalità linguistiche che vogliono usare e poi hanno fatto il lavoro per te.

Scegli il tuo framework e rimani al suo interno. Se la libreria funziona con il tuo framework o semplicemente js, va bene. Ma se ha bisogno di un framework diverso, cerca un'altra opzione.


4
Molti fan di JavaScript qui
FCin

0

Le biblioteche e quando usarle è una decisione complicata.

Da un lato hai testato, cose quasi standard (nel mio campo, ad esempio FFTW rientra in questa categoria, o qualcosa come libsndfile), che generalmente sono riconosciute come funzionanti e sono state cose standard negli ultimi 20 anni che tutti usano.

D'altra parte hai cose casuali da Github, senza suite di test e solo un manutentore, in genere perché preoccuparsi?

Il test dell'acido per me è innanzitutto che la libreria si adatta alla mia architettura (a volte, se sai che vuoi usare una determinata libreria finisci per progettare attorno a quello), e penso che finirò per debug di qualcuno codice della libreria di altri ? Un buon proxy per la seconda domanda è "Esiste una suite di test automatizzata e com'è la documentazione?".

Un piccolo debug non è un grosso problema, ma a quel punto il codice della libreria inizia a contare sulla mia dimensione del codice dal punto di vista della manutenzione (Più se le mie correzioni non possono essere spinte a monte per qualche motivo).

Vorrei anche distinguere tra librerie e framework, per quanto la distinzione a volte non sia così netta, i framework nel mio mondo (piccolo core, DSP pesante) tendono ad essere un dolore nel culo, specialmente se stai cercando di unire più di allora uno o fare qualcosa leggermente al di fuori delle linee, a volte le librerie sono utili. Sono consapevole che questo è visto in modo molto diverso nella scena degli sviluppatori web.

Alla fine della giornata è una decisione che si riduce al gusto e all'esperienza, e persino l'esperto a volte sceglie male, almeno con una biblioteca, puoi sempre strapparlo e scrivere la tua implementazione se diventa troppo fastidioso.

Decisioni decisioni....

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.