Come programmatore principiante, dovrei favorire la creazione di librerie personalizzate rispetto all'uso di librerie di terze parti?


12

Come programmatore Python principiante, è una buona idea costruire e comprendere le mie librerie prima di passare alle librerie di terze parti avanzate che contengono le funzionalità di cui ho bisogno?

Alcuni progetti (ad esempio framework web come Django) sono probabilmente troppo grandi per questo approccio. Ma altri progetti (ad es. Web Crawler, librerie di grafici, parser HTML) sembrano fattibili.

Temo che fare affidamento precoce sulle biblioteche di terze parti possa ostacolare la mia crescita.

Nota: questa domanda e questa domanda sembrano focalizzare maggiormente i programmatori esperti, che sono probabilmente più concentrati sull'efficienza del riutilizzo che sul vantaggio dell'apprendimento. La mia domanda, penso, è focalizzata sui principianti.


5
"Nient'altro che un integratore di biblioteche piuttosto che un programmatore": i clienti vogliono che tu sia produttivo. Essere in grado di valutare e integrare le librerie esistenti è un'abilità importante di cui hai bisogno per essere produttivo. Se non è disponibile una libreria adatta alle tue esigenze ... altrimenti concentrati sulla risoluzione del problema aziendale a cui l'applicazione sta affrontando
Hamish Smith,

2
Che distinzione stai facendo tra "integratore di biblioteche" e "programmatore". In 30 anni - anche realizzando controller per dispositivi integrati a livello di chip - non ho mai lavorato senza librerie. Puoi spiegare questa distinzione?
S.Lott

Frase male. Ho modificato.
MikeRand,

Preferirei assumere un integratore di biblioteche. Perché concentrarsi su come mentre potresti concentrarti sulle funzionalità? Dopo aver visto alcune dozzine di biciclette gravemente reinventate, ho pensato di vederne un'altra. Il design della biblioteca è un duro lavoro e un atto di bilanciamento. Un tipico negozio di software non è specializzato nella progettazione di biblioteche che non ha le giuste competenze, risorse e pazienza per farlo nel modo giusto. Attenzione alle riscritture. È meglio usare il codice che è stato testato da altri piuttosto che ricominciare da zero. Solo quando c'è un vuoto si può inventare, IMO.
Giobbe

Risposte:


12

Questo è sempre un compromesso.

Come programmatore principiante, dovresti porti due domande quando consideri il riutilizzo del codice rispetto al reinventare la ruota quadrata:

  1. Imparerò di più sul problema che voglio risolvere scrivendo tutto da zero o concentrandomi sul dominio del problema e mettendo da parte la complessità non critica al problema a cui sono interessato?
  2. È più importante per me risolvere il problema o è più importante comprendere alcuni concetti fondamentali?

Se non devi completare il tuo progetto, va bene girare le ruote su problemi complessi che altre persone hanno già risolto, perché imparerai qualcosa. Ma probabilmente passerai a qualcos'altro prima di "finire", che potrebbe o meno interessarti. Altri progetti inizieranno a sembrare brillanti in fretta quando entri in testa in un dominio complesso che sembra semplice fino a quando non inizi a provare a risolverlo da solo.

Non ossessionarti dal rinunciare al controllo perché stai rimandando al modo di pensare di qualcun altro; concentrati maggiormente su ciò che stai cercando di realizzare.

Se il tuo obiettivo è scrivere un parser HTML perché vuoi capire come funzionano i parser, provaci. Se il tuo obiettivo è scrivere un parser HTML perché vuoi disinfettare l'input dell'utente o trasformare alcuni bit casuali di HTML, probabilmente ti concentri sulla cosa sbagliata, perché probabilmente sei più interessato all'applicazione dell'analisi piuttosto che all'analisi stessa . Se hai voglia di scrivere un parser HTML perché non vuoi prenderti del tempo per capire la libreria di qualcun altro, probabilmente stai sprecando il tuo tempo, perché, almeno in questo caso, ti garantisco che qualcun altro ha speso più tempo a capire come per risolvere questo problema in modo efficace. In casi davvero insignificanti, potresti risparmiare tempo non riutilizzando il codice, ma in quelli complessi, a meno che la libreria che utilizzi non risulti o la tua capacità di leggere la documentazione e gli esempi di codice faccia schifo,

D'altra parte, direi che vale la pena scrivere la tua libreria di grafici, poiché sarai più concentrato su algoritmi e strutture di dati trasferibili e fondamentali che sarai in grado di applicare ad altri domini, anche se finisci per usare la biblioteca di qualcun altro quando lavori su questi problemi.


Quadro fantastico per pensare al problema. Molto apprezzato.
MikeRand,

8

La maggior parte dei programmatori principianti sottovaluta ampiamente la complessità di un problema. Questo porta a molte situazioni spiacevoli, ma mi concentrerò solo su una: respingono molte librerie di terze parti per essere "gonfiate" o "troppo complicate". Quindi provano a scrivere il proprio codice per fare lo stesso lavoro, e ne fanno un casino completo, perché non hanno anticipato tutte le cose che avrebbero dovuto gestire.

Utilizza la scansione Web e l'analisi dell'HTML. Sembri avere un atteggiamento piuttosto disinvolto nei confronti di quei compiti - il che mi porta a credere che non hai mai provato a farli su nulla se non su scala molto piccola. Ecco solo un breve elenco non completo dei potenziali problemi che un vero crawler web deve affrontare:

  • HTML non valido.
  • Codifiche di caratteri multipli (il mondo intero non funziona su ASCII).
  • Link generati o modificati da JavaScript.
  • Collegamenti a file binari multi-gigabyte.
  • Tipi MIME errati.
  • Arresto anomalo nel mezzo di una sessione di scansione.
  • Pozzi di catrame.
  • Consulenti SEO.
  • Microsoft.

6

Temo che fare affidamento sulle biblioteche di terze parti stordirebbe la mia crescita e non mi farebbe altro che un integratore di biblioteche piuttosto che un programmatore.

Questo è falso.

La dipendenza precoce da biblioteche di terze parti insegnerà come funzionano le buone biblioteche.

Lo sviluppo prematuro è sempre una perdita di tempo. Scrivere le tue biblioteche senza studiare attentamente (cioè usare) le biblioteche esistenti ti condanna a reinventare la ruota - malamente - per il resto della tua carriera.

Ho trascorso molte ore fatturabili a ripulire quei casino.


Non sono del tutto d'accordo con questo. A volte le librerie di terze parti sono scritte male e possono effettivamente insegnare cattive abitudini. Se gli algoritmi sottostanti sono ben compresi, reinventare la ruota può essere una buona idea, e poi confrontarli con altre librerie per vedere quanto i tuoi si accumulano male o male sugli altri. In entrambi i casi, ovviamente una qualche forma di tutoraggio è estremamente utile :)
Demian Brecht,

Detto questo, è utile studiare l'API esistente :)
Demian Brecht,

2
@Demian Brecht: "A volte le biblioteche di terze parti sono scritte male e possono effettivamente insegnare cattive abitudini" Mentre questo potrebbe essere vero, la maggior parte dei progetti open source sono fortemente controllati da una comunità di utenti e le cattive idee non resistono alla saggezza della folla. Inoltre, "scritto male" è un giudizio che nessun n00b può esprimere in modo efficace.
S.Lott

@ S.Lott: Ben detto (ri: n00b) :) E immagino che dovresti solo stare attento a quali librerie di terze parti guardi, dato che alcune hanno comunità molto piccole (se presenti). Frugare su progetti casuali su github, ad esempio, può iniziare a condurti sulla strada sbagliata.
Demian Brecht,

2
@Demian Brecht: non puoi sviluppare alcun giudizio finché non hai visto una varietà di biblioteche. Non c'è modo di "pre-filtrare" le librerie da usare per un n00b. Sono tutte le librerie o nessuna libreria.
S.Lott

4

Questa frase, che è la prima, è molto logicamente problematica per me:

Come programmatore Python principiante, è una buona idea costruire e comprendere le mie librerie prima di passare alle librerie di terze parti avanzate che contengono le funzionalità di cui ho bisogno?

Come puoi credere di poter scrivere in modo efficace librerie di funzionalità avanzate (la tua parola) come principiante che saranno corrette, complete di funzionalità e testate come le librerie esistenti?

Questo non menziona nemmeno l'enorme quantità di tempo che sprecheresti reinventando una ruota che non capisci come un principiante, alla fine abbandonerà quando, se sei fortunato, ti rendi conto di essere sopra la testa e devi imparare il uscire dalla libreria comunque.

Prendi ad esempio l'analisi HTML, lo dici come fattibile, non c'è modo di fare un lavoro migliore di Beautiful Soup come principiante. Chiaro e semplice fallirai. Le cose che ritieni fattibili hanno enormi problemi di complessità che non stai prendendo in considerazione, non conosci il dominio del problema in modo sufficientemente dettagliato per capire la complessità, sei condannato al fallimento proprio da quello.

La mia opinione è imparare cosa hanno fatto gli altri e hanno già risolto il tuo problema per te, finché non riesci a trovare qualcosa che risolva il tuo problema.


1

Questa è solo la mia opinione, ma suggerirei di creare le tue librerie per un codice piuttosto semplice e riutilizzabile. Per qualcosa di più complesso, puoi usare librerie di terze parti, che sono state costruite e testate a fondo (si spera!). La creazione di una libreria affidabile può richiedere molto tempo, a seconda di cosa sia. Sono sicuro che avrai molta pratica di programmazione semplicemente costruendo la tua applicazione!


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.