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:
- installazione dell'IDE, cenni di architettura degli elaboratori
- sintassi del C, programmazione strutturata
- ancora sulla sintassi, i tipi di dato, le variabili
- variabili parte seconda: gli array
- introduzione delle funzioni
- operatori aritmetici e logici
- costrutti di selezione
- costrutti di iterazione
- ancora sull'iterazione
- array multipli e struct
- ricorsione
- ancora ricorsione, memoria (record attivazione, heap, stack, ecc), introduzione dei puntatori
- le liste e l'allocazione di memoria (malloc)
- accenni dei costi asintotici, e ancora liste
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.

