Argomenti di tendenza
#
Bonk Eco continues to show strength amid $USELESS rally
#
Pump.fun to raise $1B token sale, traders speculating on airdrop
#
Boop.Fun leading the way with a new launchpad on Solana.
Traduzione: Perché i grandi modelli linguistici non possono realmente costruire software
Autore: Conrad Irwin
Una delle cose su cui ho speso molto tempo è stata l'intervista a ingegneri del software. Questo è chiaramente un compito arduo, e non posso dire di avere un trucco speciale; ma questa esperienza mi ha davvero dato il tempo di riflettere su cosa faccia effettivamente un ingegnere del software efficiente.
Il ciclo centrale dell'ingegneria del software
Quando osservi un vero esperto, scopri che esegue sempre in loop i seguenti passaggi:
* Costruire un modello mentale sui requisiti.
* Scrivere (si spera?!) codice che soddisfi i requisiti.
* Costruire un modello mentale sul comportamento reale del codice.
* Scoprire le differenze tra i due e poi aggiornare il codice (o i requisiti).
Ci sono molti modi per completare questi passaggi, ma la forza degli ingegneri efficienti sta nella loro capacità di costruire e mantenere modelli mentali chiari.
Come si comportano i grandi modelli linguistici?
A dire il vero, i grandi modelli linguistici sono piuttosto bravi a scrivere codice. Quando indichi dove sia il problema, sono anche bravi ad aggiornare il codice. Possono fare tutto ciò che farebbe un ingegnere umano: leggere codice, scrivere e eseguire test, aggiungere log e (probabilmente) usare un debugger.
Ma ciò che non possono fare è mantenere un modello mentale chiaro.
I grandi modelli linguistici si trovano intrappolati in una confusione infinita: presumono che il codice che scrivono funzioni davvero; quando i test falliscono, possono solo indovinare se riparare il codice o il test; quando si sentono frustrati, semplicemente cancellano tutto e ricominciano.
Questo è esattamente l'opposto delle caratteristiche che mi aspetto da un ingegnere.
Gli ingegneri del software lavorano e testano contemporaneamente. Quando un test fallisce, possono confrontare il loro modello mentale per decidere se riparare il codice o il test, o raccogliere ulteriori informazioni prima di prendere una decisione. Quando si sentono frustrati, possono cercare aiuto parlando con qualcuno. Anche se a volte cancellano tutto e ricominciano, lo fanno solo dopo aver acquisito una comprensione più chiara del problema.
Ma andrà tutto bene, giusto?
Con l'aumento delle capacità dei modelli, cambierà questa situazione? Forse?? Ma penso che ciò richieda un cambiamento fondamentale nel modo in cui i modelli costruiscono e ottimizzano. Il modello di cui ha bisogno l'ingegneria del software non è solo in grado di generare codice.
Quando una persona incontra un problema, può temporaneamente mettere da parte tutto il contesto, concentrarsi sulla risoluzione del problema attuale e poi riprendere i pensieri precedenti, tornando al grande problema in corso. Possono anche passare agevolmente tra la visione d'insieme e i dettagli, ignorando temporaneamente i dettagli per concentrarsi sul tutto, e approfondire i particolari quando necessario. Non diventeremo più efficienti semplicemente riempiendo la nostra "finestra di contesto" con più parole; questo ci farebbe solo impazzire.
Anche se possiamo gestire enormi quantità di contesto, sappiamo che attualmente questi modelli generativi presentano diversi problemi gravi che influenzano direttamente la loro capacità di mantenere un modello mentale chiaro:
* Omissione di contesto: i modelli non sono bravi a scoprire informazioni contestuali trascurate.
* Pregiudizio di recente: quando gestiscono la finestra di contesto, sono gravemente influenzati da un pregiudizio di recente.
* Illusione: spesso "fantasticano" dettagli che non dovrebbero esistere.
Questi problemi potrebbero non essere insormontabili, e i ricercatori stanno lavorando per dare ai modelli una memoria, in modo che possano esercitare tecniche di pensiero simili alle nostre. Ma sfortunatamente, al momento, non possono realmente comprendere cosa stia accadendo (oltre un certo livello di complessità).
Non possono costruire software perché non possono mantenere simultaneamente due "modelli mentali" simili, scoprire le differenze e decidere se aggiornare il codice o i requisiti.
Quindi, cosa fare adesso?
È chiaro che i grandi modelli linguistici sono utili per gli ingegneri del software. Possono generare codice rapidamente e si comportano bene nell'integrare requisiti e documentazione. Per alcuni compiti, questo è già sufficiente: i requisiti sono abbastanza chiari, il problema è abbastanza semplice, possono farlo in un colpo solo.
Detto ciò, per qualsiasi compito con un po' di complessità, non possono mantenere abbastanza contesto in modo sufficientemente preciso per produrre iterativamente una soluzione praticabile. Tu, come ingegnere del software, devi comunque assicurarti che i requisiti siano chiari e che il codice realizzi realmente le funzionalità che dichiara di avere.
In Zed, crediamo che in futuro gli esseri umani e gli agenti AI possano collaborare per costruire software. Tuttavia, siamo fermamente convinti (almeno per ora) che tu sia il conducente al volante, mentre i grandi modelli linguistici sono solo un altro strumento a tua disposizione.
48,63K
Principali
Ranking
Preferiti