Imparare a Programmare Imparare a Programmare
  • Capitoli
    • 1. Introduzione al linguaggio C
    • 2. Velocità di apprendimento: 3/10
    • 3. Applicazioni: 5/10
    • 4. Richiesto nel lavoro: 1/10
    • 5. Risorse: 5/10
    • 6. La mia modesta opinione
  • 1. Introduzione al linguaggio C
  • 2. Velocità di apprendimento: 3/10
  • 3. Applicazioni: 5/10
  • 4. Richiesto nel lavoro: 1/10
  • 5. Risorse: 5/10
  • 6. La mia modesta opinione
  • 1. Introduzione al linguaggio C
  • 2. Velocità di apprendimento: 3/10
  • 3. Applicazioni: 5/10
  • 4. Richiesto nel lavoro: 1/10
  • 5. Risorse: 5/10
  • 6. La mia modesta opinione
Programmare in C

Programmare in C

Tutto quello che dovresti sapere prima di iniziare a programmare in C.

C è il linguaggio più consigliato per chi vuole approcciarsi alla programmazione per la prima volta, ma siamo proprio sicuri che sia veramente la scelta migliore? C è davvero il miglior linguaggio per chi vuole iniziare a programmare da zero?

Rispondere solo Sì o No sarebbe stato troppo banale quindi ho preparato qualcosa di speciale ...

Lasciamo ad altri i discorsi tecnici e passiamo direttamente alle domande veramente importanti per chi vuole iniziare a programmare con questo linguaggio:

  • Quanto tempo serve per imparare ad usarlo (questione di giorni, settimane o mesi?)
  • Per cosa viene utilizzato (creare applicazioni, siti, software, ecc)
  • Se viene richiesto nel lavoro (la parte economica è importante)
  • Esistono tutorial, guide, manuali per iniziare (gratis o a pagamento? di che qualità?)

Sei pronto ad iniziare?

Cominciamo!

Alberto OllaAlberto Olla
Capitolo 1

Introduzione al linguaggio C

introduzione al linguaggio di programmazione C

Perché iniziare con questo linguaggio? Che vantaggi offre?

Ah ... il C!
Ero indeciso su come introdurre questo linguaggio ma penso che una frase del genere sia adeguata:
“C non è un linguaggio di programmazione, è Il linguaggio di programmazione!”
Rende l’idea? Spero di si. Faccia sorridente

È stato creato nel lontano 1972, figurati che non ero ancora nato!
Indovina oggi che fine ha fatto, dopo 51 anni dalla sua nascita?

Risulta essere al 2° posto tra i linguaggi più popolari al mondo. Questo dà un'idea di quanto sia solido e potente ma, come dice lo zio Ben di Spiderman:
"Da un grande potere derivano grandi responsabilità conseguenze" E tra poco andremo a scoprire quali sono queste "conseguenze".

Prima facciamo un passo indietro: hai mai studiato latino a scuola?
Sì perché devi sapere che il latino, anche se è una lingua morta, ha messo le basi per molte delle lingue comunemente parlate in Europa (compreso l’Italiano). Di conseguenza conoscerlo ti aiuta a comprendere meglio non solo la lingua italiana ma anche la maggior parte delle lingue europee.

Per C è esattamente la stessa cosa!

Possiamo considerarlo l'equivalente del latino nella programmazione, infatti è il padre di moltissimi linguaggi.

I figli diretti come C++, C# o Objective-C sono tutte delle “evoluzioni” del linguaggio originale ma, nella grande famiglia dei linguaggi derivati, troviamo veramente di tutto:

  • Linguaggi per la creazione di applicazioni per smartphone su iOS (Swift).
  • Linguaggi utilizzati sul web per la creazione di siti dinamici (PHP).
  • L’ultimissimo linguaggio rilasciato da Google per la programmazione lato server (Go).
  • Addirittura il "famoso" Java di cui ho parlato in un altro articolo.

Ecco quindi qual è il primo grande punto a favore di C: l’universalità. Se sai programmare in C, ti sarà facilissimo programmare in tanti altri linguaggi più semplici.

Capitolo 2

Velocità di apprendimento: 3/10

Linguaggio C è difficile o facile da imparare?

Quanto è facile da imparare? È come bere un bicchier d'acqua oppure è come scalare una montagna a mani nude per dissetarsi alla fonte?

Eccoci arrivati al tasto dolente del linguaggio.
Se hai intuito qualcosa quando l'ho paragonato al latino, e hai sentito lo stomaco contorcersi al ricordo delle serate passate a studiare i versi di Catullo, allora avevi già capito tutto.

C è un linguaggio molto potente, ma facciamo un attimo chiarezza su cosa intendiamo con “potente” — quanto velocemente viene eseguito il codice e quante risorse deve usare il computer per eseguirlo (memoria RAM e CPU).

Quindi: un linguaggio è potente se è veloce e usa poche risorse.

C è così potente perché il suo funzionamento è molto  “vicino” al linguaggio della macchina (il computer). Ed è proprio questa caratteristica a renderlo difficile, sia da imparare che da usare. Rispetto ad altri linguaggi rende la programmazione più complicata perché mette a disposizione degli strumenti che non sono affatto semplici da padroneggiare (come i puntatori e la gestione della memoria), soprattutto per un principiante.

È inutile ripeterti quanto C sia "complicato", faccio prima a mostrartelo!
Ti mostro lo stesso esercizio scritto in due linguaggi diversi.

Immaginiamo di voler ordinare una lista di nomi come:
[ "Alberto", "Bruno", "Claudia", "Daniela", "Eleonora" ]

Se scrivessimo il nostro programmino in C dovremmo scrivere qualcosa come dieci righe di codice mentre se lo facessimo in qualsiasi altro linguaggio più moderno ci basterebbe una riga!

Codice in C
#include <stdlib.h>
#include <stdio.h>
#include <string.h>

const char * array[] = {
    "claudia",
    "eleonora",
    "alberto",
    "daniela",
    "bruno",
};

#define n_array sizeof(array)/sizeof(const char *)

static int compare (const void * a, const void * b)
{
    return strcmp (*(const char **) a, *(const char **) b);
}

int main ()
{
    int i;
    qsort (array, n_array, sizeof (const char *), compare);
    for (i = 0; i < n_array; i++) {
        printf ("%d: %s.\n", i, array[i]);
    }
    return 0;
}
Codice in Javascript
var array = [
    "claudia",
    "eleonora",
    "alberto",
    "daniela",
    "bruno",
];
array.sort();
Per gli esperti: lo so, ai tuoi occhi potrebbe sembrare un paragone inutile, ma per chi non hai mai scritto una riga di codice potrebbe essere d'aiuto.

E dovevamo fare una cosa semplice, immagina cosa sarebbe accaduto con qualcosa di più elaborato.
Ecco perché si parla di “programmazione più complicata” ma questo non è per forza uno svantaggio, infatti si può considerare anche un vantaggio! 

Non mi credi?

Adesso te lo spiego con un esempio:

Immagina di voler fare lo scrittore di romanzi. Ti iscrivi in un corso in cui ti insegnano da subito come scrivere delle storie super-elaborate, con un sacco di intrecci, mille personaggi e così via.
Tu, nonostante la difficoltà e il tempo impiegato per imparare tutto, alla fine riesci a diventare uno scrittore.
Se, dopo la festa di fine corso, qualcuno ti chiedesse di scrivere un romanzetto veloce di dieci pagine, riusciresti a scriverlo ad occhi chiusi!

Ecco, con il C succede lo stesso.

Se si parte da un linguaggio difficile da imparare tutto quello che verrà dopo sarà in discesa. Sarà tutto più semplice.

Anche se non è facile da imparare rimane comunque il padre della programmazione e ad oggi viene insegnato (nella maggior parte dei casi) come primo linguaggio nelle principali università del mondo, compresa l’Italia.

Capitolo 3

Applicazioni: 5/10

Cosa programmare in C

Per cosa viene utilizzato: per quali programmi si usa il C e in quali settori è richiesto 

Entriamo un pochino nel lato tecnico, giusto per darti una vaga idea di come venga usato il linguaggio C:

  • Il il fulcro del sistema operativo (chiamato kernel) di Windows è scritto in C.
  • Hai presente Linux? Ubuntu, Centos, Debian, mai sentiti? Ecco, anche i loro “fulcri” o kernel sono tutti scritti in C. Il creatore di Linux, Linus Torvalds, ha dichiarato di non aver voluto usare C++ perché quest’ultimo, a suo dire, è un linguaggio orribile!
  • OS X, il sistema operativo della Apple indovina un po’ in cosa è scritto? Già, sempre in C.
  • Per il mobile abbiamo iOS, Android e Windows Phone (ma poi c’è qualcuno che usa veramente windows phone? io non ci credo!), tutti e tre scritti in C.

Andiamo a vedere i settori in cui ha senso usare C e in cui viene ancora utilizzato attivamente.

Sistemi Operativi

Ne abbiamo appena parlato. Mai sentito nominare Windows, Linux o Mac?
Tutti scritti in C.

Sistemi Embedded (Sistemi Integrati)

Lo so, è un nome che a prima vista non vuol dire nulla, te lo spiego a modo mio altrimenti non la finiamo più. Faccia sorridente

Immagina di svegliarti la domenica mattina, con tutta calma e ad un degno orario, circa le 11.

Dopo esserti rigirato nel letto decidi di dare il benvenuto a questo nuovo giorno preparandoti un bel caffè, per colazione.
Prendi le cialde e avvii la tua macchinetta del caffè (se non ne hai una vai a comprarla, poi torni a casa e ti prepari un caffè). Quella macchinetta, che hai avviato premendo un tastino, è un cosiddetto “sistema integrato” e con tutta probabilità è scritto in C.

Dopo il caffè senti un certo languorino, d’altronde l’ora di pranzo è vicina, quindi apri il frigo e prendi qualcosa da mangiare.
Anche il frigo è un sistema integrato e molto probabilmente anche il programma che lo gestisce è scritto proprio in C.

Decidi di posare il tuo corpo sul divano come fossi un pascià e di accendere la TV per allietare la tua colazione e, anche in questo caso, la televisione è un sistema integrato e con tutta probabilità il suo interno è scritto proprio in C.

Praticamente, con sistemi integrati, o sistemi embedded, si intendono tutti quegli “apparecchi” elettronici che vengono creati per un compito ben preciso.
Ad esempio: la macchinetta del caffè è stata costruita inserendo solo i componenti elettronici che servivano per uno scopo molto preciso, ovvero preparare il caffè, non uno di più non uno di meno.

Compilatori di altri linguaggi

Ti avevo avvisato che qui saremmo entrati nel tecnico.

I codici di alcuni linguaggi (C compreso) per essere eseguiti dalla macchina (computer) devono essere prima “compilati”.

Diciamo che il compilatore è una sorta di traduttore , che trasforma il codice che abbiamo scritto in un codice che il computer possa eseguire.

Questo procedimento di traduzione prende il nome di “compilazione” e il programmino che lo esegue viene chiamato compilatore (adesso sembra tutto più semplice).
Molti linguaggi utilizzano il compilatore scritto proprio in C, la lista è lunga per questo ne cito solo alcuni: Java, C++ o C#.

Interpreti di altri linguaggi

Poco fa ti ho spiegato cos’è il compilatore: un programma che prende un codice e lo converte in linguaggio macchina. Ora vediamo cos’è l’interprete.

L’interprete funziona più o meno allo stesso modo del compilatore ma con una grande differenza: esegue la traduzione in tempo reale!

Mi spiego meglio:

Immagina il compilatore come una persona, un traduttore baffuto e pignolo. Noi gli diamo un testo da tradurre e lui, quando ha completato, ci restituisce un altro foglio con tutto il testo tradotto in un’altra lingua.

L’interprete è più come l’amico dell’amico che ti aiuta a farti capire in una nazione straniera. Non scrive nulla e non ti traduce tutte le frasi possibili e immaginabili, fa tutto a voce e riesce a tradurre una frase alla volta.

Noi diamo all'interprete il codice da tradurre e lui, man mano che lo legge, lo traduce (una riga alla volta). Nel frattempo la macchina lo ascolta ed esegue i comandi.

Questo è essenzialmente ciò che fa l’interprete di linguaggi come PHP, Ruby, Python, Javascript che sono tutti scritti in C.

Database

Hai mai sentito parlare di database?
In italiano possiamo tradurlo come “base di dati” ma non rende molto bene l’idea di cosa sia ...

Ti faccio subito un esempio per capire meglio:
Quando fai una ricerca su google e ti vengono mostrati tutti quei bei risultati, secondo te dove vengono salvati?
Din din din din! In un database, esatto!

Il database è un sistema che si occupa di immagazzinare e organizzare dati.

Facilita alcune operazioni comuni come l’inserimento di nuovi elementi, la ricerca, l’eliminazione e la modifica (in inglese l’insieme di tutte queste operazioni viene chiamato CRUD: Create Read Update Delete).

Mettiamo da parte i database e torniamo a C.

Secondo te ... per cosa può mai essere usato in questo ambito?
Già, per creare il sistema stesso del database!

Infatti viene utilizzato per MySQL, Postgres, Redis, Aerospike e tanti altri.

Web server

Ma quanto stiamo diventando tecnici parlando di questi argomenti? Faccia felice
Eccoci arrivati al più frizzante di tutti: i web server!

Parliamo di web, e questo è facile, ma anche di server, e forse questo è più difficile.
Il server? Che roba è?

Puoi immaginarti un server come un computer collegato ad internet H24 senza schermo, tastiera e mouse.

Ma a che serve un computer del genere? Cosa fa per tutto il tempo?!
Ok, con calma, adesso ci arriviamo. Faccia sorridente

Immagina un sito internet, come questo, anzi, immagina esattamente questa pagina che stai leggendo.
Puoi vedere del testo, delle immagini, degli altri elementi grafici e così via.
Tutto quello che tu vedi si traduce in dei file reali.
Per semplificare diciamo che hanno il formato pagina .html , e grafica .css.

Ricapitolando, un sito internet non è altro che un insieme di file HTML e CSS.

I file del nostro sito devono essere resi accessibili a tutti, altrimenti li vedremo solo noi!

Per fare questo possiamo utilizzare dei programmini chiamati “web server” e indovina di cosa si occupano?
Di rendere il nostro bel server accessibile via web. Faccia sorridente

Quindi andando ad un indirizzo web come www.imparareaprogrammare.it viene visualizzata la pagina principale del sito. Non sarà altro che l’insieme dei file HTML e CSS (nel caso del mio sito anche un pizzico di PHP).

I web server si occupano proprio di questo. I più famosi sono Apache, Httpd e nginx e sono tutti scritti in C.

Il 99% dei programmi del tuo computer

Già, hai capito bene. 
La maggior parte dei programmi che usi comunemente nel tuo computer sono completamente, o parzialmente, scritti in C.

Capitolo 4

Richiesto nel lavoro: 1/10

Lavoro per programmatori C

Chi inizia da autodidatta può trovare lavoro grazie a C? 

Allora, parliamoci chiaro, la valutazione di 1/10 non è correttissima, ma mi sembra giusto non illuderti. 
C è bello e buono quando lo si studia con spensieratezza, tra i libri, ma se parliamo di lavoro è tutto diverso.

Ho già detto che i vari fulcri (kernel) di praticamente tutti i sistemi operativi più famosi sono proprio scritti in C, ma questo è solo l’inizio.

Tecnicamente, con C, possiamo fare tutto, ma proprio tutto!

Se pensi al tuo smartphone ti vengono in mente le applicazioni da installare, giusto? Con C possiamo (potenzialmente) creare sia le applicazioni sia l’intero sistema operativo!

Aspetta però! Questo non significa che sia la scelta migliore da fare, anzi non lo è affatto! Scegliere un linguaggio “complesso” come C per creare un’app non ha molto senso.

Mi spiego meglio.

C è come una ferrari: bella, potente e veloce ma immagina di dover attraversare una strada di campagna, piena di fossi e buche.
Saresti costretto ad andare lentissimo e arriveresti alla fine della strada dopo ore di noia e frustrazione.

Se invece percorressi la stessa strada con una bella moto da cross, pensata appositamente per quel tipo di terreno, potresti andare velocissimo e arrivare subito alla fine, senza sforzi!

Anche se C rimane uno dei più potenti linguaggi di programmazione, non significa che sia sempre la scelta migliore per ogni progetto.

Un linguaggio del genere è sicuramente richiesto nel mondo del lavoro, ma con livelli molto avanzati di esperienza.

C viene utilizzato generalmente per attività di programmazione “particolari”.

Sicuramente non viene usato per creare un’app sullo smartphone ma, con tutta probabilità, si userà per creare un mini sistema operativo per il computer di bordo della nuova FIAT.

Questo sottintende che il programmatore debba avere una forte conoscenza non solo della programmazione in sé, ma anche di tutto quello che la circonda: algoritmi, circuiti, matematica, ecc. Conoscenze tecniche più vicine al funzionamento della macchina che alla programmazione vera e propria.

Per essere assunti in un'azienda che usa C nei sui prodotti non basta semplicemente imparare a programmare, con tutta probabilità sarà richiesta una laurea in informatica o in un settori analoghi.

C viene utilizzato da aziende altamente specializzate, un po’ come i meccanici della Formula 1!

In Italia, quanti saranno i posti di lavoro per questo tipo di meccanici altamente specializzati?
Di preciso non lo so ... secondo me molto pochi, ma in ottime aziende. 

Parliamo sempre di "meccanici" ma con una formazione specializzata totalmente diversa dal quel tizio che abita vicino a casa tua, che aggiusta le macchine, eppure entrambi sono meccanici.

Ricapitolando:

Chi sa programmare in C è richiesto, ma solo se molto esperto, con esperienza nel settore e di solito con una laurea. Deve essere uno specialista, come il meccanico della Formula 1.

Per questo il mio voto è così basso.

Esistono opportunità lavorative, ma non per autodidatti o per chi, partendo da zero, vuole trovare un nuovo lavoro, o magari una promozione.

Capitolo 5

Risorse: 5/10

Guide e manuali per iniziare a programmare in C

Vuoi cominciare subito? Eccoti le migliori risorse per iniziare da zero 

In questo capitolo troverai una lista di risorse (principalmente gratuite) tra corsi online, libri e tutorial che potrai seguire da subito. Anche se probabilmente ti sarai chiedendo:

“Com’è possibile che un linguaggio vecchio 51 anni, tra i più potenti in circolazione e tra i più usati al mondo, abbia una valutazione di 5/10?
Devono esserci un’infinità di risorse disponibili!”

Sì, è vero, hai perfettamente ragione.
C'è solo un problema:

Le risorse ci sono ma non sono pensate per chi (come te!) vuole iniziare da zero.

Se parliamo del linguaggio fondamento dell’informatica quali tipi di persone pensi che lo utilizzino? Il nuovo ragazzetto appena assunto in azienda, oppure il super programmatore professionista che lavora da oltre vent'anni nel settore? 

Mi sembra più probabile il secondo caso. Sono esattamente queste le figure che creano le varie risorse. Sono persone con una carriera tecnica e quindi produrranno risorse tecniche!

Pubblicano libri più grossi del nuovo testamento, tengono corsi per università e college (anche online), scrivono tutorial/articoli di approfondimento e continuano a mantenere viva la comunità degli sviluppatori C.

Iniziamo con la lista:

Tutorial (in inglese)

Gratuiti e online! I tutorial ti guidano con piccoli e semplici passi per arrivare alla fine di un percorso tortuoso. L’approccio di un tutorial è ottimo per cominciare a fare pratica.
Eccone alcuni dai quali potresti iniziare:

  • Free Interactive C Tutorial
  • C Introduction: Learn to compile and run C codes
  • C Tutorial by TutorialsPoint
  • C Tutorial - Learn C
  • C Programming Tutorial - Learn C Programming with examples

Corsi (in inglese)

Qui la cosa si fa interessante, anzi di più!
Ricordi che ti avevo detto che C viene insegnato nelle università?

Ecco, molte università pubblicano i loro corsi online e sono completamente gratuiti per chiunque! Chiunque ha la possibilità di imparare, basta solo avere la volontà di farlo. Faccia sorridente

Ecco alcuni corsi online (universitari e non) che puoi seguire per iniziare a programmare in C:

  • Introduction to C Programming Course
  • Stanford Engineering Everywhere | Programming Paradigms
  • Introduction to Computer Science, Harvard University
  • Programming Basics, IIT Bombay

Letture, libri ed ebook (in italiano)

Premetto che i libri su C sono un po’ particolari, ricordano molto la divina commedia di Dante: belli lunghi, massicci e dentro trovi di tutto, dal paradiso all’inferno.

Ecco la lista dei libri per programmare in C:

Ebook gratuiti

  • Il linguaggio C: Guida pratica alla programmazione (PDF)
  • Corso di programmazione in C (PDF)

Libri cartacei

Tengo molto a questo aspetto e penso che i libri cartacei siano importantissimi per chi vuole studiare la programmazione da autodidatta.

Per consigliarti i migliori testi disponibili ho chiesto una mano ad un esperto in materia, un amico dottorando dell’Università di Informatica di Cagliari.
Con questi titoli vai sul sicuro!

Miglior libro per programmare in C

Programmazione in C di Kim N. King

È adatto a tutti, sia principianti che professionisti:

  • Chi vuole studiare C da autodidatta troverà delle spiegazioni chiare e tanti esercizi pratici.
  • Chi conosce già il linguaggio avrà un ottimo manuale di programmazione, che affronta ogni aspetto del linguaggio, con approfondimenti e dettagli alla fine di ogni capitolo.

Se devi imparare C in un percorso accademico, che sia scolastico o universitario, questo è il libro che fa per te.

Programmare in C. Introduzione al linguaggio di Stephen G. Kochan

È ben strutturato e parte dalle basi, quindi per un principiante risulta facile da seguire e consultare. Le spiegazioni sono chiare e dettagliate, sempre accompagnate da vari esempi ed esercizi pratici.

Anche questo è un testo accademico che viene usato in varie università di Informatica.

Miglior libro per imparare C
Capitolo 6

La mia modesta opinione

Consigli per iniziare a programmare in C

Un linguaggio potente e complesso come C, è davvero il linguaggio di programmazione che fa per te? 

Credo dipenda molto da quanto tempo e quanta fatica tu voglia impiegare prima di ottenere dei risultati.

Perché è vero C è potente, è il secondo più popolare al mondo, viene usato in ambito accademico, ma questo non vuol dire che sia adatto a tutte le situazioni.

Fermati un attimo prima di tuffarti sui libri. Fatti i tuoi conti per ciò che riguarda il rapporto tempo/fatica.

Perché vuoi imparare a programmare?
Secondo le tue esigenze, ha senso impiegare uno o due mesi (sono ottimista) per imparare C?

Se la risposta è Sì: allora ottimo! Comincia subito e fammi sapere come va. Faccia sorridente
Se invece la risposta è No: allora passa al prossimo linguaggio. Faccia felice

L'articolo è finito qui ma vorrei un tuo consiglio.

Mi farebbe piacere che tu condividessi questo articolo con almeno una persona (o se vuoi anche di più), se è stato utile per te sarà utile anche per qualcuno!

Mi raccomando, aspetto la tua condivisione e intanto ti auguro:
Buona programmazione!
Il tuo amico Alberto

Vuoi imparare a programmare?

Ho preparato una serie di video lezioni che puoi ricevere gratuitamente.


Alberto Olla Insegnante del Corso

Ciao, io sono Alberto Olla. Faccia sorridente

Mi occupo di programmazione da quasi 10 anni e in tutto questo tempo ho lavorato sempre con passione e una grande voglia di imparare. Non ho mai smesso di migliorare me stesso e ho sperimentato nuove tecnologie e nuovi linguaggi alla ricerca della soluzione migliore per i miei progetti e per quelli dei miei clienti.

Ora che ho una certa esperienza vorrei insegnare anche a te quello che ho imparato nei miei anni di lavoro.

Non devi fare altro che scrivere qui sopra il tuo indirizzo email e ti invierò subito la prima lezione!

Alberto Olla firma
altre guide popolari simili

Miglior linguaggio di programmazione per iniziare?

Consigli e analisi nella scelta del primo linguaggio

Programmare in Java: miglior linguaggio per iniziare?

I segreti del linguaggio più richiesto nel mondo del lavoro

Programmare con Arduino: come iniziare?

Scopri quali progetti puoi realizzare e come imparare le basi

  • Corso di Programmazione
  • Corso Java
  • Privacy