Showing posts with label corso. Show all posts
Showing posts with label corso. Show all posts

Wednesday, 9 February 2011

"Impariamo il C", un corso collaborativo

Qualche settimana fa ho dato via ad un piccolo esperimento sul forum di NGI. Si tratta di un micro-corso di programmazione C di stampo collaborativo: una breve lezione "frontale" discussa con la community.

L'approccio che seguo è bottom-up: son voluto partire dalle minuzie (cioé il ferro, quella che viene chiamata architettura dell'elaboratore) e risalire lentamente, introducendo un piccolo tassello aggiuntivo ad ogni lezione. Naturalmente, tutto scritto in maniera easy, con molte metafore, illustrazioni ed esercizietti.

Perché proprio il C? Beh, perché è la base dei linguaggi imperativi. In fondo, praticamente tutti i linguaggi non funzionali e non logici sono dialetti del C. Una volta imparata la logica, poi ci si può spostare su altri contesti senza paura, dai sistemi embedded alle web-application, passando per il mondo emergente del GPGPU computing.

Queste sono le "lezioni" effettuate finora:
  1. installazione dell'IDE, cenni di architettura degli elaboratori
  2. sintassi del C, programmazione strutturata
  3. ancora sulla sintassi, i tipi di dato, le variabili
  4. variabili parte seconda: gli array
  5. introduzione delle funzioni
  6. operatori aritmetici e logici
  7. costrutti di selezione
  8. costrutti di iterazione
  9. ancora sull'iterazione
  10. array multipli e struct
  11. ricorsione
  12. ancora ricorsione, memoria (record attivazione, heap, stack, ecc), introduzione dei puntatori
  13. le liste e l'allocazione di memoria (malloc)
  14. accenni dei costi asintotici, e ancora liste
Cercherò di tenere aggiornato l'indice. Il corso, per ora, ha un discreto séguito anche se abbiamo subito molti "abbandoni", vuoi per l'incapacità dell'insegnante, vuoi perché la programmazione C può essere rognosa (molti son saltati giù con la ricorsione, chissà perché!).

Come sosteneva Schoenberg, anche il maestro impara nell'insegnare all'allievo. Trasmettendo il C sto scoprendo aspetti che proprio cui non avevo mai prestato attenzione o di cui ignoravo completamente l'esistenza. Per esempio, ho reagito in maniera un po' scomposta alla scoperta che sia sizeof che la virgola sono operatori in C, e in particolare la virgola (grazie ACray!) che in base alle situazioni può avere una semantica che definire balzana è usare un eufemismo. Il C non finisce mai di stupire.