Re: [Python] Agile programming Robert Martin

2014-10-04 Per discussione Simone Federici
Prima di tutto bella discussione e grazie a tutti coloro che l'hanno
arricchita.

Io credo che prima di decidere se un commento è giusto o sbagliato bisogna
calarsi nel contesto.

Le best practices possono essere lette e rilette e ma mai capite. A me
capita spesso. Secondo me è uno degli arcani del mondo.

Chiediamoci anche come nascono le best practices?
Dall'esperienza dura sul campo? Da un principio di buon senso? Da una idea
balzana del un nuovo arrivato?

Se anche il papa mi dicesse di buttarmi dal ponte, prima di buttarmi
cercherei dentro di me se fosse giusto oppure no.

Cominciamo dal testo.
Si può leggere la divina commedia senza leggere le note, facendosi portare
dallo spirito poetico, oppure la si può leggere e studiare seguendo le note
passo passo. E se le note sono interessanti ti danno parecchio in più. (in
questo caso le note non sono state scritte dall'autore)

Ma che centra la divina commedia con un programma? nulla e tutto.
Entrambe sono costruite seguendo un linguaggio ed entrambe possono fare dei
giri pindarici e machiavellici.

Se potessimo leggere un programma scritto da un Dante Alighieri è probabile
che si riuscirebbe difficile a seguirlo ma chissà che bello che sarebbe.

Quindi chi scrive/programma conta. Non è che tutte le regole (o le best
practices) valgono a priori.

Tornando al contesto.
La parola programma che ho usato poc'anzi, è del tutto generica. Non è
che se scriviamo uno script, un videogioco, una web application, un sito
web, un prodotto, un framework o una libreria vigono le stesse regole. A
parte la finalità che è chiaramente diversa, è diverso il target.

Se scrivo una libreria, significa che qualcuno o anche me stesso la
riutilizzerà in futuro. Target programmatori. Come diceva Marco, vai di
docstring e doctest soprattutto sulle API pubbliche.

Se scrivo un framework la documentazione a forma di tutorial è la più
importante. Almeno per la maggior parte del target. Vedi Django è parecchio
utilizzato da programmatori e la sua forza è nei tutorial online, non certo
nei commenti del suo codice.
I commenti che sono importanti qui sono quelli che spiegano delle scelte,
spesso facendo riferimenti ai ticket o bug segnalati.
Su un framework come Django ad esempio non è che ti metti a commentare i
componenti architetturali, perché la maggior parte di essi è già nota dalla
documentazione online.
Se volessi studiare il codice dell'orm ad esempio sarebbe più utile un
documento architetturale che ti desse un immagine del design.
Non so voi, ma spesso mi capita di andare a spulciare il codice open, e
veramente poco spesso mi metto a leggere i commenti che non siano concisi.
(e anche non banali come: creo la classe, calcolo il risultato etc...)

Se scrivo un sito web, usando Django, certo non mi metto a commentare il
codice, forse una o due classi dove faccio delle scelte, ma la maggior
parte dei models, forms, admin, views, sono del tutto standard e non hanno
bisogno di commenti.

Il dominio, i modelli, sono del tutto inutili da commentare, meglio
scrivere una breve introduzione o un glossario che spieghi il dominio
piuttosto che spezzettare il discorso tra una classe e l'altra.

Se scrivo un prodotto, vuol dire che sarà venduto e che dovrò gestire la
sua evoluzione per diversi anni, andando dietro a decine o centinaia
(magari migliaia) di clienti. Il che significa che la miglior
documentazione tecnica sono i test. Inoltre se è un prodotto bisognerà
anche scrivere il manuale di utilizzo utente. (ma è un altra storia)

Solitamente se un prodotto o anche un progetto segue un particolare design
la documentazione utile è fatta da howto per i novizi. Se un nuovo
programmatore entra nel team deve essere in grado di lavorare nel progetto,
quindi howto end-to-end che lo seguono passo passo su casi d'uso semplici
che gli permettono di capire il complesso e vasto mondo.

In conclusione, i commenti sono importanti, ma non sono l'unica fonte di
documentazione. Sono essenziali se il target è un altro programmatore che
deve usare la tua libreria. Ma non sono minimamente sufficienti per
documentare il ciclo di vita di un prodotto.

Vanno usati con parsimonia, meno commenti che codice almeno un rapporto 1 a
5. (imho)

Inoltre lo so che è difficile, ma cerchiamo di scrivere codice come se
fossimo scrittori che aspirano al successo. L'estetica non è importante per
un calcolatore ma per un umano si.
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Agile programming Robert Martin

2014-10-04 Per discussione Marco Beri
Il 04/ott/2014 19:35 Simone Federici s.feder...@gmail.com ha scritto:

TL;DR?
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Agile programming Robert Martin

2014-10-04 Per discussione Nicola Larosa
Simone Federici wrote:
 Se anche il papa mi dicesse di buttarmi dal ponte, prima di
 buttarmi cercherei dentro di me se fosse giusto oppure no.

Il papa da solo no, ma... http://xkcd.com/1170/

-- 
Nicola 'tekNico' Larosa http://www.tekNico.net/

Impossible is just a big word thrown around by small men who find it
easier to live in the world they've been given than to explore the power
they have to change it. Impossible is not a fact. It's an opinion.
Impossible is not a declaration. It's a dare. Impossible is potential.
Impossible is temporary. Impossible is nothing. - Muhammad Ali
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Agile programming Robert Martin

2014-10-04 Per discussione Simone Federici
2014-10-04 19:55 GMT+02:00 Marco Beri marcob...@gmail.com:

 TL;DR?


TS;DNU?
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Agile programming Robert Martin

2014-10-04 Per discussione Simone Federici
Nicola Larosa:

 Simone Federici wrote:
  Se anche il papa mi dicesse di buttarmi dal ponte, prima di
  buttarmi cercherei dentro di me se fosse giusto oppure no.

 Il papa da solo no, ma... http://xkcd.com/1170/


Bella! Anche se tutti i miei amici lo fanno, non vuol dire che lo devo fare
pure io. Ad esempio, non so se è peggio buttarsi dal ponte o andare allo
stadio...
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Agile programming Robert Martin

2014-10-04 Per discussione Marco Beri
Il 04/ott/2014 20:15 Nicola Larosa n...@teknico.net ha scritto:

 Simone Federici wrote:
  Se anche il papa mi dicesse di buttarmi dal ponte, prima di
  buttarmi cercherei dentro di me se fosse giusto oppure no.

 Il papa da solo no, ma... http://xkcd.com/1170/

Level of xkcd citation: master!

Ciao.
Marco.
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Agile programming Robert Martin

2014-10-04 Per discussione Marco Beri
Il 04/ott/2014 19:55 Marco Beri marcob...@gmail.com ha scritto:


 Il 04/ott/2014 19:35 Simone Federici s.feder...@gmail.com ha scritto:

 TL;DR?

Comunque bel messaggio, anche se non sono del tutto d'accordo.

Una frase del libro che mi ha colpito è (cito a memoria): ogni commento
non banale è un insuccesso del programmatore che non è riuscito a scrivere
del codice autoesplicativo.

Forte, eh?

Onestamente mi aveva convinto.

Ciao.
Marco.
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Agile programming Robert Martin

2014-10-04 Per discussione Simone Federici
Marco Beri:

 Comunque bel messaggio, anche se non sono del tutto d'accordo.

Meno male, mica sono il papa...

  Una frase del libro che mi ha colpito è (cito a memoria): ogni commento
 non banale è un insuccesso del programmatore che non è riuscito a scrivere
 del codice autoesplicativo.

 Forte, eh?

 Onestamente mi aveva convinto.

Artisticamente apprezzo il pensiero. Siamo tutti alla ricerca del codice
perfetto. Però non mi convince.

Facciamo un esempio, leggi questo codice senza commenti e dimmi che fa...
se riesci obiettivamente a farti una idea del design in tempi record, può
essere che mi butto dal ponte veramente.
Puoi sempre dire che il design del codice che ti ho postato è scritto male
e quindi il programmatore non merita di essere preso da esempio.
Però a mio gusto è un gran pezzo di codice.

https://raw.githubusercontent.com/django/django/b2aad7b836bfde012756cca69291c14d2fdbd334/django/db/models/sql/query.py
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python