Wątek przeniesiony 2023-02-03 13:10 z Java przez Riddle.

Jakie dalsze kroki w nauce Javy? Java EE, Spring

0

Cześć, jakiś czas temu zacząłem uczyć się Javy z kursu Tima Buchalki na Udemy, ale doszedłem już do momentu "co teraz?". Zostało mi jeszcze kilka tematów, ale czuję, że kręcę się kółko zamiast iść na przód, poznawać coś nowego. Pomyślałem, że dobrym pomysłem będzie już przejście do nauki Springa, ale zastanawiam się też nad Javą EE, wiem, że jest to już dosyć stara technologia, ale czy podstawowa wiedza nie przyda mi się przy używaniu Springa? Czy macie może pomysł na inną ścieżkę w tym momencie? Jakieś dobre źródła do nauki? Dodam, że obecnie studiuję informatykę, pierwszy rok i chciałbym próbować wyspecjalizować się w konkretnej dziedzinie z myślą o późniejszej pracy. W Javie czuję się dosyć dobrze, myślę, że wybór języka nie był zły.

3
  1. Java
  2. SpringBoot (z naciekiem na REST)
  3. Hibernate + Bazy danych

Te 3 zagadnienia zajmą Ci dość czasu.

3
  1. Kotlin
4
Samson6803 napisał(a):

Nie interesowałem się aplikacjami mobilnymi, myślisz, że to ciekawy kierunek? Czytałem, że warto poznać podstawy Javy przed przejściem na Kotlina właśnie. Jest to rozwojowa technologia

Kotlin to nie są tylko aplikacje mobilne.
W firmie, dla której świadcze usługi gdzie core systemu jest rozwijany od prawie 20 lat, nowe funkcjonalnosci są pisane w kotlinie. A jest to aplikacja webowa.

Ja bym na Twoim miejscu ogarnął solidnie Java SE szczególnie 'nowości' z 8 i 11. A następnie przeszedł do Spring boota. Jak już się będziesz dobrze czuć w Javie to możesz dopisywać kolejne fragmenty Twojej aplikacji w kotlinie. Nie ma z tym problemu aby jeden projekt miał kod pisany i w javie i kotlinie.

0
kixe52 napisał(a):
Samson6803 napisał(a):

Nie interesowałem się aplikacjami mobilnymi, myślisz, że to ciekawy kierunek? Czytałem, że warto poznać podstawy Javy przed przejściem na Kotlina właśnie. Jest to rozwojowa technologia

Kotlin to nie są tylko aplikacje mobilne.
W firmie, dla której świadcze usługi gdzie core systemu jest rozwijany od prawie 20 lat, nowe funkcjonalnosci są pisane w kotlinie. A jest to aplikacja webowa.

Nie wiedziałem, dzięki. Kojarzyłem Kotlina tylko i wyłącznie z aplikacjami mobilnymi jako "ewolucja" pisania ich w Javie.

Na razie mam problem z zabraniem się za coś większego w Javie, bo mam wrażenie, że nie mam do tego narzędzi, umiejętności, temu chciałem spróbować Springa. Wrażenie spowodowane raczej brakiem doświadczenia

0

To zacznij od czegoś małego. Chociażby zwykłe otrzymanie "Hello World" jako JSON po uderzeniu do swojego REST API (np za pomocą Postmana - kolejne słowo klucz dla Ciebie). Jak już wystawisz jeden endpoint to dodawaj kolejne. Jak już ogarniesz co to jest REST API i czym się charakteryzują różne żądania to zacznij pisać małą aplikację opierającą się na bazie danych. Typowy CRUD.

3

Odpuść sobie JavaEE, nie tędy droga - jak będziesz musiał, bo takie są wymogi projektu to dopiero wtedy.
Jeśli już to Spring i SpringBoot, tylko z tego względu, że jest bardzo popularny.

Jak chcesz poćwiczyć i się czegoś nauczyć to startuj z Javą (wersja do wyboru, najlepiej ta na której przerabiasz kurs), do tego biblioteka Javalin albo SparkJava do RESTa, do tego Docker i kontener z Postgresem, do tego jOOQ zamiast Hibernate. Będziesz miał trochę zabawy z setupem, jeśli tego wcześniej nie robiłeś, lecz spróbuj to zrobić bez Springa, najprościej jak się da z użyciem w/w narzędzi.

I postaraj się tak połączyć te klocki, żeby można było zrobić curla (albo strzał Postmanem) na API i żeby pobrało dane z bazy.
Tego może jest sporo, ale i tak prędzej czy później się z tym spotkasz

1

@Samson6803:

A dlaczego jOOQ zamiast Hibernate?

żeby sobie ułatwić życie :D
możesz to przeczytać: https://blog.jooq.org/jooq-vs-hibernate-when-to-choose-which/

jOOQ bardziej przypomina składnię SQL, tylko napisaną w Javie.
HIbernate jest obłożony adnotacjami, zrozumienie tego co robi każda adnotacja, też dodaje "złożoności" w zrobieniu prostych rzeczy.

7

Wypowiem się jako weteran Javy ostatecznie znudzony tą technoligią:

  • Walka w archeologii i monumentalnych technologiach czyli JEE/ EJB/JSF - no ogólnie było to złe, ale dawno temu nic lepszego nie było. JEE była tak zła że doprowadziła do powstania Springa. Podobno teraz jest lepiej, ale wolałbym nie sprawdzać. BTW to że jest lepiej wynika po częście z tego że JSF i Servery aplikacyjne umarły a EJB ewoluowało w stronę lekkiego DI
  • Walka w core'z czyli Spring - ogólnie mówią że 80% pracy w Javie to Spring i Hibernate. Przy czym Hibernate nie jest już w zasadzie frameworkiem do utrwalania, tylko implementacją JPA. Ogólnie najlepszy stack jak chcesz pracować dla pieniędzy. Największym problem jest to że stajesz się bardziej developerem Springa a nie developerem Javy i czasem widać u tych ludzi panikę jesli Spring nie dostarcza do czegoś integracji
  • Walka na zewnętrznych rubieżach czyli bez JEE i Springa. Tutaj czeka przygoda. Co firma to zupełnie inny stack. Z zalet jest to że nie pytają o Springa. Zamiast jednego frameworka do wszystkiego jest wiele różnych kombinacji:
    • DI - Guice (żyje to dalej?), Dagger (ale nie wiem czy to nie było tylko do mobilków)
    • SQL - JOOQ, JDBI
    • Wystawianie RESTa - pełna dowoność, ja używałem DropWizarda, (ale chyba on umiera :( ) i akka-http (biblioteka ze świata Scalowego którą można używać w Javie)
  • Walka w totalnej awangardzie czyli nowe języki na JVM (ech, już nie takie nowe :P ). Przy czym liczą się w zasadzie dwa o dość podobnej składni podstawowej:
    • Kotlin - ma niszę w Androidzie, ale wszystko co można napisać w Javie na standardową JVM można napisać też w Kotlinie
    • Scala - ma niszę w Sparku, ale wszystko co można napisać w Javie na standardową JVM można napisać też w Scala

Ogólnie główna różnica między Kotlinem i Scalą jest taka że społeczność Kotlina jest bardziej skupiona na OOP i wykorzystywaniu narzędzi z Javy. A społeczność Scala - na FP i tworzy wszystkie narzedzia od podstaw. Trochę tacy Pragmatycy vs Idealiści :P

Co do samych ofert na Kotlina i Scalę często są to niestety oferty łączone z Javą (niestety, bo Javę chciałbym już zapomnieć :P). Bo pół systemu mają jeszcze po staremu w Javie a pół już po nowemu w Kotlinie/Scali :D

1

Słowo klucz do google to Java Developer Roadmap 2023, np. takie coś: https://javarevisited.blogspot.com/2019/10/the-java-developer-roadmap.html#axzz7KxRdahXv

2

Ja bym pominął na razie trudniejsze technologie, a zaczął od samej umiejętności programowania: solid, clean code, POPRAWNIE napisane testy, DRY, YAGNI, KISS. To bym wziął na priorytet.

Poszczególne technologie to potem jest już banał.

0
Riddle napisał(a):

Ja bym zaczął nie od trudniejszych techonologii, tylko od samej umiejętności programowania: solid, clean code, POPRAWNIE napisane testy, DRY, YAGNI, KISS. To bym wziął na priorytet.

Poszczególne technologie to potem jest już banał.

Bez technologii mam właśnie wrażenie, że nie mogę stworzyć czegokolwiek na czym mógłbym to ćwiczyć. Wiem, że z pewnością tak nie jest, ale zatrzymałem się na "projektach" opierających się na wykorzystaniu podstaw języka, jakieś zadania algorytmiczne. Nie wiem jak przeskoczyć na jakieś użytkowe projekty w Javie i myślałem, że te technologie dadzą mi odpowiednie narzędzia do tego

0
Samson6803 napisał(a):
Riddle napisał(a):

Ja bym zaczął nie od trudniejszych techonologii, tylko od samej umiejętności programowania: solid, clean code, POPRAWNIE napisane testy, DRY, YAGNI, KISS. To bym wziął na priorytet.

Poszczególne technologie to potem jest już banał.

Bez technologii mam właśnie wrażenie, że nie mogę stworzyć czegokolwiek na czym mógłbym to ćwiczyć.

Możesz!

To co do tej pory umiesz w zupełności wystarczy żeby praktykować wszystko co opisałem: solid, clean code, POPRAWNIE napisane testy, DRY, YAGNI, KISS. Żeby to zrobić wystarczy tak na prawdę znajomość języka programowania.

I jest to znacznie lepsza inwestycja w siebie i w swoje umiejętności na przyszłośc, niż nauka jakiegoś jednego konkretnego frameworka.

0
Riddle napisał(a):
Samson6803 napisał(a):
Riddle napisał(a):

Możesz!

To co do tej pory umiesz w zupełności wystarczy żeby praktykować wszystko co opisałem: solid, clean code, POPRAWNIE napisane testy, DRY, YAGNI, KISS. Żeby to zrobić wystarczy tak na prawdę znajomość języka programowania.

I jest to znacznie lepsza inwestycja w siebie i w swoje umiejętności na przyszłośc, niż nauka jakiegoś jednego konkretnego frameworka.

Muszę w takim razie poszukać lepiej czegoś w internecie, bo na razie znajduje jedynie pomysły na projekt opierające się głównie na jakichś frameworkach, a nie jestem w stanie wymyśleć jak z podstawowej składni, Collection itd. wyłuskać coś więcej niż prosta aplikacja w konsoli.

0
Samson6803 napisał(a):

Muszę w takim razie poszukać lepiej czegoś w internecie, bo na razie znajduje jedynie pomysły na projekt opierające się głównie na jakichś frameworkach, a nie jestem w stanie wymyśleć jak z podstawowej składni, Collection itd. wyłuskać coś więcej niż prosta aplikacja w konsoli.

No to na aplikacji konsolowej nie możesz się uczyć tych praktyk które wymieniłem?

Przy czym od razu mówię, że aplikacja konsolowa to nie musi być jakaś gra która robi Scanner i wczytuje user, tylko jakiś poważny tool cli.

Ja ostatnio sobie napisałem toola, którego się używa tak:

crlf -R folder/ --ext *.txt

Który zmienia końcówki linii w plikach w folderze folder/ z LF na CRLF (można też dodać flagę --lf) która zmienia na LF. Dużo rzeczy jest do napisania: parsowanie argumentów, integracja z systemem plików, same operacje na treści. Wszystko do testowania i refaktorowania.

Poza tym, weź pod uwagę że w takiej aplikacji konsolowej którą napisałeś jest dosyć mało zależności, więc uczenie się wszystkich praktyk będzie dużo łatwiejsze. Jak dodasz springa do aplikacji, to bardzo cieżko będzie Ci się nauczyć pisać chociażby testy zwykłe, bo będzie Ci ciężko rozróżnić co jest faktycznym testem, a co jest zależnością frameworka.

0

Dokładnie, może być zwykła aplikacja konsolowa. Możesz napisać coś w stylu odpalanie jara razem z przekazaniem ściezki do pliku (wybierz sobie rozszerzenie), w którym będziesz miał zbiór danych. A następnie apka będzie czekać na polecenia od Ciebie, którymi wypiszesz jakieś statystyki z tego pliku. Ilośc wierszy, ilość rekordów z konkretnymi warunkami itp. Taka mała baza danych.

2

0
Samson6803 napisał(a):

Bez technologii mam właśnie wrażenie, że nie mogę stworzyć czegokolwiek na czym mógłbym to ćwiczyć. Wiem, że z pewnością tak nie jest, ale zatrzymałem się na "projektach" opierających się na wykorzystaniu podstaw języka, jakieś zadania algorytmiczne. Nie wiem jak przeskoczyć na jakieś użytkowe projekty w Javie i myślałem, że te technologie dadzą mi odpowiednie narzędzia do tego

Hmm ... wyłącznie konsolowe aplikacje, to może być rzeczywiście nużące, przyjmuję do wiadomości
Skok w Springa bez bardzo mocnych fundamentów Javy, wzorców, czystego kodu itd osobiście odradzam.

Ale mam pomysł na przeciwdziałanie tej "nudzie".
Np porobić apki webowe na czymś lekkim. Ja mam przed oczami RatPack, ale rynek jet szerszy.

POD WARUNKIEM, że przyjmiesz do wiadomości, że NIE DA SIĘ zdobywać wiedzę jedynie łatwo sprzedawaną na etacie, że częśc trzeba "zamarnowac". Nie jest prawdziwe zmarnowanie, stąd cudzysłów, bo poszerzasz horyzonty, na inny fw webowy będziesz miał inne spojrzenie "aha, tam było to tak, no ciekawe" ... ale fakt, takie skille nie są wprost sprzedawalne na etacie.

Zainteresowanym potrafię udzielić poparcia myśl o GUI w Swingu (to środowisko - mądrze, prawidłowo użyte, tu model, tam komponent - nie ma działania ogłupiającego), ale w tym przypadku byłoby to daleko idące.

1

Niektóre aplikacje konsolowe mogą być bardzo fajne do pisania.

0
ZrobieDobrze napisał(a):
Samson6803 napisał(a):

Hmm ... wyłącznie konsolowe aplikacje, to może być rzeczywiście nużące, przyjmuję do wiadomości
Skok w Springa bez bardzo mocnych fundamentów Javy, wzorców, czystego kodu itd osobiście odradzam.

Ale mam pomysł na przeciwdziałanie tej "nudzie".
Np porobić apki webowe na czymś lekkim. Ja mam przed oczami RatPack, ale rynek jet szerszy.

Zainteresowałem się Javalin po jednej z wcześniejszych wiadomości, to też mały framework do aplikacji webowych. Z konsolowymi aplikacjami też postaram się popracować, na pewno pomogą w nauce obsługi plików w Javie

3
Samson6803 napisał(a):

Z konsolowymi aplikacjami też postaram się popracować, na pewno pomogą w nauce obsługi plików w Javie

Sądzę, że sporo wiecej.
Pliki? Olać (niemal - z jakiejś perspektywy) ... używam osobisćie raz na wiele miesiecy, i zawsze czytając dok. tego mocno pokręconego API

Myslenie obiektami, elementami funkcyjnymi, rozwiązywanie problemów, to jest ważne.

edit: Wzorce obiektowe (ale to długa opowieśc - jestem wielkim wrogiem wzorców rozumianych jako religia, i wielkim zwolennikiem naturalnego uzycia)

1

Scala / Haskell

Bo życie bez frameworków jest piękniejsze
ale mogę się mylić może @jarekr000000 albo @KamilAdam się wypowiedzą

0

@ZrobieDobrze czy mógłbyś rozwinąć tę myśl o wzorcach "jestem wielkim wrogiem wzorców rozumianych jako religia, i wielkim zwolennikiem naturalnego uzycia"?

2

@ZrobieDobrze czy mógłbyś rozwinąć tę myśl o wzorcach "jestem wielkim wrogiem wzorców rozumianych jako religia, i wielkim zwolennikiem naturalnego uzycia"? — itou123 21 sekund temu

Najładniej mi to pokazała ksiażka (tytułu nie mam pod ręką, ale i tak wyczerpana) nt "co to w ogóle sa wzorce, i jaki jest ich rodowód"
Odwołuje się do architektów budynków "o kurcze, widzę że wszyscy chętnie projektujemy werandę .. w otoczeniu ... - nazwijmy to patio" albo stolarza "o kurcze, widzę że wszyscy od czasu do czasu łączymy prostopadłe deski przez serię trapezowych podcięć, bez gwoździ i kleju - nazwijmy to jaskółczy ogon"
Będziemy się łatwiej porozumiewać. Zdefiniujmy, jakie okolicznosci sprzyjają danemu rozwiązaniu, a które są przewwskazaniem (np jaskółczy ogon nie jest rekomendowany gdy ... )

Ktoś kiedyś (GoF) spisała to radosne "o kurcze, widzę że my wszyscy chętnie ..." i nazwał to Obserwatorem, Fabryką itd...

To jest ta część "naturalna" czy "radosna", właśnie to radosne "o kurczę" jest wyróznikiem

A teraz pańszczyźniano-korporacyjna (wolny wybór z autentycznych sytuacji):

  • w każdym rozwiązaniu musimy użyć trzech wzorców
  • święte wojny nt wzorców jest dokładnie 21
  • musisz użyć wzorca choć komplikuje
  • musisz użyć pięciu wzorców do skrajnie prostych i nie rozwjowych przypadków (FizzBuzzEnterpriseEdition, github)

Warto dodać, pewne elementy zostały przesunięte z częsci "radosnej" do "antywzorców".
Przywołam Singletona (dane statyczne może nie są miodem, ale uważam, ze lepiej miec nazwany wzorzec niż statyczne spagetti), Wstrzykiwanie było wielką radością na pewnym etapie, obecnie jest chłopcem do bicia (zw z przerostem jako mutanta)

@Riddle: uwaga, wulgaryzmy w poście

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