z PHP do Java - nie sam język, co wszystko dookoła

0

Cześć,

Pracuje około 6 lat z językiem php. Postanowiłem jednak spróbować swoich sił z Javą i chciałbym się dowiedzieć o czym powinienem się pouczyć i co opanować.
Nie chodzi mi tutaj o sam język, jego składnie itd. Zależy mi na dowiedzeniu się co poza tym jest ważne, czego używa się na co dzień podczas pracy z tym językiem.
Jakie są menadżery pakietów, który kiedy użyć, co powinienem wiedzieć o JVM, GC itd.
Za wszelkie wskazówki z góry dziękuję.

2
Kuba Leman napisał(a):

Jakie są menadżery pakietów, który kiedy użyć,

maven i gradle. Maven jest bardziej konserwatywny i rozwlekły. W Gradle konfigurujesz wszystko kodem i łatwiej pisać wtyczki (Tak samo dla Kotlina, Scala ma jesze osobno SBT)

co powinienem wiedzieć o JVM, GC itd.

Na poczatek to chyba nic. Tylko raz widziałem że GC dobierali do produktu na produkcji.

Co do innych - większośc projektów to Spring i Hibernate. Przynajmniej tak było jak jeszcze 2 lata temu pracowałem w Javie. Spring to taka ośmiornica co rozciągneła swoje macki na wszystko w Javie :P Przydałby się 007 co by ubił tę ośmiornicę :D

1

Z takich rzeczy które warto wiedzieć, to Java kompiluje się do "java byte code", tak samo jak Kotlin, Groovy, Scala, Clojure. Co znaczy że tak na prawdę bibliotekę napisaną w jednym z tych języków można użyć w innych (chociaż pewnie nie będzie to idiomatyczne ładne). Możesz mieć nawet jeden w projekt, w którym jedna klasa jest Kotlinie a druga w Javie (sam mam kilka takich). Ma też tą zaletę że tak skompilowana aplikacja może być potem uruchomiona na każdym środowisku bez ponownej kompilacji, co jest super.

Z innych takich rzeczy na start, taką najbardziej "standardową" wersją javy jest powiedziałbym Java 8 (to jest ta wersja gdzie weszły lambdy i .stream()), i w 90% miejsc jest teraz używana. Jest bardzo stara, wyszła 8 lat temu, ale ma LTS. Co nowsze projekty przemigrowały już do 11tki, 16tki albo 19tki, ale większośc niestety nadal śmiga na Javie 8.

Nie tak jak PHP, Java jest bardzo kompatybilna wstecz, co znaczy że jest bardzo duża szansa że aplikacja napisana pod Javę 5 zadziała na każdej nowej (poza nieistotnymi wyjątkami).


A swoją drogą, to @Kuba Leman zawsze poznając nowy język będziesz przechodził tą samą drogę, nie ważne jaki background już masz. Także, mniej pytań na forum, więcej kodzenia w Javie.

0

@Kuba Leman:
Pytasz wyłącznie komercyjnie, czy samo-rozwojowo ?

Bo wtedy odp @KamilAdam można uzupełnić: niekoniecznie skazanie na Springa itd ...
W wariancie samorozwoju (niszowe/zerowe w kontekście etatów) jakies lekkie serwery, w tym nie wychodzące z Servletów, jak ratpack
Aha, RatPack uchodził za martwy, ale sie ożywiło.

Riddle napisał(a):

Z innych takich rzeczy na start, taką najbardziej "standardową" wersją javy jest powiedziałbym Java 8 (to jest ta wersja gdzie weszły lambdy i .stream()), i w 90% miejsc jest teraz używana. Jest bardzo stara, wyszła 8 lat temu, ale ma LTS. Co nowsze projekty przemigrowały już do 11tki, 16tki albo 19tki, ale większośc niestety nadal śmiga na Javie 8.

8, 11, 17 - te są LTS

1
ZrobieDobrze napisał(a):

@Kuba Leman:
Pytasz wyłącznie komercyjnie, czy samo-rozwojowo ?

Samorozwojowo to ja bym polecał Kotlina i Scalę. Rozwilekłą Javę to można się uczuć IMHO tylko w celach komenrcyjnych :P

Riddle napisał(a):

Z takich rzeczy które warto wiedzieć, to Java kompiluje się do "java byte code", tak samo jak Kotlin, Groovy, Scala, Clojure. Co znaczy że tak na prawdę bibliotekę napisaną w jednym z tych języków można użyć w innych (chociaż pewnie nie będzie to idiomatyczne).

Jest tu pewne ale. Otóż mieszanie języków dobrze działa to tylko w sytuacja biblioteka w Javie, aplikacja i testy w innym języku o ładniejszej składni. Był tutaj wątek gdzie najpierw przekonano Opa że najlepiej napisać aplikację w Kotlinie a testy w Groovim. I niby wszystko pykło, ale kod był niesamowicie szpetny bo Kotlin i Scala czesto generują nazwy które dobrze wyglądają tylko w Kotlinie i Scali. A w Javie i Groovim wyglądają szpetnie. Np w Scali jest metoda ++ a w Javie to już $plus$plus bo znaki specjalne są rozwijane do $nazwa. Takie moje skromne zdanie

3
Kuba Leman napisał(a):

co powinienem wiedzieć o JVM, GC itd.

jeśli chodzi o garbage collectora to minimum wiedzy to ustawianie -Xmx5g albo tyle ile tam chcesz żeby było. ewentualnie jeśli odpalasz najnowsze javki w kontenerach to podobno mogą się same odpowiednio skonfigurować. ale generalnie znajomość przełącznika do ustawiania rozmiaru sterty to minimum. dodatkowa przydatna czasem wiedza to taka, że jvm ma wiele rozłącznych pul pamięci: sterta na obiekty, stosy dla wątków, pula kodu skompilowanego, pula dla bajtkodu i statycznych danych, pomocnicze dane garbage collectora, pula pamięci natywnej (direct byte buffers i takie tam), itd więc trzeba to wziąć pod uwagę jeśli dopasowujesz rozmiar sterty do ilości dostępnej pamięci. czasami błędy out of memory w javie oznaczają, że sterta dla obiektów jest za duża (sic!) i na maszynie brakuje wolnej pamięci na zwiększanie innych rodzajów pul pamięci.

jeżeli planujesz bardzo szybko wejść w javę komercyjnie to może używanie javy 8 ma sens, ale jeśli chcesz powoli się przenosić to obstawiam, że ta java 8 jednak będzie sukcesywnie wypierana. np. z tego raportu wynika, że java 11 już przegoniła popularnością javę 8: https://newrelic.com/resources/report/2022-state-of-java-ecosystem a jednocześnie migracja z javy 8 na nowsze jest trudniejsza niż z nowszych wersji javy. jednym z największych problemów przy migracji na nowe wersje było wprowadzenie modularyzacji w javie 9. wtedy zmieniły się classloadery i inne magie w środku javy, więc sporo frameworków opartych o grzebanie w bajtkodzie oraz nieustandaryzowanych wnętrznościach javy się posypało. późniejsze javy raczej nie wprowadzały już tak mocno bolesnych (dla ekosystemu javy) zmian.

1 użytkowników online, w tym zalogowanych: 0, gości: 1