Sei uno sviluppatore efficiente? Allora l’IA sta cercando di prendere il tuo posto

Sei uno sviluppatore efficiente? L'IA cerca di sostituirti

Nel mio precedente post, ho scritto di trovare il tuo vantaggio competitivo come sviluppatore di software in un mondo di intromissione dell’IA. Credo che ci siano alcune domande più rilevanti nel prossimo decennio, quindi mi piace approfondire l’argomento in questo e nei miei prossimi post.

Puoi mantenere un vantaggio competitivo del genere solo se ti concentri su compiti che gli esseri umani, per loro natura, possono fare meglio delle macchine. Ci sono due proprietà necessarie dello sviluppo software che illustrano e coincidono con i punti di forza e di debolezza relativi degli esseri umani rispetto ai computer. Sono efficienza ed efficacia, e saranno l’argomento del post di oggi. Riconosco il merito a Uwe Friedrichsen per aver evidenziato questa distinzione in un recente blog.

Scacchi e sommergibili

Chi sarebbe tra le persone più stimate, nella scienza, nell’arte e nello sport? Un sondaggio del 1985 potrebbe includere il fisico Richard Feynman, l’attrice Meryl Streep, la filosofa Susan Sontag e probabilmente anche Gary Kasparov, giovane grande maestro di scacchi russo e nuovo campione del mondo.

Già diversi anni prima, era possibile giocare a scacchi contro una varietà di avversari digitali. Gli algoritmi in questi dispositivi giocattolo sembrerebbero poco sofisticati ora, e la loro modesta potenza di calcolo sarebbe ridicola. Ma erano sicuramente una forma primitiva di intelligenza artificiale, anche se non erano all’altezza dei seri giocatori umani, figuriamoci dei grandi maestri. La legge di Moore ha rapidamente risolto questo problema. In poco più di un decennio (1997), lo stesso campione del mondo ha perso contro il team Deep Blue di IBM.

Questa sconfitta di 25 anni fa dell’uomo contro la macchina non ci ha preoccupato più del dovuto che l’IA avrebbe presto preso il controllo in una distopia alla Terminator. Se mai, ha confermato che gli scacchi sono difficili per gli esseri umani e facili per i computer. “La domanda se un computer possa pensare non è più interessante della domanda se un sommergibile possa nuotare”, secondo il professor Dijkstra. È vero, non puoi paragonare una vittoria del computer agli scacchi al modo in cui lo fa Magnus Carlson. Il modo in cui un sommergibile nucleare sposta l’acqua è altrettanto incomparabile a come lo fa uno squalo. L’intelligenza artificiale, comunque tu la definisca, è solo esternamente analoga a ciò che avviene in un cervello umano. È l’effetto che conta. Tuttavia, non sono d’accordo con l’idea che la questione di un computer pensante sia priva di interesse.

Il viaggio e la destinazione

Secondo il dizionario Longman, efficacia è il fatto di produrre il risultato desiderato o previsto; il fatto di ottenere un risultato di successo. Lo scacco matto è un risultato di successo del genere. Efficienza è la qualità di fare qualcosa bene senza spreco di tempo o denaro. Tra il numero infinito di partite possibili, il matto del barbone è il modo più efficiente.

A proposito: nota il pensiero puramente economico nella definizione. Viene considerato solo uno “spreco di tempo o denaro”. Se l’energia fosse stata un fattore, nessuna invenzione umana sarebbe efficiente rispetto ai suoi controparti biologici in termini di consumo energetico grezzo.

Una volta che il computer può fare un lavoro in modo efficace e efficiente, gli esseri umani si sono resi superflui da una fredda prospettiva economica. Se vuoi divertirti puoi sperimentare, ma non aspettarti uno stipendio. Le persone ancora si divertono a giocare a scacchi perché non è mai stato un mezzo di sopravvivenza. Non ne abbiamo bisogno per coltivare cibo o costruire case e solo una piccola élite dei migliori giocatori ci guadagna. Se gli scacchi fossero stati una risorsa di produzione (come la terra e il lavoro), i giocatori di scacchi umani non avrebbero avuto un vantaggio competitivo.

Essere efficaci significa ottenere un risultato soddisfacente. O lo abbiamo, o non lo abbiamo. Puoi superare le aspettative o fallire miseramente in qualsiasi misura, ma è il pollice su o il pollice giù binario che conta. L’efficienza riguarda come svolgi i compiti che compongono il processo. È una qualità che consente più margine di manovra. Parti del processo possono essere meno ottimali rispetto ad altre e ancora contribuire a un risultato efficace. Altri termini che coincidono con questa dicotomia sono il cosa (e il perché) rispetto all’come. È fare la cosa giusta rispetto a fare le cose nel modo giusto. È la destinazione rispetto al viaggio.

Entrambi sono necessari. Essere costantemente inefficiente ti porterà al fallimento prima o poi, ma essere inefficace non ti porterà nemmeno alla prima vendita. Pertanto, nessun progetto software serio dovrebbe essere intrapreso senza una chiara definizione dell’efficacia che intendiamo raggiungere. Solo il genio dell’improvvisazione Keith Jarrett poteva sedersi davanti a una tastiera senza un obiettivo in mente e comunque produrre un capolavoro – ma quella era una tastiera di pianoforte.

L’efficienza è relativa, l’efficacia è soggettiva

L’efficacia è sfumata, imprevedibile e soggettiva. Cosa hanno in comune Seinfeld, Monty Python, Bohemian Rhapsody e Star Trek? Sono tutti amati classici popolari che la maggior parte delle persone, compresi i critici, non ha notato o apprezzato molto quando sono usciti per la prima volta. Non sorprende che molti prodotti falliscano, non importa quanta ricerca di mercato ci si impegni. Non esiste una formula per la creatività e non si può prevedere come i gusti delle persone possano cambiare. L’efficienza è molto meno frustrante. Al cliente non importa affatto quale strumento di sviluppo o IDE è stato utilizzato per creare l’app di Spotify. Non lascia traccia nel prodotto finale.

I prodotti moderni sono un complesso assemblaggio di parti provenienti da vari fornitori. Scegliamo le parti per la loro efficienza nella speranza che creino un prodotto efficace che i clienti desiderano acquistare. Ma mentre ogni parte è già efficace dal punto di vista del fornitore quando viene venduta, diventa efficiente solo quando è la parte giusta. Questo vale anche per elementi non fisici.

Ecco un esempio reale della gigante dei semiconduttori ASML, vicino alla mia città natale. Il traffico mattutino verso il campus è un inferno e il trasporto pubblico è servito solo da autobus. Il consiglio comunale vuole creare una nuova pista ciclabile per attirare i pendolari che vivono in un raggio di dieci miglia a usare la bicicletta per andare al lavoro. L’obiettivo è far arrivare tutti in ufficio in modo sicuro e veloce, alleviando la congestione per coloro per cui la bicicletta non è un’opzione. Le imprese che costruiscono questa strada non hanno un interesse urgente in questa spinta all’efficienza, figuriamoci il produttore di biciclette Trek o Shimano, che fornisce i cambi e i freni per far funzionare le biciclette in modo regolare. Ma tutti contribuiscono all’efficacia della nuova strada. L’efficienza è relativa e l’efficacia è soggettiva.

Capisci il concetto. Il software non è diverso. Il prodotto aziendale medio consiste principalmente del codice di altre persone che tu e il tuo team non potete controllare (il 99,9% è una scommessa sicura, specialmente se consideri lo stack cloud che distribuisci). Qualsiasi componente può essere efficiente in qualche caso e inutile altrove. Un meccanismo di caching altamente ottimizzato supportato da un sistema Oracle dedicato è comunque uno spreco di denaro se serve solo a ricordare cinquanta numeri per un’ora.

L’efficienza riguarda la sperimentazione, apportare piccole modifiche e sostituire componenti lenti/costi elevati con componenti più performanti. È un dominio complicato e basato sui dati, in cui i computer si sentono a loro agio. Giudicare l’efficacia del software, d’altra parte, è complesso: dipende da quanto alla fine rende felici i destinatari. Chi, se non altre persone, è qualificato a rispondere a questa domanda e prendere le decisioni?

Nel prossimo post mi concentrerò sulle specifiche dei requisiti rispetto all’implementazione e su come coincidono con la distinzione tra efficienza/efficacia. Nella terza parte, discuterò del famoso problema dell’allineamento. Anche gli esseri umani non riescono a allineare gli obiettivi del software con i propri interessi e costruiscono costosi fallimenti. Come possiamo aspettarci che le macchine lo facciano meglio? Poi, nella quarta parte, affronterò il nostro amore per la specializzazione, il programmare per il gusto di programmare e perché presto non sarà più un vantaggio competitivo.