Znalost Linuxu pre Java developera

jjunior

Znalost Linuxu pre Java developera
« kdy: 21. 10. 2016, 22:35:30 »
Ahojte, dostal som ponuku na pracu ako junior java developer ... momentalne skusenosti s vyvojom java ee mam len zo svojich vlastnych projektoch, na ktorych som sa ucil. Problem je ze som doteraz vsetko robil pod windowsom ... a ako java developer myslim ze je znalost unixu potrebna (alebo sa mylim?). Preto by som rad sa s tymto OS oboznamil a bol by som vdacny za nejake konkretne tipy co by mal javista v linuxe ovladat. Pekny vecer
« Poslední změna: 23. 10. 2016, 22:52:31 od Petr Krčmář »


abc123

Re:Znalost linuxu pre java developera
« Odpověď #1 kdy: 21. 10. 2016, 23:57:31 »
to iste co na windows, len prenesene do linux sveta? :) nainstalovat a spustit svoje oblubene IDE/textovy editor, naucit sa robit s balickovavim systemom tej ktorej distribucie? OS ma sluzit ucelu a byt v tom efektivny, nic ine sa od neho neocakava.

kimec

Re:Znalost linuxu pre java developera
« Odpověď #2 kdy: 22. 10. 2016, 01:48:20 »
Z unixu nepotrebujes vediet nic. Naopak postaci, ak budes vediet ako priblizne funguje OS, scheduling, thready, filesystem, sockety a tak dalej. Z JVM aj tak nemozes volat OS napriamo, ci je to Linux, Windows, AIX, BSD, OS/400 alebo System Z, ale vzdy musis ist cez nejake API, kde ti JVMko volania preklada podla danej platformy.
Co ale urcite urobit mozes: nastudovat si, ktore z tych API su "tie lepsie a viac crossplatform friendly". Ono totiz problem je v tom, ze JDK a Java si so sebou nesie kopec historickeho API, ktore je tam z dovodu kompatibility. Tak napr. co sa tyka filesystemov vzdy ma prekvapi, ako moze niekto v roku 2016 pouzivat java.io.File API oproti java.nio.File. Samozrejme niekedy sa inak neda, napr. ked kniznica 3 strany inak nevie, ale to ma byt vynimka.
Je dobre chapat ako funguje JVM, naucit sa citat disassemblovany bytecode - na tieto temy su na roote vyborne clanky od p. Tisnovskeho.
Taktiez, kedze sme v roku 2016, treba mat precitanu knihu "Java concurrency in practice" odpredu-odzadu a byt oboznameny, so vsetkymi konceptami, ktore sa vztahuju na viacvlaknove programovanie na JVM, t.j. ako funguje Java Memory Model, happens-before, volatile a co znamena "immutable" na JVM (odporucam seriu clankov od Jeremyho Masona na tuto temu).
Vnutorny stav, ktory bol dakedy oslavovany benefit objektovo-orientovaneho programovania je na sucasnych multiprocesorovych systemoch najvacsia pohroma.
Podla ma je to dost podstatne, lebo ked si zoberieme, ze vacsina javistov pise webove aplikacie, ktore uz zo svojej podstaty bezia vo viacvlaknovom prostredi, je az zarazajuce, ako malo z developerov si uvedomuje implikacie tohto faktu, alebo ho jednoducho ignoruje. Osobne som uz riesil niekolko velmi nestatnych race-conditionov po inych ludoch typu - ved to sa predsa nikdy nestane... Hint: nie, relacna databaza skutocne nie je synchronizacna primitiva a to bez ohladu na to tranzakcnu izolaciu.
Java 8 lambdy a monady ako je Streamove API a Optional su uz len ceresnicka na torte, pri ktorej sa javistovi zjezia vlasy, no je zrejme, ze svet sa ubera tymto smerom, takze sa s tym treba oboznamit (aspon s konceptami).
Buildovacie nastroje, to je kapitola sama o sebe: Ant, Maven a Gradle. Maven ma svoje problemy, ale stale je asi najrozsirenejsi, no coraz viac projektov sa presuva na Gradle. Ant je ant :)
Dufam, ze ti toto ako juniorovi pomoze ako zdroj tipov na dalsie samovzdelavanie.

jjunior

Re:Znalost linuxu pre java developera
« Odpověď #3 kdy: 22. 10. 2016, 02:24:42 »
to: kimec

taku vycerpavajucu odpoved som necakal :) takze vdaka, urcite si to vsetko pozriem :)

balki

Re:Znalost linuxu pre java developera
« Odpověď #4 kdy: 22. 10. 2016, 08:20:17 »
Okrem toho, co bolo povedane, zidu sa klasicke unixove tooly na parsovanie logov. Pisem zoradene podla dolezitosti:
grep, cut, find, less, tar/gzip/bzip, sed,minimalne zaklady vi, zaklady awk, zaklady bash, ssh.
 
Na sledovanie sietovej komunikacie, ak su nejake exotickejsie protokoly - tcpdump. Na web-ky su lepsie nastroje.

Ono to nikto od nikoho explicitne nevyzaduje, ale administratori a spol nejak ticho predpokladaju, ze to uz vies.
Da sa zaobist aj bez toho, len unixove tooly usetria dost casu.

Robim aplikacie s vela threadmi (stovkami, je tam dovod, inac by som to skresal) a vela sa tam loguje.  Debug logy su ozrutne.

Znalost prace operacneho systemu, ako pise kolega vyssie sa velmi hodi. Zo skoly som vedel vseobecne principy, podrobnosti sa ucim za behu a niekedy su z toho mrzute problemy, kym dojdem na to, kde je chyba. 


balki

Re:Znalost linuxu pre java developera
« Odpověď #5 kdy: 22. 10. 2016, 08:28:06 »
Vnutorny stav, ktory bol dakedy oslavovany benefit objektovo-orientovaneho programovania je na sucasnych multiprocesorovych systemoch najvacsia pohroma.

Pouzil by som ine slovo, nie pohroma, ale vyzva na naucenie sa roznych technik :)