JavaRush /Java Blog /Random-IT /Un giorno nella vita di uno sviluppatore Java. Parte 1
alex8894
Livello 34
Санкт-Петербург

Un giorno nella vita di uno sviluppatore Java. Parte 1

Pubblicato nel gruppo Random-IT
Saluti, cari colleghi! Dopo la pubblicazione di " 20+ Years Later ", alcuni lettori hanno chiesto una continuazione della storia. Di cos'altro potrei parlare? Sembra che io abbia trattato completamente l'argomento di trasformare un "enikey barbuto" in uno sviluppatore Java. Sarà possibile trarre alcune conclusioni non prima che dopo un anno di lavoro. E poi ho deciso di descrivere semplicemente come va la mia giornata lavorativa tipo. Sotto il taglio “Un giorno nella vita di uno sviluppatore Java”. Quando ero giovane, mi piaceva dormire. Quando ero un enikey, mi capitava di dormire fino a mezzogiorno e di venire a lavorare alle tre, o anche alle tre e mezza. Ogni volta che rispondevo alle richieste periodiche della direzione di “venire come tutti gli altri”, cioè entro le 9 del mattino, sempre allo stesso modo – dicono, devo lavorare al computer quando non disturbo nessuno. Rotolò. Ma con l'età, a quanto pare, qualcosa è cambiato nel corpo, e ora sono più un'“allodola” che un “nottambulo”. Ecco perché ora vengo al lavoro per primo (o uno dei primi). Oggi sono il primo e ho mezz'ora o un'ora di silenzio finché altri, meno "mattinieri", non si mettono al passo. È tempo di pianificare oggi. Sviluppo sotto Linux Mint. Mi piace il pulsante Start, modesto ed elegante, non come queste tessere. Il desktop manager Cinnamon non è sovraccarico di effetti visivi, ma in termini di rifinitura è leggermente inferiore a MacOS, che è, ovviamente, lo standard in questa materia. È facile fare paragoni, c’è un Mac sul tavolo accanto, dietro c’è un designer UX. Inoltre, non ho quasi nessuna lamentela riguardo al sistema operativo stesso: funziona velocemente ed è molto stabile, l'ho riavviato solo tre volte durante questo periodo, quando spegnevo il computer durante le lunghe vacanze. In realtà, si carica anche quasi istantaneamente, anche la schermata iniziale non ha il tempo di apparire, perché tutti i computer degli sviluppatori sono dotati di unità SSD. Prima di tutto apro il client di posta Thunderbird, arrivano lettere con informazioni sulle modifiche alle pagine che mi interessano nel wiki (ci sono impostazioni e specifiche), ma la cosa principale sono le notifiche dal tracker. Cosa ci è successo di interessante? Oh, sono tornati dal test di una funzionalità che ho completato ieri, sembra che abbiano trovato un bug. Ebbene sì, lo è. Devo sistemarlo al più presto, forse avrò tempo prima che arrivi il tester e lui guarderà immediatamente le correzioni prima di ritrovarsi in qualche "costruzione incompiuta". Questa è la prima cosa per oggi. Quindi si tratta della mia “costruzione incompiuta”, che ho scritto durante lo scorso sprint. Sembra che questa volta abbia resistito con successo a tutti i cerchi dell'infernofasi di test e oggi, probabilmente, dovrà essere confluito nel ramo principale del progetto. Ma questo verrà dopo, dopo pranzo. Anche oggi dovremo lavorare in devops e aggiornare lo stand della filiale in cui è attualmente in corso lo sviluppo, dobbiamo mostrare nuove funzionalità. "Da un grande potere derivano grandi responsabilità", il comando sudo visualizza un avviso prima di concedere i privilegi di root. Nella mia traduzione un po’ approssimativa, questa frase suona come “più puoi fare, più dovrai fare”. Non sorprende quindi che io, che porto il “timbro dell’amministratore”, ricevo spesso compiti “limite”. Bene, cominciamo. Ieri stavo lavorando su un'altra funzionalità e ora devo tornare al ramo in cui si trova il bug. Gli utenti Windows di solito amano tutti i tipi di shell grafiche e usano Turtle (TortoiseGit), ma per me è più semplice e familiare tramite la riga di comando. In generale, la riga di comando di Linux è un piccolo capolavoro, incredibilmente ponderato e potente, soprattutto in combinazione con Midnight Commander. Abbiamo cambiato, ora bisogna ricostruire il progetto. Digito il comando gradle clean ass. Non so se questo comando fosse originariamente previsto dagli autori di Gradle o sia stato creato per caso, ma semplicemente pulisce e ricostruisce il progetto (ass è l'abbreviazione di assemble, e non quello che mi viene in mente per primo). Su Javarush, gradle viene menzionato solo brevemente, come "e altri sistemi di compilazione". Sì, Gradle non presenta vantaggi rispetto a Maven per l'assemblaggio di progetti educativi. Anche la maggior parte dei tutorial e delle istruzioni su Internet utilizzano Maven. L'emergere e la crescente popolarità di Gradle è probabilmente dovuta al rapido aumento della complessità della costruzione di progetti moderni. Il progetto in cui sono coinvolto è composto da diverse decine di componenti, dove il backend è scritto in Java, il frontend in Javascript e i test in Python. A proposito, al giorno d'oggi, l'assemblaggio di un progetto Javascript è un processo separato e completamente complicato, che ha persino un nome: Web Workflow, e l'albero delle dipendenze è esteso quasi quanto in Java. Beh, almeno non è necessario assemblare componenti Python, beh, quasi non ce n'è bisogno... Dopo l'assemblaggio e il lancio (che è anche non banale), è necessario generare e inizializzare con i dati di test un intero ambiente con una struttura relazionale e database NoSql, una coda di messaggi e una cache in memoria. Quindi tutto ciò deve essere nuovamente assemblato ed eseguito sul server CI, quindi distribuito utilizzando ansible. Allo stesso tempo, lo sviluppo viene eseguito principalmente sotto Windows, mentre i server "combattimento", demo, test e altri server di pre-produzione sono, naturalmente, sotto Linux. Non immagino davvero come sia possibile implementare queste cose in Maven, ma abbastanza bene in Gradle. Il fatto è che il file di build di Gradle è scritto in Groovy. È un linguaggio molto divertente, dicono che sia un incrocio tra Java e Ruby, ma non conosco Ruby, ma conosco un po' Javascript e funzionano anche molti dei suoi costrutti. I creatori di Gradle hanno implementato un'API tale che nei casi più semplici il file di build sembra piuttosto dichiarativo (e, tra l'altro, secondo me, è ancora più facile da leggere rispetto al pom.xml di Maven), ma se hai bisogno di qualcosa di più complesso, tutta questa dichiaratività viene scartata, compaiono variabili, funzioni, classi: in una parola, tutte le funzionalità di Groovy, che, tra l'altro, possono essere compilate ed eseguite sulla stessa JVM del codice Java. L'assembly stesso, come ho già detto, è multipiattaforma, ma interagisce con l'ambiente, quindi deve essere controllato anche sotto Windows. Per fare ciò, ho Windows installato su una macchina virtuale. KVM sta facendo passi da gigante e, se il sistema ospite è configurato correttamente, la virtualizzazione è quasi invisibile. Sì, Spice ora supporta due monitor, le risoluzioni dello schermo vengono regolate automaticamente e i driver dei dispositivi paravirtualizzati non causano quasi alcuna perdita di prestazioni. A volte mi ritrovo a pensare che non sento molta differenza tra le due piattaforme. Tuttavia, Java è uno strumento straordinario che ha avvicinato due mondi completamente diversi e, a volte, persino ostili: il mondo del software proprietario, crack, keygen e serial,rappresentato da Windows e dal mondo dei sistemi aperti Linux. Quindi, il progetto è assemblato, lo lanciamo (ovviamente anche tramite gradle) e diamo un'occhiata. Ebbene sì, peccato per la mia barba grigia, non ho implementato uno dei requisiti della produzione, eccolo scritto nero su bianco sulla wiki. Nel mio lavoro precedente, riscontravo regolarmente questa situazione ed ero sempre perplesso su come lo sviluppatore potesse aver mancato un intero paragrafo delle specifiche. Sì, facilmente! Ci ho pensato, concentrandomi su un altro problema e si è verificato un bug. Solo qui, grazie a diverse fasi di test, verrà catturata, ma nel posto precedente - beh, qualunque cosa sia accaduta. Fortunatamente, i lavori qui non dureranno a lungo. Sto lanciando Idea Ultimate, che tra l'altro è uno dei pochi prodotti a pagamento utilizzati nello sviluppo. In linea di principio, puoi cavartela con la Community Edition, ma ti abitui rapidamente alle cose buone, ad esempio l'integrazione con Spring. Servono anche un paio di terminali per i log, un browser per il frontend e un wiki, un altro terminale con una riga di comando, tutto si muove, lampeggia... In generale, l'immagine sugli schermi di due monitor comincia ad assumere un aspetto spaventoso aspetto, come quello mostrato nei film a basso budget, che raffigura il duro lavoro di un hacker. Ma queste sono ancora cose minori, ma ricordo quando ho dovuto creare e configurare un cluster di failover - sette finestre di terminale, qualcos'altro nell'angolo dello schermo, in tutte le finestre - alcuni numeri e immagini dalla grafica ASCII... Ma Mi divago un po' dal lavoro e il tempo passa. ... Uff, beh, sembra che ho fatto tutto ciò di cui avevo bisogno e, a quanto pare, non ho rotto nulla di ciò che avevo fatto prima. Aggiungo un commento alla funzione e invio il thread per il test. Provo a scrivere più nel dettaglio cosa ho fatto o cambiato esattamente per semplificare il lavoro del tester. Nel mio lavoro precedente, mi mancavano davvero queste spiegazioni quando dovevo verificare i miglioramenti ricevuti dagli sviluppatori. Nel frattempo, la mattina si è trasformata senza intoppi in giorno, la gente si è gradualmente fermata. Presto ci sarà uno stand up meeting, o secondo noi, uno stand up. In effetti, la giornata lavorativa dovrebbe iniziare con esso, e per la maggior parte dei “nottambuli” è quasi così. Lo stand-up funge da limite per arrivare al lavoro il più tardi possibile; arrivare in ritardo è fortemente sconsigliato. Beh, per me è come una pausa. Quindi, alziamoci tutti. Durante lo stand-up, come al solito, gli sviluppatori raccontano cosa hanno fatto ieri e cosa intendono fare oggi, i tester ci dicono cosa hanno testato e con quali risultati, e i capi, è chiaro, cosa intendono fare dopo, quali problemi sono sorti e a cosa è necessario prestare particolare attenzione. Il nostro team è distribuito geograficamente e il suo intero organico può essere visto solo in stand-up (in TV, ovviamente) e, forse, anche in occasione di un evento aziendale generale un paio di volte all'anno. Durante lo stand-up, ho spesso il pensiero che in realtà sia stato inventato per far rilassare gli sviluppatori. Quando ogni giorno avrai bisogno di mostrare i progressi nel tuo lavoro, e non in un rapporto cartaceo che solo il tuo capo leggerà, ma davanti ai tuoi colleghi, volenti o nolenti proverai a fare di più, avere qualcosa di cui parlare. Ci sono, naturalmente, "progetti di costruzione a lungo termine", di cui per diversi giorni di seguito si ripete "ieri ho fatto questo e oggi continuerò a farlo", ma anche in essi alcuni piccoli compiti urgenti sono costantemente presenti incastrato. Insomma, reale Uno sviluppatore cowboy ha sempre qualcosa da dire ai suoi colleghi. Allo stand-up mi è stato chiesto di aggiornare velocemente il mio stand, quindi ora lo farò. Quando viene pubblicato il ramo principale del progetto, l'aggiornamento viene effettuato dagli amministratori, ma ora dobbiamo pubblicare una funzionalità che non è ancora terminata, e allo stesso tempo inevitabilmente sorgeranno dei problemi che gli amministratori non potranno risolvere. Lo stand si trova in un data center, l'accesso è possibile solo tramite ssh, ovviamente non c'è una shell grafica - quindi solo la riga di comando, solo hardcore! L'aggiornamento stesso è automatizzato e si è svolto senza intoppi, ma dopo l'aggiornamento uno dei componenti non si avvia. Guardo i log con il comando less; tra l'altro ha una funzione molto comoda: se premi Shift-F, visualizzerà costantemente il contenuto corrente del file, il che è perfetto per i log. E cos'è questa... cosa strana? Schermo intero di punti interrogativi separati da virgole. Secondo schermo, terzo, decimo... Quanti sono? Oh, è finita, si è rivelato un bel stacktrace. Qualcuno ha scritto una query SQL con l'operatore IN per selezionare i record desiderati da un elenco e ha creato un parametro per ciascun elemento dell'elenco. Tutto ha funzionato finché l'elenco non ha contenuto più di 32767 elementi, dopodiché il server SQL ha finalmente perso la pazienza. Dovrai scrivere una segnalazione di bug a riguardo, ma questo non ha nulla a che fare con il problema con un componente non funzionante. Guardiamo oltre. Adesso è chiaro che la migrazione della struttura del database alla nuova versione non è andata a buon fine, sembra che l'autore della funzionalità abbia cambiato qualcosa nella migrazione, e qui allo stand c'era la sua versione precedente. Sarà necessario ripristinare manualmente le modifiche alla struttura tramite l'utilità della console del server SQL. Come posso scrivere un comando in DML per eliminare un campo? indice? tavoli? Sembra che sia tutto. Ho riavviato il componente, la migrazione è andata bene... è tutto a posto. È ora di andare a pranzo, il tempo è bello oggi, comunque. "La palla gialla brillante sospesa immobile nel cielo e così spaventosa per i cittadini si è rivelata essere il Sole." Quasi il primo giorno di sole dell'anno. Non voglio nemmeno lasciare la strada, ma devo farlo: il momento della fusione si avvicina. Continua
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION