|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Oct 2001
Città: Firenze
Messaggi: 585
|
[GENERALE] Regole di buona programmazione
Invece di discutere di quale linguaggio sia "migliore", o di usare un forum di discussione come un help-desk, mi piacerebbe discutere con voi di buone pratiche di programmazione, regole cioè che prescindono dalla sintassi del linguaggio particolare.
Ad esempio buone o consigliate convenzioni nei nomi di metodi (o funzioni) e variabili (o campi); accorgimenti per rendere il codice più facilmente leggibile e manutenibile, tipo inizializzare SEMPRE le variabili; se usare o meno condizioni booleane complicate nei blocchi decisionali (diminuendone il numero) contro condizioni booleane elementari ma che costringano chi legge a seguire più ramificazioni; poi supponiamo che una delle ramificazioni di un if... else sia molto più corta dell'altra, allora ho notato che è più scorrevole la lettura se la condizione dell'if è tale da permettere al programmatore di scrivere tale breve blocco PRIMA di quello molto più lungo (in questo modo chi legge "si toglie subito il dubbio" di dove va a parare il flusso del programma se quella condizione viene verificata e può proseguire la lettura) ecc... Insomma sono sicuro che molti dei programmatori più esperti che bazzicano questo forum ne hanno di accorgimenti e consigli da dare, anche prescindendo dal linguaggio, quindi fatevi avanti
__________________
http://www.gnu.org/philosophy/no-wor...hments.it.html http://gprime.net/flash/postingandyou.php [1510 kB] |
|
|
|
|
|
#2 | |
|
Senior Member
Iscritto dal: Jul 2005
Città: Bologna
Messaggi: 1130
|
Quote:
Comunque, alcune risorse che ritengo ottime, e che contengono anche (forse poche) indicazioni di carattere generale: Factor Philosophy Effective Java Google C++ Style Guide
__________________
-> The Motherfucking Manifesto For Programming, Motherfuckers |
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Oct 2006
Città: milano
Messaggi: 1439
|
anche questo link è ottimo http://sourcemaking.com/
|
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Quote:
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
|
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Jul 2005
Città: Bologna
Messaggi: 1130
|
Quote:
A meno che per 'finito' non intendiamo 'fatturato' e/o 'che nessuno utilizza'.
__________________
-> The Motherfucking Manifesto For Programming, Motherfuckers |
|
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Oct 2006
Città: milano
Messaggi: 1439
|
|
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
Il programma è finito quando lo dai a quello che te l'ha chiesto - e dovrebbe pagartelo - e quello non ti richiama per dirti "ma che cacchio, non funziona".
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me! |
|
|
|
|
|
#9 | |
|
Senior Member
Iscritto dal: Jul 2002
Città: Milano
Messaggi: 19148
|
Quote:
secondo me è necessario innanzitutto commentare le funzioni specificando in due righe qual è lo scopo della funzione/metodo e dando una descrizione dei parametri di ingresso e dell'uscita. ci sono delle convenzioni per generare automaticamente della documentazione a partire dai commenti (tipo il Javadoc ma c'è anche per altri linguaggi) quindi è un'ottima cosa per avere già quasi fatto pure il documento di specifiche funzionali qualche commento va messo anche nel codice, magari evitando i commenti "ovvi". è bene inserire una breve spiegazione quando si fa un'operazione che non è chiara alla prima occhiata. altra cosa è il nome delle variabili. per il classico contatore del ciclo for va bene usare i/k/n mentre per le altre è meglio usare nomi che in qualche modo ne descrivano il significato, almeno è subito chiaro cosa si sta facendo quando si manipola quella variabile. spezzare il codice in diverse funzioni o usare più classi è un altro modo per rendere più chiaro il listato. di recente ho dovuto lavorare su un progetto dove c'era un file di 20.000 righe con circa un centinaio di funzioni, è la cosa migliore per creare confusione e tirar scemo chi deve metterci mano dopo... ovviamente zero commenti. in generale la buona regola che uso è tentare di rendere il codice leggibile. a distanza di mesi pure quello che abbiamo scritto noi stessi può rivelarsi ostico senza commenti e con nomi alla cazzo, figuriamoci cosa può capirne un estraneo! ecco perché evito pure il codice troppo "compatto" facendo ad esempio delle mega if con dentro di tutto e di più. preferisco avere un listato più lungo, ma meno "largo" e fatto di operazioni tutto sommato semplici naturalmente questo è il modo in cui lavoro io, ciascuno ha la propria esperienza e metodo di lavoro. |
|
|
|
|
|
|
#10 | |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Quote:
Quelle 20.000 righe "impaccate" in un unico file probabilmente a livello concettuale erano rappresentabili in 1 o più package, formati da almeno un 15 20 classi. Ma proprio minimo. Lavorare su roba del genere deve essere un incubo. (Poi dipende anche dalla cura con cui è scritto quel codice, ma se queste sono le premesse lascia intendere il peggio)
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
|
|
|
|
|
|
#11 |
|
Senior Member
Iscritto dal: Jul 2006
Città: Tristram
Messaggi: 517
|
Butto la mia su quello che NON si dovrebbe fare: recentemente, a causa di modifiche legislative in ambito assicurativo, ho dovuto mettere mano a un accrocchio (una serie di programmoni) VB6 (
Da qui due regoline: in primis, indentare il codice. In secundis: imparare a strutturare i dati in maniera furba e soprattutto riutilizzabile, pensando sempre al fatto che prima o poi qualcun'altro metterà le mani sul tuo lavoro. E cercare di non utilizzare variabili globali, nel caso il linguaggio lo permetta.
__________________
Il sole è giallo |
|
|
|
|
|
#12 | |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Quote:
Non ho mai avuto il dispiacere di avere a che fare con codice altrui scritto così tanto male; però penso che come esperienza, farla almeno una volta, sia molto formativa, anche se dolorosa...
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
|
|
|
|
|
|
#13 | |
|
Senior Member
Iscritto dal: Mar 2005
Città: Morimondo city
Messaggi: 5491
|
Quote:
__________________
Khelidan |
|
|
|
|
|
|
#14 | |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Quote:
L'unica finestra esterna che posso avere in questa realtà passa attraverso questa sezione del forum
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
|
|
|
|
|
|
#15 | ||
|
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
|
Le buone regole Unix, sempre valide
Quote:
Quote:
http://www.faqs.org/docs/artu/ch01s06.html
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto. E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test. |
||
|
|
|
|
|
#16 |
|
Senior Member
Iscritto dal: Sep 2004
Messaggi: 3967
|
Beh, io posso solo esprimere ciò che ho fatto fino ad ora non essendo un programmatore professionista. Ho solo dovuto creare delle piccole applicazioni per l'azienda nella quale lavoro causa nessun bugdet da investire in informatica e, di conseguenza, su professionisti del settore.
A prescindere dagli strumenti e dai linguaggi che ho potuto utilizzare, ho proceduto semplicemente in questo modo: 1) Ho scritto i programmi in modo che facessero 'semplicemente' quello che veniva richiesto. 2) (per PGIBis 3) Sono certo che le due applicazioni rilasciate possono essere scritte, anzi, progettate molto meglio, ed una fase di refactor (ma solo a scopo personale) è già iniziata. Nel frattempo i programmini vengono usati quotidianamente. Le regole che ho seguito: Tutte quelle che mi sono state fornite qui e sui libri consigliati (sempre qui), ma, fondamentalmente, mi sono preoccupato prima di far funzionare quellaqualsiasicosa che scrivevo/pensavo per fare in modo che rispondesse alla richiesta che mi era stata fatta. Per quanto possibile, ho cercato/cerco tutt'ora di scrivere nomi di variabili e metodi che abbiano un significato ben chiaro. Non ho ancora sufficiente esperienza con il TDD da potermi almeno fare un'idea da poter poi condividere con voi. Idem per i design pattern e metodi più eleganti nonchè produttivi. Sicuramente ho imparato a separare quello che è la logica di funzionamento da l resto (tipo interfacce grafiche, connessioni ai db) tant'è che ho una decina di librerie abbastanza 'elastiche' da poter coprire quasi tutte le piccole esigenze dell'azienda. Non avete idea di quanto mi piacerebbe poter, non dico farne parte, osservare e stare a contatto per qualche giorno con un team di sviluppo o con qualcuno di voi (non faccio nomi, ma siete in tanti) mentre lavora RaouL.
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek
|
|
|
|
|
|
#17 | |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Quote:
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
|
|
|
|
|
|
#18 | |
|
Senior Member
Iscritto dal: Aug 2005
Messaggi: 579
|
Quote:
Per poi non contare le implicazioni legislative che ci sono nel modificare il codice altrui... c'è da stare attenti, ti danno da modificare un programma e ti arriva un avviso di garanzia a casa... Personalmente penso che il progettare bene ciò che c'è da fare stendendo un minimo di progetto concettuale di quello che va realizzato (i vari attori che si trasformeranno nelle varie classi o funzioni e file sorgenti distinti) vale 1000 regole di buona programmazione. Ho visto "soluzioni" scritte "a corpo", senza che nemmeno sia passato per la mente a chi ha scritto l'accrocchio di ragionare 5 minuti sul problema, con complessità n^n^n... quando pensandoci e eliminando casi particolari si raggiungeva un n^2. E non parlo di semplici programmini ma di programmi per il calcolo scientifico che se li sviluppava la catechista venivano meglio. Se invece si tratta di programmini semplici, tipo "dar luce" ad una libreria di compressione grafica (costruirgli l'interfaccia attorno) allora si possono scrivere anche a corpo con qualche accorgimento. |
|
|
|
|
|
|
#19 | |
|
Senior Member
Iscritto dal: Oct 2001
Messaggi: 11471
|
Quote:
|
|
|
|
|
|
|
#20 | |
|
Senior Member
Iscritto dal: Jul 2006
Città: Tristram
Messaggi: 517
|
Quote:
Non fraintendermi, progettare un programma e poi svilupparlo, da soli o in team, è un'attività molto interessante (beh, almeno per me), ma a volte le "condizioni al contorno" che trovi quando lo fai da professionista ti portano a livelli di stress che neanche immagini. Requisiti non chiari, che cambiano in continuazione, anche nello stesso giorno della messa in produzione. Richieste da parte di gente totalmente incompetente, che a due giorni dalla consegna ti dice "ma dai, secondo me è facile" non avendo idea che quella richiesta sta rovesciando il mondo. Gestionali da 20mila righe di codice testati in due ore, che vanno in produzione (immancabilmente) pieni di bachi. Gente che decide di cambiare il database da mettere sotto il culo dell'applicativo il giorno prima della messa in produzione (per un problema sulle licenze, realmente successo). Tutte realtà purtroppo molto diffuse, per mia esperienza. Ripeto, programmare è un'arte fantastica ed ho molta stima dei programmatori (almeno di quelli bravi, e ce ne sono tanti). E' la realtà a contorno che, secondo me, spesso trasuda incompetenza e superficialità, in puro italian style. Mi chiedo ancora come sia possibile che nel 2009 molti progetti informatici, anche piuttosto grossi, siano gestiti da gente che non ha manco idea di cosa sia un array, una variabile, una classe, figuriamoci arrivare a concetti più avanzati.
__________________
Il sole è giallo |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 11:04.




















