notizia

zio bob, il maestro della programmazione mondiale: la "crisi di 35 anni fa" è un'illusione e noi "vecchi programmatori" siamo ancora qui

2024-10-03

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

bob rispondela “crisi di 35 anni” del programmatore:

pensarel’idea che la programmazione sia riservata solo ai giovani è in realtà un’illusione, ma è davvero un'illusione molto influente. questa illusione esiste perché la domanda di programmatori è aumentata vertiginosamente negli ultimi 70 anni.

in effetti noi “vecchi programmatori” siamo ancora lì, ma il numero non è così cospicuo.

autore |. wang qilong

prodotto da |nuovo programmatore》direzione editoriale

immagina se avessi scritto codice per più di cinquant'anni nella tua vita e continuassi a programmare fino all'età di 71 anni. come vedresti l'attuale era di programmazione ai esplosiva?

robert c. martin è conosciuto come il guru della programmazione di fama mondiale. quest'uomo si chiama ".zio bobil vecchio (zio bob) è un pioniere dello sviluppo agile e dei modelli di progettazione. è impegnato nel lavoro professionale del software dal 1970 ed è impegnato in lavori correlati da più di 50 anni. i famosi "cinque principi solidi". principi di progettazione nel campo della programmazione orientata agli oggetti, derivano dal suo lavoro. l’atteggiamento di zio bob nei confronti dell’intelligenza artificiale è molto ambiguo: da un punto di vista pratico, si lamentava apertamente che “.l'intelligenza artificiale di oggi è solo un programmatore alle prime armi con solo metà cervello e non crescerà mai veramente.", perché i compiti che l'intelligenza artificiale può svolgere sono piuttosto limitati; ma anche se ha più di 60 anni, ha ancora grandi aspettative per il futuro: "quando in futuro creeremo macchine in grado di pensare come gli esseri umani, le capacità di programmazione diventeranno obsolete.

in qualità di guru dello sviluppo software di fama mondiale, il capolavoro di zio bob "clean code" una volta definiva cos'è il "codice pulito" e descriveva una serie di pratiche operative efficaci.

recentemente è stata pubblicata la versione cinese dell'ultimo libro di zio bob "functional design: principles, patterns and practices" molte persone si chiedono perché questo leader della programmazione orientata agli oggetti abbia "tradito" il "campo nemico", e anche lo zio bob lo ha mostrato. il suo carattere sempre schietto e direttamente "smentito": "negli ultimi anni alcuni articoli hanno affermato che la programmazione funzionale è opposta alla programmazione orientata agli oggetti e che la programmazione orientata agli oggetti è obsoleta. non ero d’accordo con questo punto di vista e ho deciso di scrivere questo libro.

la programmazione funzionale è molto più che una semplice "programmazione con funzioni". la programmazione funzionale è la programmazione senza istruzioni di assegnazione.

una volta che si prova a programmare senza istruzioni di assegnazione, tutte le altre caratteristiche della programmazione funzionale vanno a posto. se vuoi gestire le funzioni, devi usare la ricorsione. tutte queste cose vengono naturali nel momento in cui decidi di non assegnare valori. quindi, questo è lo scopo della programmazione funzionale.

——"design funzionale", robert c. martin

le osservazioni di cui sopra provengono tutte dall'intervista con lo zio bob di csdn "new programmer". abbiamo avuto uno scambio approfondito con questo "fossile vivente dello sviluppo agile" e abbiamo ascoltato il suo resoconto personale di come, essendo uno dei 17 leader dell'industria del software, ha co-pubblicato il "manifesto agile" 23 anni fa (2001).dettagli storicie ho anche appreso le ultime opinioni sulla programmazione dell'intelligenza artificiale da questo programmatore senior con oltre 50 anni di esperienza nello sviluppo, cosa che ha rinfrescato le opinioni passate di molte persone sullo zio bob.impressione storica. l'articolo che segue inizierà con i ricordi dello zio bob del 1970, riportando i lettori all'"era antica dei programmatori" quando nemmeno il world wide web era ancora nato.

oltre 50 anni di programmazione

"nuovo programmatore": prima che l'intervista abbia inizio, potresti per favore fare una breve auto-presentazione?

zio bob:okay, mi chiamo bob martin alcune persone mi chiamano zio bob. faccio il programmatore da molto tempo.più di cinquanta anni.quando ho iniziato a programmare, i computer erano abbastanza grandi da riempire una stanza grande ed erano costosi, arrivando a milioni di dollari.

ho lavorato con una varietà di linguaggi di programmazione, inclusolinguaggio assembly, cobol, fortran, pl/i, c, c++, pascal, java, c#aspettare. nel corso degli anni sono stato coinvolto nello sviluppo di una varietà di sistemi che vanno dai sistemi finanziari ai sistemi embedded in tempo reale e ai sistemi di controllo dei processi. pertanto si può dire che ho una vasta esperienza in questo settore.

inoltre, sono autore di diversi libri, tra cui clean code (codice pulito), "la via dell'architettura pulita" (architettura pulita), e il libro di cui parliamo oggi si intitola "progettazione funzionale》(design funzionale)。

"nuovo programmatore"oltre a scrivere libri, cosa fai nel tempo libero? a proposito, leggo spesso il tuo twitter e ho scoperto che circa il 50% dei tuoi tweet sono notizie sociali sulle elezioni americane e su trump, e l'altro 50% riguarda contenuti tecnici, programmazione e le tue opinioni sul codice.

zio bobinfatti. negli anni non elettorali, circa il 90% dei miei tweet riguarda il software. ma poiché questo è un anno elettorale, ci sono più contenuti che trattano altri argomenti. quando non scrivo libri o non programmo, faccio un sacco di cose. mi piace andare in bicicletta e viaggiare molto. sono anche un pilota e mi diverto molto a volare con il mio aereo. ho una famiglia numerosa conquattro figli e dieci nipoti., di solito li visito il più possibile, quindi il mio tempo è organizzato in modo molto completo.

"nuovo programmatore": per favore, riportaci al punto di partenza della tua carriera di programmatore e raccontaci la storia di quando hai iniziato a lavorare come programmatore nel 1970. all'epoca avevi 18 anni e le prime lingue che hai imparato sono state l'assembly e il cobol. puoi parlarci della tua esperienza quando hai iniziato?

zio bob: beh, a quel tempo non c’erano molti corsi universitari. non avevo alcun interesse per la scuola in quel momento. a quel tempo infuriava la guerra del vietnam e nel campus ci furono molte rivolte e disordini. e,ho imparato molto sulla programmazione dei computer e ho imparato cobol e fortran e persino diversi linguaggi di assemblaggio dei computer. quindi non penso che ci sia bisogno di andare al college

per quanto riguarda l'inizio della mia carriera di programmatore, tutto è iniziato quando mia madre mi ha comprato un piccolo computer di plastica quando avevo 12 anni. quel giocattolo ha tre infradito e sei porte and, e devi girare una piccola leva per azionarlo. alcuni elastici e leve all'interno muovono le parti, permettendogli di eseguire semplici calcoli, come contare da 0 a 7, o. contando da 7 a 7. il conteggio ritorna a 0. inoltre, puoi anche programmarlo per aggiungere due bit per generare un bit di somma e un bit di riporto. ho anche scritto molti programmi interessanti su di esso: il processo di programmazione consiste nell'aggiungere un piccolo tubo inserito nel fermo, questi tubi si bloccano. l'asta dall'entrare nella fessura, modificando così la condizione del grilletto.

così, ho trascorso alcune settimane a imparare come far funzionare quel computer giocattolo e, attraverso questo processo, sono diventato un programmatore.da allora sono un programmatore

questo è stato il mio punto di partenza, poi mio padre ha comprato molti libri sui computer e sui linguaggi di programmazione per darmi quante più informazioni possibile. poi, all'età di 16 anni, ho ottenuto un lavoro di programmazione scrivendo programmi per honeywell 200. il lavoro durò due o tre settimane, quando iancora solo un ragazzo, l'ho fatto durante le vacanze estive ed è stato molto divertente.

circa due anni dopo, quando avevo 18 anni, trovai un lavoro a tempo pieno scrivendo linguaggio assembly e cobol per ibm 360. subito dopo ho iniziato a programmare molti microcomputer in linguaggio assembly. all'epoca in cui questi computer furono prodotti dalla varian corporation, molte aziende stavano costruendo microcomputer, ma poche ebbero successo, ed era la digital equipment corporation (dec) a dominare il campo. successivamente sono diventato molto abile nella programmazione del pdp 8 e del pdp 11, dispositivi prodotti all'inizio degli anni '70.

"nuovo programmatore": gli anni '70 furono un periodo davvero interessante. il world wide web non era ancora stato inventato e usenet lo aveva appena fattoapparire. sei uno dei primi utenti usenet al mondo e ho anche saputo che il soprannome "zio bob" ti è stato originariamente dato da un collega dell'azienda. successivamente, hai erroneamente utilizzato questo soprannome come firma su usenet e alla fine il nome è cambiato con successo da soprannome al tuo vero nome. puoi condividere la storia?

zio bob: lavoravo in una startup chiamata clear communication, che ha segnato l'inizio della mia carrieraquarta fermata, tra il 1987 e il 1989. lì un collega diede a tutti un soprannome, il mio era "zio bob". all'inizio era un po' fastidioso perché andava sempre in giro chiamandomi con questo soprannome: "zio bob, che ne dici di questo?" "zio bob, che ne dici di quello?".

lasciai quell’azienda e diventai consulente, e nessuno mi chiamava più “zio bob”. a quanto pare mi è mancato il titolo, quindi ho commesso l'errore di aggiungerlo alla mia firma e-mail.

all'epoca ero molto attivo su usenet, spesso postavo articoli su newsgroup come comp.object e comp.lang.c++, e la gente cominciò a notare "uncle bob" nella mia firma. una volta ero a una conferenza sul c++, probabilmente intorno al 1990, e qualcuno mi ha indicato dall'altra parte della sala e ha detto: "guarda, quello è lo zio bob" ho pensato, oh mio dio, ho fatto un errore, dovrei davvero cambiare il mio firma. - ma poi ho capito che "uncle bob" sarebbe stato davvero un buon marchio, quindi l'ho mantenuto.

"nuovo programmatore": usenet può essere considerato il primo social media a cui partecipi. come molti sviluppatori leggendari, ti piace partecipare a diverse comunità o forum. una volta ti ho visto postare su hash note: "sono robert martin. puoi farmi domande. a quel tempo, molti sviluppatori ti facevano attivamente domande e partecipa". la conversazione. ora, quella comunicazione sembra avvenire principalmente su twitter.

zio bob:giusto,twitterora il mio principale social media. utilizzo anche facebook, ma principalmente per restare in contatto con la famiglia e gli amici.

"nuovo programmatore": inizialmente eri attratto da c e c++, ma per interesse hai anche detto di aver provato linguaggi come snobol, focal, alcom e basic. quali altri linguaggi di programmazione pensi possano essere definiti "interessanti"? soprattutto tra i nuovi linguaggi di programmazione emersi negli ultimi anni, quali trovi interessanti?

zio bob: la lingua che trovo più interessante al momento èclojure, una lingua nella quale ho investito molto tempo nell'apprendimento. questo mi ha sorpreso perché clojure lo è in realtàlispun dialetto del lisp che non avrei mai pensato di imparare.

per i primi trent'anni della mia carriera, non ho mai preso in considerazione l'idea di imparare il lisp perché pensavo che fosse un linguaggio terribile e, ovviamente, non lo capivo affatto. finché un giorno lessi un libro intitolato "la struttura e l'interpretazione dei programmi per computer". il linguaggio utilizzato nel libro era il lisp, che mi attrasse immediatamente. all'improvviso sono diventato un grande fan di lisp. voglio trovare unmodi per usare lisp nella vita quotidiana, così ho incontrato clojure.

equivalente clojureun dialetto lisp che può essere eseguito sulla jvm (java virtual machine), era perfetto per me, quindi ho iniziato a imparare a programmare clojure e divertendomi a farlo, è stato un ottimo passatempo per me.

inoltre, ci sono altre lingue interessanti comevia, un linguaggio stack basato su espressioni postfisse che è diverso da qualsiasi linguaggio che abbia mai usato e molto interessante.prologoè anche un linguaggio molto interessante. non è necessario dire direttamente alla macchina cosa è corretto, ma lasciare che la macchina ottenga il risultato corretto risolvendolo. nel complesso, si tratta di lingue molto interessanti che tutti dovrebbero verificare perché sono davvero uniche.una volta che impari una lingua molto diversa, cambia tutta la tua visione del codice

quando le macchine penseranno come gli esseri umani, le capacità di programmazione diventeranno obsolete

"nuovo programmatore": capisco alcuni dei tuoi commenti precedenti sul codice ai. secondo te, i grandi modelli linguistici sono talvolta buoni e talvolta stupidi. anche se la spiegazione del codice dell'ia ha aiutato un po', hai comunque affermato che non ci si dovrebbe fidare ciecamente.

zio bob: sì, programmatoreè facile diventare eccessivamente dipendenti da strumenti come copilot e accettare acriticamente il codice che generano quando lo vedi, e questo è pericoloso. devi essere critico e, sebbene parte di questo codice vada bene, la maggior parte delle volte devi stare molto attento con il codice generato dall'intelligenza artificiale. quindi il mio suggerimento è:fai attenzione, usalo come uno strumento e ricorda sempre che gli strumenti possono farti del male se usati in modo errato.

"nuovo programmatore": quindi, i programmatori che hanno appena iniziato a imparare, come dovrebbero utilizzare l'intelligenza artificiale per crescere? ho sentito due punti di vista completamente diversi nelle interviste: uno è che i programmatori alle prime armi dovrebbero abbracciare pienamente l'intelligenza artificiale, l'altro è che l'intelligenza artificiale distruggerà i programmatori junior perché queste persone non hanno la capacità di giudicare la qualità del codice ai.

zio bob: proprio come i piloti junior non dovrebbero usare il pilota automatico.ti invitiamo a imparare prima a pilotare un aereo, quindi a utilizzare il pilota automatico quando non è necessario prestare attenzione ai dettagli. lo stesso vale per l’ia.all'inizio i programmatori junior non dovrebbero fare affidamento sull'intelligenza artificiale perché non sanno ancora come giudicare la qualità del codice di output. molte volte, quel codice non solo è cattivo, è semplicemente sbagliato e non funziona affatto.

ciò che mi preoccupa davvero è quando ai programmatori junior viene assegnato un compito e scelgono di utilizzare l'intelligenza artificiale per implementarlo. dopo che l'ia ha fornito il codice, questi principianti penseranno sempre: "bene, è stato dato dall'ia, deve andare bene", e poi perderanno il lavoro. quindi il mio suggerimento è:dovresti anche ridurre gradualmente l’uso dell’intelligenza artificiale durante i primi anni della tua carriera

"nuovo programmatore": al giorno d'oggi, sempre più codici generati dall'intelligenza artificiale vengono utilizzati in diversi progetti. come si bilancia la qualità del codice e l'efficienza della generazione?

zio bob: il mio modo di bilanciare èusa l'intelligenza artificiale per generare prima il codice, quindi ripulirlo. non lascerò che inserisca codice errato nel progetto. quindi, se il codice generato dall'intelligenza artificiale funziona e supera i miei test, tornerò indietro e lo rifattorificherò, lo pulirò e lo migliorerò senza esitazione. come cambiare la denominazione, estrarre alcune funzioni, modificare la struttura e così via.

perché non mi aspetto che l'intelligenza artificiale generi un ottimo codice. quindi lo ripulirò e lo trasformerò nel mio codice. in questo modo, è il mio progetto e il codice che ho scritto.

"nuovo programmatore": circa cinque anni fa, qualcuno ti ha chiesto "quali tendenze nell'ingegneria del software sono sopravvalutate?"tra cinque anni, ci sono altri trend sopravvalutati?

zio bobla tendenza sopravvalutata in questo momento è ovviamente l’intelligenza artificiale generativa, su questo non ci sono dubbi. è nuovo e qualsiasi cosa nuova è sopravvalutata. tra cinque anni, tutti si guarderanno indietro e diranno: "probabilmente l'abbiamo sopravvalutato".

"nuovo programmatore": la tua vecchia conoscenza kent beck ha detto qualcosa quando l'ondata di intelligenza artificiale stava aumentando. ha detto di aver utilizzato con riluttanza chatgpt e di aver scoperto che il 90% delle sue competenze erano ormai inutili, mentre il valore del restante 10% era aumentato di mille volte. quanto può essere utile l’intelligenza artificiale generativa?

zio bob: ad essere onesti, non penso che l’intelligenza artificiale sia particolarmente utile. nei casi più semplici, può essere in qualche modo utile. ad esempio, quando stavo svolgendo un lavoro di codifica di base, l'intelligenza artificiale mi dava del codice, lo guardavo e pensavo che andasse bene, quindi continuavo a lavorarci. quindi, l'intelligenza artificiale continuerà spesso a funzionare in base al contesto, finché, una volta che le cose si fanno interessanti, l'intelligenza artificiale diventa sempre più inaffidabile——più una cosa è complessa, meno è utile

l'intelligenza artificiale può gestire piccole cose, ma non del tutto se voglio che esegua il refactoring e migliori il design. inoltre, l’intelligenza artificiale non può essere di grande aiuto quando si tratta di scrivere test.

"nuovo programmatore": hai detto prima che ci vorrà molto tempo prima che le scuole di programmazione diventino obsolete. ci sarà un momento specifico nel tempo che identifica quel momento? c’è una fine alla tecnologia?

zio bob: questa è una domanda interessante, ma la considererei da una prospettiva fantascientifica.quando in futuro creeremo macchine in grado di pensare come gli esseri umani, le capacità di programmazione diventeranno obsolete. ma siamo onesti, è allora che tutte le competenze diventano obsolete.quindi non sono sicuro che sia qualcosa a cui guardare con ansia. se accadrà, penso che sia molto, molto lontano nel futuro. sapete, il cervello umano è molto più complesso dell'intera internet.

"nuovo programmatore": in effetti, questo mi ricorda che hai anche detto che tutti dovrebbero tornare da asimovtre leggi della robotica, anche se creerebbe una razza di "schiavi robotici". come interpreti l'intelligenza generale artificiale (agi) da una prospettiva filosofica?

zio bob: sì, anche se penso che sia improbabile che si realizzi a breve termine, disponiamo già della tecnologia genetica. se mai creeremo macchine coscienti per la nostra sopravvivenza, penso che qualcosa come le tre leggi di asimov sarà assolutamente necessario.

"nuovo programmatore": su questa base, l'intelligenza artificiale dovrebbe esserlofonte apertaper evitare che ciò accada? gli esseri umani hanno bisogno di un’intelligenza artificiale aperta o di un’intelligenza artificiale chiusa?

zio bob: diverse aziende vogliono sicuramente mantenere i propri segreti e non penso che ci sia nulla di sbagliato in questo di per sé.il vero problema dell’intelligenza artificiale è il consumo energetico.consuma molta energia e continuerà ad aumentare man mano che la tecnologia diventa più sofisticata. ciò rende il suo costo piuttosto elevato. quindi dobbiamo vedere fino a che punto l’intelligenza artificiale può svilupparsi oggi e vedere quanto bene possono fare questi grandi modelli linguistici. tuttavia consumano molta energia, proprio come le centrali nucleari.

lo "spirito artigianale" dei programmatori

"nuovo programmatore": allontaniamoci dall’intelligenza artificiale e parliamo di argomenti da uomo a uomo.

qualcuno una volta ti ha chiesto "chi è il tuo mentore nella vita?" e la tua risposta è stata "i libri sono il mio mentore". attraverso i libri, hai incontrato figure eccezionali come martin fowler e kent beck, e in seguito hai anche lavorato con questi due. quindi, come quell'announa delle 17 persone che hanno creato il manifesto agile, puoi rivelarci com'è la vostra relazione?

zio bob: in passato si tenevano spesso molti incontri relativi al software, ma ora ce ne sono molti meno. partecipo a vari tipi di conferenze, come conferenze sul linguaggio c, conferenze sui modelli di progettazione e alcune conferenze generali sullo sviluppo di software. attraverso queste attività ho conosciuto tantissime persone.

ad esempio, li ho incontrati a una conferenza sui modelli di progettazionekent beck, si sono incontrati in una delle prime conferenze di extreme programmingmartin fowler. ho incontrato la maggior parte di queste persone faccia a faccia. erano sia i miei partner che i miei mentori. sono anche miei coetanei e impariamo e progrediamo insieme. molto di ciò che ho imparato proveniva dai libri di programmazione degli anni '60 e '70, come the art of computer programming di donald knuth, e i libri di quell'epoca sono stati per me fonti di informazioni molto importanti.

così, quando avevo circa 30 anni di carriera, ho iniziato ad andare a conferenze e a incontrare persone faccia a faccia, ed è stato in questo ambiente che abbiamo fondatoincontro agile. la maggior parte delle persone che hanno partecipato alle conferenze agile le conoscevo prima, tramite corrispondenza o dopo essersi incontrate alle conferenze.

"nuovo programmatore": spesso possiamo vedere un punto di vista, ovvero "lo sviluppo agile è davvero applicabile?"

c'è stato un periodo in passato in cui molti sviluppatori perseguivano una consegna rapida e ignoravano la qualità del software. questo potrebbe essere un malinteso di agile.

zio bob: questo è davvero un malinteso di agile. agile non significa essere più veloci, ma capire dove ti trovi. esegui uno sviluppo agile in modo da sapere esattamente quanti progressi stai facendo, quanto velocemente li stai facendo e se stai rispettando le scadenze. in altre parole, agile è un ottimo modo per aiutarti a capire in quanti guai ti trovi. ti assicura di non sorprenderti quando le scadenze slittano e dà a tutti un’idea chiara dei progressi perché potremmo non essere così veloci come pensavamo.

molte persone credono erroneamente che agile sia un metodo veloce, e alcune persone lo commercializzano anche come metodo veloce, ma questo è sempre un malinteso.l’agilità non è un modo per renderti più veloce, è un modo per farti sapere quanto sei veloce.quindi agile non è obsoleta; non è una tecnologia obsoleta. se vuoi conoscere lo stato di avanzamento effettivo e la data di completamento del tuo progetto, agile è un ottimo modo per farlo.

"nuovo programmatore": uno dei tuoi tweet mi ha colpito molto nel profondo, ovvero “agility è stata originariamente fondata dasviluppatoreiniziato, maresponsabile del progettointervenire nelle prime fasi del movimento agile ha distrutto il rapporto di collaborazione originale. “mi puoi raccontare la storia?

zio bob: in effetti, il movimento agile è stato originariamente avviato da un gruppo diprogrammatoreiniziato. diciassette partecipanti si sono incontrati allo snowbird resort per creare il manifesto agile. siamo tutti programmatori, o almeno abbiamo un forte background tecnico. questo movimento non è iniziato dal punto di vista del project management, ma uno dei fondatori, ken schwaber, ha deciso di avviare un corso chiamato certificationmaestro della mischia(scrum master). questo corso è progettato per formare le persone che vogliono diventare scrum master e insegnare loro come assistere il team nell'utilizzometodo della mischia——questo è un modello di sviluppo agile.

i project manager hanno mostrato vivo interesse e si sono iscritti a tali corsi. poiché la maggior parte dei partecipanti erano project manager e non programmatori, il risultato è stato l'originaleil movimento avviato dagli sviluppatori si è gradualmente trasformato in un movimento guidato dai project manager.i programmatori erano insoddisfatti perché si sentivano esclusi da questa iniziativa.

per risolvere questo problema, un gruppo di noi ha iniziatomovimento artigianale del software(software craftsmanship) e ha pubblicato il manifesto dell’artigianato nel tentativo di riavvicinare project manager e sviluppatori. tuttavia, ciò non ha ottenuto risultati significativi.

alla fine, abbiamo separato un "movimento agile ufficiale" incentrato sulla gestione dei progetti e un vero movimento agile guidato dagli sviluppatori. quest'ultimo è comunque impegnato a lavorare in modo conciso e ordinato e a chiarire la propria posizione e la direzione di sviluppo.

"nuovo programmatore": allora, qual è il significato del ruolo di scrum master? in che modo è importante questo ruolo? come coltiviamo un eccellente scrum master?

zio bob: lo scrum master è stato originariamente progettato per essere un membro del team responsabile di ricordare agli altri membri gli impegni assunti quando si utilizzano i metodi scrum o agile. le responsabilità includono controlli settimanali sui progressi del team, come la conferma che il codice di test sia stato scritto come previsto e che siano stati seguiti metodi di stima predeterminati. questo ruolo viene ruotato all'interno del team, solitamente tra diversi membri. nei team maturi, dopo diverse settimane di pratica, non è necessario che uno scrum master dedicato supervisioni perché i membri del team sono già in grado di eseguire consapevolmente il processo stabilito.tuttavia, con il coinvolgimento del project manager, questo ruolo si è gradualmente evoluto in una funzione di project management, che è ben lontana dall’intenzione originaria dello scrum master.di conseguenza, il ruolo dello scrum master oggi è cambiato in modo significativo.

"nuovo programmatore": hai appena menzionato la storia dell'artigianato del software, il che mi ha ricordato che anche la tua firma su twitter recita "artigianato" (artigianato), questa è una parola molto antica, oggi dovrebbe essere tradotta come "spirito artigiano”。

come va intesa questa parola? nel settore in rapida crescita di oggi, non c'è davvero tempo per concentrarsi sulla qualità? con l’avanzare dell’intelligenza artificiale, la distribuzione del software sembra diventare sempre più veloce. penso che l’intelligenza artificiale aiuterà, vero?

zio bob: questi grandi modelli linguistici sono strumenti davvero interessanti e penso che saranno utili ai programmatori. ma non sostituiranno i programmatori e non eseguiranno tutta la codifica. non sono bravi a scrivere codice, ma possono fornire alcuni suggerimenti interessanti. quindi pensosaranno utili, ma non abbastanza da non farci avere più bisogno dei programmatori.

quanto all’artigianato, è un atteggiamento, un atteggiamento nei confronti del lavoro. il modo migliore per spiegarlo è questo: quando torni a casa da una lunga giornata di lavoro e ti guardi allo specchio, puoi dire a te stesso: "ho fatto un ottimo lavoro oggi e sono orgoglioso del mio lavoro".il modo in cui si comporta un artigiano.gli artigiani sono soddisfatti della qualità del loro lavoro. sono diligenti e disciplinati nel produrre un lavoro di alta qualità. questo è il nucleo dell'artigianato del software.

naturalmente, possiamo discutere di molte tecnologie e metodi, come lo sviluppo basato sui test (tdd), la progettazione semplice, i principi solid, ecc. esistono molte tecnologie e concetti. ma l'idea fondamentale è che alla fine di ogni giornata puoi dire a te stesso: "ho fatto un ottimo lavoro oggi". sfortunatamente, molti programmatori vanno a casa, si guardano allo specchio e sentono il bisogno di farsi una doccia perché hanno la sensazione di aver avuto una brutta giornata. hanno scritto un sacco di codice errato solo per rispettare una scadenza e hanno bisogno di lavare via quei cattivi sentimenti. l'artigianato è proprio questo: tornare a casa sapendo di aver fatto un buon lavoro e sentendosi orgoglioso del proprio lavoro.

"nuovo programmatore": il tuo libro "the way to clean code" (codice pulito) riflette anche il principio dell'artigianalità. il cosiddetto "tao" del codice pulito si concentra più sull'implementazione della logica aziendale piuttosto che sulla programmazione del sistema? oppure non c'è differenza tra i due?

zio bobil codice pulito è un insieme di concetti e tecniche che ti aiutano a lavorare come un artigiano in modo che tu possa tornare a casa orgoglioso del tuo lavoro.non importa se stai implementando la logica aziendale o programmando il sistema. è solo un insieme di tecniche e concetti che ti aiutano a fare bene il tuo lavoro e ti fanno sentire soddisfatto.

"nuovo programmatore": ho scoperto in precedenza che, sia nella comunità degli sviluppatori in cina che negli stati uniti, molte persone pensano che un codice pulito significhi moltoastratto. quindi come possiamo evitare di scrivere codice eccessivamente progettato ed eccessivamente astratto?

zio bob: sì, questo è un fenomeno molto strano, perché il mio libro stesso non raccomanda un'astrazione eccessiva, né sostiene molta astrazione. ciò che il libro suggerisce è cheutilizzare le astrazioni con parsimonia e in modo appropriato, ma non è consigliabile una progettazione eccessiva. apparentemente, ci sono alcuni programmatori che credono che qualsiasi forma diindirettosono tutti cattivi, pensano che l'unico modo per scrivere un buon codice sia provarcidiretto. non sono d'accordo con questo punto di vista, penso che una moderata quantità di indicazioni indirette e di astrazione possa essere utile, ma devi stare molto attento perché l'astrazione ha un costo. quindi, usa l’astrazione quando aiuta a risolvere un problema, ma sii consapevole del suo costo e usala con parsimonia.

"nuovo programmatore": presumibilmente questo è il motivo per cui qualche tempo fa hai detto che avresti lanciato una nuova versione di "code cleannity". posso interpretarlo come un ripulire la fonte? ma visto che hai deciso di ridisegnare e riscrivere completamente il libro, perché non dargli un nuovo nome?

zio bob: il titolo del libro è stato deciso dall'editore. volevo principalmente ribadire il concetto centrale di "clean code", ma ho utilizzato espressioni diverse ed elaborato il tema da diverse angolazioni.

il libro originale è stato scritto 16 o 17 anni fa per il pubblico dell'epoca. e ora sto scrivendo questo libro per i lettori di oggi. ci proveràrisolvi i problemi più comuni oggi stesso. utilizzerei un linguaggio diverso e adotterei approcci diversi, rendendolo meno direttivo e più informativo, cercando di trasmettere lo stesso punto in modi diversi. il messaggio è lo stesso, solo espresso in modo diverso. penso che questi due libri alla fine saranno complementari e i lettori dovrebbero leggerli entrambi.

l'intelligenza artificiale è un programmatore junior con solo metà del cervello

e non cresce mai veramente

"nuovo programmatore": parliamo del tuo nuovo libro “functional design”. innanzitutto, perché hai voluto scrivere questo libro?

zio bobla programmazione funzionale ha acquisito maggiore importanza negli ultimi dieci anni. sebbene le persone abbiano iniziato a prestare attenzione alla programmazione funzionale intorno al 2005, in realtà si tratta di un concetto più antico, essendo esistito come linguaggio matematico dal 1936, e uno dei primi linguaggi di programmazione era funzionale.

all’inizio, i linguaggi funzionali erano costosi da eseguire, lenti e richiedevano grandi quantità di memoria. ma ora, i progressi nella potenza di calcolo e nelle risorse di memoria hanno reso il costo della programmazione funzionale quasi trascurabile. ciò porta i vantaggi della programmazione funzionale, soprattutto quando si tratta di programmazione multi-thread. la programmazione funzionale consente di scrivere codice multi-thread senza preoccuparsi delle condizioni di competizione o degli aggiornamenti simultanei. questo perché la programmazione funzionale non ha istruzioni di assegnazione e non modifica lo stato delle variabili.

mentre stavo imparando clojure, ho trovato che fosse un modo divertente per programmare e risolvere problemi. penso che dovrebbe essere combinato con altri strumenti come la programmazione orientata agli oggetti e la programmazione strutturata.tuttavia, negli ultimi anni, alcuni articoli hanno affermato che la programmazione funzionale è opposta alla programmazione orientata agli oggetti e che la programmazione orientata agli oggetti è obsoleta. non ero d’accordo con questo punto di vista e ho deciso di scrivere questo libro.

copertina del libro "design funzionale: principi, modelli e pratica"

questo libro discute come la programmazione funzionale, la programmazione orientata agli oggetti e la programmazione strutturata lavorano insieme per costruire sistemi migliori. inizia con concetti di base, sviluppa gradualmente principi e modelli di progettazione e infine li combina in una piccola applicazione completa. spero che i lettori capiscanola programmazione funzionale non esiste isolatamente, che funziona con tutto ciò che abbiamo imparato negli ultimi 50 anni.

"nuovo programmatore": ho anche raccolto molte domande sul nuovo libro dalla comunità degli sviluppatori csdn e la maggior parte delle persone è molto curiosa di sapere perché hai sceltoclojureinvece di scala a scrivere il codice nel libro? è perché vuoi utilizzare un linguaggio più funzionale che non supporti classi ed ereditarietà, per dimostrare che i tuoi principi solid si applicano anche alla progettazione funzionale?

zio bob: parte del motivoinfatti. sebbene clojure non sia un linguaggio funzionale "puro", è molto favorevole alla scrittura di programmi funzionali. tuttavia, c'è un'altra ragione, forse più importante, per cui ho scelto clojure, e cioèclojure è molto semplice

ciò che voglio trasmettere in questo libro è l'idea della programmazione funzionale, non l'insegnamento di un linguaggio di programmazione funzionale complesso. soprattutto non voglio insegnare una lingua con una grammatica complessa. la sintassi di clojure è molto semplice e non ha quasi nessuna sintassi complessa. imparare clojure è facile e puoi padroneggiarlo leggendo il codice clojure.

quindi, quando mostro il codice nel libro, non entro nei dettagli su come funziona clojure, invece spiego alcuni concetti di base e lascio che sia il lettore a capire la maggior parte del resto. raccomando anche alcuni altri documenti a cui i lettori interessati possono fare riferimento. ma nel complesso, clojure è molto facile da capirequei lettori che non sanno molto di clojure o della programmazione funzionale, possono concentrarsi maggiormente sul concetto di programmazione funzionale senza essere disturbati dal linguaggio stesso.

"nuovo programmatore": ricordo che una volta hai detto su twitter che se qualcuno vuole essere menzionato nel tuo prossimo libro, può inviare un pezzo di codice che ritiene sia il più accurato. ciò accade spesso? quante persone in genere inviano il codice? possono presentare domanda anche gli sviluppatori cinesi?

zio bobsì, l'ho twittato e ho ricevuto parecchie risposte. alcune persone inviano frammenti di codice tramite collegamenti github o direttamente. probabilmente userò parte di questo codice in un prossimo libro.se gli sviluppatori cinesi volessero inviare del codice che ritengono molto accurato, sarei felice di prenderlo in considerazione.ma non posso promettere di utilizzare il codice di tutti, perché la lunghezza di un libro è limitata e non posso inserirvi il codice di tutti.

"nuovo programmatore": hai qualche idea innovativa per libri di testo digitali e piattaforme di apprendimento online? oggigiorno le persone sembrano essere meno disposte a leggere libri di carta. in che modo questi nuovi formati rivoluzioneranno il modo in cui la programmazione viene insegnata e appresa? come pensi di insegnare la programmazione alla prossima generazione?

zio bob:infatti,siamo ormai nell’era digitale, dove la durata dell’attenzione si è ridotta a meno di 20 minuti. ma se vuoi davvero imparare qualcosa, devi rallentare e concentrarti sui tuoi studi. sono arrivati ​​molti dei miei libri recentivideocontenuto, i lettori possono guardare dimostrazioni dal vivo delle sessioni di programmazione attraverso l'url nel libro. questa combinazione di testo e video è molto efficace.

inoltre, c'è un modo molto interessantelezione in linea. ad esempio, dopo aver letto il materiale stampato, il libro ti chiederà di visitare un url specifico per guardare la conferenza pertinente. penso che questi metodi siano molto utili.

non credo che i tempi dei libri di carta siano finiti. possono essere convertiti in e-book, pdf o versioni per lettori online, ma i libri di testo non scompariranno. il testo è un mezzo con una densità di informazioni molto elevata, più denso dei video o delle lezioni, ed è anche più conveniente per controllare il progresso dell'apprendimento. pertanto, penso che una combinazione di diversi formati di apprendimento possa essere più efficace, utilizzando sia testo che video.

"nuovo programmatore": il tuo libro è destinato a lettori di tutti i livelli di competenza, dai principianti ai professionisti esperti. ciò presenta certamente sfide diverse quando si tratta di bilanciare profondità e ampiezza dei contenuti.

zio bob: il mio libro è realmente rivolto a un gruppo eterogeneo di persone, sia programmatori principianti che professionisti. la chiave è fornire valore a entrambi i tipi di lettori senza renderlo troppo difficile da digerire per l’uno o semplificare eccessivamente per l’altro.

quando insegno e scrivo, presumo che i miei ascoltatori o lettori siano intelligenti quanto me e possano comprendere i miei contenuti. potrebbe volerci un piccolo sforzo da parte loro, ma sono sicuro che capiranno. non modifico il contenuto in base al mio giudizio sull'abilità del lettore. trasmetto semplicemente il mio messaggio direttamente, come se parlassi a un collega.

forse ho più esperienza, forse ne ho passate di più e ho fatto più errori. così posso condividere le mie esperienze e storie. ma non lo rallenterò né lo semplificherò eccessivamente.

"nuovo programmatore": come è cambiato il tuo modo di insegnare la programmazione nel corso degli anni? quali nuovi approcci e lezioni hai adottato per stare al passo con il panorama tecnologico in evoluzione?

zio bob: nei primi giorni, di solito usavotrasparenzee visualizzare il contenuto del corso attraverso un proiettore, solitamente preparando una grande pila di pellicole per visualizzare il contenuto pagina per pagina. nel corso del tempo, ora lo usoipadè molto divertente fare una presentazione, collegarlo a un proiettore e disegnare sullo schermo dell'ipad con apple pencil, e tutto verrà visualizzato sul grande schermo in tempo reale.

durante la pandemia di covid-19, abbiamo iniziato a insegnare tramite strumenti di formazione a distanza come zoom. ora, la maggior parte del mio insegnamento viene svolto a distanza. utilizzo ancora presentazioni con diapositive e disegni su schermo e questi metodi funzionano ancora. l'unica differenza è che nell'insegnamento a distanza non posso vedere direttamente la reazione del pubblico, il che è meno un'esperienzametà del divertimento

"nuovo programmatore": un altro cambiamento portato dall’epidemia è che molti programmatori temono di essere sostituiti dall’intelligenza artificiale. ho visto prima un'affermazione secondo cui l'apprendimento del design funzionale può aiutarli a mantenere il lavoro, puoi approfondire questo argomento?

zio bob: il design funzionale e i concetti contenuti nei libri di design funzionale sono in realtà progettati per aiutarti a diventare un programmatore più maturo.aggiungi nuovi strumenti alla tua “cassetta degli attrezzi”. la programmazione funzionale è un buon strumento, la programmazione orientata agli oggetti è un buon strumento e anche la programmazione strutturata è un buon strumento. questi dovrebbero essere nella tua cassetta degli attrezzi. lo sviluppo basato sui test è un ottimo strumento ed è meglio averlo a portata di mano. anche i principi solidi sono buoni e dovrebbero sicuramente essere nella tua cassetta degli attrezzi. quindi lo scopo di questo libro è espandere gli strumenti dello sviluppatore, cosa che ti aiuterà sicuramente a mantenere il tuo lavoro.ma non penso che tu debba preoccuparti troppo di essere sostituito dall’intelligenza artificiale. è improbabile che ciò accada nella mia vita, e potrebbe non accadere nella tua vita, o potrebbe non accadere mai. ho la sensazione che non vedremo macchine capaci di un’intelligenza pari a quella umana.

"nuovo programmatore": per quanto riguarda il design funzionale e la programmazione orientata agli oggetti, credo che molte persone ti abbiano chiesto quale sia il migliore. ma quello che voglio chiederti è: cosa ne pensi?in quale dei due è migliore l'attuale ia?ad esempio, la programmazione funzionale è più adatta per la generazione di codice ai? non ha uno stato, una funzione può essere generata quando utilizzata e ciascuna funzione può anche essere generata e verificata automaticamente dall'intelligenza artificiale. quindi, se l’intelligenza artificiale è migliore nella progettazione funzionale, i programmatori che conoscono solo la programmazione funzionale dovranno affrontare una crisi più grave?

zio bobnon importa, perché l’intelligenza artificiale non può fare nullae non è migliore nel generare codice funzionale rispetto al codice orientato agli oggetti o strutturato.puoi pensare all'intelligenza artificiale come aprogrammatori junior con mezzo cervello che non crescono mai veramente. ti darà alcuni suggerimenti, la maggior parte dei quali non sono molto buoni, e alcuni di essi potrebbero andare bene, ma devono essere modificati, perché il codice scritto dall'intelligenza artificiale è sempre confuso.

l'intelligenza artificiale è quello che è e può essere utile, ma non dovresti modificare la direzione della tua carriera per adattarla. l'intelligenza artificiale è uno strumento e puoi imparare a usarlo, ma non dovresti cambiare i tuoi piani di carriera solo per un determinato strumento di intelligenza artificiale.

cosa fare se non sai cosa fare di fronte alla programmazione dell'intelligenza artificiale

quindi spegnilo

"nuovo programmatore": se una nuova persona si avvicinasse a te e ti chiedesse: "quale linguaggio dovrei scegliere come primo linguaggio di programmazione?" come risponderesti di solito?

zio bob: bene, puoi scegliere java. detto questo, anche c# è un ottimo linguaggio. buono anche il clojure. è disponibile anche il linguaggio c. il c++ è un po' difficile e complesso, ma è anche un'opzione. anche la lingua go è molto buona, è una buona lingua...

in realtà, quale scegli non è così importante. la programmazione è programmazione, non importa con quale lingua inizi. soprattutto, devi imparare la lingua successiva. non fermarti a una lingua.imparane uno, trascorri qualche mese finché non diventi abbastanza esperto, poi imparane un altro e così via, imparando una nuova lingua ogni anno. considera l'apprendimento di una lingua come un divertimento e trova una lingua che non hai ancora imparato. potresti non usarlo mai al lavoro e potresti non usarlo mai più, ma prendi l'abitudine di imparare una nuova lingua ogni anno o due.non importa da dove inizi, ciò che conta è continuare ad imparare.

"nuovo programmatore": consiglieresti ai programmatori junior di partecipare a progetti open source? in quali straordinari progetti open source sei stato coinvolto e puoi condividere la storia?

zio bob: mio figlio ed io abbiamo iniziato un progetto 20 anni fa ed è ancora in corso ed è un grande progetto. anche se io non sono più coinvolto, molti altri continuano.

se sei un programmatore junior o un giovane programmatore e vuoi apprendere nuove idee, ti consiglio di partecipare a un progetto open source. prova a inviare alcune richieste pull e contribuisci con ciò che puoi. questo è in primo luogo un ottimo modo per aiutare gli altri e in secondo luogo una grande opportunità di apprendimento. comunque hai ragione, consiglio vivamente alle persone di impegnarsi in progetti open source, è un ottimo modo per espandere la propria carriera.

"nuovo programmatore": conosci la “crisi dei 35”? molti programmatori affrontano due strade una volta raggiunta una certa età: passare al management o andare in pensione.

zio bob: questo è un vero problema data la preferenza del settore tecnologico per i giovani. in effetti, uno sviluppatore mi ha posto una domanda simile e la ricordo chiaramente. le sue parole esatte furono: "zio bob, perché stai ancora programmando a 70 anni?" ha ragione, ho 71 anni adesso e scrivo ancora codice.

questa idea che la programmazione sia solo per i giovani è in realtà un’illusione, ma è davvero un’illusione molto influente. questa illusione esiste perché la domanda di programmatori è aumentata vertiginosamente negli ultimi 70 anni.

mettiamola così: ogni cinque anni il numero di programmatori nel mondo raddoppia. ciò significa che dobbiamo raddoppiare il numero di programmatori ogni cinque anni, il che significa che la metà dei programmatori nel mondo ha meno di cinque anni di esperienza e tre quarti dei programmatori hanno meno di dieci anni di esperienza. in altre parole, tre quarti dei programmatori mondiali hanno meno di 35 anni. quindi quando ti guardi intorno, vedi solo i giovani. potresti chiedere, dove sono tutti quei vecchi programmatori?in effetti, siamo tutti ancora lì, anche se non così cospicui come numero.

ciò crea l'illusione che la programmazione sia adatta solo ai giovani, ma in realtà è completamente sbagliato. per diventare un programmatore veramente potente, ci vuole molto tempo per accumulare. potrebbero esserci alcuni programmatori senior che ritengono che sia fantastico avere dieci anni di esperienza. questo è davvero positivo, ma in altri cinque anni può diventare un programmatore migliore.

quindi, se ti piace davvero scrivere codice, pensi che questo sia il tuo preferito e vuoi continuare a farlo, allora non arrenderti. non devi essere un manager. se ci sono persone brave nella gestione, lascia che lo facciano. se vuoi continuare a scrivere codice, continua a farlo. non è necessario cambiare carriera o andare in pensione presto. ciò non significa che il tuo cervello non funzionerà bene quando raggiungerai i 36 anni. in effetti, ci sono così tante nuove persone che si riversano in questo settore ora, e non solo i giovani, ma persone di tutte le età stanno imparando a programmare.ciò non significa che non hai una possibilità.

"nuovo programmatore": questo mi ricorda che molti programmatori ora hanno dubbi su se stessi quando affrontano l'intelligenza artificiale. ma in realtà l’insicurezza non è una novità, e molti vecchi programmatori avrebbero avuto lo stesso problema in epoche precedenti. hai mai avuto sentimenti di insicurezza prima?

zio bob: quando ho iniziato a programmare, ero ancora un ragazzino, ho sempre sentito che avrei potuto farmi un nome. non ho mai avuto dubbi su me stesso in questo momento.

invece, ho iniziato a commettere errori, a essere licenziato e a sperimentare altri intoppi. l’insicurezza in questo momento è in realtà una buona cosa.una moderata quantità di insicurezza è in realtà abbastanza salutare. perché dopo un po' impari ad affrontarlo.pensi: "okay, so come evitare questi errori. so di non essere perfetto, ma finché mi concentro, sto attento e parlo con gli altri, dovrei essere in grado di risolvere questi problemi lentamente, tu". supererà quei dubbi su se stessi. in realtà, attraversare un periodo di insicurezza non è necessariamente una cosa negativa. ti permette di crescere e diventare più forte.

"nuovo programmatore":infine, puoi dare qualche consiglio agli attuali sviluppatori? soprattutto quei programmatori che si sentono confusi o perplessi quando si tratta di programmazione ai.

zio bobse non sai cosa fare di fronte alla programmazione dell'intelligenza artificiale, disattiva l'intelligenza artificiale. ignoralo e basta.trascorri un altro mese a scrivere il codice da solo, quindi attiva l'intelligenza artificiale. forse allora esaminerà il tuo codice e vedrà cosa vuoi fare, e quindi sarà in grado di dare suggerimenti migliori.

ad esempio, immagina di essere un principiante che sta imparando a guidare. non hai mai toccato il volante e desideri utilizzare la guida automatica non appena inizi a guidare. non appena premi il pilota automatico, l'auto inizia a muoversi. potresti essere spaventato a morte, pensando: "devo prima spegnere questa cosa. fammi fare un po' di esperienza, prova di nuovo il pilota automatico". pensa: "oh, ora capisco come funziona questa cosa". quindi potrai farne un uso migliore.lo stesso vale per l'intelligenza artificiale. all'inizio potrebbe non essere fluido, ma man mano che procedi diventerai sempre più abile.