Topic: Capire quanto bene conosco python e come posso migliorare le mie conoscenze.  (Letto 262 volte)

0 Utenti e 1 Visitatore stanno visualizzando questo topic.

Offline 80_ython

  • python unicellularis
  • *
  • Post: 45
  • Punti reputazione: 0
    • Mostra profilo
Come da titolo, vorrei sapere se esiste un modo per confrontarmi online con altri programmatori, capire quanto conosco python, se programmo bene o meno, e sapere come migliorare le mie capacità e conoscenze. Cosa differenzia un bravo programmatore da un dilettante?

Offline bebo

  • python erectus
  • ***
  • Post: 220
  • Punti reputazione: 0
    • Mostra profilo
    • bebo_sudo's personal homepage
Prova a prendere un progetto online open-source su github o simili, uno che ti interessa; prova a contribuire a qualche issue, e vedrai che non si e' mai finito di imparare.

Se cerchi uno "speedtest per la programmazione", dubito che esista, e non avrebbe neanche senso IMHO; cosa differenzia un bravo muratore da un dilettante?

Offline RicPol

  • python sapiens sapiens
  • ******
  • Post: 2.859
  • Punti reputazione: 9
    • Mostra profilo
Mah sai, diamo per scontato che puoi sempre seguire dei corsi, ottenere delle certificazioni, bla bla, per quel che valgono (e certamente alcuni valgono, eh). Diamo anche per scontato che "conoscere python" e "essere un buon programmatore" non sono lo stesso concetto, quindi la tua domanda è necessariamente confusa e le risposte possibili sono necessariamente imprecise.

Detto questo, direi che in sostanza dovresti fare due cose: leggere codice e scrivere codice.
La seconda, se vuoi, è più semplice. Scrivi codice che deve andare in produzione. Confrontati con i problemi di una codebase che deve essere manutenuta, modificata, che si deve sporcare nel tempo. Se non hai degli utenti veri, scrivi per te stesso, ma poi usa davvero il tuo codice come un utente, e aggiornalo come se dovessi distribuirlo. Impara a fare bene tutti gli apparati accessori ma fondamentali: documentazione, test...
Il problema di scrivere codice "da dilettanti" molto spesso è quello di accontentarsi di essere dilettanti. Si scrive codice fragile, per esercizio. Poi si comincia a usarlo ma con delicatezza, accontentandosi, senza mettere davvero alla prova quello che si è scritto. Finché faccio così, non si rompe nulla: allora ok, va bene. E se il codice "funziona" che ti importa di fattorizzarlo, scrivere test, docstring, rispettare la pep8... tanto "fuziona", no? Uno dice sempre, queste cose le farò quando davvero ne varrà la pena. Solo che in questo modo, quando poi ne vale la pena, scopri che non sai farle.

Leggere codice altrui è forse la cosa più difficile. Ma è fondamentale. Ovviamente non partire da codebase sterminate come quella di django, per dire. Ma poco per volta devi riuscire a orientarti in una codebase anche piuttosto larga. E devi assorbire non solo gli idiomi tipici, le stregie, i pattern... ma anche il *modo* in cui si costruisce una codebase. Guarda come si scelgono i nomi delle variabili, come si divide il lavoro in moduli, classi, funzioni; come si scrivono le docstring, come si fanno i test e dove si mettono, come si genera la documentazione e dove si mette, come si scrive un readme,... Cerca di capire che aspetto ha il codice "professionale", anche se magari poi a grattare la superficie non è "buon codice" (le due cose sono molto, molto differenti).
Leggere codice vuol dire anche leggere gli apparati che stanno intorno al codice: leggi con cura il bug tracker, per esempio. E' molto istruttivo capire come si sottopone un baco, come lo si discute, come lo si risolve. Vale la pena di esaminare il codice prima e dopo la patch che chiude il baco. Leggi anche gli user group, che ti danno l'idea dei problemi e delle domande degli utenti normali, e come si risponde, e come si risolvono i problemi.

Comincia a fare questo lavoro con le librerie che utilizzi tu stesso. Poco per volta vedrai che "leggere codice" e "scrivere codice" si sovrappongono. Dopo iun po' che vedi il bug tracker e capisci come sottoporre una patch, vedrai che ti viene voglia di prendere un baco ancora non assegnato e provare a risolverlo.  Comincia dalle cose facili. Fra l'altro, molte comunità hanno bisogno anche solo di gente che completa e/o traduce la documentazione. Ovviamente devi conoscere un po' d'inglese per questo, ma non hai idea di quanto possa essere utile. A livello concettuale, la documentazione *è già* il codice, se è scritta bene.

La cosa che devi assolutamente evitare (e vedo periodicamente su questo forum gente che non lo capisce bene) è cominciare dicendo "ho scritto un progetto, cerco collaboratori". La gente collabora al tuo progetto se lo usa, gli interessa, gli interessa migliorarlo. Ma per questo devi prima pubblicarlo in un modo che invogli alla collaborazione: con tutti i test a posto, la documentazione, il codice ben scritto...

Offline 80_ython

  • python unicellularis
  • *
  • Post: 45
  • Punti reputazione: 0
    • Mostra profilo
Grazie mille, soprattutto a RicPol.
Se ho capito bene, mi suggerite di fare semplicemente molta pratica, "chiedendo sempre più al mio programma" e di leggere i codici di altri?