Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

If innestati o AND?

Raccolta di codici sorgenti

Moderatore: Foto UtentePaolino

1
voti

[21] Re: If innestati o AND?

Messaggioda Foto UtenteOrionis » 4 lug 2015, 12:11

Sjuanez ha scritto:Io per i miei progetti personali metto dei commenti, ma sono appunto personali. Se dovessi scrivere codice per altri sarebbe molto più complesso come procedimento. Tutto dipende anche dalla complessità e dalla destinazione del progetto, nonché dal budget.


Ho letto con interesse questo topic con i tanti e veloci interventi, da gente molto piu' esperta di me.
Io da bravo hobbista, incasinato, disordinato, sempre di corsa su mille rivoli d'idee, posso portare solo un esempio di vita vissuta.

Un amico mi ha chiesto di produrgli un (quasi) semplice programma per PIC che voleva usare come exe in un suo progetto. Detto fatto, in 2 giorni tra scrittura e verifica su HW, l'exe era pronto e spedito.
Poi l'amico mi chiede il sorgente (assembler) perché pensava di modificare qualcosina.
Prendo il programma e mi rendo conto che non ci avrebbe capito nulla perche' scritto in modalita' 'compressa' (ovvero pochi commenti, routine lunghe con tanti IF,...le variabili pero' erano gia' a posto, perche' a quelle ci tengo!).
Rimetto mano al codice per commentarlo, spiegare passo per passo il flusso e le scelte fatte e spezzare le routine.
Risultato: 4 giorni di lavoro in più e una lunghezza del codice triplicata.

Per me quindi, per questi progetti 'personali', l'ordine e la pulizia sono secondari.
Se mai un giorno dovessi riprendere questi progetti, probabilmente li riscriverei da capo in maniera diversa (le soluzioni sono sempre molteplici).

Scusate il disturbo O_/
Nemmeno gli Dei possono nulla contro la stupidità umana ?
Avatar utente
Foto UtenteOrionis
2.083 1 6 13
Expert
Expert
 
Messaggi: 103
Iscritto il: 16 mag 2015, 10:33
Località: Bergamo

0
voti

[22] Re: If innestati o AND?

Messaggioda Foto UtenteSjuanez » 4 lug 2015, 12:22

Ripeto se uno lavora da solo, e non ha necessità che altri vadano a rivedere e modificare il suo codice, può fare come meglio si trova.

Operazioni come la progettazione approfondita del software, la documentazione, le revisioni e le ottimizzazioni sono per progetti complessi e che di solito coinvolgono più di una persona. E che magari prevedono la possibilità, anzi la pianificazione, del riutilizzo di asset importanti del progetto iniziale. Pensate ad un videogioco del quale escono vari capitoli.

Io come programmatore ho un interesse para-hobbistico nella materia, ma l'industria del software la conosco un poco. E ad esempio ci sono aziende che obbligano i propri programmatori a produrre documentazioni molto più lunghe e laboriose del codice. Questo ha senso perché il tizio che ha scritto il codice deve essere sostituibile. E quel codice deve essere manipolabile da tutti i dipendenti.

Ancora di più, quasi i 2/3 del tempo dedicato ad un progetto sono impiegati da Software Designer che non scrivono una riga di codice, ma tirano giù diagrammi e schemi da passare poi ai coder senior che li ripartiscono ai coder junior.

Quando al progetto lavorano tante persone, la fase di ottimizzazione (finale o intermedia) è necessaria ed è uno standard dell'industria.

Il fatto è che si risparmiano parecchi grattacapi, però nessuno vieta al genio di turno di scrivere il codice come gli viene, provarlo e poi "tradurlo" negli standard aziendali. Anzi è pratica piuttosto comune.

O_/ O_/ O_/

Edit: ovviamente il tutto è una mia umile opinione.
Più so e più mi accorgo di non sapere.

Qualsiasi cosa abbia scritto, tieni presente che sono ancora al mio primo rocchetto di stagno.
Avatar utente
Foto UtenteSjuanez
11,3k 6 8 13
G.Master EY
G.Master EY
 
Messaggi: 3479
Iscritto il: 18 mar 2015, 13:48

2
voti

[23] Re: If innestati o AND?

Messaggioda Foto UtenteTardoFreak » 4 lug 2015, 12:24

Un aneddoto su quello che mi è capitato di recente.
L'esame di programmazione che ho sostenuto il mese scorso prevedeva la stesura di codice scritto su carta. La cosa mi ha spiazzato assai perché l'ultima volta che ho scritto un programma su carta avevo 17 anni, parliamo dunque di 34 anni fa, e l'ho fatto per il semplice motivo che ... non avevo il PC.
All'esame richiedevano metodi corretti sia dal punto di vista sintattico che funzionale.
Ho passato parecchi giorni nell' allenarmi a scrivere metodi su carta che dovevano essere compilati al primo colpo e che dovevano funzionare al primo colpo.
Uno stress che non auguro a nessuno! :shock:
Finito l'esame mi sono dovuto rimettere a lavorare, e cioè a riprendere firmware ed ampliarlo (sai che novità :roll: ).
Dico solo che sono molto contento di essermi esercitato su carta. Questo tipo di esercizio mi ha portato vantaggi tangibili.

Ripeto se uno lavora da solo, e non ha necessità che altri vadano a rivedere e modificare il suo codice, può fare come meglio si trova.

Non è una buona pratica. [-X
"La follia sta nel fare sempre la stessa cosa aspettandosi risultati diversi".
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
Avatar utente
Foto UtenteTardoFreak
73,9k 8 12 13
-EY Legend-
-EY Legend-
 
Messaggi: 15754
Iscritto il: 16 dic 2009, 11:10
Località: Torino - 3° pianeta del Sistema Solare

0
voti

[24] Re: If innestati o AND?

Messaggioda Foto UtentePietroBaima » 4 lug 2015, 12:30

Sjuanez ha scritto:Foto UtentePietroBaima non è che non siamo d'accordo, è che semplicemente sei più bravo ed esperto di me.

Bravo non lo so, in realtà non ho mai pensato di essere più bravo di qualcun altro in niente, comunque lasciamo perdere.
Esperto, può darsi, se come esperienza intendi prendersi inc.. hem... delusioni dovute al dover rifare da capo del codice mal fatto.
Però ho imparato in fretta :mrgreen:
Generatore codice per articoli:
nomi
Sul forum:
[pigreco]=π
[ohm]=Ω
[quadrato]=²
[cubo]=³
Avatar utente
Foto UtentePietroBaima
90,7k 7 12 13
G.Master EY
G.Master EY
 
Messaggi: 12207
Iscritto il: 12 ago 2012, 1:20
Località: Londra

0
voti

[25] Re: If innestati o AND?

Messaggioda Foto UtenteSjuanez » 4 lug 2015, 12:36

Spero non sia sembrato sarcastico e soprattutto che tu non ti sia offeso in alcun modo.

Dicevo sul serio e serenamente che uno più bravo (nel senso proprio più in gamba o più preparato) e più esperto (che ne ha visto di codice scorrere lungo i monitor) è in grado di anticipare problematiche che uno meno bravo ed esperto scopre a codice fatto ed in fase di revisione.

Mi scuso se il senso di quello che ho scritto è sembrato diverso. O_/ O_/
Più so e più mi accorgo di non sapere.

Qualsiasi cosa abbia scritto, tieni presente che sono ancora al mio primo rocchetto di stagno.
Avatar utente
Foto UtenteSjuanez
11,3k 6 8 13
G.Master EY
G.Master EY
 
Messaggi: 3479
Iscritto il: 18 mar 2015, 13:48

0
voti

[26] Re: If innestati o AND?

Messaggioda Foto UtentePietroBaima » 4 lug 2015, 12:45

Sjuanez ha scritto:Spero non sia sembrato sarcastico e soprattutto che tu non ti sia offeso in alcun modo.

No affatto, non mi sono offeso. perché avrei dovuto? ?^!

Sjuanez ha scritto:Mi scuso se il senso di quello che ho scritto è sembrato diverso. O_/ O_/

Non devi scusarti, non hai fatto nulla :!:

Ciao,
Pietro.
Generatore codice per articoli:
nomi
Sul forum:
[pigreco]=π
[ohm]=Ω
[quadrato]=²
[cubo]=³
Avatar utente
Foto UtentePietroBaima
90,7k 7 12 13
G.Master EY
G.Master EY
 
Messaggi: 12207
Iscritto il: 12 ago 2012, 1:20
Località: Londra

0
voti

[27] Re: If innestati o AND?

Messaggioda Foto UtenteSjuanez » 4 lug 2015, 12:49

Meglio così, rileggendo il mio intervento e la tua risposta ho pensato che poteva essere stato frainteso e me ne sarei dispiaciuto.

:-({|= Ci tengo tanto a questo forum e alle persone che lo frequentano e soprattutto, ne apprezzo i toni cordiali e rispettosi che lo rendono una vera e propria risorsa, nonché un posto piacevole per incontrare persone piacevoli.

O_uu_O O_uu_O O_uu_O O_/
Più so e più mi accorgo di non sapere.

Qualsiasi cosa abbia scritto, tieni presente che sono ancora al mio primo rocchetto di stagno.
Avatar utente
Foto UtenteSjuanez
11,3k 6 8 13
G.Master EY
G.Master EY
 
Messaggi: 3479
Iscritto il: 18 mar 2015, 13:48

3
voti

[28] Re: If innestati o AND?

Messaggioda Foto UtenteDarwinNE » 5 lug 2015, 0:22

Sjuanez ha scritto:Ho riportato quello che so, sarebbe bello sentire un professionista come Foto UtenteDarwinNE a riguardo.


Beh, io non sono mica un professionista. Per lavoro faccio tutt'altro, anche se avere un minimo di dimestichezza con progettini software aiuta quando devo affrontare un problema anche in ambito professionale.

La domanda è partita da uno stile per scrivere gli if e poi è evoluta sulla scrittura del codice in generale. Quel poco che ho imparato seguendo un po' quello che succedeva nella programmazione dai primi anni 90 ad oggi, è che intanto ci sono delle mode che vanno e vengono. Poi probabilmente per progetti non banali è una buona idea adottare un approccio pragmatico.

Posso parlare per quel poco che ho imparato con FidoCadJ. Come sapete, si tratta di un progettino di circa 50k linee di codice in Java. Certe parti sono abbastanza pulite e chiare, altre meno. Per esempio, il parser attualmente non è molto ben scritto. Le scelte fatte nel 2007 hanno funzionato subito molto molto bene, ma hanno supportato male certe estensioni del linguaggio. Il risultato è che ci sono copia/incolla, una lunga sequenza di if/elseif/else imbricati in maniera non facile da seguire, variabili di stato dal significato oscuro. Però è testato quotidianamente da tutti voi, funziona, ed adesso come adesso nessuno ha voglia di riscriverlo da zero.

In altri punti il codice è modulare, organizzato in maniera che mi pare chiara e abbastanza ben definita (per esempio, l'esportazione verso formati vettoriali). Nel 2014 c'è stata un refactoring molto profondo che ha coinvolto praticamente tutto il programma, permettendo di condividere moltissimo codice con l'applicazione Android. Certe cose ci sono sembrate ragionevoli, altre meno. Insomma, è probabilmente codice buono, ma non perfetto.

Bisogna poi ricordare che la maggior parte delle linee di codice ha poco di algoritmi interessanti: è codice di una noiosità sconvolgente, per piazzare un bottone in maniera corretta in una finestra alle varie risoluzioni e dimensioni etc.

Ci sono cose che io non accetto assolutamente in un commit FidoCadJ e ci sono stati dei contributi in passato che sono stati ripresi perché contenevano cose inguardabili. C'è anche codice che non ho scritto io, in cui io avrei fatto scelte diverse dal programmatore che l'ha scritto, ma che mi paiono assolutamente accettabili e lodevoli. Invece sono abbastanza inflessibile sullo stile di scrittura "tipografico", sulle indentature e cose del genere, che devono rimanere il più possibile coerenti all'interno di tutto il progetto. Quelle sono state scelte all'inizio ed adesso non si cambiano. Ecco le regole scritte nel README:

Codice: Seleziona tutto
- the code should be compatible with Java 1.7
- tab set to 4 spaces
- blocks delimited by curly braces are indented as follows:

    for(i=0; i<10; ++i) {   // starting brace here
        // indented code (4 spaces)
        System.out.println("I counted up to "+i);
    }   // close brace here at the same level of the 'for'
   
- methods are indented as follows:

    void dummy(int i, int j)
    {   // put the starting brace here
        System.out.println("Indent code");
    }   // put the closing brace here

- switches are indented as follows:

   int dummy(int i)
   {
      int j;
      switch(i) {
         case 1:
            j=3;
            break;
         case 2:
            j=2;
            break;
         default:
            j=0
      }
      return j;
   }

- the class names always start with a capital letter, and so does methods
- variables never start with a capital letter
- an instance of the class does have its first letter in lower case
- public classes and methods should be documented with Javadoc syntax
- no lines longer than 80 characters
- commits should not break the build
- each commit *MUST* include a log
- predilect simplicity to unnecessary complication
- predilect quality to quantity
- discuss what you want to do BEFORE start coding
- documentation is important. Try to improve it and keep it up-to-date


Io mi vergogno per certe parti del codice di FidoCadJ, però penso che se avessi cercato di scrivere subito codice perfetto non solo non ci sarei riuscito, ma FidoCadJ non sarebbe mai venuto alla luce. Ai livelli di Donald Knuth c'è solo lui ed il Padreterno, solo che sul secondo diversi hanno in passato espresso dubbi sull'esistenza.

Mi pare che nessuno ha parlato dell'analisi automatica del codice. Non fa miracoli, ma permette di evitare certe cattive pratiche ed in passato ha permesso di eliminare alcuni bug in FidoCadJ che altrimenti sarebbero passati inosservati. Ecco il risultato dell'analisi dello stato attuale dei sorgenti, fatta con PMD:

https://sourceforge.net/p/fidocadj/code ... format=raw

Si vede chiaramente che io e gli altri sviluppatori (ma soprattutto io) abbiamo una certa tendenza a scrivere classi dio :oops: Però alla fine non ci sono troppi messaggi ;-) Quando posso, faccio anche analisi dinamica (valgrind per programmi in C++).

Insomma si fa quel che si può: sulle parti critiche e gli algoritmi si fa girare tutto su carta, sulle parti noiose facilmente testabili (GUI) si cerca di scriverle in fretta e provarle, quello che si può testare in maniera automatica lo si fa. Si cerca di capire il meglio possibile la documentazione malscritta della tal tecnica per fare il click&draw, si fa il possibile per tenere aggiornata la documentazione nelle lingue (umane) che si parlano. Si rilegge il codice del giorno prima per vedere se ci sono casi dimenticati, si cerca di scovare il bug che il tale ha segnalato una settimana fa, si migliorano i commenti del codice scritto tre anni fa ed ormai poco comprensibile. Ogni tanto si studia la tecnica vecchia e nuova, perché i linguaggi (e le mode :evil: ) evolvono e c'è sempre qualcosa da imparare, senza troppi preconcetti e regole troppo rigide.

Tornando alla domanda sugli if :D, per quanto mi riguarda, tendo a preferire gli and e sono d'accordo con Foto Utentesimo85 e con Foto UtenteTardoFreak, non mi piace usare if imbricati se non c'è codice che debba essere eseguito solo con una condizione e non con l'altra. Non mi piace usare una variabile, trovo che non aggiunga nulla alla leggibilità e renda solo il codice più prolisso, a meno che non ci siano ragioni per giustificarne la presenza (per esempio perché la stessa condizione è usata in un secondo tempo).

P.S. Guardate che schifezza che è addString (per avere le indentature giuste, bisogna aprire il file con un editor che abbia il tab configurato a 4 spazi):

https://sourceforge.net/p/fidocadj/code ... tions.java

Quella è colpa mia, mi cospargo il capo di cenere :oops: :oops: :oops:
Follow me on Mastodon: @davbucci@mastodon.sdf.org
Avatar utente
Foto UtenteDarwinNE
31,0k 7 11 13
G.Master EY
G.Master EY
 
Messaggi: 4420
Iscritto il: 18 apr 2010, 9:32
Località: Grenoble - France

1
voti

[29] Re: If innestati o AND?

Messaggioda Foto Utentesimo85 » 5 lug 2015, 4:01

Una cosa che ho capito, vuoi perché sono imbecille o perché sono ritardato ... è che dal software open source puoi solo aspettarti meno bug possibili... Il che non vuol dire 0 errori..
Avatar utente
Foto Utentesimo85
30,9k 7 12 13
Disattivato su sua richiesta
 
Messaggi: 9927
Iscritto il: 30 ago 2010, 4:59

1
voti

[30] Re: If innestati o AND?

Messaggioda Foto UtenteDarwinNE » 5 lug 2015, 9:52

simo85 ha scritto:Una cosa che ho capito, vuoi perché sono imbecille o perché sono ritardato ... è che dal software open source puoi solo aspettarti meno bug possibili... Il che non vuol dire 0 errori..


Purtroppo non è per forza vero. Quello che è successo con Heartbleed ha mostrato che purtroppo non basta che il codice sorgente di un'applicazione sia accessibile perché molte persone lo leggano in maniera critica e facciano venire a galla gli errori:

https://en.wikipedia.org/wiki/Heartbleed

Leggere codice è un'attività molto sgradevole e di solito lo si fa solo se lo si deve modificare. Il che vuol dire che anche in software open source possano esistere problemi e bug molto gravi.
Poi c'è chi fa della lettura del codice un'arte, ma in pratica sono pochissimi a seguire paradigmi del genere:

https://en.wikipedia.org/wiki/Literate_programming
Follow me on Mastodon: @davbucci@mastodon.sdf.org
Avatar utente
Foto UtenteDarwinNE
31,0k 7 11 13
G.Master EY
G.Master EY
 
Messaggi: 4420
Iscritto il: 18 apr 2010, 9:32
Località: Grenoble - France

PrecedenteProssimo

Torna a Firmware e programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 5 ospiti