È considerato pigro se uso un pacchetto di algebra lineare per C ++?


11

Prima di tutto, lasciatemi dare qualche informazione prima di dichiarare la domanda. Studio fisica e tutte le mie lezioni di programmazione sono state in linguaggi di programmazione facili come MATLAB. Per facile intendo che la lingua fa molto del pensiero per te ... Per i prossimi anni seguirò corsi di informatica e sto pensando di perseguire una carriera nella programmazione.

Considerando che molti corsi universitari sono in C ++, l'utilizzo di un pacchetto di algebra lineare (Armadillo) con sintassi simile a MATLAB sarà considerato pigro?

Sto codificando un algoritmo genetico in questo momento, e mentre è andato veloce in MATLAB, ci vuole molto tempo in C ++ senza l'aiuto di questi pacchetti.

Come funziona nella vita reale? Quali pacchetti sono autorizzati a utilizzare?

Ad esempio, non vorrei sviluppare la mia conoscenza del C ++ con armadillo e non avere una conoscenza approfondita di altri pacchetti più ampiamente usati come "vector.h" "algoritmo" "list" ecc.


9
Puoi usare qualsiasi cosa che abbia una licenza compatibile con il tuo progetto. Altrimenti stai solo perdendo tempo. (Il giusto tipo di) pigrizia è buona
Richard Tingle,


Supponendo che il tuo curriculum li includa, dubito che l'uso di un pacchetto di algebra lineare in sé ti impedirà di imparare <vettore>, <algoritmo> e <elenco>.
Brandin,

@RichardTingle: si può usare qualsiasi cosa purché i superiori non lo vietino ;-)
Doc Brown,

Passa lazya sensiblenel tuo titolo e la risposta è "sì" (supponendo che tu stia facendo un compito che coinvolge l'algebra lineare, ovviamente).
Jerry Coffin,

Risposte:


21

Il commento di Richard è già la maggior parte della risposta. Ogni volta che stai programmando qualcosa che non sia un esercizio di classe, ti consigliamo di riutilizzare il maggior numero di codice esistente possibile, con solo alcune altre considerazioni da bilanciare.

I vantaggi del riutilizzo del codice sono:

  • Lavori più velocemente, perché alcuni lavori sono già stati eseguiti.
  • Il codice esistente ha buone probabilità di essere migliore di qualsiasi cosa tu scriva da zero, perché probabilmente è in circolazione da più tempo, è stato testato meglio e ottimizzato meglio.
  • Abbastanza spesso, il codice esistente si trova in un dominio con cui non si ha familiarità. Ad esempio, stai facendo simulazioni fisiche, ma ciò non significa che tu sappia molto su come rendere l'algebra lineare efficiente per il calcolo. L'uso del codice scritto da altri significa che puoi affidarti alla loro esperienza.

Ci sono solo alcune cose da considerare:

  • Licensing. L'autore del codice che desideri riutilizzare detiene il copyright e non puoi utilizzare il codice senza la sua autorizzazione. Le biblioteche arriveranno con una licenza che ti dice cosa puoi fare con loro e se vuoi usare la biblioteca, devi conformarti alla licenza. Armadillo è coperto dalla Mozilla Public License 2.0, il che significa che puoi usarlo liberamente.
  • Integrazione. Se il tuo progetto è più grande, può essere abbastanza complesso integrare librerie di terze parti. A seconda della quantità di utilizzo che si ottiene dalla libreria, potrebbe non valerne la pena.
  • Distribuzione. Se una libreria è disponibile solo come DLL o necessita di una registrazione con il sistema, ma il metodo di distribuzione deve consistere in "copiare questo eseguibile da qualche parte", potrebbe non essere possibile utilizzare la libreria.

Come dice il proverbio, in un programmatore, la pigrizia è una virtù.


1
Lo tocchi, ma poiché la domanda menziona il lavoro di classe, è importante non usare un pacchetto o una libreria per il pezzo che stai cercando di imparare. Se stai cercando di imparare come costruire una rete neurale, sentiti libero di usare una libreria per l'analisi degli argomenti, il file io, ma scrivi tu stesso la rete neurale.
Alan Shutko,

3
Un punto importante mancante nell'elenco è la manutenzione futura. Quando si considera di utilizzare una libreria di terze parti, che è open source o open source ma troppo complessa per consentire la futura manutenzione da parte della propria organizzazione, è necessario assicurarsi che il fornitore della libreria fornirà servizi di manutenzione futura (incluso l'evoluzione della libreria ) per un certo periodo di tempo. Questo è uno dei motivi principali per cui alcune società di software non usano determinate librerie e preferiscono crearne una propria, anche se a prima vista sembra dispendiosa.
Doc Brown,

1

Cosa intendi con "permesso"? Immagino che potrei aggiungere qualcosa che possa aiutare a chiarire un malinteso di alcuni studenti principianti: ti viene chiesto di scrivere il tuo codice, algoritmi ecc. Ecc. All'università, perché stai imparando un corso e vuoi consolidare ciò che hai imparato nelle lezioni scrivendo tu stesso il codice. Tale codifica è un aiuto per il tuo processo di apprendimento . Ad esempio, dopo aver appreso una particolare struttura / algoritmo di dati, scrivi il tuo codice per vedere come funziona effettivamente e approfondire la tua comprensione. Questo ha senso.

Quando stai realizzando un progetto di programmazione nella vita reale, non stai scrivendo codice come ausilio per l'apprendimento di alcuni concetti / conoscenze; stai cercando di produrre un prodotto di ingegneria. L'ingegneria non riguarda davvero l'invenzione, ma si basa sulle basi già stabilite da altri, per rispondere a una particolare esigenza pratica. Si dice che la programmazione sia l'80% di lettura / riutilizzo delle librerie / codici altrui e il 20% di scrittura propria. Potrebbe essere un po 'esagerato ma ottieni lo spirito.

Nel tuo caso, se stai facendo un progetto di programmazione per un corso e ti chiede esplicitamente di codificare il tuo algoritmo, non vorrai usare librerie esterne. Se stai realizzando il tuo progetto di ingegneria, usa quante più librerie possibile prima di provare a crearne uno tuo.

Rendi chiara questa distinzione e capirai cosa stai facendo.

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.