C: Qual è una buona fonte per insegnare convenzioni di codice standard / di base a qualcuno che ha appena imparato la lingua? [chiuso]

2

Sto facendo da tutor a qualcuno che può essere descritto come un nuovo arrivato in C. Comprensibilmente, lei non sa molto sulle convenzioni di codifica generalmente praticate, e quindi tutti i suoi programmi tendono a usare le lettere singole, la spaziatura / indentazione non corrispondente e il come, rendendo molto difficile leggere / eseguire il debug dei suoi sforzi.

La mia domanda è, c'è un link / set di linee guida ed esempi che può usare per adottare le convenzioni di base del codice? Non dovrebbe essere troppo arcano da spaventarla, ma abbastanza inclusiva da avere le basi coperte (in modo che nessuno possa sussultare guardando il codice).

Qualche suggerimento?

    
posta TCSGrad 29.06.2011 - 19:40
fonte

6 risposte

8

Penso che Clean Code e Code Complete non siano adatti al suo attuale stadio. Ti suggerisco di indirizzarla a leggere Il linguaggio di programmazione C e scrivere gli esempi di funzioni a modo suo e farle confrontare la sua stessa implementazione con il libro. Ciò migliorerà molto la sua capacità di programmazione. Dopo aver terminato questo libro, Clean Code e Code Complete potrebbero essere la scelta migliore per lei.

    
risposta data 07.07.2011 - 16:13
fonte
3

Raccomando il libro Pulisci codice . Descrive diverse best practice di codifica, incluse cose come la struttura del codice, i commenti e la denominazione delle variabili.

    
risposta data 29.06.2011 - 19:53
fonte
2

Ci sono molte risorse che dicono "questo è come scrivere un buon codice pulito che sia facile da leggere". La parte più importante di questo è il "perché" di tutto questo. Imparare davvero il "perché" di solito sembra implicare qualche sofferenza personale con codice errato.

La mia prima grande esperienza di apprendimento su questo è avvenuta durante una posizione cooperativa del college, in quanto assegnata a documentare un codice di sistema di comunicazione in C. Questo era un messaggio centrale che passava il servicer tra altri processi. Pochi commenti erano presenti, e quei pochi che erano lì erano sbagliati, la struttura di questo codice era stata copiata da altrove e si sono dimenticati di rimuovere alcuni dei vecchi commenti ... C'erano alcuni nomi ragionevoli per le cose, ma era un incubo da capire. Fai il suo reverse-engineer e documenta un po 'di codice.

Ho sempre fatto meglio con la rientranza, immagino che mi sia passato più facile in classe. Ho visto un codice orribile qui al lavoro in cui l'indentazione sembra essere prodotta da un generatore di numeri casuali su ciascuna linea. Assolutamente orribile. La prima cosa che faccio è passare e cercare di ottenere indentazione per avere un senso prima di vedere cosa fa il codice. Falle capire un po 'di codice di merda.

In realtà, penso che sia meglio trasformare la tua esperienza in giro e mostrarle cosa vuol dire essere quello che cerca di capire cosa c'è da vedere. Dopo tutto, nel mondo reale, il suo sé futuro è probabilmente la persona principale di cui ha bisogno per documentare. Mostrale un po 'del suo codice precedente da un po' di tempo fa e falle capire e spiegartelo.

Quindi mostrale un buon codice, falle capire e spiega cosa fa, e fagli vedere quanto è più facile da gestire.

    
risposta data 30.06.2011 - 00:14
fonte
1

Ci sono 2 motivi principali per usare uno stile di indentazione specifico:

a) È meglio leggibile (oggettivamente)
 b) Lo è, se sei abituato a questo stile. Può essere uno stile diverso, ma uno stile coerente con un progetto.

Parte I significa, non incollare tutto insieme:

int x=l*(1-i)-k(9);
int x = l * (1 - i) - k (9);

Per sapere dove troverai troverai la parentesi di chiusura per una apertura e viceversa, senza decorare il tuo codice con

} // end if

e dove il codice, appartenente a quella parentesi, è rientrato.

IMHO, per C, ci sono due grandi scuole: K & R e Allman-Style. La differenza principale è:

KAndR (void) {
    Allman ();
}

Allman (void) 
{
    KAndR ();
}

È necessario per un orientamento veloce, non per un aspetto gradevole.

Esiste, specialmente per i programmi C, il programma gnu-indent , che può essere configurato per rientrare in stili diversi. Chiedile di usarlo prima di inviarti qualcosa, oppure fallo tu stesso. Eclipse ha una cosa del genere integrata per il codice Java. Rifiuterei il codice formattato improprio. Che profitti al massimo dal codice corretto è qualcosa che dovrebbe imparare velocemente, se sta riutilizzando il suo codice non formattato.

Alcune convenzioni sono solo convenzioni e utili se seguite da tutta la comunità. Ad esempio, una costante non ha bisogno di essere chiamata in maiuscolo, ma se leggo MAXAGE e posso contare sulla tesi, è una costante, risparmio molto tempo rispetto alla ricerca.

I nomi delle variabili sono più difficili da ottenere. Ma come regola generale: per i contatori di loop, i e n sono perfetti. La maggior parte degli altri valori dovrebbe avere nomi significativi.

    
risposta data 08.07.2011 - 01:43
fonte
1

Quando apprendo qualcosa, penso che sia necessaria un'ampia varietà di attività e paradigmi. Presto riuscirai a superare i problemi di indentazione e formattazione e potrai intraprendere un livello più profondo di allenamento che sarà più interessante per entrambi.

Penso che a volte sia bello prendere a prestito da altre aree di attività (come lo sport o la musica classica) in cui il tipo di coaching e mentoring che descrivi sono estremamente comuni, al contrario del nostro campo in cui è o un estremo o il altro (da autodidatta contro insegnato al programma / test come talvolta accade nelle università).

Gli asili e l'istruzione scolastica elementare pubblica sono stati progettati con l'idea che molte materie debbano essere insegnate: lettura, scrittura, calligrafia, storia, matematica, educazione civica, educazione fisica. Mentre il tuo mentoring progredisce, per giocare un po 'con l'analogia, penso che tu abbia bisogno di un portfolio di argomenti che vada oltre i linguaggi di programmazione (scrittura) e gli standard di codifica / convenzioni di codifica (calligrafia). Molti bambini bruciano la musica in fretta perché giocare con le scale e i piccoli esercizi non fanno clic con loro.

Un insegnante di musica molto famoso, Dorthy Delay ha avuto centinaia o migliaia di studenti, inclusi alcuni dei più famosi musicisti del mondo, durante la sua lunga carriera in Julliard. Aveva un programma per i suoi studenti che includeva cinque ore al giorno di pratica individuale. Aggiunto al lavoro di classe e esibendosi con gruppi (penso di lavorare in gruppo), ha richiesto un carico di lavoro pesante. E così dovresti.

Il seguente grafico riassume ciò che lei ha raccomandato / richiesto:

link

Avendo avuto qualche allenamento musicale quando ero più giovane, proverò a tradurre l'analogia.

  • Esercizi - Esercitazioni API: trova una funzione di programmazione che non hai ancora elaborato e impara a farlo. Un altro parallelo potrebbe essere lo scripting e la scrittura di piccoli programmi per aumentare la fluidità in un linguaggio di programmazione.
  • Bilance - Refactoring: prendi un pezzo di codice e rendilo liscio su elimina gli odori del codice . Le bilance sono considerate importanti perché aiutano i musicisti a concentrarsi sul suonare in sintonia e a muovere le dita in modo efficiente in modo che possano suonare più velocemente. Forse questo potrebbe anche corrispondere all'uso di strumenti di analisi valgrind, lint, statici e dinamici che esaminano da vicino gli aspetti per statement / per function dei programmi.
  • Studi - Esercizi simili, ma uno scopo più ampio. Forse impara un nuovo strumento o framework.
  • Pezzi - Applicazioni. I pezzi sono come i concerti o le sonate, sono ciò che viene consegnato al pubblico / cliente e richiedono miglioramenti iterativi / incrementali che possono durare anni di lavoro.
  • Altro - Questi non sono riferimenti oscuri a particolari libri di testo o compositori. Giocare per divertimento / programmazione per divertirti in fila. Così ascolta la musica / legge il codice di altre persone. Le prove mentali si riferiscono alla corsa attraverso un brano musicale memorizzato nella tua testa. Per gli sviluppatori questo ruolo potrebbe essere preso per pensare a un'app, prendere appunti o disegnare su carta o su una lavagna bianca separata dal lavoro di codifica o documentazione formale.

Se prendiamo ulteriormente l'analogia con il musicista, prova a creare opportunità per il tuo protetto di associare il programma con te e gli altri e di lavorare in team di piccole, medie e grandi dimensioni, in particolare quelli che eseguono frequentemente.

    
risposta data 03.09.2012 - 21:14
fonte
0

Sono un grande fan dei libri di "Thinking in ..." di Bruce Eckel, ma non ne ha scritto uno appositamente per C (anche se consiglio vivamente "Pensare in C ++"). Ha un link sul suo sito a un seminario web intitolato "Pensare in C" che potrebbe essere un punto di partenza (almeno vale la pena dare un'occhiata dato che è gratuito)

    
risposta data 07.07.2011 - 16:31
fonte

Leggi altre domande sui tag