JavaRush /Java Blog /Random-IT /In principio c'era JavaRush
Марат Каджаев
Livello 20
Санкт-Петербург

In principio c'era JavaRush

Pubblicato nel gruppo Random-IT
Il mio primo periodo di prova è terminato 3 anni fa, ma solo adesso ho tempo per scrivere un articolo. All'università ho trascorso 1 anno in diverse facoltà: nel primo semestre ho studiato per diventare manager, nel secondo semestre mi sono trasferito ad ingegneria del software. Speravo che mi insegnassero a programmare, ma mi sbagliavo, quindi ho preso i documenti e ho deciso di imparare tutto da solo. L’unica cosa di cui sono grato all’insegnante è che mi ha consigliato di iniziare con il libro di Stephen Prat “The C Programming Language”. Davvero un bel libro con molti problemi pratici. Il libro è durato circa 2 mesi, dopodiché mi sono imbattuto in JR nei gruppi di un amico e siamo partiti. All'inizio avevo intenzione di diventare uno sviluppatore Android, ma durante il processo di apprendimento il backend mi è sembrato più interessante. A proposito, la formazione è durata 3 mesi, durante i quali ho raggiunto il livello 20, dopodiché ho deciso di provare a trovare un lavoro. Innanzitutto mi sono trasferito in un'altra città, perché... Nel mio non c'erano posti vacanti per uno sviluppatore Java junior. Ho trovato un'azienda, ho risposto, ho ricevuto un compito di prova, a cui è stata concessa una settimana per essere completata. E' stato necessario scrivere una semplice applicazione web utilizzando Hibernate, Servlet\JSP e MySQL. Di tutte queste parole, sapevo solo che MySQL è un database. All'inizio ero molto turbato, ho anche deciso di cercare posti vacanti in qualche KFC per ora, ma poi alla fine ho deciso di provare a soddisfare le specifiche tecniche: avrò sempre tempo per trovare un lavoro in KFC. Ho fatto il test ininterrottamente per tutta la settimana e ci sono riuscito. Ho inviato la soluzione, ma era “brutta”, quindi l'ho rifatta altre 4 volte. L'ultima decisione si è rivelata corretta, ma si è scoperto che gli sviluppatori erano già stati assunti e il prossimo reclutamento sarebbe avvenuto tra 3 mesi. Stosh, okay. Per i successivi 3 mesi ho imparato html, css, js, sql e php. Cosa ci fa PHP qui? Avevo bisogno di un linguaggio lato server che rispondesse alle richieste e tutto il resto: servlet e jsp mi sembravano troppo complicati in quel momento. Il risultato è stato un'applicazione web a tutti gli effetti con un'interfaccia terribile, il cui codice ho pubblicato su github per il mio portfolio. Erano passati proprio 3 mesi e mi hanno scritto dalla stessa azienda chiamandomi per un colloquio e assegnandomi un altro semplice compito di test per la conoscenza di SQL, che ho completato in poche ore. La persona con cui ho parlato del lavoro ha lasciato intendere che avrebbero chiesto informazioni su algoritmi e strutture dati: non avevo ancora imparato questo argomento, ma mancavano 15 giorni al colloquio, accidenti a noi corridori. Il libro di Robert Laforet "Data Structures and Algorithms in Java" mi ha aiutato. Non ho avuto il tempo di leggere e capire tutto in due settimane, ma ho comunque imparato molte cose nuove. E poi è arrivato il giorno del colloquio, sono arrivato all'orario stabilito, mi sono venuti incontro 2 uomini e il colloquio è iniziato. Dire che ero preoccupato è un eufemismo, mi tremava addirittura la voce. Hanno chiesto di tutto tranne che di algoritmi e strutture dati. Hanno chiesto informazioni su Spring, DI, IoC, Hibernate, come funziona la JVM, come funziona il GC: non ho risposto a nessuna di queste domande. Ho affrontato solo domande su Java Core (raccolte, eccezioni, OOP, ecc.). Già al colloquio mi resi conto di aver fallito, ma è stato comunque deludente non ricevere alcun feedback. Ma ho identificato le lacune nella conoscenza e ho iniziato a colmarle diligentemente. Ho trovato un lavoro un mese dopo il colloquio fallito. A proposito, mi sono imbattuto nel posto vacante nelle discussioni su JavaRush. Innanzitutto c'è stato un colloquio su Skype con un reclutatore (durato circa 2 ore). Hanno chiesto informazioni su Java Core, GC (ora sapevo come funziona), database, strutture dati. Quindi l'intervistatore mi ha chiesto di condividere lo schermo e scrivere una calcolatrice. Ho quasi urlato di felicità perché avevo scritto la calcolatrice letteralmente una settimana prima. Fiducioso in me stesso, ho iniziato l'attività, ma per eccitazione o per qualche altro motivo ho dimenticato parte dell'algoritmo. Lo schermo è condiviso: è spaventoso andare su Google. Per fortuna avevo un cellulare che mi ha salvato il culo. Il giorno dopo mi chiamarono per un colloquio di persona e un paio di giorni dopo ricevetti un'offerta.
In principio c'era JavaRush - 1
Il lavoro non era ufficiale, ero nel ruolo di apprendista per un imprenditore individuale. Abbiamo scritto un servizio per creare eventi, vendere biglietti e tutto il resto. Ricordo il mio primo giorno di lavoro: il singolo imprenditore ha trascorso 15 minuti a spiegare cosa doveva essere fatto. - Bene, è tutto chiaro? - chiese l'IP - Mmm, non proprio, possiamo farlo ancora una volta? – chiesi molto preoccupata. L'IP ha spiegato di nuovo tutto. - Adesso è chiaro? - Ora sì. In effetti non ho capito NULLA. Ma avevo paura di chiedere di nuovo una spiegazione: penso che tutti quelli che hanno trovato lavoro mi capiranno. L'essenza del compito era riscrivere da Thymeleaf ad AngularJS. Fortunatamente ho trovato parte del codice già pronto, ho seguito l'esempio e ho fatto lo stesso. Allora non capivo come funzionasse, ma sono riuscito a far fronte al compito. Poi sono arrivate le attività legate direttamente alla parte backend. Solo dopo l'esperienza pratica con Spring ho cominciato a capire cosa c'era scritto nel libro “Spring for Professionals”. Ho lavorato lì per 8 mesi, dopodiché mi sono trasferito in un'altra città, dove ho trovato rapidamente un lavoro ufficiale, ho lavorato per 2 anni e allo stesso tempo ho cambiato la mia qualifica lavorativa da "Junior" a "Middle". Ora mi trovo di fronte al fatto che il lavoro è diventato una routine e non porta alcun piacere. Pertanto, al momento mi sono preso una pausa e, per evitare che le mie dita si atrofizzassero durante la pausa, ho deciso di provare un altro campo: lo sviluppo del gioco. Vale a dire, sviluppo di giochi per dispositivi mobili, per cominciare, Android, perché... Conosco Giava. Te ne parlerò ora in dettaglio. Chi siamo In breve tempo si è formato un piccolo team di 4 persone (me compreso): 2 sviluppatori, 1 game designer, 1 tecnico del suono. Perché Nessuno nel team aveva esperienza nel campo dello sviluppo di giochi e il mio tempo libero era limitato, abbiamo deciso di implementare un progetto semplice che avremmo sicuramente portato a termine. L'hanno fatto! Inizialmente la scadenza era il 15 novembre ma, come sapete, finire un progetto entro la scadenza originaria è un peccato. Quindi l'abbiamo finito due settimane dopo. Secondo quelli Lo stack è: Java 8 e libGDX.

A proposito dello sviluppo

L'inizio dello sviluppo può essere considerato il 17 ottobre. In totale abbiamo trascorso 45 giorni, durante i quali:
  1. imparato a lavorare con libGDX;
  2. ha scritto il codice;
  3. ha disegnato la grafica;
  4. fatto musica;
Coloro che hanno già visto il gioco potrebbero avere una domanda: perché ci vuole così tanto tempo e il gioco è semplice? Sì, è vero e, per essere completamente precisi, lo sviluppo stesso (la scrittura del codice) ha richiesto circa una settimana e mezza. Il resto del tempo può essere suddiviso tra:
  1. padroneggiare il motore;
  2. disegnare immagini e poi ridisegnarle;
  3. scrivere musica;
  4. cercare suoni su https://freesound.org ;
  5. leggendo un sacco di articoli su come promuovere i giochi
Inoltre c'erano momenti di "inattività" per vari motivi: qualcuno aveva un esame, qualcuno lo doveva ripetere, ecc. Puoi tranquillamente trascorrere una settimana e mezza, o anche di più, in "tempi di inattività". Un'altra parte del tempo veniva dedicata ai “dibattiti”: le idee su cosa aggiungere al gioco arrivavano quasi ogni giorno, quindi c'erano dispute su “questo sarebbe superfluo”, “questo non andrebbe bene”, ecc. Pertanto, abbiamo abbandonato molte idee, ad esempio l'aggiunta di scarafaggi in corsa che puoi schiacciare e ottenere un extra. punti: All'inizio c'era JavaRush - 2In generale, una delle cose più difficili, secondo me, è decidere in anticipo cosa ci sarà nel gioco e attenersi a questo piano senza cercare di aggiungere "un'altra" funzionalità. Ecco come abbiamo accumulato questi 45 giorni. Il prototipo del gioco era pronto dopo una settimana e mezza. Durante questo periodo, non avevamo ancora la grafica, quindi abbiamo preso alcune cose dal pubblico dominio (ad esempio, abbiamo preso in prestito un foglio di carta di sfondo da Doodle Jump) e alcune le abbiamo create noi stessi con la pittura. In principio c'era JavaRush - 3Il gioco è tecnicamente molto semplice: non abbiamo nemmeno avuto bisogno di usare box2d (motore fisico), potevamo gestire le collisioni e calcolare noi stessi l'ipotenusa. Tra i punti più interessanti, metterò in evidenza quanto segue.
  1. Inizialmente, tutti gli elementi del gioco venivano generati in modo casuale. Quelli. abbiamo fornitori di buchi neri, forbici, shuriken, bastoncini, cuori: li inseriamo in un array, quindi prendiamo un fornitore casuale e otteniamo un elemento con coordinate casuali. Ben presto è diventato chiaro che questo approccio “non era molto buono”; i nostri amici che hanno preso parte ai test ci hanno detto la stessa cosa e ci hanno consigliato di utilizzare dei modelli. Sicuramente per chi è coinvolto nello sviluppo di giochi questa è una soluzione ovvia, ma... Siamo nuovi in ​​questo settore e questo è stato un ottimo consiglio per noi.

    Sono così emersi diversi modelli: valle delle forbici; aste diagonali: è abbastanza divertente assemblarle ad alta velocità (swish-swish-swish con il dito); e un altro modello, non so come chiamarlo: lo chiamerò come viene chiamata la classe nel codice: StraightForwardPattern.

    In principio c'era JavaRush - 4

    È diventato più piacevole con i modelli, ma era troppo prevedibile o qualcosa del genere. Pertanto, lo stesso casuale è diventato un altro modello. Quelli. Ora abbiamo modelli “statici” e uno casuale. (ecco un meme sull'equilibrio perfetto).

  2. Il problema principale che abbiamo riscontrato è stato questo. LibGDX chiama il metodo render(float delta) in un ciclo infinito, in cui avviene effettivamente tutto il rendering degli elementi. Disegniamo una linea a matita nel modo seguente: prendiamo le coordinate del dito e posizioniamo lì la texture. Quindi, se muovevamo il dito sullo schermo molto velocemente, si formavano dei “buchi” perché ci ritrovavamo in quei millisecondi in cui il metodo render(delta) aveva già funzionato e non era stato ancora richiamato. Il problema è stato risolto in modo abbastanza semplice: ricordiamo l'ultima coordinata in cui è stata disegnata la texture, otteniamo quella successiva e se la distanza tra loro è maggiore di X e il dito non è stato rilasciato, riempiamo questa lacuna. All'inizio pensavamo che questa opzione potesse non funzionare: le linee sarebbero state spigolose, ma i nostri timori erano vani: tutto funziona come dovrebbe.

    In realtà, riguardo al gioco

    Il gameplay non pretende di essere unico, ma è abbastanza buono e può creare dipendenza. Controlli una matita, disegni letteralmente su carta, schivando ostacoli: forbici, shuriken, buchi neri. In questo caso, il nucleo della matita finisce e devi raccogliere piccole matite. Nel caso in cui l'asta finisca e non ci siano ancora matite, puoi prendere un frammento di uno specchio. Avrà effetto per alcuni secondi - invece di sprecare l'asta, verrà ripristinata, ma allo stesso tempo il controllo verrà specchiato - ti sposti a sinistra e la matita si disegna a destra. Puoi anche raccogliere un cuore che ti permetterà di incontrare un ostacolo una volta e rimanere in vita. Più a lungo tieni premuto senza sollevare il dito dallo schermo, più alta sarà la combo, il che aumenta la velocità di guadagno dei punti. Inoltre la velocità del gioco aumenta gradualmente. A meno che tu non possa derubare i Korovani. In principio c'era JavaRush - 5Inizialmente avevamo pensato di chiamare il gioco Karan Dash (una matita, ahaha, capito, vero?), ma poi abbiamo cambiato idea e abbiamo optato per Pencil Dash. La motivazione era che questo elegante (dico) gioco di parole sarebbe stato comprensibile solo a un pubblico di lingua russa. Abbiamo rilasciato il gioco un paio di giorni fa e ora lo stiamo promuovendo. Nessuno nel team ha esperienza neanche in questo; abbiamo raccolto tutta la conoscenza sulla promozione da vari articoli. Abbiamo pubblicato gratuitamente informazioni sul gioco su vari siti Web/forum. Per quanto riguarda i canali a pagamento, abbiamo ordinato la pubblicità su 4PD, da un blogger, diversi post nelle pagine pubbliche di VK e AdMob. A proposito, anche questo post fa parte della promozione, quindi con il permesso dell'amministrazione lascio qui un link al gioco. Pagina del gioco su Google Play: clicca Lascerò anche un link al nostro gruppo VK, dove potrai lasciare recensioni/suggerimenti e non perdere nessun aggiornamento clicca Ti sarò grato se lo installi (e se ti piace?), e per una recensione con valutazione prometto di accendere una candela per la tua salute! Fate domande, se ne avete, risponderò.In principio c'era JavaRush - 6

Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION