Bene, questo è molto soggettivo. Penso che ogni programmatore si sia chiesto questo a un certo momento.
Inoltre, dipende molto. C'è una regola d'oro: più persone usano un codice, meglio diventa: è molto testato, è ottimizzato molto, i bug sono minimi, ecc.
Quindi, secondo me, ci sono pochi criteri:
- se hai bisogno di qualcosa per un uso comune (come i normali contenitori - proprio come
std::vector
o std::list
, o puntatori intelligenti (boost)) e non hai bisogno di così tanto rendimento - usa quello esistente, che è "là fuori". Questo ti farà risparmiare molto tempo a programmare, testare, trovare bug. E, come ho detto, più gli sviluppatori lo usano, più bug vengono trovati e risolti velocemente, migliore sarà la lib.
- se hai bisogno di qualcosa di molto specifico:
-
- se non stai cercando prestazioni elevate (ad esempio per i sistemi in tempo reale, che dovrebbero elaborare, diciamo, 10.000 messaggi al secondo) e se c'è qualcosa, questo può aiutarti - Suggerirei lo stesso , usa quello esistente
-
- le cose sono diverse se hai davvero bisogno di alte prestazioni e LA COSA PIÙ IMPORTANTE - SEI SICURO, CHE LO RAGGIUNGERLO - poi sviluppalo da solo. Posso darti un esempio concreto della mia esperienza: ci sono molte librerie IPC, ma la maggior parte di esse ha molte funzionalità, che noi (io e i miei colleghi della compagnia) non abbiamo bisogno. Quindi, questo rallenta le cose, mentre sviluppiamo software per sistemi in tempo reale, che elaborano molti messaggi al secondo e ogni operazione, ogni millisecondo è importante per noi. Poi abbiamo sviluppato la nostra IPC lib - ci sono voluti molto tempo, molti test, molti bug, ecc., Ma era la soluzione migliore per noi.
Altro esempio: alcuni contenitori, come std::list
o std::vector
, hanno davvero grandi funzionalità e molte cose utili. Ma se sei sicuro, che non avrai bisogno di loro e hai davvero bisogno di prestazioni HIGH , e, ancora, sei sicuro, che puoi ottenere questo - potresti implementare il tuo contenitore.
Sai, è davvero soggettivo. Il tempo del programmatore è molto più costoso e prezioso del tempo della CPU o qualcosa del genere. Quindi, se puoi utilizzare qualcosa di esistente e soddisfa (come prestazioni, interfaccia), utilizzalo.
Informazioni su questo: "Farti da solo ti aiuta a capire come funziona, ma non puoi capire tutto sulla programmazione, c'è molto e continua a cambiare". - hai completamente ragione. Per imparare qualcosa, devi fare per praticarlo. Quando scrivi qualcosa di tuo, imparerai molto - molto più che ne parli (dal libro, da internet, dall'articolo, qualunque cosa). Il miglior insegnante è la pratica.
Ma la pratica potrebbe essere fatta a casa, questo ti renderà uno sviluppatore migliore. La maggior parte delle aziende ti pagherà per scrivere codice di qualità, e lo farà più velocemente, con meno bug. Nessuno ti consente di implementare map
, ad esempio: sai, è piuttosto difficile e difficile da implementare (devi conoscere alcune strutture di dati avanzate lì - come albero AVL o qualcosa di simile). (e intendo map
per un uso casuale, non qualcosa di molto, molto speciale, perché se è qualcosa di specifico - è diverso allora).
Non sono sicuro se ti ho più confuso o aiutato, ma non c'è una risposta corretta per questo:)