Programmazione basata su LLM: Oh, davvero?

Feb 26 2023
Per quanto mi piacerebbe essere, non sono un accademico di informatica. Affatto.

Per quanto mi piacerebbe essere, non sono un accademico di informatica. Affatto.

Ho preso una strada diversa però.

Sono ormai 25 anni che trascorro gran parte delle mie giornate a leggere, scrivere, modificare ed eseguire il debug di programmi per computer. Durante questo periodo, ho conseguito una laurea tecnica in Informatica, ho seguito un corso di laurea in Informatica per più di 3 anni (prima di abbandonare al 4° anno, circa un semestre prima della laurea), e in seguito ho finito per perseguire una laurea specialistica in Data Science & Big Data, dopo aver conseguito una laurea in Nutrizione.

In questi ultimi 25 anni, è meglio scommettere che ho letto un bel po' di libri, articoli, blog e quant'altro, in uno sforzo onesto per istruirmi. Tuttavia, mi sento così poco istruito da offrire opinioni al di fuori del mio campo di competenza ⎼ cioè progettare sistemi software per Internet.

Ecco perché cerco sempre persone che ne sappiano più di me. Quindi non mi metto in imbarazzo gratuitamente su Internet. Potrebbe non essere bello ma è intellettualmente onesto. Lo prendo.

LLM Hype

Negli ultimi tempi c'è stato un clamore sull'argomento LLM (modelli di linguaggio di grandi dimensioni, ad esempio GPT-3 ), in particolare ChatGPT . Devi vivere sotto una roccia per non averne sentito parlare. Questa cosa è ovunque. Le persone stanno impazzendo a riguardo. Alcuni amore, alcuni odio e tutto il resto, immagino.

Eccomi qui.

Anche se ho conseguito una laurea specialistica in materia di scienza dei dati, sono ben lungi dall'essere un esperto di LLM. Molto molto Lontano. Nemmeno alla vista di occhi umani. Quindi i miei pensieri su di esso si basano sulle mie osservazioni nel corso degli anni e su una buona parte dell'esperienza del mondo reale come ingegnere del software. Prendilo con le pinze.

Cosa ne penso?

Penso che potrebbe essere uno strumento utile nella tua cassetta degli attrezzi del programmatore. Fallo lì, come hai Google e Stack Overflow. Questo è tutto. Semplice come quella.

https://commoncog.com/content/images/2018/12/Paper.Commonplace.37.png

Voglio dire, lasciatemi elaborare un po' di più su questa affermazione.

Quando ho iniziato a programmare, ho dovuto acquistare libri e riviste o prenderli in prestito dalla scuola e dalle biblioteche pubbliche; inoltre, ho avuto un buon amico al lavoro che mi ha insegnato molto su Clipper , e basta. Poi ho scoperto i forum di discussione online (es. GUJ ). E poi ho avuto modo di conoscere e partecipare a riunioni di gruppi di utenti (ad esempio SouJava ). E poi è stato Stack Overflow, GitHub e la pletora di contenuti tecnici che c'è in giro per Internet ⎼ sai di cosa sto parlando, solo Google qualunque sia il linguaggio di programmazione più esoterico e il gioco è fatto.

Quelle cose non si escludevano a vicenda, si sommavano l'una sull'altra, come i mattoni di un edificio. O dovrei dire un grattacielo? Vai a capire.

Ad ogni modo, immagino che quello che sto cercando di dire sia che, anche se sono in grado di cercare qualsiasi cosa su Stack Overflow (o meglio su Google e poi puntare e fare clic su di esso), leggere blog, guardare tutti i tipi di discorsi interessanti su YouTube , e così via e così via, compro ancora libri e li leggo. Una cosa non esclude l'altra.

La stessa cosa vale per gli strumenti LLM.

Diventa un programmatore per l'istruzione

Vorrei sottolineare qui un punto: credo fermamente nell'istruzione di "qualità". E con questo intendo frequentare corsi universitari formali e leggere libri “carnosi”.

So che non è un'opinione popolare al giorno d'oggi, con tutti i bootcamp, i video corsi veloci e i contenuti nano che vengono pesantemente pubblicizzati là fuori, come se fossero la penicillina del 21° secolo, ma onestamente non me ne potrebbe fregare di meno. Solidificare la conoscenza che supera la prova del tempo richiede una forte educazione. Quindi prenditi il ​​​​tuo tempo, fai il duro lavoro, supera il breve tutorial e istruisci te stesso.

Tieni presente che con una conoscenza solo superficiale potresti non essere nemmeno in grado di discernere se una risposta Stack Overflow è giusta o sbagliata; e se è giusto, e se funziona come previsto, perché funziona. E in questo caso, cosa faresti se non funziona? Prova ed errore fino alla nausea , giusto? Il che ci porta a un fatto indiscutibile.

A nessuno piace quel ragazzo / ragazza in ufficio che fa domande tutto il tempo e vuole che ogni informazione venga masticata per inghiottirla senza dover sudare. Certamente no.

Lascia che te lo dica: la programmazione basata su copia e incolla esiste da molto tempo , almeno da quando siamo riusciti a trovare soluzioni candidate per la maggior parte dei problemi informatici che cerchiamo su Internet. Questa non è una novità. Le persone fanno questa cosa da secoli ormai. Molto di più dopo l'avvento del software open source e dei potenti motori di ricerca. E non c'è niente di sbagliato nel copiare e incollare il codice da Internet. Niente. Beh, almeno finché non lo fa.

Dopotutto, possiamo copiare e incollare piccoli frammenti di codice qua e là, esempi di utilizzo di API con cui non abbiamo molta familiarità o che non abbiamo ancora utilizzato o che stiamo iniziando rapidamente. Lo abbiamo fatto tutti e lo faremo ancora. (Regex? Cron? Sì, ti capisco.) Tuttavia, se non abbiamo una solida base di programmazione e progettazione del software, se non ci prendiamo il nostro tempo per capire cosa stiamo facendo, finiremo in una situazione frustrante ciclo di tentativi ed errori. Peggio ancora, gente, finiremo per introdurre bug difficili da trovare, problemi di prestazioni e vulnerabilità di sicurezza nel nostro software ⎼ che, tra l'altro, la maggior parte delle volte non è nemmeno il nostro software ma il software dei nostri datori di lavoro. Pensaci per un secondo.

C'è molto di più nello sviluppo del software che scrivere una query SQL o creare un endpoint API o chiamare un servizio remoto da un'app mobile o codificare una ricerca approfondita. Una soluzione software completa è fatta di molto di più. L'ingegneria del software, come campo, è ciò che ne è preoccupato. Quindi il mio punto qui è, se non sai cosa chiedere, che tipo di risposte pensi di ottenere? E sarai in grado di discernere la risposta giusta per il tuo caso particolare?

Come dice il proverbio, spazzatura dentro, spazzatura fuori

Quando leggi le risposte su Stack Overflow, è meglio che tu sia abbastanza sicuro di ciò che stai cercando, per essere ragionevolmente assertivo ⎼ c'è anche un sacco di contenuto spazzatura là fuori, intendiamoci; e non vengono con un'etichetta "spazzatura". Quindi devi prendere in considerazione tutto il contesto della domanda originale e le risposte fornite, saltando la spazzatura qua e là, prima di poter prendere una decisione di copiare e incollare alcuni frammenti di codice così com'è o scrivere la tua soluzione basata sul costruito conoscenza ⎼ ad es. il problema specifico che stai cercando di risolvere possiede i suoi casi limite particolari. E proprio questa cosa, ancora e ancora, aggiungerà conoscenza a te.

Vedi dove stiamo andando? Vedi il mio punto qui? Vedi come ChatGPT può essere una trappola? Lo chiedi, ottieni una risposta. Una risposta talmente sicura che se non si ha una vasta e solida conoscenza della programmazione, si comprano schifezze assolute senza nemmeno saperlo. Ne ho viste parecchie con gli amici su Twitter e quant'altro. Anche con algoritmi ampiamente conosciuti.

In quanto tale, questo "molto di più" è la cosa di cui dovremmo preoccuparci (oltre alle basi) ed è ciò su cui dobbiamo concentrarci (a condizione che abbiamo le basi in atto). Il che ci porta a un altro fatto spietato.

Non sappiamo cosa non sappiamo. E l'unica cosa che possiamo fare al riguardo è acquisire nuove conoscenze, ancora e ancora ⎼ ampia prima, profonda poi.

Fondamenti di architettura software, Mark Richards e Neal Ford

In questo modo, si spera, sapremo cosa stiamo cercando e avremo almeno una comprensione della risposta quando la troveremo.

- L'ampia conoscenza ci dà una direzione per andare alla ricerca di risposte;
- La profonda conoscenza ci aiuta a discernere tra le risposte trovate.

Va bene. Freddo. Ma come lo facciamo?

Per ampliare la tua conoscenza di ciò che c'è là fuori da sapere, penso che i blog e i video di YouTube siano fantastici. Sono contenuti brevi che puoi consumare quotidianamente senza sudare. Ma per una conoscenza profonda e solida , secondo me (N=1), non c'è niente di meglio che leggere libri e documenti ufficiali. E se puoi, se non l'hai ancora fatto, procurati un posto (fisico o online) in un corso universitario (laurea o post-laurea di conseguenza).

Ancora una volta, non è un'opinione popolare. Ma io stesso non sono popolare, quindi chi se ne frega?

Entra negli strumenti LLM

Tuttavia ho diverse opinioni impopolari, penso che questa colpirà la parata: LLM potrebbe essere uno strumento fantastico per aiutarti ad acquisire solide conoscenze. Com'è? Ti dirò come.

Inizia chiedendo a ChatGPT cosa c'è da sapere, diciamo, sullo sviluppo di app mobili. Quindi chiedi brevi tutorial e video di YouTube per ottenere il quadro generale. Successivamente, chiedi libri e conferenze altamente raccomandati al riguardo. Perché alla fine vuoi leggere diversi articoli profondi, di autori diversi, con punti di vista diversi, per avere una solida comprensione dell'argomento che stai studiando.

Questo è per una cosa. Un'altra cosa che potrebbe essere utile è quando stai leggendo un libro e rimani bloccato dalla mancanza di conoscenza di un determinato argomento richiesto. Chiedi a ChatGPT di riassumere il suddetto argomento per te, in modo da ottenere una base prima di andare avanti. Stessa cosa che faresti con Google, leggendo una o due fonti ma veloce e dritta al punto. Tuttavia, dopo, vai avanti e approfondisci il suddetto argomento se è qualcosa di importante per l'argomento generale che stai studiando. Va bene farlo.

E ancora un'altra circostanza che potrebbe essere molto utile è che mentre sei in grado di sviluppare un'applicazione software per un determinato dominio non hai molta familiarità con tutti i dettagli. L'ho visto l'altro giorno e l'ho trovato abbastanza intelligente.

Diciamo che svilupperai un'app mobile per il fitness, perché ti piace il fitness e sei super entusiasta dell'idea di aiutare le persone a mantenersi in salute e tutto il resto. Va bene. Ma non sai tutte le app là fuori, e le loro funzionalità più amate, e come sono monetizzate, ecc. Queste sono domande molto obiettive. Quindi puoi porre queste domande a ChatGPT per iniziare rapidamente. Chiedi informazioni sui requisiti dell'app. Gli chiedi, ad esempio, di scrivere l'e-mail di benvenuto che invierai ai nuovi abbonati della tua fantastica app per il fitness, perché non sei particolarmente bravo in questo. Giusto. E adesso? Se hai capito di cosa ho parlato fino a questo punto, hai già una buona idea di cosa dovresti fare dopo. Lo migliori, lo migliori, metti la tua salsa speciale. In altre parole, rompere l'inerzia, che è probabilmente la cosa più importante in questo caso, quindi rendilo particolarmente speciale ⎼ altrimenti, tutto ciò che avrai è roba generica da vendere. Non bello, immagino.

Se ottieni l'accesso a GitHub Copilot e non è dannoso usarlo sul tuo lavoro, puoi chiedergli di impalcare pezzi di codice per te, come un metodo per analizzare un file, un test case ripetitivo o quant'altro. Sai, quelle cose noiose che devi fare di tanto in tanto e che non possono essere completamente evitate con una corretta progettazione del codice e librerie intelligenti. Niente di sbagliato in questo. Non ottieni punti extra se non lo fai ⎼ fintanto che non esiste una politica in vigore nel luogo in cui lavori.

Potrebbero esserci molte altre applicazioni simili, intendiamoci. Pensaci.

Aspetta. Ho pensato al più grande vantaggio che questo potrebbe portarci: conosci quei ragazzi a cui piace postare sui forum chiedendo soluzioni per i loro compiti scolastici? Ad esempio, sai, leggi la domanda ed è quasi la dichiarazione di assegnazione letterale. Probabilmente l'hai già visto. Sì, ora possono chiederlo a ChatGPT e lasciarci in pace. Tutti ne sono felici.

LLM sostituirà i programmatori umani?

No. Non credo. Sono molto scettico su "X sostituirà i programmatori umani" . Da quando ho iniziato a programmare nel 1997, ho già sentito parlare di mode del genere.

Probabilmente cambierà il modo in cui veniamo istruiti sulla programmazione, come superiamo i blocchi quando rimaniamo bloccati durante la programmazione, come affrontiamo cose noiose, ma ci sostituirà, homo sapiens, per qualcosa di più dei CRUD e delle banali app ampiamente conosciute, no, io sono molto scettico al riguardo. Potrei sbagliarmi però.

E sappi, finalmente, questo articolo chiude il cerchio con ciò che mi ha motivato a scriverlo.

Ieri ho avuto il piacere di imbattermi in un fantastico articolo di Amy J. Ko , che è stata una vera gioia da leggere. Primo perché sono d'accordo con quasi tutto ciò che ha scritto lì. Secondo, perché a differenza di me, lei è un'accademica e segue questa materia da più di un decennio. Quindi ha sicuramente una o due cose per collaborare a tutta questa discussione senza mettersi in imbarazzo.

Quindi fatti un favore, elimina l'hype e leggi questi articoli eccezionali per farti un'idea migliore dell'argomento da diversi punti di vista:

- I grandi modelli linguistici cambieranno la programmazione... un po'
- I grandi modelli linguistici cambieranno la programmazione... molto

Non esiste un TLDR; Là. Prenditi il ​​tuo tempo, goditi il ​​viaggio.

Ora, per concludere questo lungo pezzo con una cosa divertente: guardavo le persone prendere in giro gli accademici tutto il tempo, dicendo che il mondo accademico è lontano dallo sviluppo di software del mondo reale, e poi, all'improvviso, le persone sono stupite e vanno fuori di testa per una cosa che prende vita direttamente dalla ricerca accademica. Che grande ironia. Che bel momento per essere un accademico.

Comunque, alla prossima, gente.

Fai attenzione con l'hype.

⛧ Vedi anche su leandrosilva.com.br . C'è molto di più lì.