La programmazione è viva e vegeta secondo Brian Kernighan

Secondo il pioniere della programmazione Brian Kernighan, le intelligenze artificiali rappresentano un'opportunità eccellente ma non sostituiscono né potranno sostituire il ruolo degli sviluppatori.

La programmazione informatica non è solo una competenza tecnica, ma una forma d’arte che richiede dedizione, passione e un costante desiderio di apprendere. Nel corso di un’intervista recentemente pubblicata su YouTube, Brian Kernighan, pioniere della programmazione e autore di testi fondamentali come “The Practice of Programming” e “The C Programming Language“, ha analizzato il panorama odierno concentrandosi sul ruolo dell’intelligenza artificiale nel campo dello sviluppo software.

Sì, perché a fine febbraio 2024, cavalcando gli enormi passi avanti compiuti dai moderni modelli generativi, il numero uno di NVIDIA aveva fatto un’improvvida dichiarazione. Jensen Huang ha consigliato ai più giovani di non imparare la programmazione perché di questo si occuperanno le IA. Prima di lui anche Matt Welsh aveva provocatoriamente definito morta la programmazione.

In entrambi gli articoli avevamo fatto notare che le intelligenze artificiali generative “non inventano nulla” ma si basano sul codice utilizzato nella fase di addestramento. Senza quel codice, scritto da sviluppatori in carne e ossa, il funzionamento dell’IA non sarebbe possibile. È difficile (e pure sbagliato) pensare a un mondo senza programmatori. Come abbiamo visto, lo stesso ChatGPT risulta meno bravo a programmare quando gli si sottopongono problemi complessi oppure quando si chiede di generare codice in un linguaggio più moderno (per il quale il sottostante modello ha potuto utilizzare porzioni di codice più ridotte).

In generale, inoltre, i modelli generativi non sempre forniscono codice perfetto. Anzi, è spesso necessario l’intervento umano per ottimizzarlo, rimuovere eventuali problematiche di sicurezza e integrarlo in progetti più strutturati.

Chi è Brian Kernighan

Classe 1942, Brian Kernighan ha contribuito in modo significativo allo sviluppo di diversi linguaggi di programmazione e strumenti software che hanno plasmato il mondo dell’informatica moderna. Ha inoltre contribuito allo sviluppo di Unix assieme ai suoi creatori Ken Thompson e Dennis Ritchie.

Dopo aver completato gli studi, Kernighan ha iniziato a lavorare presso i leggendari Bell Labs, un istituto di ricerca di fama mondiale noto per le sue innovazioni in vari campi della scienza e della tecnologia. Basti pensare che proprio in questi laboratori è stato inventato il transistor (era il 1947): si tratta dell’invenzione più rivoluzionaria dei Bell Labs, alla base di tutta l’elettronica moderna. Successivamente, è stata la volta della teoria dell’informazione di Claude Shannon (1948), della cella solare (1954), del laser (1958), della fibra ottica per le telecomunicazioni (1966), del già citato sistema operativo Unix (1969), del CCD (Charge-Coupled Device, 1969) tecnologia alla base delle fotocamere digitali, del linguaggio di programmazione C (1972).

Oltre ai contributi sul linguaggio C, Kernighan è anche uno degli autori di AWK, un linguaggio di scripting utilizzato principalmente per l’elaborazione di testo e la manipolazione di file. Oltre a AWK, Kernighan ha lavorato su altri strumenti software e linguaggi, come AMPL (A Mathematical Programming Language), utilizzato per risolvere problemi di ottimizzazione matematica.

Kernighan è noto anche per la sua filosofia della programmazione, che enfatizza l’importanza della scrittura di codice chiaro, semplice e leggibile. Ha spesso sottolineato che il codice dovrebbe essere scritto pensando non solo alla macchina che lo esegue, ma anche alle persone che lo leggeranno e lo manterranno in futuro.

L’origine di “The Practice of Programming

Durante l’intervista pubblicata in questo video, Kernighan ha condiviso preziose riflessioni sulla storia e il futuro della programmazione, discutendo delle sue esperienze maturate presso i Bell Labs e dell’evoluzione del settore informatico in generale.

Nel 1999, Brian Kernighan e Rob Pike hanno pubblicato il testo “The Practice of Programming“. Il libro è nato dalla loro vasta esperienza nel campo della programmazione e dalla necessità di fornire una guida pratica su come scrivere programmi in modo efficace e professionale.

Kernighan ha ricordato come, negli anni ’90, molte delle tecnologie che oggi diamo per scontate stavano appena emergendo. Linguaggi come Python erano allora relativamente nuovi, mentre strumenti come Perl e Java erano molto popolari. Quel contesto rese necessaria la pubblicazione di un libro che potesse aiutare i programmatori a muoversi nel panorama tecnologico in divenire.

Il libro ha avuto un impatto significativo sulla comunità dei programmatori, fornendo principi e linee guida che sono ancora rilevanti oggi. Kernighan e Pike hanno affrontato temi come lo stile di programmazione, il debugging, l’importanza della scrittura di codice leggibile e manutenibile. Anche se molte delle tecnologie specifiche discusse nel libro sono evolute, i principi fondamentali rimangono validi, dimostrando la lungimiranza degli autori.

Nonostante l’avvento delle tecnologie basate sull’intelligenza artificiale, Kernighan crede fermamente che la creatività e la capacità di risolvere problemi rimangano al centro delle competenze degli sviluppatori. Le macchine possono automatizzare molti compiti, ma è l’ingegno umano che guida l’innovazione e lo sviluppo di soluzioni uniche. Lo spieghiamo anche nell’articolo in cui ci chiediamo se l’intelligenza artificiale supererà l’intelligenza umana.

Il tema delle risorse hardware disponibili

Hardware e software non possono che andare a braccetto. Kernighan ha riflettuto su come l’abbondanza di risorse hardware abbia cambiato radicalmente il modo di programmare. In passato, la gestione della memoria era un aspetto cruciale nello sviluppo software. Oggi, invece, molti programmatori non devono preoccuparsi di ottimizzare le loro applicazioni per l’uso della memoria.

Kernighan ha comunque avvisato che questa “comodità”, frutto della disponibilità di risorse hardware potenti, può portare a una programmazione meno efficiente e meno attenta ai dettagli.  Un cambiamento, questo, che ha contribuito a rendere la programmazione accessibile a un pubblico più ampio, ma che ha anche sollevato problematiche in termini di efficienza e performance.

Intelligenza artificiale e programmazione: un binomio vincente

Uno degli sviluppi più emozionanti e rivoluzionari nel campo della programmazione, secondo Kernighan, è l’introduzione dei Large Language Model (LLM). I migliori chatbot come ChatGPT e Claude sono in grado di generare codice in modo sorprendentemente accurato e possono facilitare di molto il lavoro dei programmatori, riducendo il tempo necessario per scrivere e testare il codice. Kernighan ha condiviso un esempio personale di come abbia utilizzato uno di questi modelli per generare codice Python per un progetto, risparmiando così ore di lavoro.

Per i giovani programmatori che si affacciano ora sul campo, Kernighan vede un mondo di opportunità. Le nuove tecnologie offrono strumenti potenti che possono estendere le abilità di chi si occupa di programmazione, aprendo nuove strade per l’innovazione e la creatività. La capacità di utilizzare strumenti come i LLM per il coding, permette ai programmatori di concentrarsi su aspetti più creativi e complessi dello sviluppo software, lasciando alle macchine il compito di gestire le parti più ripetitive e meccaniche.

Kernighan vede i modelli i LLM come una delle innovazioni più significative nel campo della programmazione. Questi strumenti hanno il potenziale per trasformare radicalmente il modo in cui scriviamo codice, rendendo la programmazione più accessibile e riducendo il tempo necessario per sviluppare nuove applicazioni. Tuttavia, l’informatico canadese avverte anche che è importante comprendere i limiti e le potenziali insidie di queste tecnologie, evitando – come dicevamo in apertura – di fare affidamento esclusivamente su di esse.

Consigli per i futuri sviluppatori

Molti aspiranti programmatori possono sentirsi intimiditi dalla vastità del campo e dalla complessità delle tecnologie da imparare. Kernighan consiglia di trovare qualcosa di concreto e di interesse personale su cui lavorare. Questo approccio può trasformare l’apprendimento della programmazione in un’attività coinvolgente e appassionante, piuttosto che in un compito arduo e scoraggiante. Ad esempio, creare un progetto personale legato a una propria passione può rendere l’apprendimento della programmazione molto più stimolante e gratificante.

Un altro consiglio che Kernighan consegna alle nuove generazioni è quello di praticare la programmazione in modo costante. La programmazione è un’abilità che migliora con la pratica e con l’esperienza. Kernighan incoraggia i programmatori a sperimentare, a costruire progetti personali e a non avere paura di sbagliare, poiché ogni errore è un’opportunità di apprendimento.

L’esperienza pratica permette di consolidare le conoscenze teoriche e di sviluppare una comprensione più profonda dei concetti di programmazione.

Bell Labs, un ambiente di lavoro idilliaco

Kernighan ha quindi descritto la sua esperienza in Bell Labs come “idilliaca”. I ricercatori erano liberi di esplorare i loro interessi, senza la pressione di dover produrre risultati immediati. Questo ambiente stimolante e privo di pressioni commerciali ha permesso a Kernighan e ai suoi colleghi di fare scoperte rivoluzionarie e di sviluppare tecnologie fondamentali che hanno plasmato il futuro della programmazione. La libertà di sperimentare e di collaborare con menti brillanti è stata una delle chiavi del successo di Bell Labs.

L’esperienza Bell Labs ha influenzato profondamente la programmazione moderna. Molte delle tecniche e dei principi sviluppati lì sono ancora rilevanti oggi. Ad esempio, la collaborazione tra Kernighan e Pike ha portato alla creazione di strumenti e linguaggi che hanno rivoluzionato il modo in cui scriviamo e pensiamo alla programmazione. La cultura dell’innovazione e della sperimentazione di Bell Labs continua a essere un modello per molti ambienti di ricerca e sviluppo odierni.

In generale, la curiosità intellettuale e la volontà di imparare sono qualità fondamentali per chiunque voglia eccellere nella programmazione.

Ti consigliamo anche

Link copiato negli appunti