|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Dec 2006
Messaggi: 3808
|
Regole di buona programmazione
Salve, mi interessa capire quali possono essere i confini per tracciare un profilo del classico e bravo programmatore, per iniziare ho notato una piccolezza, specialmente usata da persone che codificano ad alti livelli, l'uso del ";" dopo un blocco di istruzioni {}, la mia domanda è, a che pro fare una cosa del genere?
Codice:
...{ ... }; ... |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Feb 2011
Messaggi: 2013
|
Io ho cominciato a studiare programmazione da pochi mesi.. quindi non posso certamente darti i parametri di un buon programmatore ^^"
Per quanto riguarda il " ; " dopo un blocco di codice mi viene da risponderti banalmente che ci sono strutture che richiedono il ";" dopo la chiusura dell'ultima parentesi.. Vedi lo struct, la definizione delle classi ecc. Almeno per il C++ o.o Sicuramente altri sapranno dirti di più.. purtroppo quese sono le mie conoscenze xD
__________________
CPU: Intel i5 2500k; GPU: Asus GTX 970 ; Scheda audio: Asus Xonar U7; RAM: 16GB DDR3; Storage: HD 750GB+SSD Samsung 840 (128GB); OS: Arch Linux | Linux Mint 18 | Win 7 (gaming) Thread ufficiali ![]() |
![]() |
![]() |
![]() |
#3 | |
Senior Member
Iscritto dal: Sep 2009
Messaggi: 638
|
Quote:
2) Assumendo che tu stia parlando di C/C++ e derivati, ci sono solo 2 casi in cui dopo una parentesi chiusa si mette il punto e virgola, e cioè dopo la definizione di una struttura o di una classe: Codice:
struct x { ... } class y { ... }; Quando invece le parentesi servono per delimitare un blocco di codice, il punto e virgola NON va messo alla fine. In questo esempio: Codice:
if(x) { y; }; Codice:
if(x) { y; } ; Tuttavia, ci sono casi in cui mettere il punto e virgola rende il codice errato e, se ti va bene, causa un errore di compilazione, come in Codice:
if(x) { y; }; else z; Codice:
if(x) { y; } ; // istruzione vuota che "rompe" l'if else z; Puoi fare un esempio del codice dei programmatori "degli alti livelli" ? |
|
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: May 2001
Messaggi: 12843
|
Bisogna vedere cosa intendi per regole di buona programmazione, se dal punto di vista della leggibilità del codice oppure dal punto di vista logico.
Per quanto riguarda la leggiblità del codice ci possono essere delle pratiche più o meno comuni, come ad esempio quello di usare nomi lunghi per descrivere bene cosa fa una data funzione o una variabile. Ad esempio: Codice:
SearchSubstring(..) ![]() Codice:
strstr() Non esiste uno standard in tal senso, ovvero se lavori in team in genere si cerca di usare delle regole comuni, mentre se lavori da solo puoi cercare di dartene te qualcuna, ad esempio "scrivere i tipi tutti in minuscolo e iniziare i nomi delle variabili con la lettera maiuscola" o viceversa... Purché tu sia coerente con le scelte che fai. Relativamente alla logica di funzionamento, buona programmazione è controllare sempre e comunque che un puntatore sia valido, oppure inizializzare SEMPRE la memoria con calloc (o quantomeno assicurarsi di inizializzare tutti i campi delle strutture allocate con malloc). Ma non solo, in generale controllare sempre il ritorno di una funzione o crearti un sistema di gestione degli errori (se stai lavorando in C) in maniera da uniformarne il trattamento. Ultima modifica di WarDuck : 10-08-2011 alle 13:35. |
![]() |
![]() |
![]() |
#6 | ||
Senior Member
Iscritto dal: Jul 2005
Città: Bologna
Messaggi: 1130
|
Quote:
Quote:
![]()
__________________
-> The Motherfucking Manifesto For Programming, Motherfuckers |
||
![]() |
![]() |
![]() |
#7 |
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Io, invece, partirei da qui.
![]()
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
![]() |
![]() |
![]() |
#8 | ||||
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Quote:
Quote:
Quote:
Quote:
![]() Risate a parte, è una lettura dall'alto valore educativo.
__________________
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) Ultima modifica di banryu79 : 11-08-2011 alle 16:39. |
||||
![]() |
![]() |
![]() |
#9 |
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
|
i compilatori sono diventati così "potenti", non mi veniva altro termine, forse era meglio dire "flessibili" che danno la sensazione di digerire di tutto. A volte ho questa sensazione che anche programmi scritti in maniera casareccia riescono a volare lo stesso.
Le uniche buone regole di programmazione che mi sento di suggerire sono: scrivere, scrivere e riscrivere e migliorare quintalate di codice per fare molta ma molta esperienza; le regole che intendi tu vengono cammin facendo. Imparare ad usare bene gli algoritmi noti e non reinventare ogni volta l'acqua calda è una buona regola di programmazione. Scrivere codice che può essere riusato è un'altra regola di programmazione. Produrre la documentazione del programma che si sta sviluppando sottolineando le proprie scoperte è un'ottima regola. |
![]() |
![]() |
![]() |
#10 | |
Senior Member
Iscritto dal: Jan 2007
Messaggi: 6108
|
Quote:
Ce ne sono di vario tipo (ed esistono pure dei "formattatori di codice sorgente" tipo astyle che lo riformattano in vari tipi di "bello stile di scrittura"). Di solito grossi progetti open source ed organizzazioni "fissano uno stile di scrittura" in modo che sia più semplice leggere, comprendere e modificare il codice scritto da altri. Un vero programmatore non lo riconosci per lo stile di scrittura dei sorgenti (anche se quello di solito è un indicatore utile), ci sono un sacco di pessimi programmatori che seguono le regole di scrittura ma comunque scrivono cose abominevoli. ![]() |
|
![]() |
![]() |
![]() |
#11 | |
Senior Member
Iscritto dal: Dec 2005
Città: Istanbul
Messaggi: 1817
|
Quote:
![]() Va cmq letto perche' e' una lettura divertente, ma ha molta piu' utilita' il link postato da shinya
__________________
One of the conclusions that we reached was that the "object" need not be a primitive notion in a programming language; one can build objects and their behaviour from little more than assignable value cells and good old lambda expressions. —Guy Steele |
|
![]() |
![]() |
![]() |
#12 |
Senior Member
Iscritto dal: May 2001
Messaggi: 12843
|
Quelli del "worse is better"?
![]() No grazie. La correttezza del codice è quello che distingue un vero programmatore dalle "scimmie ammaestrate" ![]() Ultima modifica di WarDuck : 12-08-2011 alle 11:32. |
![]() |
![]() |
![]() |
#13 |
Junior Member
Iscritto dal: Aug 2011
Messaggi: 6
|
Ti quoto pienamente
|
![]() |
![]() |
![]() |
#14 |
Senior Member
Iscritto dal: Dec 2005
Città: Istanbul
Messaggi: 1817
|
Ma avete letto i punti indicati da shinya ? Non sono neanche una ventina, e secondo me ampiamente condivisibili.
__________________
One of the conclusions that we reached was that the "object" need not be a primitive notion in a programming language; one can build objects and their behaviour from little more than assignable value cells and good old lambda expressions. —Guy Steele |
![]() |
![]() |
![]() |
#15 | |
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
|
Quote:
Comunque non è sempre facile riuscire a tenere sotto controllo un progetto, forse la filosofia unix che prevede che ogni comando faccia una cosa sola, questo mi era stato insegnato al corso di laboratorio di sistemi operativi, è la soluzione migliore. CLS o CLEAR cancella solo lo schermo e non CLS -t -v -u fa qualcosa d'altro. |
|
![]() |
![]() |
![]() |
#16 | |
Senior Member
Iscritto dal: Jul 2005
Città: Bologna
Messaggi: 1130
|
Quote:
![]() Protip: i punti del link con unix non c'entrano un cazzo.
__________________
-> The Motherfucking Manifesto For Programming, Motherfuckers |
|
![]() |
![]() |
![]() |
#17 | |
Senior Member
Iscritto dal: Jan 2007
Messaggi: 6108
|
Quote:
Ad esempio un buon programmatore tiene sempre d'occhio come procede lo sviluppo in modo da rifattorizzare e/o riscrivere per tempo le parti che lo richiedono (ma questo vale se si ha il controllo su tali aspetti). Poi non basta la chiarezza o la pulizia del codice scritto, bisogna tenerne aggiornata la documentazione interna ed esterna (commenti, documentazione descrittiva "estraibile automaticamente" con tool tipo doxygen e vera e propria documentazione scritta separatamente), non solo per gli altri ma anche per se stessi (tipo per quando si riprende in mano del software scritto anni prima). Non parliamo poi del tenersi aggiornati anche a livello di tool e di teoria, ecc. ecc. e poi di applicarne le parti utili relative al proprio lavoro. Ad esempio se si programma ad oggetti è estremamente consigliabile aver chiari i design pattern (ed anche gli anti-pattern ![]() |
|
![]() |
![]() |
![]() |
#18 |
Senior Member
Iscritto dal: Jun 2003
Città: Monopoli
Messaggi: 2788
|
Le regole più importanti secondo me sono:
-Commentare ogni riga. -Mettere in maiuscolo le costanti. -Rendere il nome delle variabili significativo. -Indentare le graffe in modo da rendere i blocchi più chiari. Ovviamente ci sono anche regole che migliorano l'esecuzione di un software ma dipendono dal linguaggio ovviamente.
__________________
CASE: Antec P182 - ALI: Corsair CX650M - CPU: AMD Ryzen 5 PRO 4650G + Cooler Master Hyper 212X - MB: ASUS PRIME A520M-K -RAM: G.SKILL Aegis 3200MHz 16GB - SSD: SanDisk Plus SSD 240GB - SA: Asus Xonar Essence STX - MOUSE: Logitech G9 - CUFFIE: Sennheiser HD 595 - *STEAM* |
![]() |
![]() |
![]() |
#19 | |
Senior Member
Iscritto dal: May 2001
Messaggi: 12843
|
Quote:
![]() L'ingegneria del software è una disciplina abbastanza recente, credo che nessuno abbia in tasca la soluzione ideale. Tant'è che ci sono talmente tante teorie e modi di vedere le cose che si creano fazioni anche su quelle pratiche. Su molti punti si può essere d'accordo, ma la realtà ci insegna che spesso la teoria è una cosa mentre la pratica è un'altra cosa. Una cosa che secondo me dovrebbe valere sempre e su cui tutti dovrebbero essere d'accordo è la correttezza degli algoritmi che si scrivono/usano. Bisogna rendersi conto che la complessità fa parte del mondo, va gestita ma non ignorata o peggio ancora banalizzata cercando di semplificare anche le cose che non si possono semplificare. Ci sono cose semplici e cose meno semplici, la mania di semplificare tutto spesso porta ad errori anche grossolani. L'ingegneria è l'arte del compromesso, ma la qualità del codice non va giudicata dai principi usati in teoria per scriverlo, quanto dal codice stesso. Anche perché ognuno è libero di interpretare a suo modo quei punti. Ultima modifica di WarDuck : 13-08-2011 alle 09:09. |
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 09:45.