JavaRush /Java Blog /Random-TL /Sa simula mayroong JavaRush
Марат Каджаев
Antas
Санкт-Петербург

Sa simula mayroong JavaRush

Nai-publish sa grupo
Ang aking unang panahon ng pagsubok ay natapos 3 taon na ang nakakaraan, ngunit ngayon lang ako nagkaroon ng oras upang magsulat ng isang artikulo. Sa unibersidad ay gumugol ako ng 1 taon sa iba't ibang faculties: ang unang semestre ay nag-aral ako upang maging isang manager, sa ikalawang semestre ay lumipat ako sa software engineering. Inaasahan ko na tuturuan nila ako kung paano magprogram, ngunit nagkamali ako, kaya kinuha ko ang mga dokumento at nagpasya na alamin ang lahat sa aking sarili. Ang tanging bagay na ipinagpapasalamat ko sa guro ay pinayuhan niya akong magsimula sa aklat ni Stephen Prat na "The C Programming Language." Talagang magandang libro na may maraming praktikal na problema. Tumagal ng humigit-kumulang 2 buwan ang libro, pagkatapos ay naabutan ko si JR sa mga grupo ng isang kaibigan at umalis na kami. Noong una ay nagplano akong maging isang developer ng Android, ngunit sa panahon ng proseso ng pag-aaral ang backend ay tila mas interesante sa akin. Sa pamamagitan ng paraan, ang pagsasanay ay tumagal ng 3 buwan, kung saan naabot ko ang antas 20, pagkatapos ay nagpasya akong subukang maghanap ng trabaho. Una sa lahat, lumipat ako sa ibang lungsod, dahil... Walang mga bakante para sa isang junior Java developer sa akin. Nakahanap ako ng isang kumpanya, tumugon, nakatanggap ng isang pagsubok na gawain, na binigyan ng isang linggo upang makumpleto. Kinailangan na magsulat ng isang simpleng web application gamit ang Hibernate, Servlet\JSP at MySQL. Sa lahat ng mga salitang ito, ang alam ko lang ay database ang MySQL. Noong una ay sobrang sama ng loob ko, nagpasya pa akong maghanap ng mga bakante sa ilang KFC sa ngayon, ngunit sa wakas ay nagpasya akong subukang tuparin ang mga teknikal na detalye - palagi akong magkakaroon ng oras upang makakuha ng trabaho sa KFC. Ginawa ko ang pagsubok nang walang tigil sa buong linggo at nagtagumpay. Ipinadala ko ang solusyon, ngunit ito ay "pangit", kaya ginawa ko itong muli ng 4 na beses. Ang huling desisyon ay naging tama, ngunit lumabas na ang mga developer ay na-recruit na at ang susunod na recruitment ay sa loob ng 3 buwan. Shtosh, okay. Sa susunod na 3 buwan natutunan ko ang html, css, js, sql at php. Ano ang ginagawa ng PHP dito? Kailangan ko ng isang server-side na wika na tutugon sa mga kahilingan at lahat ng iyon - ang mga servlet at jsp ay tila masyadong kumplikado sa akin sa oras na iyon. Ang resulta ay isang ganap na web application na may kakila-kilabot na interface, ang code na kung saan ako ay nai-post sa github para sa aking portfolio. Sa oras na ito, 3 buwan na ang lumipas at sumulat sila sa akin mula sa parehong kumpanya at tinawag ako para sa isang pakikipanayam at binigyan ako ng isa pang simpleng gawain sa pagsubok para sa kaalaman sa SQL, na natapos ko sa loob ng ilang oras. Ang taong nakausap ko tungkol sa trabaho ay nagpahiwatig na magtatanong sila tungkol sa mga algorithm at istruktura ng data - hindi ko pa nakakabisado ang paksang ito, ngunit may 15 araw bago ang panayam, sumpain kaming mga racers. Nakatulong sa akin ang aklat ni Robert Laforet na "Data Structures and Algorithms in Java". Wala akong panahon na basahin at unawain ang lahat ng ito sa loob ng dalawang linggo, ngunit marami pa rin akong natutunang bagong bagay. At dumating ang araw ng interview, dumating ako sa takdang oras, 2 lalaki ang sumalubong sa akin at nagsimula ang interview. Ang sabihing nag-aalala ako ay isang maliit na pahayag; nanginginig pa nga ang boses ko. Nagtanong sila tungkol sa lahat maliban sa mga algorithm at istruktura ng data. Nagtanong sila tungkol sa Spring, DI, IoC, Hibernate, kung paano gumagana ang JVM, kung paano gumagana ang GC - Hindi ko sinagot ang alinman sa mga tanong na ito. Nakayanan ko lamang ang mga tanong tungkol sa Java Core (mga koleksyon, mga pagbubukod, OOP, atbp.). Sa panayam napagtanto ko na nabigo ako, ngunit nakakadismaya pa rin na hindi makatanggap ng anumang puna. Ngunit natukoy ko ang mga puwang sa kaalaman at sinimulan kong masigasig na isara ang mga ito. Nakahanap ako ng trabaho isang buwan pagkatapos ng nabigong interbyu. Oo nga pala, nakita ko ang bakante sa mga talakayan sa JavaRush. Una ay nagkaroon ng Skype interview sa isang recruiter (tumagal ng mga 2 oras). Nagtanong sila tungkol sa Java Core, GC (ngayon alam ko na kung paano ito gumagana), mga database, mga istruktura ng data. Pagkatapos ay hiniling sa akin ng tagapanayam na ibahagi ang screen at magsulat ng calculator. Halos mapasigaw ako sa tuwa dahil literal na sinulat ko ang calculator isang linggo bago. Tiwala sa aking sarili, sinimulan ko ang gawain, ngunit alinman sa kaguluhan, o para sa ibang dahilan ay nakalimutan ko ang bahagi ng algorithm. Nakabahagi ang screen - nakakatakot pumunta sa Google. Buti na lang may cellphone ako na nagligtas sa pwet ko. Kinabukasan tinawagan nila ako para sa isang in-person interview at makalipas ang ilang araw ay nakatanggap ako ng alok.
Sa simula mayroong JavaRush - 1
Ang trabaho ay hindi opisyal, ako ay nasa papel ng isang apprentice para sa isang indibidwal na negosyante. Sumulat kami ng isang serbisyo para sa paglikha ng mga kaganapan, pagbebenta ng mga tiket at lahat ng iyon. Naaalala ko ang aking unang araw sa trabaho - ang indibidwal na negosyante ay gumugol ng 15 minuto na nagpapaliwanag kung ano ang kailangang gawin. - Well, malinaw ba ang lahat? - tinanong ang IP - Mmm, hindi talaga, magagawa ba natin ito ng isang beses pa? "tanong ko na parang nag-aalala. Ipinaliwanag muli ng IP ang lahat. - Ito ay malinaw na ngayon? - Ngayon oo. Sa totoo lang, wala akong naintindihan. Ngunit natakot akong humingi muli ng paliwanag - sa palagay ko ay maiintindihan ako ng lahat ng nakakuha ng trabaho. Ang kakanyahan ng gawain ay ang muling pagsulat mula sa thymeleaf hanggang sa AngularJS. Sa kabutihang palad, nakita ko ang bahagi ng handa na code at sinunod ang halimbawa at ginawa ang parehong. Hindi ko maintindihan kung paano ito gumana noon, ngunit nagawa kong makayanan ang gawain. Pagkatapos ay dumating ang mga gawaing direktang nauugnay sa bahagi ng backend. Pagkatapos lamang ng praktikal na karanasan sa Spring ay sinimulan kong maunawaan kung ano ang nakasulat sa aklat na "Spring for Professionals". Nagtrabaho ako doon ng 8 buwan, pagkatapos nito ay lumipat ako sa ibang lungsod, kung saan mabilis akong nakahanap ng isang opisyal na trabaho, nagtrabaho ng 2 taon, at sa parehong oras ay binago ang aking titulo ng trabaho mula sa "Junior" hanggang sa "Middle". Ngayon ay nahaharap ako sa katotohanan na ang trabaho ay naging isang gawain at hindi nagdudulot ng kaunting kasiyahan. Samakatuwid, sa sandaling nagpahinga ako, at upang maiwasan ang pag-atrophy ng aking mga daliri sa panahon ng pahinga, nagpasya akong subukan ang isa pang larangan - pag-unlad ng laro. Ibig sabihin, pag-develop ng mobile game, para sa mga nagsisimula, Android, dahil... Alam ko ang Java. Sasabihin ko sa iyo ang tungkol dito nang detalyado. Tungkol sa amin Sa maikling panahon, isang maliit na team ng 4 na tao (kabilang ako) ang nagsama-sama: 2 developer, 1 game designer, 1 sound engineer. kasi Walang sinuman sa koponan ang nagkaroon ng anumang karanasan sa larangan ng pagbuo ng laro at limitado ang oras ko, nagpasya kaming magpatupad ng isang simpleng proyekto na tiyak na makikita namin hanggang sa katapusan. Ginawa nila! Noong una, ang deadline ay Nobyembre 15, ngunit, tulad ng alam mo, ang pagtatapos ng isang proyekto sa orihinal na deadline ay isang kasalanan. Kaya natapos namin ito makalipas ang dalawang linggo. Ayon sa mga Ang stack ay: Java 8 at libGDX.

Tungkol sa pag-unlad

Ang pagsisimula ng pag-unlad ay maaaring ituring na ika-17 ng Oktubre. Sa kabuuan, gumugol kami ng 45 araw, kung saan:
  1. natutong magtrabaho sa libGDX;
  2. isinulat ang code;
  3. gumuhit ng mga graphic;
  4. gumawa ng musika;
Maaaring may tanong ang mga nakakita na ng laro - bakit ang tagal, simple lang ang laro? Oo, ito ay totoo, at upang maging ganap na tumpak, ang pag-unlad mismo (pagsusulat ng code) ay tumagal ng halos isang linggo at kalahati. Ang natitirang oras ay maaaring hatiin sa pagitan ng:
  1. mastering ang engine;
  2. pagguhit ng mga larawan at pagkatapos ay muling iguhit ang mga ito;
  3. pagsulat ng musika;
  4. naghahanap ng mga tunog sa https://freesound.org ;
  5. pagbabasa ng isang grupo ng mga artikulo tungkol sa kung paano mag-promote ng mga laro
At may mga sandali ng "downtime" para sa iba't ibang dahilan - may nag-exam, may nag-retake, atbp. Maaari kang ligtas na gumugol ng isang linggo at kalahati, o higit pa, sa "downtime". Ang isa pang bahagi ng oras ay ginugol sa "mga debate": ang mga ideya tungkol sa kung ano ang idaragdag sa laro ay dumating halos araw-araw, kaya may mga pagtatalo tungkol sa "ito ay magiging labis", "ito ay hindi magkasya", atbp. Kaya, inabandona namin ang maraming mga ideya, halimbawa, pagdaragdag ng mga tumatakbong ipis na maaari mong durugin at makakuha ng dagdag para dito. puntos: Sa simula mayroong JavaRush - 2Sa pangkalahatan, ang isa sa mga pinakamahirap na bagay, sa palagay ko, ay ang magpasya nang maaga kung ano ang magiging sa laro at manatili sa planong ito nang hindi sinusubukang magdagdag ng "isa pang" tampok. Ganito tayo naipon nitong 45 araw. Ang prototype ng laro ay handa na pagkatapos ng isang linggo at kalahati. Sa panahong ito, wala pa kaming mga graphics, kaya kinuha namin ang ilang bagay mula sa pampublikong domain (halimbawa, humiram kami ng background sheet ng papel mula sa Doodle Jump), at ang ilan ay ginawa namin ang aming sarili sa pintura. Sa simula mayroong JavaRush - 3Ang laro ay teknikal na napaka-simple - hindi namin kinailangan pang gumamit ng box2d (physics engine), kaya naming hawakan ang mga banggaan at kalkulahin ang hypotenuse sa aming sarili. Sa mga pinaka-kagiliw-giliw na punto, i-highlight ko ang mga sumusunod.
  1. Sa una, ang lahat ng mga elemento sa laro ay random na nabuo. Yung. mayroon kaming mga provider ng black hole, gunting, shuriken, rod, puso - inilalagay namin ang mga ito sa isang array, at pagkatapos ay kumuha kami ng random na provider at kumuha ng elementong may random na coordinate. Mabilis na naging malinaw na ang diskarteng ito ay "hindi napakahusay"; sinabi sa amin ng aming mga kaibigan na nakibahagi sa pagsubok ang parehong bagay at pinayuhan kaming gumamit ng mga template. Tiyak na para sa mga kasangkot sa pagbuo ng laro ito ay isang malinaw na solusyon, ngunit... Kami ay bago sa lugar na ito at ito ay napakagandang payo para sa amin.

    Kaya, maraming mga pattern ang lumitaw: lambak ng gunting; diagonal rods - medyo masaya na tipunin ang mga ito sa mataas na bilis (swish-swish-swish gamit ang iyong daliri); at isa pang template, hindi ko alam kung ano ang itatawag dito - tatawagin ko ito kung ano ang tawag sa klase sa code: StraightForwardPattern.

    Sa simula mayroong JavaRush - 4

    Ito ay naging mas kaaya-aya sa mga template, ngunit ito ay masyadong predictable o isang bagay. Samakatuwid, ang parehong random ay naging isa pang template. Yung. Ngayon ay mayroon na kaming "static" na mga template at isang random na template. (narito ang isang meme tungkol sa perpektong balanse).

  2. Ang pangunahing problema na nakatagpo namin ay ito. Tinatawag ng LibGDX ang paraan ng render(float delta) sa isang walang katapusang loop, kung saan ang lahat ng pag-render ng mga elemento ay aktwal na nangyayari. Gumuhit kami ng isang linya ng lapis sa sumusunod na paraan: kinukuha namin ang mga coordinate ng daliri at ilagay ang texture doon. Kaya, kung inilipat namin ang aming daliri sa screen nang napakabilis, nabuo ang "mga butas" dahil napunta kami sa mga millisecond na iyon nang gumana na ang paraan ng render(delta) at hindi pa natatawag muli. Ang problema ay nalutas nang simple - naaalala namin ang huling coordinate kung saan iginuhit ang texture, nakuha namin ang susunod, at kung ang distansya sa pagitan ng mga ito ay mas malaki kaysa sa X at ang daliri ay hindi pinakawalan, pinupunan namin ang puwang na ito. Sa una ay naisip namin na ang pagpipiliang ito ay maaaring hindi gumana - ang mga linya ay magiging angular, ngunit ang aming mga takot ay walang kabuluhan - lahat ay gumagana ayon sa nararapat.

    Sa totoo lang, tungkol sa laro

    Ang gameplay ay hindi nagpapanggap na natatangi, ngunit ito ay medyo mahusay at maaaring nakakahumaling. Kinokontrol mo ang isang lapis, literal na gumuhit sa papel, umiiwas sa mga hadlang - gunting, shuriken, black hole. Sa kasong ito, ang core ng lapis ay nagtatapos at kailangan mong kunin ang maliliit na lapis. Kung sakaling matapos ang baras at wala pa ring mga lapis, maaari kang pumili ng isang fragment ng salamin. Magkakaroon ito ng epekto sa loob ng ilang segundo - sa halip na sayangin ang baras, maibabalik ito, ngunit sa parehong oras ang kontrol ay nagiging salamin - lumipat ka sa kaliwa, at ang lapis ay gumuhit sa kanan. Maaari ka ring pumili ng isang puso na magbibigay-daan sa iyong makatagpo ng isang hadlang nang isang beses at manatiling buhay. Kung mas matagal kang humawak nang hindi inaangat ang iyong daliri mula sa screen, mas mataas ang combo, na nagpapataas ng bilis ng pagkuha ng mga puntos. Dagdag pa, ang bilis ng laro ay unti-unting tumataas. Maliban kung hindi mo kayang pagnakawan ang mga Korovan. Sa simula mayroong JavaRush - 5Noong una, binalak naming tawagan ang larong Karan Dash (isang lapis, ahaha, nakuha mo, tama ba?), ngunit nang maglaon ay nagbago ang aming isip at nanirahan sa Pencil Dash. Ang motibasyon ay ang matikas na ito (sinasabi ko) na paglalaro ng mga salita ay mauunawaan lamang ng isang madla na nagsasalita ng Ruso. Inilabas namin ang laro ilang araw na ang nakalipas at ngayon ay pino-promote namin ito. Walang sinuman sa koponan ang may karanasan din dito; nakuha namin ang lahat ng kaalaman tungkol sa promosyon mula sa iba't ibang artikulo. Nag-publish kami ng impormasyon tungkol sa laro sa iba't ibang mga website/forum nang libre. Tulad ng para sa mga bayad na channel, nag-order kami ng advertising sa 4PD, mula sa isang blogger, ilang mga post sa mga pampublikong pahina ng VK at AdMob. Sa pamamagitan ng paraan, ang post na ito ay bahagi din ng promosyon, kaya sa pahintulot ng administrasyon ay nag-iiwan ako ng isang link sa laro dito. Pahina ng laro sa Google Play: i-click Mag-iiwan din ako ng link sa aming VK group, kung saan maaari kang mag-iwan ng mga review/suhestyon at hindi makaligtaan ang isang pag-click sa pag-update Magpapasalamat ako kung i-install mo ito (paano kung gusto mo ito?), at para sa isang pagsusuri na may rating ipinapangako kong magsisindi ng kandila para sa iyong kalusugan! Magtanong ka, kung mayroon ka, sasagutin ko.Sa simula mayroong JavaRush - 6

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