JavaRush /Java Blog /Random-IT /Come un vecchio umanista è andato all'IT
PieIsLie
Livello 35
Санкт-Петербург

Come un vecchio umanista è andato all'IT

Pubblicato nel gruppo Random-IT
Fuochi d'artificio! In realtà, per molto tempo ho pensato a cosa avrei scritto esattamente in questo post e se lo avrei scritto affatto. È successo che in diversi periodi degli ultimi due anni ho valutato le mie possibilità di ottenere una posizione di sviluppatore Java in modi diversi: da "prima o poi - sicuramente" a "Non ho alcuna possibilità nell'IT". Come un vecchio umanista è andato all'IT - 1Tuttavia, sono passati quasi esattamente due anni da quando mi sono registrato su JavaRush. Un paio di mesi fa ho ricevuto la mia prima offerta, poco dopo la seconda e poi ho iniziato un nuovo lavoro. Le storie di successo mi hanno aiutato molto durante il corso, quindi ho deciso di pubblicare le mie. Poiché il corso si è svolto nel '18, alcune informazioni potrebbero non essere attuali. Dico subito che ci sarà molto testo, perché... Proverò a raccontarvi della formazione e della ricerca di lavoro (requisiti, risposte, specifiche tecniche, colloqui, ecc.). Scriverò anche un paio di suggerimenti generali che mi hanno aiutato personalmente e che potrebbero aiutare altri. Brevemente su di me: 32 anni, 10 anni di esperienza nella gestione e nelle vendite, formazione umanistica e assolutamente nessun background tecnico. Diversi anni fa ho provato ad entrare in C++, poi in Python: non ho avuto altro che mal di testa. Difficile quindi definirmi uno sviluppatore di talento: anzi il contrario.

FASE 1. Formazione

Sono arrivato a JavaRush consapevolmente: un listino prezzi mensile adeguato, una struttura chiara del materiale, molta pratica e la presenza della mia comunità. Il primo punto è tutto chiaro, ma imparare una lingua senza struttura è piuttosto difficile e tale formazione lascerà sicuramente una persona con gravi lacune nel Java Core. L’esperienza delle interviste e delle specifiche tecniche mostra che le domande sul “core” possono essere utilizzate per tutto: dallo spostamento bit a bit e dal casting di generici all’IO e alla serializzazione. La pratica è un must; Ancora oggi riesco a capire e ricordare solo la metà delle cose se le ho scritte io stesso. Bene, la community: hai risolto il problema: vantatene nei commenti; Se non hai deciso, puoi fare domande, ma molto probabilmente nessuno ti darà una soluzione già pronta. E sono tornato agli articoli personalizzati su argomenti gratuiti anche dopo aver terminato il corso, ci sono molte cose buone con cui iniziare (specialmente la prima esperienza con i framework utilizzando esempi passo passo + domande per le interviste). In generale, sono grato a questo progetto per la base che ho ricevuto, ma non farei affidamento solo su JavaRush: lo stesso Shildt si "sovrappone" meglio di tutti all'argomento studiato e spesso rivela alcuni punti. Molto è già stato detto nelle recensioni su attività che a volte vanno oltre la teoria e ti costringono a Google. Per me, questo è più un vantaggio che uno svantaggio - e non è un dato di fatto che ora la situazione sia la stessa di quando studiavo. Un consiglio immediato a chi, come me, entra in Java “da zero” : ad un certo punto potresti annoiarti o diventare difficile:
  1. È dura per tutti partire da zero; Dio non voglia, solo il 5% delle persone arriva alla fine del percorso. Il tuo compito è diventare uno di loro.

  2. Mi sono interessato dopo un mese o due, quando i compiti sono diventati più difficili e interessanti. Essere pazientare.

  3. La cosa principale è il progresso settimanale. Dopo due settimane di riposo è già difficile tornare e non tutti riescono a scrivere tutti i giorni per diversi mesi consecutivi. Datti un limite di ore per la settimana, ad esempio 15. Puoi programmare per 1,5 ore ogni giorno feriale e altre 3-4 ore in entrambi i fine settimana, oppure puoi prenderti un paio di sere libere, ma il "limite del fine settimana" sarà aumento. In questo modo il programma sarà flessibile, ma regolare. Naturalmente, sarà possibile misurare il lavoro in base a compiti e progetti, ma a livello di sintassi e kernel basteranno ore.
In generale, ho impiegato circa 5 mesi per completare il corso (prima di accedere allo stage) , nonostante potessi permettermi sia ferie che brevi soggiorni; ancora una volta, lavorando una settimana di cinque giorni, rimangono liberi solo i fine settimana e le sere dei giorni feriali dalle 22 alle 00. Quindi, con un programma più flessibile o un regime di allenamento più rigido, puoi farcela molto prima. Poi ho pensato di fare uno stage, ma alla fine non ha funzionato.

FASE 2. Autoeducazione

Quindi, non ho ottenuto lo stage: ho lasciato solo un paio di giorni sui requisiti tecnici fino alla fine del reclutamento nel gruppo e non ho avuto il tempo di capire i requisiti: c'erano troppe parole non familiari. Perché Non volevo aspettare altri tre mesi, ho deciso di andare avanti da solo. Fortunatamente, ci sono guide e tutorial video per tutti i framework più diffusi. Nei mesi successivi mi sono occupato di Spring MVC, Spring Boot + Data, Spring Security, Hibernate, jUnit, Maven, Git, RDBMS, ho padroneggiato SQL e ho cercato di mettere tutto insieme in un unico insieme. Sei mesi dopo, avevo progetti che fanno paura ora, ma ho acquisito esperienza pratica nell'uso di framework "per adulti" e di un GitHub che poteva essere mostrato su richiesta di un potenziale datore di lavoro. Consiglio :
  1. Prima impari a conoscere .gitignore, meglio è. ;)

  2. Molte guide includono più framework contemporaneamente; usa questo e aggiungi il tuo. Abbiamo scritto un negozio online utilizzando Maven + Spring Boot + Data: aggiungi autorizzazione, test unitari e registrazione.

  3. Per i progetti web, puoi prendere modelli frontend gratuiti da Internet: è più piacevole lavorare con loro, hanno un aspetto migliore come screenshot nel README su Git. Allo stesso tempo, sarai in grado di ricordare HTML e CSS: probabilmente vorrai correggere gli stili e il layout.

Il modo più semplice per creare un piano di sviluppo di questo tipo è consultare HH per i posti vacanti per sviluppatori Java Junior\Middle e vedere quali tecnologie e framework sono indicati più spesso. Annotateli, stabilite le specifiche tecniche per loro, fissate le scadenze per l'implementazione. Anche se, forse, se iniziassi con uno stage locale, non dovrei dedicare diversi mesi a progetti domestici.

Quello che mi mancava (poi mi sono bruciato durante un'intervista)

  1. Algoritmi. Per evitare errori, consiglio immediatamente un breve libro in russo, “Grocking Algorithms”. Qual è la complessità degli algoritmi, in cosa consiste, perché Quicksort non è sufficiente, un'introduzione alla teoria dei grafi: è tutto lì e nel linguaggio più comprensibile.

  2. Collezioni "sotto il cofano". Non ricordo se fosse in JavaRush, ma è utile sapere come funziona HashMap.get() o perché non è garantito che un HashSet preservi l'ordine degli elementi. Ancora una volta, quali raccolte sono thread-safe e perché.

  3. SQL. Sono necessari almeno fino a JOIN: cosa sono, come funzionano, la capacità di scrivere al volo un SELECT su due tabelle su carta. Consiglio www.sql-ex.ru: ti porterà al livello desiderato in un giorno o due.

  4. Spring Core: quali annotazioni sono presenti, cos'è un contesto, come vengono creati i bean, quale Bean Scope è thread-safe e come risolvere l'iniezione reciproca: tutte le domande dell'intervista. Come restituire una pagina, come restituire JSON, ecc. Attualmente sto leggendo “5 primavera per professionisti” in russo, ma in generale consigliano “Primavera in azione”.

FASE 3. Ricerca di lavoro

In realtà, nei primi due mesi dopo aver completato i progetti domestici, ho inviato circa 30 risposte a vari posti vacanti Junior/Trainee (tramite HH, LinkedIn, agenzie di reclutamento), con risultati prossimi allo zero. Mi sono concentrato solo sui posti vacanti senza esperienza, ho indicato onestamente uno stack a me familiare e ho scritto della mia elevata capacità di apprendimento nelle lettere di accompagnamento. Il risultato sono due call (una delle quali terminata subito nel mio inglese pre-intermedio), altre due aziende hanno inviato specifiche tecniche, c’è stato un solo “meeting”, e poi sono rimasto lì da solo a risolvere problemi sugli algoritmi su un pezzo di carta, dopodiché le risorse umane hanno semplicemente portato via i documenti e "ti chiameremo". Ho provato a ottenere un paio di stage (non retribuiti e condizionati): ho fatto la specifica tecnica, ma non sono andato oltre la previdenza finale; ma ora posso dire che i tirocinanti vengono sicuramente reclutati da T-Systems, CFT, Andersen ed EPAM (hanno recensioni contrastanti, decidi tu stesso). Per quanto mi riguarda, è un buon modo per entrare nel campo se hai l'opportunità di restare senza reddito per diversi mesi e non morire =) In generale, dopo questa esperienza sono diventato un po' depresso e ho messo in pausa l'intera storia con la ricerca per quasi sei mesi - ho continuato a lavorare sul profilo precedente, ho scritto alcune applicazioni solo per divertimento, ma non le ho nemmeno pubblicate su Git. Fino a quando non ho incontrato un conoscente, al quale ho raccontato casualmente dei fallimenti con i posti vacanti: a quel tempo lavorava già come sviluppatore intermedio, ma ha iniziato allo stesso modo: con lo studio autonomo. Un conoscente mi ha dato un paio di consigli , che ha utilizzato lui stesso e che mi hanno aiutato molto nella mia ricerca di lavoro in futuro. Se seguirli o meno dipende da te, perché... in un certo senso non sono del tutto onesti. Quindi, ulteriori citazioni:
  • In ogni caso, fornisci nel tuo curriculum almeno 6 mesi di esperienza commerciale: stage, progetti di laurea, freelance, lavoro a distanza - qualunque cosa. Ciò sarà di grande aiuto nella fase di screening iniziale dei curriculum da parte delle risorse umane;

  • rimuovere la parola Junior e lo stipendio previsto dal proprio curriculum; lascialo semplicemente come sviluppatore Java e discuti i soldi individualmente con ciascuna azienda;

  • prova a chiedere alle risorse umane di nominare la "forchetta" dello stipendio proposto prima di nominare le tue aspettative. Se un'azienda offre 80-120.000 e tu stai cercando 40.000 o più, alcuni selezionatori ti tratteranno con disprezzo;

  • Candidati a tutte le posizioni vacanti adatte al tuo stack, anche se richiedono 1-3 anni di esperienza commerciale.

Dopo aver seguito tutti questi consigli, la situazione della ricerca è migliorata in modo significativo. In primo luogo, su circa 12 nuove risposte, la metà si è conclusa quasi immediatamente con una riunione, con Skype o con TK (che era già molto diverso dall'essere ignorato nei mesi precedenti). In secondo luogo, gli addetti alle risorse umane hanno iniziato a scrivermi, a cui non ho risposto: nella messaggistica istantanea, per posta, su LinkedIn. In terzo luogo, i requisiti di esperienza commerciale si sono rivelati non troppo rigidi: molte aziende erano pronte a comunicare con un candidato che non rientrava nell'intervallo specificato di 1-3 anni di pratica aziendale. Di conseguenza: un'offerta per un junior, una per un middle con un periodo di prova. In totale, la ricerca è durata due mesi. Consiglio :
  1. Includi nel tuo curriculum l'intero elenco di linguaggi, tecnologie e framework con cui hai lavorato.

  2. Registrati su LinkedIn: lì ci sono davvero molte persone delle risorse umane di diverse aziende. Compila attentamente il tuo profilo: questo è infatti anche il tuo curriculum. Per sviluppare la tua rete di contatti, aggiungi i LION pertinenti al tuo profilo; accettano richieste da tutti gli utenti.

  3. Mettiti alla prova con i test Java gratuiti: spesso vengono forniti su carta prima del colloquio Junior. È meglio prepararsi in anticipo.

Qualche parola sulle interviste
  1. Chiedono sempre delle collezioni: quali sono, in cosa differiscono, quando è il momento migliore per usarle.

  2. Sempre su classi e interfacce astratte: possono avere metodi, campi, quali, possono essere ereditati, ecc.

  3. Quasi sempre sul multithreading: cosa hai usato nel tuo lavoro, parole chiave, metodi, hai familiarità con util.concurrent.

  4. Spesso quando si lavora con la memoria: l'heap, lo stack e queste stringhe saranno uguali e questi oggetti il ​​perché.

  5. A volte sugli algoritmi: quali conosci, quale complessità, perché, puoi scrivere un algoritmo adesso.

  6. A volte in base a modelli: quali conosci, quali usi, scrivi un singleton o una factory.

  7. A volte in SQL: tipi di JOIN, cos'è una transazione, come eseguirla in JDBC, scrivi una breve query.

In effetti, tutto dipende molto dall’azienda : qualcuno non fa una sola domanda su Java Core, ma passa 40 minuti a parlare di framework e SQL; Alcune persone non utilizzano affatto i framework più diffusi e chiedono solo algoritmi, tipi, raccolte e memoria. Circa la metà degli incontri sono iniziati con test, a volte in russo, a volte in inglese (20-30 domande per 20-30 minuti); Di solito domande al livello "ecco il codice, verrà eseguito o meno e, in caso contrario, su quale riga" o "ecco diversi oggetti, saranno uguali dopo N operazioni". Qualche parola sulle specifiche tecniche : il 70% delle aziende che iniziano a comunicare mi hanno inviato le specifiche tecniche prima o dopo la riunione. Di solito, il completamento avviene da un paio di giorni a una settimana, ma molto spesso le scadenze possono essere leggermente spostate. Tutto può essere utilizzato come specifiche tecniche. Ecco gli esempi che ho fatto:
  • Pagina dei contatti commerciali del profilo Salesforce con modifica e aggiunta di nuovi record;

  • simulazione di un ascensore in un edificio a più piani utilizzando la Spring State Machine con controllo da console;

  • Applicazione Android basata sulla libreria LibGDX con output di testo carattere per carattere quando viene premuto un pulsante;

  • imitazione REST del car sharing, con aggiunta di client tramite richiesta HTTP e restituzione di JSON;

  • problema di ordinare un grafo non orientato attraverso una cella libera;

  • cercare triangoli isosceli utilizzando le coordinate da un file;

  • refactoring del codice finito utilizzando l'API Stream;

  • Calcolatore dell'interfaccia utente con supporto per espressioni ternarie;

  • corsa di thread con la scrittura dei risultati in un file.

A volte viene chiesto di coprire i metodi di calcolo con test unitari e i metodi di query con test di integrazione. Consiglio :
  1. Prova non solo a completare l'attività, ma anche a garantire che il codice sia conforme ai principi OOP.

  2. Controlla l'efficienza del tuo codice: una volta sono stato rifiutato perché, tra le altre cose, ho utilizzato PrintStream invece di BufferedWriter.

  3. Pianifica il tempo di esecuzione con un margine del 50%: è meglio iniziare e finire prima che eseguire un git push alle otto del mattino della scadenza.

Bene, tutto quello che volevo, penso di averlo scritto. La cosa più importante è che l'acqua consuma le pietre. Non puoi scrivere molto, molto in Java, poi cercare un lavoro per molto, molto tempo e alla fine non trovare nulla. Se ce l’ha fatta uno specialista di discipline umanistiche di 30 anni, tu puoi farlo ancora meglio. L'importante è non aver paura delle prime chiamate, incarichi tecnici e colloqui: dopo ogni tentativo fallito, mi era garantito che avrei imparato qualcosa da solo e migliorato: più a lungo, più ti senti sicuro. Se da qualche parte si è rivelato caotico o ci sono errori, mi scuso in anticipo, scrivi, lo correggerò. Spero che la mia esperienza possa aiutare almeno qualcuno =)
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION