REGALA UN CORSO

È facile ed è un modo di dire: segui i tuoi sogni, credo in te!

Scopri come fare in 3 passi
Home
È ancora il tempo del C?

04 Maggio 2015

È ancora il tempo del C?

di

Il principe dei linguaggi messo sotto pressione da parte di concorrenti più giovani, svelti e di tendenza. Resiste ma vacilla.

Implementavo cose giuste, e ora sono uno splendido quarantenne. Questo probabilmente direbbe oggi il linguaggio C parafrasando una celebre battuta di Nanni Moretti. Dal 1972 in poi C ha continuato a essere IL linguaggio di programmazione. Quello imprescindibile, quello essenziale per imparare gli algoritmi, le strutture dati e i sistemi operativi.

Molti dei più importanti componenti software sono ancora oggi scritti e manutenuti in C, e perciò non è certo una sorpresa che questo linguaggio abbia ancora grande diffusione e popolarità tra gli sviluppatori.

Guardando la statistica relativa alle offerte di lavoro (conteggiate in valore assoluto) pubblicata dal portale di annunci indeed.com, C è saldamente in prima posizione, seguito da Java e dagli altri soliti noti.

Tutti quindi a imparare o a rinfrescare C? Non proprio. Tornando ancora alle statistiche di indeed.com, ma valutando stavolta la percentuale di crescita, sono i linguaggi più moderni come Python e Ruby a mostrare gli andamenti più interessanti. Ovviamente si tratta di linguaggi di più recente diffusione, e il loro successo è una conseguenza del tutto fisiologica, ma queste percentuali di crescita sono sicuramente sintomo di come il mercato stia lentamente cambiando.

C è un linguaggio low-level e soffre di una serie di problemi strutturali che non lo rendono adatto a tutti i contesti. Aziende che hanno bisogno di un time to market rapidissimo per sopravvivere – come ad esempio molte startup – o quelle che per vari motivi non si possono permettere un team di soli sviluppatori esperti, difficilmente usano C. Non è un caso che il grosso del codice dietro a Dropbox, GithubAirbnb sia scritto in Python e Ruby e che molti corsi universitari prima allineati su C per introdurre i fondamenti della programmazione abbiano fatto scelte differenti.

A differenza di altri linguaggi, C ha una soglia di apprendimento apparentemente bassa, ma è facile impararlo male e di conseguenza causare danni anche gravi. Rob Graham scrive sul suo blog a proposito dei problemi di sicurezza in C:

C è intrinsecamente pericoloso. Quando un bug scrive fuori dal suo buffer, non viene immediatamente intercalate come avverrebbe in Java o in altri linguaggi di alto livello. È solo più tardi, a volte molto più tardi, che quella memoria alterata viene usata e il programma si blocca. Questo insegna agli studenti che i bug si manifestano magicamente e sono misteri profondamente impenetrabili, incomprensibili a qualsiasi mortale.

E termina il post puntando il dito sulle modalità nelle quali il linguaggio viene insegnato:

In altre discipline ingegneristiche, si impara per prima cosa il fallimento. Chi ingegnerizza ponti impara perché il Tacoma Narrows ha fallito. […] È solo nell’ingegneria del software che il fallimento viene ignorato. Perfino dopo un decennio di fallimenti, agli studenti viene comunque insegnato a scrivere software come se il fallimento fosse una minaccia che mai affronteranno. È sbagliato in generale, ma specialmente con il linguaggio C. Non è che gli studenti debbano “prendere la sicurezza sul serio” e passare tutto il loro tempo a imparare qualsiasi tecnica di hacking di codice, ma la loro istruzione dovrebbe contemplarne almeno le basi.

Basi spesso trascurate sia dai corsi universitari di base sia dalla gran parte dei libri su C, che si limitano a illustrare i concetti base senza approfondire le corrette pratiche della programmazione.

Non mancano però alcune eccezioni. Ad esempio, 21st Century C ha una prima parte che mostra in dettaglio come dovrebbe essere l’environment di sviluppo di un programmatore C moderno, spiegando come usare il debugger, come scrivere unit test e come usare il memory checker  Valgrind. Anche l’iniziativa del docente dell’università di Strasuburgo Jens Gustedt merita di essere menzionata. Jens tiene da anni un blog sulla programmazione in C e sta lavorando a un ebook dal titolo eloquente: Modern C.

Con un approccio corretto all’apprendimento e all’utilizzo, C rimane un linguaggio di grande versatilità e con performance da primo della classe, e la sua immensa codebase garantisce che non verrà soppiantato rapidamente dai nuovi linguaggi emergenti. Rimane però il fatto che C è nato quando le potenze di calcolo erano ordini di grandezza inferiori e non c’erano da gestire processori con molti core, ed è quindi ragionevole riflettere se non sia arrivato il momento di mandarlo in pensione.

Go , NimD e Rust sono, con differenti livelli di maturità, linguaggi più moderni, intrinsecamente più sicuri e adatti per scrivere applicazioni concorrenti e high performance.

Non mi stupirebbe che uno di questi quattro ragazzini terribili nel giro di pochi anni riuscisse a soppiantare C (e ragionevolmente anche C++) come prima scelta per scrivere software sicuro e ad alte prestazioni. Tra i quattro, Rust, nato in casa Mozilla,  mi sembra quello con l’approccio più interessante e comprensivamente quello più promettente, ma Go di Google è già una realtà di fatto e vanta una comunità di sviluppatori piuttosto nutrita. Nim e D sono più di nicchia, ma comunque degni di nota.

C non sparirà a breve e mai come ora c’è bisogno di programmatori che lo padroneggino veramente per evitare il prossimo Heartbleed. Se però non avete vincoli e volete proiettarvi nel futuro, datevi un’occhiata in giro: non è più l’unica scelta possibile, c’è di meglio.

L'autore

  • Andrea C. Granata
    Andrea C. Granata vanta oltre 25 anni di esperienza nel mondo dello sviluppo software. Ha fondato la sua prima startup nel 1996 e nel corso degli anni si è specializzato in soluzioni per l'editoria e il settore bancario. Nel 2015 è entrato a far parte di Banca Mediolanum come Head of DevOps, ruolo che oggi ricopre per LuminorGroup.

Vuoi rimanere aggiornato?
Iscriviti alla nostra newletter

Novità, promozioni e approfondimenti per imparare sempre qualcosa di nuovo

Gli argomenti che mi interessano:
Iscrivendomi dichiaro di aver preso visione dell’Informativa fornita ai sensi dell'art. 13 e 14 del Regolamento Europeo EU 679/2016.