JavaRush /Java Blog /Random-IT /Il trucco, ovvero come ottenere un lavoro come sviluppato...
Юрий
Livello 30
Москва

Il trucco, ovvero come ottenere un lavoro come sviluppatore Java intermedio senza esperienza in Java

Pubblicato nel gruppo Random-IT
Saluti a tutti gli studenti e professionisti Java. Forse la mia storia sarà per alcuni un esempio di come farlo e per altri di come non farlo. È il 19 ottobre 2021 e oggi ho completato un periodo di prova (3 mesi) come sviluppatore intermedio Java in una grande azienda. Non avevo alcuna esperienza precedente nello sviluppo Java. Fino al 4 giugno 2020 non sapevo nulla di Java. Quando sono stato assunto come Javaista, ho promesso che se avessi superato il periodo di prova, avrei scritto una storia di successo. Questo articolo sarà diviso in due parti logiche: Background professionale ( capitoli 1-5, non correlato a Java, ma in cui puoi acquisire conoscenze sulla tua carriera). Diventare Javaista (capitoli 6-9 - imparare Java, colloqui, trovare lavoro, prima vera esperienza). <h3>Capitolo 1. Economista</h3>Per capire con quale livello di conoscenza sono arrivato a JavaRush, devo dare una nota biografica su di me. Novembre 2013, ore 8.00. Sono seduto in un bar a Taganka e ripeto le istruzioni SQL. Tra un'ora ho un colloquio per la posizione di principale economista nel dipartimento finanziario della banca. Questa è l'unica intervista a cui sono stato invitato e devo dare il 100%. Per il suo bene sono volato da San Pietroburgo e sono rimasto con i parenti in cucina, per non spendere i miei già piccoli risparmi. Passano 30 minuti, le frittelle con prosciutto e formaggio vengono mangiate e dobbiamo andare verso il nostro caro sogno. Ma tutto trema. Cosa succede se fallisco il colloquio? Ok, non lo era. Vado in banca, prendo un pass e aspetto i miei intervistati nella sala riunioni. Il tempo passa per molto tempo. Entrano un uomo sui 35 anni e una donna della stessa età. Si presentano e chiedono di raccontarvi: “Yuri, è un piacere”. Ho 21 anni, studio part-time all'università di San Pietroburgo, ho lavorato per 3 mesi come cassiera in banca. Mi sono reso conto che non era quello per cui avevo studiato, ho iniziato a guardare il mercato del lavoro e ho visto che a Mosca gli economisti hanno SQL come requisito. Quindi l'ho studiato, ho seguito dei corsi (Amministrazione MS SQL: questo è quello che avevo, questo è quello che ho cercato) e mi hai chiamato. Parlano dell'azienda, di cosa fanno (la maggior parte delle parole sono incomprensibili) e poi ti chiedono di fare un test. Il test prevede 3 domande su SQL: 1. Data una tabella, estrarre tutti i record con id = 10. 2. Date due tabelle, collegarle e visualizzare una colonna da ciascuna. 3. Raggruppare i dipartimenti e indicare il numero di dipendenti per ciascun dipartimento. È con grande vergogna che scrivo queste richieste. Segue una discussione sulle mie aspettative rispetto al lavoro. E mi dicono la frase magica: “Grazie per il colloquio, ti richiameremo”. Passa una settimana e mi offrono di venire a lavorare con loro. Euforia, shock, gioia! E per quali soldi: 70mila rubli in mano! Sì, sarò ricco! Vengo a Mosca, mi stabilisco, affitto una stanza in centro. I primi giorni sono euforici. Dopo 10 giorni inizia la realizzazione: dove sono arrivato? Non capisco proprio niente! Ogni mese dovevo preparare rapporti gestionali per l'intera banca. Naturalmente per me è stato lo stesso che per te, caro lettore. Ho percepito i termini credito interbancario, swap, ripartizione delle spese, costi, ecc. come incantesimi in latino. Lungo il percorso, ho dovuto padroneggiare il lato tecnico del problema: MS Access (tutti i report venivano eseguiti lì tramite VBA), MS SQL (come nuovo archivio, invece di Access), Oracle (che inizialmente chiamavo Oracle, provocando l'isteria tra i programmatori). E all'improvviso comincio a capire che il lato tecnico è per me molto più interessante. Ci sono tentativi di creare query complesse (di conseguenza, il database si blocca dai miei script e gli amministratori furiosi corrono in giro cercando di capire chi è stato). Ma il lavoro principale è la finanza, che iniziano a farmi incazzare. Dopo un mese e mezzo scrivo una lettera di dimissioni, non potendo dare alcun risultato (e non se lo aspettavano proprio da me, a dire il vero). Il capo del dipartimento finanziario straccia il discorso e dice: “non preoccupatevi delle stronzate”. Un mese dopo, scrivo di nuovo una dichiarazione, e il capo del dipartimento, scioccato da tanta sfacciataggine (che in seguito divenne presidente del consiglio di amministrazione della banca), firma con estremo sconcerto: il ragazzo ha 21 anni, senza un diploma superiore istruzione, hanno ricevuto sia uno stipendio che una fiducia, ma lui si comporta così. I motivi del licenziamento furono altri due fattori: il capo, alla cui arroganza non potevo reagire con calma, e la sedia scomoda, da cui cominciava a farmi male la schiena. Questo è incredibilmente divertente, ma ecco il motivo. Quando ho smesso, pensavo che ora mi sarei sentito ancora più a mio agio. Ma non c'era. <h3>Capitolo 2. 70 interviste</h3>Uscendo dalla banca, ho fatto un respiro profondo. "Lo organizzerò in questo modo, tutti rimarranno sbalorditi." Erano programmate le interviste, gli stipendi per loro erano più alti e sembrava che non ci sarebbe stato bisogno di occuparsi delle segnalazioni. Ci sono 4 colloqui e nessuno mi assume. 5, 6 interviste: la stessa cosa. Ho vissuto con una ragazza in una stanza in affitto e lei ha trovato un lavoro e ha potuto coprire la mia mancanza di reddito. Ma non avevo ancora idea per quanto tempo non avrei avuto alcun reddito. Sono andato ai colloqui (posti vacanti come analista) e mi hanno chiesto principalmente di SQL e VBA. Per coloro che non lo sanno, VBA è un linguaggio di programmazione in Excel, Access e altri prodotti MS Office. Si tengono 10 interviste, niente. 20, 30 - niente. Tutti sono imbarazzati dalla mancanza di esperienza e di istruzione superiore (che mi sembra una cosa da poco). 40 interviste e la disperazione comincia a insinuarsi. Durante il periodo di 55-60 interviste comincio a studiare 1C. La ragazza, che è già diventata moglie, chiede di partire per San Pietroburgo, poiché almeno lì ha il suo alloggio. E al 70esimo colloquio, sono stato invitato a diventare amministratore di database 1C (con la prospettiva di diventare uno sviluppatore 1C) in una piccola azienda nella zona industriale di San Pietroburgo per 50.000 rubli. Questa è la crescita della carriera! <h3>Capitolo 3. Il ritorno della leggenda</h3>Guardando fuori dal finestrino di un minibus (trasporto aziendale) nella grigia zona industriale di San Pietroburgo, e viaggiando per un'ora e quaranta in andata, mi sono reso conto che non potevo vivi così. L'interesse per 1C è scomparso al primo tocco del sistema autoscritto. Era necessario un piano. Ed è maturato: la sera studiava SQL e allo stesso tempo monitorava il noto cantiere. L'ultimo fattore scatenante del licenziamento è stata la situazione: il direttore generale non voleva lasciarmi andare in vacanza programmata, anche se i biglietti erano già stati acquistati. Dopo le vacanze, scrivo una domanda e invio nuovamente il mio curriculum per i posti vacanti a Mosca. Ancora una volta mi viene offerto un colloquio presso una grande banca nell'ora di Mosca. Ancora una volta vengo nella cucina dei miei parenti e vado a fare un colloquio. Quando HR ha scritto l'indirizzo, non potevo credere ai miei occhi: questo era l'edificio in cui sognavo di lavorare (al momento della mia ultima residenza a Mosca era appena in costruzione). La posizione era chiamata specialista del supporto dei sistemi informativi. Vado in ufficio Vengo accolto da un uomo sui 30 anni con una giacca alla moda e jeans. Siamo saliti al 15 ° piano e quando ho visto il panorama della città sono rimasto senza fiato: tutti i grattacieli stalinisti erano visibili. L’intero stile dell’edificio era molto moderno: nell’ufficio del capo c’erano frigoriferi per il vino, acquari alla moda, un dipinto di una donna nuda in stile bianco e nero. Ciò ha causato un effetto "wow". La conversazione con il capo non è avvenuta come al solito: per circa 40 minuti ha parlato di quello che stava succedendo in banca. Non ho capito niente, ma ho annuito con la testa. Quando ho chiesto: quando inizierai a chiedermelo? Non stava prestando attenzione. Ancora una volta, alla mia domanda “quando è il colloquio tecnico?”, la risposta è stata “sì, ti assumeremo comunque, se non ce la fai ti licenziamo”. Lo ha detto con un sorriso, e ho capito che tutto, il sogno si era avverato di nuovo! <h3>Capitolo 4. Trovarsi nell'IT </h3>Quando sono arrivato nel nuovo posto, ho capito subito perché mi avevano assunto. Descriverò il tipico ritratto di un impiegato del dipartimento: età media 55 anni, moscovita, studi all'Università statale di Mosca, lavoro presso un istituto di ricerca sulla difesa in epoca sovietica e passaggio al settore bancario negli anni '90, lavora qui da 20 anni, la metà sono uomini e l’altra metà donne. Entrarono in completa dissonanza con gli interni circostanti. Siamo stati coinvolti nel mantenimento dei programmi di reporting per la contabilità. Naturalmente, tutto questo era in antichi script VBA e SQL scritti dagli sviluppatori tra la fine degli anni '90 e l'inizio degli anni 2000. Era il 2015 e l'automazione avveniva tramite MS Access. Cioè, sembrava estremamente povero. Ma c'era una sfumatura: fornivano ciò che il cliente (contabilità) voleva. Ed esattamente in tempo e nella forma richiesta. Solo loro sapevano come funzionava, e nemmeno Onotole poteva immaginare la complessità dei loro sviluppi. E qualsiasi manager IT, anche con il massimo desiderio, non poteva licenziarli: il capo contabile si è rivolto al consiglio di amministrazione della banca e ha difeso qualsiasi dipendente che servisse gli interessi del reparto contabilità. Il manager voleva che interpretassi il ruolo di un cavallo di Troia: ho studiato tutti i loro sviluppi, per poi migrare i dati sul nuovo sistema. Quindi i vecchi dipendenti potranno essere licenziati e io potrò essere trasferito a un nuovo sistema. Per prima cosa ho approfondito i loro processi e ho esaminato il codice VBA. A poco a poco ho imparato a leggere il codice VBA. Un anno dopo sapevo già come scrivere il codice stesso. Compito tipico: dato un database, estrarne i dati e inserirli in Excel in un determinato formato. Ora, come ha detto Zadornov, fate un respiro profondo: tutti i report del dipartimento (e sono 50 report giornalieri e 20 mensili!) sono stati gestiti manualmente! Karl, capisci che le persone cambiano le date in +1 ogni giorno con le mani in 50 rapporti! Si siedono, aspettano il risultato di un rapporto per 1-10 minuti e ne lanciano un altro! Inoltre, i rapporti giornalieri devono essere lanciati a una certa ora e Dio non voglia che tu sia in ritardo! Non solo creano report, ma eseguono manualmente procedure nel database senza utilizzare variabili! Cioè, invece di utilizzare la variabile @startDate = '2015-01-01', cambieranno manualmente la stessa data in 20 posti! Dopo aver visto tutto questo, ho iniziato a imparare Python, e insieme a VBA, SQL e Task Scheduler, ho automatizzato tutto questo in due anni. Molti report non solo sono automatizzati, ma anche accelerati: se abbandoni MS Access + VBA a favore di MS SQL + TSQL, puoi ottenere un aumento multiplo della produttività. Il mio record sta accelerando la creazione del report in100una volta! Ma i miei colleghi erano estremamente scontenti di tale automazione, quindi sono stato dichiarato nemico del popolo (volevano stare tranquilli fino alla pensione). Il tempo è passato e la migrazione dei dati ha avuto successo. Il manager mi apprezzava moltissimo: se all'inizio della mia carriera venivo a lavorare alle 8 del mattino, dopo un po' potevo venire a qualsiasi ora fino alle 12:00, aumento costante di stipendio e posizione, pagamento per il lavoro nei fine settimana altro del doppio dell'importo, taxi fino a casa se eri in ritardo al lavoro, comunicazioni mobili, in breve: l'élite! <h3>Capitolo 5. La gabbia d'oro</h3>All'improvviso, dopo 3,5 anni, arriva il nuovo management IT e dice che il sistema su cui ho migrato i dati non è più necessario. Ma il vecchio sistema rimarrà. Il mio manager sta facendo carriera e mi invita a trasferirmi in un dipartimento più progressista. In un incontro con il capo del dipartimento progressista, capisco che lo stack tecnologico di questo dipartimento mi è sconosciuto: Oracle, .net, C#, Linux, ecc. + Antipatia verso il potenziale capo. Dico al mio manager che non sono interessato al dipartimento progressista e lui opportunamente si dimentica di me. E allora la domanda diventa: cosa fare dopo? Il reddito era già decente, Junior dev non mi avrebbe assunto per quello stipendio. Dopo aver riflettuto sulle mie capacità, ho capito che dovevo dedicarmi al machine learning. Tutto è stato interessante fino al primo incontro con la statistica matematica, che ha causato solo disgusto all'istituto. Questo è tutto, stupore per sei mesi! Il tempo passava e un giorno, mentre camminavo, ho pensato a un sito web che mostrasse i buoni ristoranti su una mappa di Mosca. Ho iniziato a imparare HTML, CSS, JS. Ho trascorso 3 mesi a studiare; non avevo le conoscenze per creare un sito web completo, ma potevo esercitarmi sul lavoro. È nata un'idea: creare un portale per i commercialisti in modo che possano scaricare autonomamente qualsiasi report utilizzando un pulsante. Ci sono voluti 2 mesi per creare il portale e l'applicazione web SPA (Single page application) è nata in React js con un backend Node.js. Back ha eseguito script SQL (non conoscevo framework come Hibernate), ha avviato Python e ha archiviato informazioni aggiuntive in MongoDb (ad esempio, sugli utenti del sito). Esternamente, il sito sembrava molto dignitoso (bootstrap 4, animazione alla moda). Sono ancora orgoglioso di questo progetto. Ma quando ho mostrato il mio codice agli sviluppatori web della banca, sono rimasti sbalorditi. NON UNA CLASSE TUA! Solo funzionalità, solo hardcore! Mi hanno elogiato, ma hanno detto che devo ancora studiare molto per diventare uno sviluppatore full-stack Middle. Ho provato a trovare un lavoro come analista, ma non c'erano offerte speciali. Penso: non c'ero, pubblicherò il mio curriculum di sviluppatore full-stack. Le chiamate arrivavano, ma durante le interviste volavo come un compensato su Parigi: per esempio, non sapevo cosa fossero HashMap, HashSet e perché servissero. Non c'era la minima idea di OOP, modelli di programmazione, algoritmi, test, Git. Ricordavo sentimenti di vergogna da tempo dimenticati dovuti all'ignoranza delle cose fondamentali. All'improvviso arriva un'offerta per un lavoro come responsabile dell'analisi dei clienti presso una società finanziaria. Una settimana prima che il Paese chiudesse a causa della pandemia. Ho trovato lavoro in una società finanziaria, ma c'era una doppia sensazione: da un lato l'alto stipendio era caldo, dall'altro lo sviluppo tecnico sarebbe stato minimo. È trascorsa una settimana dall'installazione del dispositivo e dall'introduzione del lavoro remoto. Poiché nel settore finanziario i giorni non lavorativi non si applicano, abbiamo lavorato come al solito. Il nuovo capo si è rivelato una persona davvero pazza: si è offerto di raschiare Facebook, creare le proprie reti neurali per studiare i clienti (senza un data scientist nello staff). Ai nuovi dipendenti veniva offerto di imparare Python in una settimana, ecc. I giorni liberi non retribuiti diventavano la norma. È stato stupido smettere: dove troverai lavoro durante una pandemia? Ma la pazienza è finita dopo 2 mesi, quando è stato annunciato che non ci sarebbero stati bonus trimestrali. La sfumatura è che quando abbiamo concordato lo stipendio, al momento dell'assunzione, le risorse umane hanno detto che lo stipendio è diviso in stipendio (60%) e bonus trimestrale (40%), che viene sempre pagato. È diventato chiaro che era stata fatta la scelta sbagliata e che dovevamo iniziare a cercare un nuovo lavoro. <h3>Capitolo 6. Iniziare a padroneggiare Java</h3>Un bel giorno di maggio ricevo un invito a un colloquio per il posto vacante “Sviluppatore”. Un'azienda nel settore assicurativo ha bisogno di una persona che svilupperà prodotti assicurativi. È necessaria esperienza di programmazione, ma poiché si tratta di uno sviluppo “unico” dell'azienda, non è necessario un linguaggio specifico. Sono necessari anche Git e così via. Ho fissato un colloquio tra due giorni e ho studiato le basi di Git nel tempo libero. Durante l'intervista mi è stato chiesto di Python, JS, Git, SQL. Ho risposto a tutto tranne al concetto di "sovraccarico del metodo" e sono stato invitato a lavorare in 2 settimane. Si è scoperto che l'azienda aveva acquistato il sistema molto tempo fa. scritto in Java (fronte e retro), con il quale è possibile creare processi aziendali senza conoscere un linguaggio di programmazione (più precisamente, utilizzando il linguaggio di programmazione Jelly integrato). Sembra bello, ma in realtà tutto era distorto. Digressione lirica: ogni tecnologia ha la sua epoca e la sua scala. Fare tutti i report nel 2000 solo in Excel è interessante. Fare la stessa cosa nel 2021 non va molto bene. Un sito web aziendale in puro HTML andava bene nel 1999, ma non nel 2021. Quindi, la tecnologia utilizzata dall'azienda al momento della sua creazione (2005) era molto interessante: Java era responsabile sia della parte server che della parte client (le cosiddette pagine servlet Java). Inoltre, se crei un nuovo processo aziendale (che dispone di una propria interfaccia utente), verrà archiviato nel database e non nel codice in un file. Per capire quanto sia scomodo, immagina di scrivere il codice Java in Intellij idea, salvarlo nel database e poi. quando vuoi eseguire il tuo codice, il kernel del programma va al database e legge il tuo codice da lì. Di conseguenza, non è possibile eseguire il debug completo dell'applicazione. Suggerimento n. 1: quando vuoi inviare il codice al testbench, devi creare minimo invece lo sviluppo sul lato tecnico. È trascorsa una settimana dall'installazione del dispositivo e dall'introduzione del lavoro remoto. Poiché nel settore finanziario i giorni non lavorativi non si applicano, abbiamo lavorato come al solito. Il nuovo capo si è rivelato una persona davvero pazza: si è offerto di raschiare Facebook, creare le proprie reti neurali per studiare i clienti (senza un data scientist nello staff). Ai nuovi dipendenti veniva offerto di imparare Python in una settimana, ecc. I giorni liberi non retribuiti diventavano la norma. È stato stupido smettere: dove troverai lavoro durante una pandemia? Ma la pazienza è finita dopo 2 mesi, quando è stato annunciato che non ci sarebbero stati bonus trimestrali. La sfumatura è che quando abbiamo concordato lo stipendio, al momento dell'assunzione, le risorse umane hanno detto che lo stipendio è diviso in stipendio (60%) e bonus trimestrale (40%), che viene sempre pagato. È diventato chiaro che era stata fatta la scelta sbagliata e che dovevamo iniziare a cercare un nuovo lavoro. <h3>Capitolo 6. Iniziare a padroneggiare Java</h3>Un bel giorno di maggio ricevo un invito a un colloquio per il posto vacante “Sviluppatore”. Un'azienda nel settore assicurativo ha bisogno di una persona che svilupperà prodotti assicurativi. È necessaria esperienza di programmazione, ma poiché si tratta di uno sviluppo “unico” dell'azienda, non è necessario un linguaggio specifico. Sono necessari anche Git e così via. Ho fissato un colloquio tra due giorni e ho studiato le basi di Git nel tempo libero. Durante l'intervista mi è stato chiesto di Python, JS, Git, SQL. Ho risposto a tutto tranne al concetto di "sovraccarico del metodo" e sono stato invitato a lavorare in 2 settimane. Si è scoperto che l'azienda aveva acquistato il sistema molto tempo fa. scritto in Java (fronte e retro), con il quale è possibile creare processi aziendali senza conoscere un linguaggio di programmazione (più precisamente, utilizzando il linguaggio di programmazione Jelly integrato). Sembra bello, ma in realtà tutto era distorto. Digressione lirica: ogni tecnologia ha la sua epoca e la sua scala. Fare tutti i report nel 2000 solo in Excel è interessante. Fare la stessa cosa nel 2021 non va molto bene. Un sito web aziendale in puro HTML andava bene nel 1999, ma non nel 2021. Quindi, la tecnologia utilizzata dall'azienda al momento della sua creazione (2005) era molto interessante: Java era responsabile sia della parte server che della parte client (le cosiddette pagine servlet Java). Inoltre, se crei un nuovo processo aziendale (che dispone di una propria interfaccia utente), verrà archiviato nel database e non nel codice in un file. Per capire quanto sia scomodo, immagina di scrivere il codice Java in Intellij idea, salvarlo nel database e poi. quando vuoi eseguire il tuo codice, il kernel del programma va al database e legge il tuo codice da lì. Di conseguenza, non è possibile eseguire il debug completo dell'applicazione. Suggerimento n. 1: quando vuoi inviare il codice al testbench, devi creare minimo invece lo sviluppo sul lato tecnico. È trascorsa una settimana dall’installazione del dispositivo e dall’introduzione del lavoro remoto. Poiché nel settore finanziario i giorni non lavorativi non si applicano, abbiamo lavorato come al solito. Il nuovo capo si è rivelato una persona davvero pazza: si è offerto di raschiare Facebook, creare le proprie reti neurali per studiare i clienti (senza un data scientist nello staff). Ai nuovi dipendenti veniva offerto di imparare Python in una settimana, ecc. I giorni liberi non retribuiti diventavano la norma. È stato stupido smettere: dove troverai lavoro durante una pandemia? Ma la pazienza è finita dopo 2 mesi, quando è stato annunciato che non ci sarebbero stati bonus trimestrali. La sfumatura è che quando abbiamo concordato lo stipendio, al momento dell'assunzione, le risorse umane hanno detto che lo stipendio è diviso in stipendio (60%) e bonus trimestrale (40%), che viene sempre pagato. È diventato chiaro che era stata fatta la scelta sbagliata e che dovevamo iniziare a cercare un nuovo lavoro. <h3>Capitolo 6. Iniziare a padroneggiare Java</h3>Un bel giorno di maggio ricevo un invito a un colloquio per il posto vacante “Sviluppatore”. Un'azienda nel settore assicurativo ha bisogno di una persona che svilupperà prodotti assicurativi. È necessaria esperienza di programmazione, ma poiché si tratta di uno sviluppo “unico” dell'azienda, non è necessario un linguaggio specifico. Sono necessari anche Git e così via. Ho fissato un colloquio tra due giorni e ho studiato le basi di Git nel tempo libero. Durante l'intervista mi è stato chiesto di Python, JS, Git, SQL. Ho risposto a tutto tranne al concetto di "sovraccarico del metodo" e sono stato invitato a lavorare in 2 settimane. Si è scoperto che l'azienda aveva acquistato il sistema molto tempo fa. scritto in Java (fronte e retro), con il quale è possibile creare processi aziendali senza conoscere un linguaggio di programmazione (più precisamente, utilizzando il linguaggio di programmazione Jelly integrato). Sembra bello, ma in realtà tutto era distorto. Digressione lirica: ogni tecnologia ha la sua epoca e la sua scala. Fare tutti i report nel 2000 solo in Excel è interessante. Fare la stessa cosa nel 2021 non va molto bene. Un sito web aziendale in puro HTML andava bene nel 1999, ma non nel 2021. Quindi, la tecnologia utilizzata dall'azienda al momento della sua creazione (2005) era molto interessante: Java era responsabile sia della parte server che della parte client (le cosiddette pagine servlet Java). Inoltre, se crei un nuovo processo aziendale (che dispone di una propria interfaccia utente), verrà archiviato nel database e non nel codice in un file. Per capire quanto sia scomodo, immagina di scrivere il codice Java in Intellij idea, salvarlo nel database e poi. quando vuoi eseguire il tuo codice, il kernel del programma va al database e legge il tuo codice da lì. Di conseguenza, non è possibile eseguire il debug completo dell'applicazione. Suggerimento n. 1: quando vuoi inviare il codice al testbench, devi creare crea le tue reti neurali per studiare i clienti (senza un data scientist nello staff). Ai nuovi dipendenti veniva offerto di imparare Python in una settimana, ecc. I giorni liberi non retribuiti diventavano la norma. È stato stupido smettere: dove troverai lavoro durante una pandemia? Ma la pazienza è finita dopo 2 mesi, quando è stato annunciato che non ci sarebbero stati bonus trimestrali. La sfumatura è che quando abbiamo concordato lo stipendio, al momento dell'assunzione, le risorse umane hanno detto che lo stipendio è diviso in stipendio (60%) e bonus trimestrale (40%), che viene sempre pagato. È diventato chiaro che era stata fatta la scelta sbagliata e che dovevamo iniziare a cercare un nuovo lavoro. <h3>Capitolo 6. Iniziare a padroneggiare Java</h3>Un bel giorno di maggio ricevo un invito a un colloquio per il posto vacante “Sviluppatore”. Un'azienda nel settore assicurativo ha bisogno di una persona che svilupperà prodotti assicurativi. È necessaria esperienza di programmazione, ma poiché si tratta di uno sviluppo “unico” dell'azienda, non è necessario un linguaggio specifico. Sono necessari anche Git e così via. Ho fissato un colloquio tra due giorni e ho studiato le basi di Git nel tempo libero. Durante l'intervista mi è stato chiesto di Python, JS, Git, SQL. Ho risposto a tutto tranne al concetto di "sovraccarico del metodo" e sono stato invitato a lavorare in 2 settimane. Si è scoperto che l'azienda aveva acquistato il sistema molto tempo fa. scritto in Java (fronte e retro), con il quale è possibile creare processi aziendali senza conoscere un linguaggio di programmazione (più precisamente, utilizzando il linguaggio di programmazione Jelly integrato). Sembra bello, ma in realtà tutto era distorto. Digressione lirica: ogni tecnologia ha la sua epoca e la sua scala. Fare tutti i report nel 2000 solo in Excel è interessante. Fare la stessa cosa nel 2021 non va molto bene. Un sito web aziendale in puro HTML andava bene nel 1999, ma non nel 2021. Quindi, la tecnologia utilizzata dall'azienda al momento della sua creazione (2005) era molto interessante: Java era responsabile sia della parte server che della parte client (le cosiddette pagine servlet Java). Inoltre, se crei un nuovo processo aziendale (che dispone di una propria interfaccia utente), verrà archiviato nel database e non nel codice in un file. Per capire quanto sia scomodo, immagina di scrivere il codice Java in Intellij idea, salvarlo nel database e poi. quando vuoi eseguire il tuo codice, il kernel del programma va al database e legge il tuo codice da lì. Di conseguenza, non è possibile eseguire il debug completo dell'applicazione. Suggerimento n. 1: quando vuoi inviare il codice al testbench, devi creare crea le tue reti neurali per studiare i clienti (senza un data scientist nello staff). Ai nuovi dipendenti veniva offerto di imparare Python in una settimana, ecc. I giorni liberi non retribuiti diventavano la norma. È stato stupido smettere: dove troverai lavoro durante una pandemia? Ma la pazienza è finita dopo 2 mesi, quando è stato annunciato che non ci sarebbero stati bonus trimestrali. La sfumatura è che quando abbiamo concordato lo stipendio, al momento dell'assunzione, le risorse umane hanno detto che lo stipendio è diviso in stipendio (60%) e bonus trimestrale (40%), che viene sempre pagato. È diventato chiaro che era stata fatta la scelta sbagliata e che dovevamo iniziare a cercare un nuovo lavoro. <h3>Capitolo 6. Iniziare a padroneggiare Java</h3>Un bel giorno di maggio ricevo un invito a un colloquio per il posto vacante “Sviluppatore”. Un'azienda nel settore assicurativo ha bisogno di una persona che svilupperà prodotti assicurativi. È necessaria esperienza di programmazione, ma poiché si tratta di uno sviluppo “unico” dell'azienda, non è necessario un linguaggio specifico. Sono necessari anche Git e così via. Ho fissato un colloquio tra due giorni e ho studiato le basi di Git nel tempo libero. Durante l'intervista mi è stato chiesto di Python, JS, Git, SQL. Ho risposto a tutto tranne al concetto di "sovraccarico del metodo" e sono stato invitato a lavorare in 2 settimane. Si è scoperto che l'azienda aveva acquistato il sistema molto tempo fa. scritto in Java (fronte e retro), con il quale è possibile creare processi aziendali senza conoscere un linguaggio di programmazione (più precisamente, utilizzando il linguaggio di programmazione Jelly integrato). Sembra bello, ma in realtà tutto era distorto. Digressione lirica: ogni tecnologia ha la sua epoca e la sua scala. Fare tutti i report nel 2000 solo in Excel è interessante. Fare la stessa cosa nel 2021 non va molto bene. Un sito web aziendale in puro HTML andava bene nel 1999, ma non nel 2021. Quindi, la tecnologia utilizzata dall'azienda al momento della sua creazione (2005) era molto interessante: Java era responsabile sia della parte server che della parte client (le cosiddette pagine servlet Java). Inoltre, se crei un nuovo processo aziendale (che dispone di una propria interfaccia utente), verrà archiviato nel database e non nel codice in un file. Per capire quanto sia scomodo, immagina di scrivere il codice Java in Intellij idea, salvarlo nel database e poi. quando vuoi eseguire il tuo codice, il kernel del programma va al database e legge il tuo codice da lì. Di conseguenza, non è possibile eseguire il debug completo dell'applicazione. Suggerimento n. 1: quando vuoi inviare il codice al testbench, devi creare <h3>Capitolo 6. Iniziare a padroneggiare Java</h3>Un bel giorno di maggio ricevo un invito a un colloquio per il posto vacante “Sviluppatore”. Un'azienda nel settore assicurativo ha bisogno di una persona che svilupperà prodotti assicurativi. È necessaria esperienza di programmazione, ma poiché si tratta di uno sviluppo “unico” dell'azienda, non è necessario un linguaggio specifico. Sono necessari anche Git e così via. Ho fissato un colloquio tra due giorni e ho studiato le basi di Git nel tempo libero. Durante l'intervista mi è stato chiesto di Python, JS, Git, SQL. Ho risposto a tutto tranne al concetto di "sovraccarico del metodo" e sono stato invitato a lavorare in 2 settimane. Si è scoperto che l'azienda aveva acquistato il sistema molto tempo fa. scritto in Java (fronte e retro), con il quale è possibile creare processi aziendali senza conoscere un linguaggio di programmazione (più precisamente, utilizzando il linguaggio di programmazione Jelly integrato). Sembra bello, ma in realtà tutto era distorto. Digressione lirica: ogni tecnologia ha la sua epoca e la sua scala. Fare tutti i report nel 2000 solo in Excel è interessante. Fare la stessa cosa nel 2021 non va molto bene. Un sito web aziendale in puro HTML andava bene nel 1999, ma non nel 2021. Quindi, la tecnologia utilizzata dall'azienda al momento della sua creazione (2005) era molto interessante: Java era responsabile sia della parte server che della parte client (le cosiddette pagine servlet Java). Inoltre, se crei un nuovo processo aziendale (che dispone di una propria interfaccia utente), verrà archiviato nel database e non nel codice in un file. Per capire quanto sia scomodo, immagina di scrivere il codice Java in Intellij idea, salvarlo nel database e poi. quando vuoi eseguire il tuo codice, il kernel del programma va al database e legge il tuo codice da lì. Di conseguenza, non è possibile eseguire il debug completo dell'applicazione. Suggerimento n. 1: quando vuoi inviare il codice al testbench, devi creare <h3>Capitolo 6. Iniziare a padroneggiare Java</h3>Un bel giorno di maggio ricevo un invito a un colloquio per il posto vacante “Sviluppatore”. Un'azienda nel settore assicurativo ha bisogno di una persona che svilupperà prodotti assicurativi. È necessaria esperienza di programmazione, ma poiché si tratta di uno sviluppo “unico” dell'azienda, non è necessario un linguaggio specifico. Sono necessari anche Git e così via. Ho fissato un colloquio tra due giorni e ho studiato le basi di Git nel tempo libero. Durante l'intervista mi è stato chiesto di Python, JS, Git, SQL. Ho risposto a tutto tranne al concetto di "sovraccarico del metodo" e sono stato invitato a lavorare in 2 settimane. Si è scoperto che l'azienda aveva acquistato il sistema molto tempo fa. scritto in Java (fronte e retro), con il quale è possibile creare processi aziendali senza conoscere un linguaggio di programmazione (più precisamente, utilizzando il linguaggio di programmazione Jelly integrato). Sembra bello, ma in realtà tutto era distorto. Digressione lirica: ogni tecnologia ha la sua epoca e la sua scala. Fare tutti i report nel 2000 solo in Excel è interessante. Fare la stessa cosa nel 2021 non va molto bene. Un sito web aziendale in puro HTML andava bene nel 1999, ma non nel 2021. Quindi, la tecnologia utilizzata dall'azienda al momento della sua creazione (2005) era molto interessante: Java era responsabile sia della parte server che della parte client (le cosiddette pagine servlet Java). Inoltre, se crei un nuovo processo aziendale (che dispone di una propria interfaccia utente), verrà archiviato nel database e non nel codice in un file. Per capire quanto sia scomodo, immagina di scrivere il codice Java in Intellij idea, salvarlo nel database e poi. quando vuoi eseguire il tuo codice, il kernel del programma va al database e legge il tuo codice da lì. Di conseguenza, non è possibile eseguire il debug completo dell'applicazione. Suggerimento n. 1: quando vuoi inviare il codice al testbench, devi creare Un sito web aziendale in puro HTML andava bene nel 1999, ma non nel 2021. Quindi, la tecnologia utilizzata dall'azienda al momento della sua creazione (2005) era molto interessante: Java era responsabile sia della parte server che della parte client (le cosiddette pagine servlet Java). Inoltre, se crei un nuovo processo aziendale (che dispone di una propria interfaccia utente), verrà archiviato nel database e non nel codice in un file. Per capire quanto sia scomodo, immagina di scrivere il codice Java in Intellij idea, salvarlo nel database e poi. quando vuoi eseguire il tuo codice, il kernel del programma va al database e legge il tuo codice da lì. Di conseguenza, non è possibile eseguire il debug completo dell'applicazione. Suggerimento n. 1: quando vuoi inviare il codice al testbench, devi creare Un sito web aziendale in puro HTML andava bene nel 1999, ma non nel 2021. Quindi, la tecnologia utilizzata dall'azienda al momento della sua creazione (2005) era molto interessante: Java era responsabile sia della parte server che della parte client (le cosiddette pagine servlet Java). Inoltre, se crei un nuovo processo aziendale (che dispone di una propria interfaccia utente), verrà archiviato nel database e non nel codice in un file. Per capire quanto sia scomodo, immagina di scrivere il codice Java in Intellij idea, salvarlo nel database e poi. quando vuoi eseguire il tuo codice, il kernel del programma va al database e legge il tuo codice da lì. Di conseguenza, non è possibile eseguire il debug completo dell'applicazione. Suggerimento n. 1: quando vuoi inviare il codice al testbench, devi creareSQL скрипт, che conterrà il tuo codice. Spiacevole ma tollerabile? Zest #2: Il database è composto da più di 200 tabelle che hanno connessioni tra loro. Ciò significa che devi sapere in quali tabelle inserire il codice e quali entità devono essere create in altre tabelle. L'output è uno script SQL con una lunghezza di circa 1000 righe. Questo è davvero disgustoso. Attenzione all'eredità. Insomma, rendendomi conto che era tutto in Java, sono andato su JavaRush (finalmente siamo arrivati ​​al tema del sito!). Giugno-luglio 2020. I primi 10 livelli sono stati chiusi rapidamente (forse un mese), perché fondamentalmente non c'era nulla di nuovo. Poi la velocità rallentò. Luglio-ottobre 2020. Livelli 10-20 chiusi. Ottobre-marzo 2021. Livelli 20-30 chiusi. Ora inizia il divertimento: nel marzo 2021 ho iniziato a guardare i posti vacanti in Java e mi sono reso conto che lì c'erano molte parole sconosciute. Una sorta di Spring, SpringBoot, Hibernate, JUnit. Dopo aver acquistato videocorsi su un noto sito, ho appena toccato la Primavera e ho pensato che ora so e posso fare tutto. Successivamente mi sono imbattuto nel corso TopJava di Grigory Kislin. Sul suo sito web puoi provare a completare un'attività di prova e, se ci riesci, puoi seguire il corso. In questo corso creerai un'applicazione web a tutti gli effetti e la pubblicherai persino su Internet. Per questi soldi ti daranno una revisione (revisione del codice da parte di un programmatore più esperto), ti daranno feedback e consigli in caso di problemi. Sono arrivato ai compiti 3 e ho smesso. Il motivo è semplice: ti chiedono molto, ma non ti danno alcuna conoscenza. I requisiti dei compiti sono molto confusi. Le informazioni sono presentate in modo estremamente incoerente. Secondo la mia opinione soggettiva, questo corso è necessario a sviluppatori abbastanza esperti che provengono da altri linguaggi simili. Perché nel suo corso non c'è praticamente alcuna spiegazione delle tecnologie che chiede di utilizzare. Devi anche conoscere bene Git (tutto viene inviato al tuo repository personale). A fine aprile 2021 pubblico un curriculum per uno sviluppatore Java (con lo stipendio desiderato a livello medio+), in cui indico che nel mio ultimo lavoro ho programmato in Java (ho mentito). Lo stesso giorno la banca riceve una domanda per un posto di sviluppatore Java. <h3>Capitolo 7. Interviste Java e affinamento delle competenze</h3>Allora, qual era il piano? Ho bisogno di un buon stipendio perché sono già abituato a vivere con un reddito considerevole + prestiti. Pertanto, le posizioni junior non sono adatte a me. Devi ottenere una posizione intermedia. Ma chi mi assumerà senza esperienza? La decisione è arrivata in modo naturale: la mia situazione lavorativa dice che ho lavorato per un anno come sviluppatore e per altri 4 anni come esperto nel reparto IT nella mia precedente posizione. Quindi, dirò che sviluppo in Java da un anno. E se chiedono informazioni su nuovi prodotti, dirò che il vecchio Java (7) era lì e non supportava nulla. Prima del mio primo colloquio (a distanza), ero nervoso. Non ho esperienza, pochissima conoscenza e chiedo molti soldi. Penso: non importa, anche l’esperienza negativa è esperienza. Mi contatto tramite Skype e verrò intervistato da due capi dipartimento. Il che mi ha spaventato ancora di più. Sono iniziate le domande: OOP, dispositivo HashMap, flussi, strutture dati, cos'è Spring, Hibernate, AOP. E se prima della primavera era più o meno tollerabile, in primavera è completamente crollato. La gente mi chiede: come sei cresciuto in Primavera se non lo sai davvero? Io: l'ho copiato, incollato, funziona e grazie per questo. Questa risposta li divertì. Poi mi hanno chiesto di SQL, in cui ero come un'anatra nell'acqua. Poi c'è stato Git e una domanda su rebase, cherry-pick (che anch'io non conoscevo) e ho finito su JS, poiché era elencato nel mio curriculum. Anche lì c'è stato un completo fallimento, perché hanno chiesto di OOP JS. Sulla base dei risultati del colloquio, è diventato chiaro che le mie conoscenze non erano comme il faut e quindi non mi sarei qualificato per questo posto vacante. In serata le risorse umane scrivono che la mia candidatura è stata approvata e sono pronte a chiamarmi. In realtà mi sono strozzato con un hamburger da McDonald's. Ero felice, ma dopo 3 giorni le risorse umane hanno riferito di aver scelto un altro candidato. Per la prima volta nella mia esperienza, un'offerta è stata ritirata. Dopo il primo colloquio in Java, ho fatto il salto di qualità: ho seguito un corso (e l'ho completato completamente!) in Git di Colt Steele su un noto sito di vendita di videocorsi. Questo ha cambiato la mia percezione di Git. Successivamente, ho seguito un corso (brillante) di Zaur Tregulov su Spring+Hibernate. Schema di allenamento: lo guardo come nel video, faccio lo stesso sul mio computer, ma chiamo le variabili e le classi in modo diverso per non copiare stupidamente il codice di qualcun altro. Carico tutto il mio lavoro sul mio Github (praticando così Git). Era metà maggio e cominciarono le chiamate delle hr. Abbiamo iniziato a programmare le interviste una per una. Molti inviti hanno dovuto essere annullati per i seguenti motivi: le risorse umane non hanno letto la descrizione del mio curriculum e mi hanno invitato a una posizione senior. Vale anche la pena menzionare una casta HR separata: coloro che confondono Java con JavaScript. Ecco perché ho scritto Middle Java Developer nel titolo del mio curriculum. <h3>Capitolo 8. Elenco delle domande tipiche e come si svolgono le interviste</h3>Ho iniziato ad andare alle interviste e gradualmente ho formato una serie di domande di base nel mezzo. Richiesto: 0. OOP - definizione, parlare di ciascun principio dell'OOP (+ fornire un esempio tratto dalla vita reale). 1. Equals e hashcode: qual è il contratto (relazione) tra loro? 2. HashMap: come capire in quale bucket andrà un oggetto, cos'è una collisione, in quale struttura dati i dati sono archiviati all'interno di HashMap, la dimensione standard, come aumenta il numero di bucket. 3. Stream: quali tipi di operazioni, qual è la differenza tra loro, fornire un esempio di ciascun tipo di operazione. 4. Pool di stringhe e pool di numeri interi: che cos'è? 5. Heap, stack: cos'è, qual è la differenza? 6. Differenze tra Runnable, Thread, Future. 7. Volatile, atomicità. 8. Solido, Bacio, Asciutto: definizioni, esempi tratti dalla vita reale. 9. Modificatori di accesso in Java. 10. Qual è la differenza tra una classe astratta e un'interfaccia. L'interfaccia può essere privata? 11. Interfacce funzionali. 12. Elencare tutti i metodi Object e spiegare perché sono necessari. Caratteristiche del metodo clone. 13. Cos'è la serializzazione e la deserializzazione. 14. Prova a catturare con le risorse: descrivi di cosa si tratta, raccontalo utilizzando l'interfaccia Closeable. 15. Differenze tra Finale, infine, finalizzare? 16. Sovraccarico, L'override del metodo fa la differenza. 17. Perché String è stato reso immutabile, parlaci di StringBuilder e StringBuffer. 18. Cos'è la complessità temporale O(1), la complessità della memoria. 19. Strutture dati: parlare di mappa, set, coda, deque, lista e la loro implementazione in Java (treeMap, hashSet, hashMap, arrayList, linkedList, prioritàQueue, blockingQueue), descrivere la complessità (peggiore, media, migliore) dell'inserimento, cercare, rimuovendo un elemento in ciascuna struttura. 20. Tipi di dati primitivi in ​​Java. Perché è necessario ciascuno di essi? 21. Tipologie di errori. Eccezioni controllate e non controllate. 22. Cos'è JVM, JRE, JDK? 23. Con quali collezionisti hai lavorato? Maven: crea il ciclo di vita. 24. Spring: Definizioni Ioc, Di, Ciclo di vita del Bean, Contesto, Annotazioni @Bean, @Configuration, @Autowired, @Advice, @Aspect, @Service, @Repository. 25. Generici: definizione di cosa sono i limiti inferiore e superiore? 26.Programmazione di pattern - almeno Singleton (disponibilità a spiegare perché questo a volte è un anti-pattern) + Builder, Adapter, Factory, Decorator, Proxt. Auspicabile: 26. Testing - tipi di test con cui sono state lavorate le librerie (JUnit). Cos'è Mock, Stab, Spy? 27. Spring Boot: perché è necessario, disponibilità a creare un'applicazione SpringBoot online. 28. Ibernazione: perché è necessaria, Entità, colonna di unione, caricamento lento o desideroso, livelli di memorizzazione nella cache (difficile). 29. Riposo primaverile: perché è necessario, come creare @post, @get endpoint. Come leggere i parametri/corpo della richiesta? Come inviare in formato json? 30. Strutture dati: alberi, loro tipologie. 31. Algoritmi - tipi di ordinamento. Oltre a Java, potrebbero chiedere: 1. (Obbligatorio!) Git: perché è necessario, operazioni di unione, rebase, cherry-pick, push, pull, commit, log, checkout, branch, reset, ripristina, aggiorna. 2.SQL - capacità di scrivere una query: unire due tabelle in una (unione interna, unione sinistra). 3. Database: 3 forme normali, indici (perché sono necessari, tipi), chiave primaria, chiave esterna Come si svolge una tipica intervista remota: le risorse umane inviano un collegamento per zoom (Skype, Google Meeting). Entro un certo tempo ti connetti e ci sono da 1 a 3 persone lì (esperto tecnico, capo, risorse umane). In casi particolarmente ostinati, fino a 8 persone. Prima racconti te stesso, poi la parte tecnica, poi una storia sul posto vacante e arrivederci (dicono quando ti contatteranno o quali saranno i prossimi passi). Durante i saluti è possibile chiedere feedback sulle conoscenze. Ho chiesto: “Puoi dirmi, durante le mie risposte, dove ti fanno male le orecchie?” Molte persone rispondono, ma sii pronto a essere rifiutato. Durante il colloquio si valuta: 1. La tua capacità di esprimere pensieri e conoscenza della lingua russa (conosco un caso in cui un candidato è stato rifiutato a causa della scarsa conoscenza della lingua russa). 2. Esperienza precedente (potrebbero chiederti meticolosamente cosa hai fatto nel tuo ultimo lavoro). 3. Una reazione adeguata quando ti viene posta pressione (c'è stata un'intervista in cui le persone hanno iniziato a parlare in modo irrispettoso: ignorando le mie risposte, cercando di instillare le loro posizioni, ecc. Ho terminato l'intervista 15 minuti dopo l'inizio e loro: è stato un colloquio stressante!) 4. Livello delle tue conoscenze. Entrerò più in dettaglio qui. Conoscere le definizioni di un argomento è solo il 10% di ciò che ci si aspetta da te. È necessario capire come funziona (almeno al livello più alto). Disponibilità a spiegare a che punto dello sviluppo si sceglierà questa o quella soluzione. Questo è molto più importante dell'accuratezza della tua definizione. Analizzerò questa tesi utilizzando due esempi. Primo esempio: durante un’intervista mi è stato chiesto di HashMap e ho dato la definizione: “questa è una struttura dati che memorizza pacchetti di chiavi e valori”. Poi l'intervistatore ha chiesto: qual è la differenza rispetto a TreeMap? Risposta: La differenza è che HashMap esegue l'hashing della chiave e, grazie all'hashing, l'accesso è veloce. L'intervistatore ha subito chiesto di raccontarci la struttura interna di HashMap, e allo stesso tempo di chiedere informazioni su hashCode ed equals. E andrà più in profondità finché non sarai soddisfatto della risposta o finché non ti fermerai. Ho imparato a rispondere correttamente su HashMap solo dopo 2 mesi di interviste e un corso sulle strutture dati su hexlet. Secondo esempio: il concetto SOLIDO. Mi chiedono di dare una definizione che ho memorizzato. Ma non appena si è trattato di esempi di vita reale, sono iniziati i problemi. Внимание!Se non lo sai, non inventarlo, ma dì questo: non conosco questo argomento, ma posso presumere che funzioni così. Molti esperti tecnici si infuriano quando una persona parla di eresia come se capisse l'argomento. 5. Il tuo livello di entusiasmo durante la discussione di lavoro. Ci si aspetta che tu sia interessato e faccia domande sul posto vacante (ma non solo inventate). 6. A volte l'umorismo (solo sull'argomento) e gli interessi comuni ti aiutano a comunicare. Sentiti libero di parlare dei tuoi hobby; forse l'intervistato ama anche Dota/calcio/fantasy. E questo è un vantaggio per te come candidato. Conosco casi in cui una comunità di interessi ha chiuso un occhio sulla scarsa preparazione tecnica dell'intervistatore (Sei un ragazzo normale, ti formiamo noi). <h3>Capitolo 9. Trovare un lavoro, battesimo del fuoco</h3>Le interviste si sono svolte da fine aprile a metà luglio. I primi colloqui furono imbarazzanti, ma gradualmente la situazione migliorò fino a raggiungere un livello accettabile. Lo studio delle domande e dei feedback comuni si è fatto sentire. Le prime 25 interviste non hanno avuto successo. Successivamente iniziarono momenti di disperazione. Emozioni: e se non mi assumessero per quello stipendio? All'improvviso le cose cominciarono ad andare male: nel giro di una settimana, tre aziende presentarono proposte. Ho scelto un'azienda di cui conoscevo le specifiche, in più c'era un buon stipendio e l'opportunità di lavorare da remoto. Durante la mia intervista mi sono state poste circa 30 domande su Java core e Spring, al 97% delle quali ho risposto correttamente. Successivamente c'è stata una comunicazione con le autorità superiori e dopo un'ora e mezza ho trovato lavoro con loro. Prima di tutto, quando arrivi a qualsiasi lavoro, inizi ad avere accesso a tutti i sistemi necessari e installi gli strumenti di cui hai bisogno. Ci è voluta una settimana e mezza e mi è stato assegnato il primo compito: modificare il testo statico in classe. Quando ho aperto il progetto mi sono sentito male: c'erano molti moduli all'interno di un progetto, molte classi, test, ecc. A questo punto mi ero perso, ma un secondo sviluppatore mi ha aiutato e mi ha messo al corrente. Il bug è stato corretto in 10 minuti, pubblicato su Git, è stata effettuata una richiesta pull (una richiesta per unire due rami in cui altri sviluppatori controllano il codice) e quindi accorpati nel ramo principale. Si è scoperto che tutto non è così difficile. Fino al primo compito a tutti gli effetti... Al momento della pianificazione delle attività per le prossime due settimane, mi hanno detto: farai l'integrazione con un altro sistema, che si trova su OpenShift. È qui che le cose sono diventate davvero spaventose: OpenShift è un intero cluster di tecnologie: Docker, Kubernetes, Linux e così via. Il sudore freddo mi scorreva lungo la schiena: beh, ho lavorato come Jawist. Subito dopo l'incontro ho chiamato lo sviluppatore, che mi ha rassicurato: gli adattatori per questo sistema erano stati scritti, ed era sufficiente importare alcune classi nel mio progetto, dopodiché avrei potuto tranquillamente utilizzare l'integrazione. È diventato di nuovo divertente, finché lo sviluppatore non ha mostrato un'integrazione tipica: ho visto più di 20 classi create per un'integrazione simile. Inoltre, sono state notate annotazioni mai viste prima @Value, @Builder, @NoArgsConstructor, @Getter @Sl4f - si è scoperto che era il progetto Lombook (leggi su Internet). Quando lo sviluppatore mi ha spiegato come farlo, ho provato a scrivere le connessioni di tutte le classi e non mi è rimasto assolutamente nulla in testa. Il momento più imbarazzante è stata la mancanza di conoscenza di Intellij Idea: come cercare un progetto a livello globale, refactoring del codice, ecc. Accettando l'incarico, ho capito perché è necessaria l'OOP: per una quantità di codice così grande è necessario dividerlo in classi; i metodi che non vengono utilizzati all'esterno della classe devono essere dichiarati privati ​​in modo da non eseguirli accidentalmente in un'altra classe, ecc. Dopo aver scritto la mia integrazione per analogia con un'altra integrazione, ho appreso dell'esistenza di CheckStyle, un plugin speciale che controlla lo stile del tuo codice e non sarai in grado di compilare il tuo progetto finché non correggi gli errori (ad esempio, spazi extra, nomi di variabili con lettere maiuscole, nomi di variabili troppo brevi). Dopo aver sconfitto CheckStyle, ho inviato il mio codice per la revisione agli sviluppatori senior e ho corretto i miei errori entro una settimana. In generale, sono stato molto fortunato ad avere un buon rapporto nel mio team con il secondo sviluppatore, che mi ha spiegato molte cose. Un mese dopo il dispositivo, la mia prima integrazione è stata lanciata sullo stand Integrazione-Funzionale (viene testato il lavoro di tutte le applicazioni insieme) e lì tutto ha funzionato! Vittoria! Il compito successivo era creare una classe che consentisse di nascondere i dati tramite chiave in json. Ad esempio: c'è json {testo:"JavaRush"} -> elaborazione -> {testo:"****Rush"}. Ci sono due complicazioni qui: potrebbe esserci l'annidamento di {text:{mytext:"JavaRush"}}, e ciò che è più spiacevole è l'annidamento all'interno dell'array: {text: [ {mytext: "JavaRush"}, {mytext: "JavaRush" "} ] } (ovviamente devi nascondere tutto text.mytext). Risolvere questo problema si è rivelato piuttosto difficile, ma ce l'ho fatta! Qui il secondo sviluppatore dice: copri questo sviluppo con dei test. C'era smarrimento negli occhi. È così che ho conosciuto la libreria JUnit in combattimento. L'essenza del test unitario: hai dati di input, li passi in un metodo e confronti i dati ricevuti con il risultato corretto (crea una variabile con il risultato corretto). Ho scritto 11 casi per la mia libreria, in cui ho controllato che l'applicazione non andasse in crash con una NullPointException e che nascondesse correttamente i dati con qualsiasi tipo di nidificazione. Dopo aver completato questo compito, mi è stata fornita una nuova integrazione, la cui particolarità era la seguente: dovevo esportare uno Spring Bean da una libreria esterna. A questo punto sono diventato un cliente abituale del sito web Stack OverFlow. Una volta ha risposto anche uno sviluppatore ufficiale di Spring. Dopo aver implementato questa integrazione, il mio periodo di prova è terminato. Il capo si è congratulato con me per aver superato il periodo di prova e ho iniziato a scrivere questo articolo. In totale, ci sono volute 8 ore per scrivere questo articolo) Grazie per l'attenzione, spero che l'articolo sia stato utile. Ho provato a scrivere le connessioni di tutte le classi e non mi è rimasto assolutamente nulla in testa. Il momento più imbarazzante è stata la mancanza di conoscenza di Intellij Idea: come cercare un progetto a livello globale, refactoring del codice, ecc. Accettando l'incarico, ho capito perché è necessaria l'OOP: per una quantità di codice così grande è necessario dividerlo in classi; i metodi che non vengono utilizzati all'esterno della classe devono essere dichiarati privati ​​in modo da non eseguirli accidentalmente in un'altra classe, ecc. Dopo aver scritto la mia integrazione per analogia con un'altra integrazione, ho appreso dell'esistenza di CheckStyle, un plugin speciale che controlla lo stile del tuo codice e non sarai in grado di compilare il tuo progetto finché non correggi gli errori (ad esempio, spazi extra, nomi di variabili con lettere maiuscole, nomi di variabili troppo brevi). Dopo aver sconfitto CheckStyle, ho inviato il mio codice per la revisione agli sviluppatori senior e ho corretto i miei errori entro una settimana. In generale, sono stato molto fortunato ad avere un buon rapporto nel mio team con il secondo sviluppatore, che mi ha spiegato molte cose. Un mese dopo il dispositivo, la mia prima integrazione è stata lanciata sullo stand Integrazione-Funzionale (viene testato il lavoro di tutte le applicazioni insieme) e lì tutto ha funzionato! Vittoria! Il compito successivo era creare una classe che consentisse di nascondere i dati tramite chiave in json. Ad esempio: c'è json {testo:"JavaRush"} -> elaborazione -> {testo:"****Rush"}. Ci sono due complicazioni qui: potrebbe esserci l'annidamento di {text:{mytext:"JavaRush"}}, e ciò che è più spiacevole è l'annidamento all'interno dell'array: {text: [ {mytext: "JavaRush"}, {mytext: "JavaRush" "} ] } (ovviamente devi nascondere tutto text.mytext). Risolvere questo problema si è rivelato piuttosto difficile, ma ce l'ho fatta! Qui il secondo sviluppatore dice: copri questo sviluppo con dei test. C'era smarrimento negli occhi. È così che ho conosciuto la libreria JUnit in combattimento. L'essenza del test unitario: hai dati di input, li passi in un metodo e confronti i dati ricevuti con il risultato corretto (crea una variabile con il risultato corretto). Ho scritto 11 casi per la mia libreria, in cui ho controllato che l'applicazione non andasse in crash con una NullPointException e che nascondesse correttamente i dati con qualsiasi tipo di nidificazione. Dopo aver completato questo compito, mi è stata fornita una nuova integrazione, la cui particolarità era la seguente: dovevo esportare uno Spring Bean da una libreria esterna. A questo punto sono diventato un cliente abituale del sito web Stack OverFlow. Una volta ha risposto anche uno sviluppatore ufficiale di Spring. Dopo aver implementato questa integrazione, il mio periodo di prova è terminato. Il capo si è congratulato con me per aver superato il periodo di prova e ho iniziato a scrivere questo articolo. In totale, ci sono volute 8 ore per scrivere questo articolo) Grazie per l'attenzione, spero che l'articolo sia stato utile. Ho provato a scrivere le connessioni di tutte le classi e non mi è rimasto in testa nulla. Il momento più imbarazzante è stata la mancanza di conoscenza di Intellij Idea: come cercare un progetto a livello globale, refactoring del codice, ecc. Accettando l'incarico, ho capito perché è necessaria l'OOP: per una quantità di codice così grande è necessario dividerlo in classi; i metodi che non vengono utilizzati all'esterno della classe devono essere dichiarati privati ​​in modo da non eseguirli accidentalmente in un'altra classe, ecc. Dopo aver scritto la mia integrazione per analogia con un'altra integrazione, ho appreso dell'esistenza di CheckStyle, un plugin speciale che controlla lo stile del tuo codice e non sarai in grado di compilare il tuo progetto finché non correggi gli errori (ad esempio, spazi extra, nomi di variabili con lettere maiuscole, nomi di variabili troppo brevi). Dopo aver sconfitto CheckStyle, ho inviato il mio codice per la revisione agli sviluppatori senior e ho corretto i miei errori entro una settimana. In generale, sono stato molto fortunato ad avere un buon rapporto nel mio team con il secondo sviluppatore, che mi ha spiegato molte cose. Un mese dopo il dispositivo, la mia prima integrazione è stata lanciata sullo stand Integrazione-Funzionale (viene testato il lavoro di tutte le applicazioni insieme) e lì tutto ha funzionato! Vittoria! Il compito successivo era creare una classe che consentisse di nascondere i dati tramite chiave in json. Ad esempio: c'è json {testo:"JavaRush"} -> elaborazione -> {testo:"****Rush"}. Ci sono due complicazioni qui: potrebbe esserci l'annidamento di {text:{mytext:"JavaRush"}}, e ciò che è più spiacevole è l'annidamento all'interno dell'array: {text: [ {mytext: "JavaRush"}, {mytext: "JavaRush" "} ] } (ovviamente devi nascondere tutto text.mytext). Risolvere questo problema si è rivelato piuttosto difficile, ma ce l'ho fatta! Qui il secondo sviluppatore dice: copri questo sviluppo con dei test. C'era smarrimento negli occhi. È così che ho conosciuto la libreria JUnit in combattimento. L'essenza del test unitario: hai dati di input, li passi in un metodo e confronti i dati ricevuti con il risultato corretto (crea una variabile con il risultato corretto). Ho scritto 11 casi per la mia libreria, in cui ho controllato che l'applicazione non andasse in crash con una NullPointException e che nascondesse correttamente i dati con qualsiasi tipo di nidificazione. Dopo aver completato questo compito, mi è stata fornita una nuova integrazione, la cui particolarità era la seguente: dovevo esportare uno Spring Bean da una libreria esterna. A questo punto sono diventato un cliente abituale del sito web Stack OverFlow. Una volta ha risposto anche uno sviluppatore ufficiale di Spring. Dopo aver implementato questa integrazione, il mio periodo di prova è terminato. Il capo si è congratulato con me per aver superato il periodo di prova e ho iniziato a scrivere questo articolo. In totale, ci sono volute 8 ore per scrivere questo articolo) Grazie per l'attenzione, spero che l'articolo sia stato utile. Per una quantità di codice così grande è necessario dividerlo in classi; i metodi che non vengono utilizzati all'esterno della classe devono essere dichiarati privati ​​in modo da non eseguirli accidentalmente in un'altra classe, ecc. Dopo aver scritto la mia integrazione per analogia con un'altra integrazione, ho appreso dell'esistenza di CheckStyle, un plugin speciale che controlla lo stile del tuo codice e non sarai in grado di compilare il tuo progetto finché non correggi gli errori (ad esempio, spazi extra, nomi di variabili con lettere maiuscole, nomi di variabili troppo brevi). Dopo aver sconfitto CheckStyle, ho inviato il mio codice per la revisione agli sviluppatori senior e ho corretto i miei errori entro una settimana. In generale, sono stato molto fortunato ad avere un buon rapporto nel mio team con il secondo sviluppatore, che mi ha spiegato molte cose. Un mese dopo il dispositivo, la mia prima integrazione è stata lanciata sullo stand Integrazione-Funzionale (viene testato il lavoro di tutte le applicazioni insieme) e lì tutto ha funzionato! Vittoria! Il compito successivo era creare una classe che consentisse di nascondere i dati tramite chiave in json. Ad esempio: c'è json {testo:"JavaRush"} -> elaborazione -> {testo:"****Rush"}. Ci sono due complicazioni qui: potrebbe esserci l'annidamento di {text:{mytext:"JavaRush"}}, e ciò che è più spiacevole è l'annidamento all'interno dell'array: {text: [ {mytext: "JavaRush"}, {mytext: "JavaRush" "} ] } (ovviamente devi nascondere tutto text.mytext). Risolvere questo problema si è rivelato piuttosto difficile, ma ce l'ho fatta! Qui il secondo sviluppatore dice: copri questo sviluppo con dei test. C'era smarrimento negli occhi. È così che ho conosciuto la libreria JUnit in combattimento. L'essenza del test unitario: hai dati di input, li passi in un metodo e confronti i dati ricevuti con il risultato corretto (crea una variabile con il risultato corretto). Ho scritto 11 casi per la mia libreria, in cui ho controllato che l'applicazione non andasse in crash con una NullPointException e che nascondesse correttamente i dati con qualsiasi tipo di nidificazione. Dopo aver completato questo compito, mi è stata fornita una nuova integrazione, la cui particolarità era la seguente: dovevo esportare uno Spring Bean da una libreria esterna. A questo punto sono diventato un cliente abituale del sito web Stack OverFlow. Una volta ha risposto anche uno sviluppatore ufficiale di Spring. Dopo aver implementato questa integrazione, il mio periodo di prova è terminato. Il capo si è congratulato con me per aver superato il periodo di prova e ho iniziato a scrivere questo articolo. In totale, ci sono volute 8 ore per scrivere questo articolo) Grazie per l'attenzione, spero che l'articolo sia stato utile. Per una quantità di codice così grande è necessario dividerlo in classi; i metodi che non vengono utilizzati all'esterno della classe devono essere dichiarati privati ​​in modo da non eseguirli accidentalmente in un'altra classe, ecc. Dopo aver scritto la mia integrazione per analogia con un'altra integrazione, ho appreso dell'esistenza di CheckStyle, un plugin speciale che controlla lo stile del tuo codice e non sarai in grado di compilare il tuo progetto finché non correggi gli errori (ad esempio, spazi extra, nomi di variabili con lettere maiuscole, nomi di variabili troppo brevi). Dopo aver sconfitto CheckStyle, ho inviato il mio codice per la revisione agli sviluppatori senior e ho corretto i miei errori entro una settimana. In generale, sono stato molto fortunato ad avere un buon rapporto nel mio team con il secondo sviluppatore, che mi ha spiegato molte cose. Un mese dopo il dispositivo, la mia prima integrazione è stata lanciata sullo stand Integrazione-Funzionale (viene testato il lavoro di tutte le applicazioni insieme) e lì tutto ha funzionato! Vittoria! Il compito successivo era creare una classe che consentisse di nascondere i dati tramite chiave in json. Ad esempio: c'è json {testo:"JavaRush"} -> elaborazione -> {testo:"****Rush"}. Ci sono due complicazioni qui: potrebbe esserci l'annidamento di {text:{mytext:"JavaRush"}}, e ciò che è più spiacevole è l'annidamento all'interno dell'array: {text: [ {mytext: "JavaRush"}, {mytext: "JavaRush" "} ] } (ovviamente devi nascondere tutto text.mytext). Risolvere questo problema si è rivelato piuttosto difficile, ma ce l'ho fatta! Qui il secondo sviluppatore dice: copri questo sviluppo con dei test. C'era smarrimento negli occhi. È così che ho conosciuto la libreria JUnit in combattimento. L'essenza del test unitario: hai dati di input, li passi in un metodo e confronti i dati ricevuti con il risultato corretto (crea una variabile con il risultato corretto). Ho scritto 11 casi per la mia libreria, in cui ho controllato che l'applicazione non andasse in crash con una NullPointException e che nascondesse correttamente i dati con qualsiasi tipo di nidificazione. Dopo aver completato questo compito, mi è stata fornita una nuova integrazione, la cui particolarità era la seguente: dovevo esportare uno Spring Bean da una libreria esterna. A questo punto sono diventato un cliente abituale del sito web Stack OverFlow. Una volta ha risposto anche uno sviluppatore ufficiale di Spring. Dopo aver implementato questa integrazione, il mio periodo di prova è terminato. Il capo si è congratulato con me per aver superato il periodo di prova e ho iniziato a scrivere questo articolo. In totale, ci sono volute 8 ore per scrivere questo articolo) Grazie per l'attenzione, spero che l'articolo sia stato utile. i nomi delle variabili sono troppo corti). Dopo aver sconfitto CheckStyle, ho inviato il mio codice per la revisione agli sviluppatori senior e ho corretto i miei errori entro una settimana. In generale, sono stato molto fortunato ad avere un buon rapporto nel mio team con il secondo sviluppatore, che mi ha spiegato molte cose. Un mese dopo il dispositivo, la mia prima integrazione è stata lanciata sullo stand Integrazione-Funzionale (viene testato il lavoro di tutte le applicazioni insieme) e lì tutto ha funzionato! Vittoria! Il compito successivo era creare una classe che consentisse di nascondere i dati tramite chiave in json. Ad esempio: c'è json {testo:"JavaRush"} -> elaborazione -> {testo:"****Rush"}. Ci sono due complicazioni qui: potrebbe esserci l'annidamento di {text:{mytext:"JavaRush"}}, e ciò che è più spiacevole è l'annidamento all'interno dell'array: {text: [ {mytext: "JavaRush"}, {mytext: "JavaRush" "} ] } (ovviamente devi nascondere tutto text.mytext). Risolvere questo problema si è rivelato piuttosto difficile, ma ce l'ho fatta! Qui il secondo sviluppatore dice: copri questo sviluppo con dei test. C'era smarrimento negli occhi. È così che ho conosciuto la libreria JUnit in combattimento. L'essenza del test unitario: hai dati di input, li passi in un metodo e confronti i dati ricevuti con il risultato corretto (crea una variabile con il risultato corretto). Ho scritto 11 casi per la mia libreria, in cui ho controllato che l'applicazione non andasse in crash con una NullPointException e che nascondesse correttamente i dati con qualsiasi tipo di nidificazione. Dopo aver completato questo compito, mi è stata fornita una nuova integrazione, la cui particolarità era la seguente: dovevo esportare uno Spring Bean da una libreria esterna. A questo punto sono diventato un cliente abituale del sito web Stack OverFlow. Una volta ha risposto anche uno sviluppatore ufficiale di Spring. Dopo aver implementato questa integrazione, il mio periodo di prova è terminato. Il capo si è congratulato con me per aver superato il periodo di prova e ho iniziato a scrivere questo articolo. In totale, ci sono volute 8 ore per scrivere questo articolo) Grazie per l'attenzione, spero che l'articolo sia stato utile. i nomi delle variabili sono troppo corti). Dopo aver sconfitto CheckStyle, ho inviato il mio codice per la revisione agli sviluppatori senior e ho corretto i miei errori entro una settimana. In generale, sono stato molto fortunato ad avere un buon rapporto nel mio team con il secondo sviluppatore, che mi ha spiegato molte cose. Un mese dopo il dispositivo, la mia prima integrazione è stata lanciata sullo stand Integrazione-Funzionale (viene testato il lavoro di tutte le applicazioni insieme) e lì tutto ha funzionato! Vittoria! Il compito successivo era creare una classe che consentisse di nascondere i dati tramite chiave in json. Ad esempio: c'è json {testo:"JavaRush"} -> elaborazione -> {testo:"****Rush"}. Ci sono due complicazioni qui: potrebbe esserci l'annidamento di {text:{mytext:"JavaRush"}}, e ciò che è più spiacevole è l'annidamento all'interno dell'array: {text: [ {mytext: "JavaRush"}, {mytext: "JavaRush" "} ] } (ovviamente devi nascondere tutto text.mytext). Risolvere questo problema si è rivelato piuttosto difficile, ma ce l'ho fatta! Qui il secondo sviluppatore dice: copri questo sviluppo con dei test. C'era smarrimento negli occhi. È così che ho conosciuto la libreria JUnit in combattimento. L'essenza del test unitario: hai dati di input, li passi in un metodo e confronti i dati ricevuti con il risultato corretto (crea una variabile con il risultato corretto). Ho scritto 11 casi per la mia libreria, in cui ho controllato che l'applicazione non andasse in crash con una NullPointException e che nascondesse correttamente i dati con qualsiasi tipo di nidificazione. Dopo aver completato questo compito, mi è stata fornita una nuova integrazione, la cui particolarità era la seguente: dovevo esportare uno Spring Bean da una libreria esterna. A questo punto sono diventato un cliente abituale del sito web Stack OverFlow. Una volta ha risposto anche uno sviluppatore ufficiale di Spring. Dopo aver implementato questa integrazione, il mio periodo di prova è terminato. Il capo si è congratulato con me per aver superato il periodo di prova e ho iniziato a scrivere questo articolo. In totale, ci sono volute 8 ore per scrivere questo articolo) Grazie per l'attenzione, spero che l'articolo sia stato utile. Risolvere questo problema si è rivelato piuttosto difficile, ma ce l'ho fatta! Qui il secondo sviluppatore dice: copri questo sviluppo con dei test. C'era smarrimento negli occhi. È così che ho conosciuto la libreria JUnit in combattimento. L'essenza del test unitario: hai dati di input, li passi in un metodo e confronti i dati ricevuti con il risultato corretto (crea una variabile con il risultato corretto). Ho scritto 11 casi per la mia libreria, in cui ho controllato che l'applicazione non andasse in crash con una NullPointException e che nascondesse correttamente i dati con qualsiasi tipo di nidificazione. Dopo aver completato questo compito, mi è stata fornita una nuova integrazione, la cui particolarità era la seguente: dovevo esportare uno Spring Bean da una libreria esterna. A questo punto sono diventato un cliente abituale del sito web Stack OverFlow. Una volta ha risposto anche uno sviluppatore ufficiale di Spring. Dopo aver implementato questa integrazione, il mio periodo di prova è terminato. Il capo si è congratulato con me per aver superato il periodo di prova e ho iniziato a scrivere questo articolo. In totale, ci sono volute 8 ore per scrivere questo articolo) Grazie per l'attenzione, spero che l'articolo sia stato utile. Risolvere questo problema si è rivelato piuttosto difficile, ma ce l'ho fatta! Qui il secondo sviluppatore dice: copri questo sviluppo con dei test. C'era smarrimento negli occhi. È così che ho conosciuto la libreria JUnit in combattimento. L'essenza del test unitario: hai dati di input, li passi in un metodo e confronti i dati ricevuti con il risultato corretto (crea una variabile con il risultato corretto). Ho scritto 11 casi per la mia libreria, in cui ho controllato che l'applicazione non andasse in crash con una NullPointException e che nascondesse correttamente i dati con qualsiasi tipo di nidificazione. Dopo aver completato questo compito, mi è stata fornita una nuova integrazione, la cui particolarità era la seguente: dovevo esportare uno Spring Bean da una libreria esterna. A questo punto sono diventato un cliente abituale del sito web Stack OverFlow. Una volta ha risposto anche uno sviluppatore ufficiale di Spring. Dopo aver implementato questa integrazione, il mio periodo di prova è terminato. Il capo si è congratulato con me per aver superato il periodo di prova e ho iniziato a scrivere questo articolo. In totale, ci sono volute 8 ore per scrivere questo articolo) Grazie per l'attenzione, spero che l'articolo sia stato utile.
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION