Zakaj se učiti Jave in kako to storiti učinkovito. Yandex poročilo

Kako se Java razlikuje od drugih priljubljenih jezikov? Zakaj bi morala biti Java prvi jezik za učenje? Ustvarimo načrt, ki vam bo pomagal, da se Jave naučite od začetka in z uporabo veščin programiranja v drugih jezikih. Naštejmo razlike med ustvarjanjem proizvodne kode v Javi in ​​razvijanjem v drugih jezikih. Mikhail Zatepyakin je to poročilo prebral na srečanju za bodoče udeležence pripravništva Yandex in drugi začetniki razvijalci - srečanje Java Junior.


— Pozdravljeni vsi, ime mi je Misha. Sem razvijalec iz Yandex.Marketa in danes vam bom povedal, zakaj se naučiti Jave in kako to storiti učinkovito. Morda boste zastavili razumno vprašanje: zakaj bom to zgodbo pripovedoval jaz in ne kakšen močan razvijalec z dolgoletnimi izkušnjami? Dejstvo je, da sem tudi sam pred kratkim, približno leto in pol nazaj, študiral Javo, tako da se še spomnim, kako je bilo in kakšne pasti obstajajo.

Pred letom dni sem dobil pripravništvo na Yandex.Market. Zaledje sem razvil za Beru, za sam Market, verjetno ste ga uporabili. Zdaj nadaljujem z delom tam, v drugi ekipi. Ustvarimo analitično platformo za Yandex.Market za poslovne partnerje.

Zakaj se učiti Jave in kako to storiti učinkovito. Yandex poročilo

Začnimo. Zakaj se učiti Jave s praktičnega vidika? Dejstvo je, da je Java zelo znan programski jezik. Ima zelo veliko skupnost.

Obstaja na primer takšen indeks TIOBE, priljubljen indeks priljubljenosti programskih jezikov, in tam je Java na prvem mestu. Tudi na zaposlitvenih mestih boste verjetno opazili, da je večina prostih delovnih mest o Javi, torej z razvojem v Javi lahko vedno najdete službo.

Ker je skupnost zelo velika, boste na kakršno koli vprašanje našli odgovor na nekaterih spletnih mestih Stack Overflow ali drugih mestih. Poleg tega pri razvoju v Javi dejansko pišete kodo na JVM, tako da lahko preprosto preklopite na Kotlin, Scala in druge jezike, ki uporabljajo JVM.

Zakaj se učiti Jave in kako to storiti učinkovito. Yandex poročilo

Kaj je dobrega pri Javi z ideološkega vidika? Obstajajo različni programski jeziki. Rešujejo različne probleme, to veste. Na primer, Python je odličen za pisanje enovrstičnih skriptov za reševanje hitrih težav.

Pozitivna stran je, da lahko popolnoma nadzorujete izvršljivo kodo. Na primer, imamo avtomobile, avtomobile brez voznika Yandex, njihova koda je zapisana v plusih. Zakaj? Java ima nekaj takega - Garbage Collector. Počisti RAM nepotrebnih predmetov. Ta stvar se zažene spontano in ustavi svet, to pomeni, da ustavi preostanek programa in začne štetje predmetov, čiščenje spomina predmetov. Če kaj takega deluje v dronu, ni kul. Vaš dron bo vozil naravnost, v tem trenutku počisti svoj spomin in sploh ne bo gledal na cesto. Zato je dron pisan na pluse.

Zakaj se učiti Jave in kako to storiti učinkovito. Yandex poročilo

Katere težave rešuje Java? To je predvsem jezik za razvoj velikih programov, ki jih več let piše na desetine ali stotine ljudi. Zlasti veliko ozadja v Yandex.Marketu je napisano v Javi. Imamo razporejeno ekipo v več mestih, v vsakem po deset ljudi. In koda je enostavna za vzdrževanje, podprta je že deset let in več, hkrati pa pridejo novi ljudje, ki razumejo to kodo.

Kakšne značilnosti mora imeti jezik, da je koda v njem enostavno podprta in da se lahko enostavno razvija v velikih skupinah. Najprej mora biti berljiva koda in omogočati enostavno implementacijo kompleksnih arhitekturnih rešitev. To pomeni, da bi moralo biti preprosto pisanje visokonivojskih abstrakcij itd. Vse to nam nudi Java. To je objektno usmerjen jezik. Zelo enostavno je implementirati visokonivojske abstrakcije in kompleksne arhitekture.

Obstaja tudi veliko ogrodij in knjižnic za Javo, ker je jezik star več kot 15 let. V tem času je bilo na njem napisano vse, kar se je dalo napisati, zato je na voljo ogromno knjižnic za vse, kar bi morda potrebovali.

Zakaj se učiti Jave in kako to storiti učinkovito. Yandex poročilo

Katere osnovne veščine bi po mojem mnenju moral imeti začetni igralec JA? Najprej je to poznavanje jedrnega jezika Java. Naslednji je nekakšen okvir za vstavljanje odvisnosti. Naslednji govornik, Kirill, bo o tem podrobneje govoril. Ne bom šel pregloboko. Sledi arhitektura in oblikovalski vzorci. Za pisanje velikih aplikacij moramo biti sposobni napisati arhitekturno lepo kodo. In to je neke vrste SQL ali ORM za naloge dela z bazo podatkov. In to bolj velja za zaledje.

Zakaj se učiti Jave in kako to storiti učinkovito. Yandex poročilo

Pojdi! Java jedro. Tukaj ne bom zares odkril Amerike - poznati morate sam jezik. Na kaj morate biti pozorni. Prvič, Java je v zadnjih letih izdala veliko različic, to je v letih 2014-2015 je bila izdana sedma, nato osma, deveta, deseta, veliko novih različic in v njih je bilo predstavljenih veliko novih kul stvari , na primer Java Stream API, lambda itd. Zelo kul, sveže, kul stvari, ki se uporabljajo v produkcijski kodi, o čem sprašujejo na intervjujih in ki jih morate poznati. Zato ne bi smeli vzeti knjige s police v knjižnici Java-4 in se je učiti. To je naš načrt: naučimo se Jave 8 ali višje.

Pozorni smo na novosti, kot so Stream API, var itd. Postavljajo jih med intervjuji in se nenehno uporabljajo v produkciji. To pomeni, da je Stream API veliko hladnejši od zank, na splošno zelo kul stvar. Bodite pozorni.

In obstajajo vse vrste stvari, kot so iteratorji, izjeme in tako naprej. Stvari, ki se vam zdijo nepomembne, dokler sami pišete kakšno majhno kodo. Teh izjem ne potrebujete, kdo jih sploh potrebuje? Bodo pa zagotovo vprašani na razgovorih, zagotovo vam bodo koristili v proizvodnji. Na splošno morate biti pozorni na izjeme, iteratorje in druge stvari.

Zakaj se učiti Jave in kako to storiti učinkovito. Yandex poročilo

Podatkovne strukture. Brez struktur ne gre, a super bo, če ne boste vedeli le, da obstajajo kompleti, slovarji in listi. In tudi različne izvedbe struktur. Na primer, isti slovar v Javi ima veliko izvedb, vključno s HashMap in TreeMap. Imajo različne asimptotike, znotraj so drugače strukturirani. Vedeti morate, v čem se razlikujejo in kdaj uporabiti katerega.

Prav tako bo zelo kul, če boste vedeli, kako te podatkovne strukture delujejo interno. To pomeni, da ni lahko poznati njihove asimptotike - koliko stava deluje, kako dolgo deluje prehod, ampak kako struktura deluje znotraj - na primer, kaj je vedro v HashMap.

Prav tako je vredno biti pozoren na drevesa in grafe. To so stvari, ki niso zelo pogoste v produkcijski kodi, vendar so priljubljene v intervjujih. V skladu s tem morate biti sposobni prečkati drevesa, grafe v širino in globino. Vse to so preprosti algoritmi.

Takoj, ko začnete pisati kakršno koli veliko kodo, kompleksno, z uporabo knjižnic, večrazredno kodo, boste ugotovili, da vam je težko brez gradnje sistemov in razreševanja odvisnosti. To sta predvsem Maven in Gradle. Omogočajo uvoz knjižnic v vaš projekt v eni vrstici. To pomeni, da napišete enovrstični xml in uvozite knjižnice v projekt. Odlični sistemi. Sta približno enaka, uporabite eno - Maven ali Gradle.

Naprej - nekakšen sistem za nadzor različic. Priporočam Git, ker je priljubljen in obstaja ogromno vadnic. Skoraj vsi uporabljajo Git, to je kul zadeva, brez njega ne morete živeti.

In nekakšno razvojno okolje. Priporočam IntelliJ Idea. Močno pospeši razvojni proces, vam veliko pomaga, napiše celotno kodo za vas, na splošno je kul.

Zakaj se učiti Jave in kako to storiti učinkovito. Yandex poročilo

Povezave s prosojnice: Sqlzoo, habrapost

SQL. Nekaj ​​o backenderjih. Tu je bil pravzaprav smešen primer. Dva dni pred drugim pripravniškim razgovorom me je klicala kadrovka in rekla, da me bodo čez dva dni spraševali o SQL in HTTP, tega se moram naučiti. In nisem vedel skoraj nič o SQL ali HTTP. In našel sem to kul stran - Sqlzoo. Na njem sem se naučil SQL v 12 urah, mislim sintakso SQL, pisanje poizvedb SELECT, JOIN itd. Zelo kul spletno mesto, zelo ga priporočam. Pravzaprav sem se v 12 urah naučil 90 % tega, kar vem zdaj.

Prav tako je super poznati arhitekturo baze podatkov. To so vse vrste ključev, indeksov, normalizacije. O tem je na Habréju vrsta objav.

Zakaj se učiti Jave in kako to storiti učinkovito. Yandex poročilo

V Javi poleg SQL obstajajo vse vrste objektno-relacijskih preslikavnih sistemov, kot je JPA. Obstaja nekaj kode. V prvi metodi je nekaj kode SQL - SELECT id name FROM info.users WHERE id IN userIds. Iz baze uporabnikov, iz tabele, se pridobijo njihovi ID-ji in imena.

Nato je določen preslikavec, ki objekt iz osnove spremeni v objekt Java. Spodaj je še tretja metoda, ki dejansko izvede to kodo. Vse to lahko nadomestimo s pomočjo JPA z eno vrstico, ki je zapisana spodaj. Dela isto - poišče All ByIdIn. To pomeni, da na podlagi imena metode za vas ustvari poizvedbo SQL.

Zelo kul stvar. Sam sem, ko še nisem poznal SQL, uporabljal JPA. Na splošno bodite pozorni. Če ste preleni, da bi se naučili SQL, je to katastrofa. In na splošno ogenj!

Zakaj se učiti Jave in kako to storiti učinkovito. Yandex poročilo

Pomlad. Kdo je že slišal za spomladansko ogrodje? Ali vidite, koliko vas je? Ne brez razloga. Spring je vključen v zahteve za vsako drugo prosto delovno mesto za zaledje Java. Brez tega res ni nikjer velikega razvoja. Kaj je pomlad? Prvič, to je ogrodje za vstavljanje odvisnosti. Tudi o tem bo povedal naslednji govornik. Toda na kratko, to je stvar, ki vam omogoča, da olajšate uvoz odvisnosti nekaterih razredov na druge. To pomeni, da je poznavanje odvisnosti poenostavljeno.

Spring Boot je del programa Spring, ki vam omogoča zagon strežniške aplikacije z enim gumbom. Pojdite na THID, pritisnite nekaj gumbov in zdaj imate pripravljeno in zagnano strežniško aplikacijo na lokalnem gostitelju 8080. To pomeni, da še niste napisali niti ene vrstice kode, vendar že deluje. Zelo kul stvar. Če napišeš kaj svojega, ogenj!

Pomlad je zelo velik okvir. Ne samo, da prevzame vašo strežniško aplikacijo in razreši vstavljanje odvisnosti. Omogoča vam veliko stvari, vključno z ustvarjanjem metod REST API. To pomeni, da ste napisali neko metodo in ji priložili opombo Get mapping. In zdaj že imate neko metodo na lokalnem gostitelju, ki vam piše Hello world. Dve vrstici kode in deluje. Kul stvari.

Pomlad olajša tudi pisanje testov. Brez testiranja v velikem razvoju ne gre. Kodo je treba preizkusiti. Za ta namen ima Java kul knjižnico JUnit 5. In JUnit na splošno, vendar je zadnja različica peta. Obstaja vse za testiranje, vse vrste trditev in druge stvari.

In obstaja čudovit okvir Mockito. Predstavljajte si, da imate neko funkcionalnost, ki jo želite preizkusiti. Funkcionalnost naredi veliko stvari, med drugim se nekje na sredini prijavi v VKontakte z vašim ID-jem, na primer, in iz ID-ja prejme ime in priimek uporabnika VKontakte. Verjetno ne boste vključili VKontakte v teste, to je čudno. Vendar morate preizkusiti funkcionalnost, zato ste naredili ta razred z uporabo Mockita, ga mok, posnemali.

Rekli boste, da ko v ta razred pride zahteva s takim in drugačnim ID-jem, vrne kakšen priimek, na primer Vasya Pupkin. In bo delovalo. Se pravi, testirali boste vse funkcionalnosti za mok one class. Zelo kul stvar.

Zakaj se učiti Jave in kako to storiti učinkovito. Yandex poročilo

Povezava iz diapozitiva

Oblikovalski vzorci. Kaj je to? To so predloge za reševanje tipičnih problemov, ki se pojavljajo v razvoju. V razvoju se pogosto pojavljajo enaki ali podobni problemi, ki bi jih bilo super rešiti. Zato so ljudje prišli do najboljših praks, določenih predlog, kako rešiti te težave.

Obstaja spletna stran z najbolj priljubljenimi vzorci - refactoring.guru, lahko jo preberete, ugotovite, kateri vzorci obstajajo, preberete kup teorije. Težava je v tem, da je praktično neuporabna. Pravzaprav vzorci brez prakse niso posebno uporabni.

Slišali boste o nekaterih vzorcih, kot sta Singletone ali Builder. Kdo je slišal te besede? Veliko ljudi. Obstajajo tako preprosti vzorci, ki jih lahko izvajate sami. Toda večina vzorcev: strategija, tovarna, fasada - ni jasno, kje jih uporabiti.

In dokler v praksi v kodi neke druge osebe ne vidite mesta, kjer je ta vzorec uporabljen, ga ne boste mogli uporabiti sami. Zato je pri vzorcih zelo pomembna praksa. In samo branje o njih na refactoring.guru ni zelo koristno, vendar je vsekakor vredno.

Zakaj se učiti Jave in kako to storiti učinkovito. Yandex poročilo

Zakaj so potrebni vzorci? Recimo, da imate določen uporabniški razred. Ima ID in ime. Vsak uporabnik mora imeti tako ID kot ime. Levo zgoraj je učilnica.

Kakšni so načini inicializacije uporabnika? Obstajata dve možnosti - ali konstruktor ali postavljalec. Kakšne so slabosti obeh pristopov?

Konstruktor. novi uporabnik (7, "Bond"), v redu. Zdaj pa recimo, da nimamo razreda Uporabnik, ampak nekega drugega, s sedmimi številskimi polji. Imeli boste konstruktor, ki vsebuje sedem zaporednih številk. Kakšne so te številke in katera od njih pripada kateri nepremičnini, ni jasno. Oblikovalec ni odličen.

Druga možnost je postavljalec. Jasno pišete: setId(7), setName(“Bond”). Razumete, katera lastnost pripada kateremu polju. Toda seter ima problem. Prvič, morda pozabite nekaj dodeliti, in drugič, izkaže se, da je vaš predmet spremenljiv. To ni varno za niti in nekoliko zmanjša berljivost kode. Zato so si ljudje izmislili kul vzorec – Builder.

Zakaj se učiti Jave in kako to storiti učinkovito. Yandex poročilo

za kaj gre Poskusimo združiti prednosti obeh pristopov – postavljalca in konstruktorja – v enem. Naredimo določen objekt, Builder, ki bo imel tudi polja Id in Name, ki bo sam zgrajen na podlagi setterja in bo imel metodo Build, ki vam vrne novega uporabnika z vsemi parametri. Dobimo nespremenljiv objekt in postavljalec. kul!

Kakšne so težave? Tukaj imamo klasičnega Builderja. Težava je v tem, da še vedno lahko pozabimo preveriti kakšno polje. In če smo pozabili obiskati ID, je v tem primeru v Builderju inicializiran na nič, ker vrsta int ni ničelna. In če naredimo Ime "Bond" in pozabimo obiskati osebno pisarno, bomo imeli novega uporabnika z id "0" in imenom "Bond". Ni v redu.

Poskusimo se boriti proti temu. V Builderju bomo int spremenili v int, tako da bo ničelna. Zdaj je vse super.

Zakaj se učiti Jave in kako to storiti učinkovito. Yandex poročilo

Če poskušamo ustvariti uporabnika z imenom »Bond«, pri čemer pozabimo vnesti njegov ID, bomo dobili izjemo ničelnega kazalca, ker ID-ja ni mogoče uporabiti za ničelnost, Builder pa ima ničelno izjemo, posebej kazalec.

Zakaj se učiti Jave in kako to storiti učinkovito. Yandex poročilo

Še vedno pa lahko pozabimo vnesti ime, zato nastavimo predvajanje objekta na nič. Zdaj, ko zgradimo naš objekt iz Builderja, preveri, ali polje ni ničelno. In to še ni vse.

Poglejmo zadnji primer. V tem primeru, če nekako postavimo nič v izvajalno okolje ID-ja, bi bilo super, če bi takoj vedeli, da ste to storili, in ni kul, da zdaj delate napako.

Zakaj se učiti Jave in kako to storiti učinkovito. Yandex poročilo

Napake ne smete sprožiti v trenutku ustvarjanja uporabnika, ampak ko za ID nastavite nič. Zato bomo v Builderju postavilca Integer spremenili v int in takoj bo prisegel, da so vrgli null.

Skratka, kaj je smisel? Obstaja preprost vzorec Builder, vendar ima tudi njegova izvedba nekaj tankosti, zato je zelo kul pogledati različne izvedbe vzorcev. Vsak vzorec ima na desetine izvedb. Vse to je zelo zanimivo.

Zakaj se učiti Jave in kako to storiti učinkovito. Yandex poročilo

Kako napišemo Builder v produkcijsko kodo? Tukaj je naš uporabnik. Priložimo mu Builder rotacijo iz knjižnice Lombok in sam ustvari Builder za nas. To pomeni, da ne pišemo nobene kode, vendar Java že misli, da ima ta razred Builder, in ga lahko imenujemo tako.

Povedal sem že, da ima Java knjižnice za skoraj vse, vključno z Lombokom, kul knjižnico, ki vam omogoča, da se izognete pisanju šablon. Graditelj, GET.

Zakaj se učiti Jave in kako to storiti učinkovito. Yandex poročilo

Vzorci so lahko arhitekturni – povezani ne le z enim razredom, temveč s sistemom kot celoto. Pri oblikovanju sistema obstaja tako kul načelo: načelo ene same odgovornosti. O čem govori? Dejstvo, da mora biti vsak razred odgovoren za nekatere svoje funkcionalnosti. V tem primeru imamo Controller, ki komunicira z uporabniki, objekti JSON. Obstaja Facade, ki objekte JSON pretvori v modele, s katerimi bo nato delovala aplikacija Java. Obstaja storitev s kompleksno logiko, ki deluje s temi modeli. Obstaja Data Access Object, ki postavi te modele v bazo podatkov in jih pridobi iz baze podatkov. In tu je sama baza podatkov. Z drugimi besedami, ni vse v enem razredu, ampak izdelujemo pet različnih razredov in to je drug vzorec.

Zakaj se učiti Jave in kako to storiti učinkovito. Yandex poročilo

Ko se bolj ali manj naučite Jave, je super napisati svoj projekt, ki bo imel bazo podatkov, deloval z drugimi API-ji in svojo strežniško aplikacijo izpostavil odjemalcem REST API. To bi bilo super dodati svojemu življenjepisu, to bi bil kul zaključek vašega izobraževanja. S tem lahko greš in dobiš službo.

Zakaj se učiti Jave in kako to storiti učinkovito. Yandex poročilo

Tukaj je primer moje strežniške aplikacije. V drugem letniku sem s fanti pisal seminarsko nalogo. Pisali so mobilno aplikacijo za organizacijo dogodkov. Tam so se uporabniki lahko prijavili prek VKontakte, postavili točke na zemljevid, ustvarili dogodke, nanje povabili svoje prijatelje, shranili slike dogodkov itd.

Kaj sem naredil v projektu? Napisal strežniško aplikacijo v Spring Boot brez uporabe SQL. Nisem ga poznal, uporabil sem JPA. Kaj bi lahko naredil? Prijavite se v VK prek OAuth-2. Vzemite uporabniški žeton, pojdite z njim v VK in preverite, ali je pravi uporabnik. Prejemajte informacije o uporabnikih prek VKontakte. Lahko je shranil informacije v bazo podatkov, tudi prek JPA. Spretno shranjujte slike in druge datoteke v pomnilnik računalnika, povezave do njih pa shranite v bazo podatkov. Takrat še nisem vedel, da so v bazi podatkov objekti CLOB, zato sem naredil tako. Obstajal je REST API za uporabnike, odjemalske aplikacije. In bili so testi enot za osnovno funkcionalnost.

[…] Majhen primer mojega uspešnega učenja Jave. V prvem letniku na univerzi so me učili C# in razumeli programiranje OOP - kaj so razredi, vmesniki, abstrakcija in zakaj so potrebni. Zelo mi je pomagalo. Brez tega je učenje Jave precej težko; ni jasno, zakaj so potrebni razredi.

Zakaj se učiti Jave in kako to storiti učinkovito. Yandex poročilo

V mojem drugem letniku na univerzi so spet učili Java core, vendar se nisem ustavil pri tem, sam sem šel študirat Spring in napisal nalogo, moj projekt, ki sem ga omenil zgoraj. In z vsem tem sem šel na pripravništvo v Yandex, opravil razgovor in vstopil v Yandex.Market. Tam sem napisal zaledje za Beru, to je naša tržnica, in za sam Yandex.Market.

Po tem sem pred šestimi meseci prestopil v drugo ekipo znotraj istega trga. Delamo analitiko za poslovne partnerje. Smo v analitični platformi, na backendu smo trije, tako da imam zelo velik delež vpliva na projekt. Pravzaprav je zelo zanimivo. Se pravi, dejansko posredujemo podatke o trgu - kakšna je prodaja, v kakšnih kategorijah, v kakšnih modelih, za poslovne partnerje, velika znana podjetja. In samo trije smo, pišemo to kodo in je zelo kul.

Hvala vam! Uporabne povezave:
- "Java 8. Vodnik za začetnike".
- Podatkovne strukture.
- Sqlzoo.
- Normalizacija baze podatkov.
- Oblikovalski vzorci.
- Oblike oblikovanja.
- Čista koda.
- Učinkovita Java.

Vir: www.habr.com

Dodaj komentar