Come programmatore principiante, dovrei favorire la creazione di librerie personali utilizzando librerie di terze parti?

12

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

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

Mi preoccupo che la prima dipendenza da librerie di terze parti possa arrestare la crescita.

Nota: questa domanda e questa domanda sembrano concentrarsi maggiormente su programmatori esperti, che sono probabilmente più concentrati sull'efficacia del riuso rispetto al beneficio dell'apprendimento. La mia domanda, penso, è incentrata sui principianti.

    
posta MikeRand 29.04.2011 - 01:07
fonte

6 risposte

12

Questo è sempre un compromesso.

In qualità di programmatore principiante, dovresti porsi due domande quando consideri riutilizzare il codice e 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 per il problema a cui sono interessato?
  2. È più importante per me risolvere il problema in questione o è più importante capire alcuni concetti fondamentali?

Se non hai bisogno di finire 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 che tu "finisca", il che può o non ha importanza per te. Gli altri progetti inizieranno a sembrare lucidi velocemente quando ti metti in testa su un dominio complesso che sembra semplice finché non inizi a provare a risolverlo da solo.

Non essere ossessionato 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 sei concentrato sulla cosa sbagliata, perché probabilmente sei più interessato all'applicazione del parsing piuttosto che all'analisi stessa . Se hai voglia di scrivere un parser HTML perché non vuoi perdere tempo a capire la libreria di qualcun altro, stai probabilmente perdendo tempo, perché, almeno in questo caso, garantisco che qualcun altro ha trascorso più tempo a capire come per risolvere questo problema in modo efficace di quello che avrai. In casi davvero banali, puoi risparmiare tempo non riutilizzando il codice, ma in quelli complessi, a meno che la libreria che usi risucchi o la tua capacità di leggere la documentazione e gli esempi di codice facciano schifo, ti farà perdere tempo.

D'altra parte, direi che vale la pena scrivere la tua libreria di grafi, dal momento che sarai più focalizzato su algoritmi trasferibili, fondamentali e strutture dati che sarai in grado di applicare ad altri domini, anche se tu finisci usando la libreria di qualcun altro quando lavori su questi problemi.

    
risposta data 29.04.2011 - 01:28
fonte
8

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

Fai il web crawling e analizzando HTML. Sembri avere un atteggiamento piuttosto disinvolto nei confronti di questi compiti - il che mi porta a credere che non hai mai provato a farli su qualsiasi cosa eccetto una scala molto piccola. Ecco un breve elenco non esauriente dei potenziali problemi che un vero crawler web deve affrontare:

  • HTML malformato.
  • Codifica di più caratteri (il mondo intero non funziona su ASCII).
  • Link generati o modificati da JavaScript.
  • Collegamenti a file binari multi-gigabyte.
  • Mime-types non corretti.
  • Arresto anomalo nel mezzo di una sessione di scansione.
  • pozzi di catrame
  • consulenti SEO
  • Microsoft.
risposta data 29.04.2011 - 02:10
fonte
6

I worry that early reliance on 3rd-party libraries would stunt my growth and make me nothing more than a library integrator rather than a programmer.

Questo è falso.

La prima dipendenza da librerie di terze parti insegnerà come funzionano le buone librerie.

Lo sviluppo prematuro è sempre una perdita di tempo. Scrivendo le tue librerie senza studiare attentamente (cioè utilizzando) le librerie esistenti ti condannano a reinventare la ruota - male - per il resto della tua carriera.

Ho trascorso molte ore fatturabili per ripulire quei pasticci.

    
risposta data 29.04.2011 - 01:34
fonte
4

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

As a beginning Python programmer, is it a good idea to build and understand my own libraries before jumping to advanced 3rd-party libraries that contains the functionality I need?

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

Questo non menziona nemmeno l'enorme quantità di tempo che sprecheresti a reinventare una ruota che non capisci come un principiante, finirà per abbandonare quando, se sei fortunato, ti rendi conto di essere sopra la tua testa e per imparare comunque la libreria esistente.

Ad esempio, prendi l'analisi dell'HTML, menziona questo come fattibile, non c'è modo di fare un lavoro migliore di Beautiful Soup come principiante. Semplice e semplice, fallirai. Le cose che ritieni siano 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 destinato al fallimento solo da quello.

La mia opinione è di imparare ciò che altre persone hanno fatto e già risolto il problema per te, fino a quando non riesci a trovare qualcosa che risolva il tuo problema.

    
risposta data 29.04.2011 - 08:05
fonte
1

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

    
risposta data 29.04.2011 - 01:24
fonte
0

Dai un'occhiata a questa domanda simile, le risposte sono rilevanti:

link

    
risposta data 29.04.2011 - 01:54
fonte

Leggi altre domande sui tag