Hej, po wielu latach siedzenia we froncie chce sie zaczac rozwijac w kierunku backendu/fullstacku, i mam wybor pomiedzy tymi technologii. Jakie maja wady i zalety? Czy ktoras z nich jest mocniejsza/bardziej wymagana na rynku?
Ja bym brał C#. Jak dla mnie, ma niższy próg wejścia. Już na start Visual Studio dużo ułatwia. Właściwie nie musisz tam nic konfigurować, po prostu tworzysz nowy projekt i działasz. Masz framework, jakąś bazę danych i lokalny serwer zapewnione przez IDE. A "jedyna słuszna dokumentacja" wprowadzi Cię do technologii, których chcesz używać.
W Javie trzeba trochę bardziej podrążyć, przynajmniej na początku.
Wydaje mi się że java popularniejsza ale jak już pisali konfiguracja tego to męka :) jak już projekt hula to spoko, ale stawiać od nowa to zawsze jest zabawa
Java i c# to dwie strony tej samej monety. Są bardzo podobne. Jak dla mnie to c# bardziej spełnia zasadę najmniejszego zaskoczenia. Ale generalnie język to mały pikuś. Duży pikuś to tzw ekosystem, czyli tule, społeczność, przykłady, materiały itp itd. - zimna pitulka dziś, 06:34
biela_ napisał(a):
Wydaje mi się że java popularniejsza ale jak już pisali konfiguracja tego to męka :) jak już projekt hula to spoko, ale stawiać od nowa to zawsze jest zabawa
Ekosystem Javy w mojej opinii jest bardziej "demokratyczny", tzn w praktycznie każdym obszarze jest wielość konkurencyjnych architektur, implementacji itd... (pominę pseudo-monopol Springa). Dla mnie ta wielość to zaleta, ale wierzę, że dla kogoś może być wadą.
Jak kiedyś będziesz chciał wychylić głowę poza web-backend, może to być zaletą.
Język C# jest o 10 lat nowszy, więc podczas jego tworzenia powstała nowocześniejsza koncepcja (np propertiesy wyrażone wprost, a nie przez konwencję, i inne rzeczy). Wady też ma, np powstanie Frameworka stricte pod Windows, dopiero "wersja 2.0" czyli Core jest przenośne do spodu.
Jako że pisałem .NET/ASP MVC -> Java/Spring -> .NET Core -> Scala to się wypowiem:
.NET i Java to dwa zupełnie różne podejścia. .NET stawia na out-of-the-box, M$ dostarczy Ci wszystko: IDE, ORM, CI Server, framework webowy, system buildu (MSBuild). Jeżeli piszesz CRUDa lub przeciętną apkę biznesową to przekonasz się że jest o wiele prościej zacząć. Java z drugiej strony stawia na otwartość, prawie wszystko jest w co najmniej dwóch wersjach zaczynając od systemu buildu: Gradle i Maven, ORM: Hibernate lub MyBatis, nawet framework do kolekcji (listy, zbiory) nie jest jeden tylko: Standardowy, od Googla (Guava), Vavr i Eclipse Collections. Inny przykład to domyślna pula wątków w .NET'cie jest jedna globalna, która sama się reguluje ty tylko Task.Start(() => robota()) i zrobione. W javie jest co prawda pula globalna (ForkJoinPool) ale wszyscy i tak sobie robią własne lokalne pule za pomocą Executors.newXXX(). Kolejna opcja to tuning, prawie nigdy nie zdarzyło mi się tunować GC w .NET'cie (choć ma takie same pauzy jak ten w Javie BTW) za to w Javie tego nie unikniesz trzeba znać przynajmniej pobieżnie przełączniki JVM'a, samych algorytmów GC też jest co najmniej 5. M$ ostatnio prawie całe API przepisał na async, jeżeli przesiadasz się z TypeScript'u to może być to dla Ciebie znajome, w Javie jesteś zmuszony używać Rx/Reactor (choć są ambitne plany wprowadzenia green-threadów - project loom).
Jeżeli chodzi o modną ostatnio chmurę to wydaje się że Java ma tutaj przewagę. Dużo infry chmurowej (Kafka, Zookeeper, Spark, Hadoop, ElasticSearch, Cassandra) jest w Javie, teraz się to zmienia na korzyść Go. Generalnie jak chcesz pisać mikroserwisy w dużej skali to Java ma lepsze frameworki i klientów do wspomnianych komponentów.
Jeżeli chodzi o same języki programowania, Java to stary język i często ssie, sporo ludzi eksperymentuje teraz z Kotlinem, jeżeli zaczynasz naukę i wybierzesz JVM'a to radzę poważnie spojrzeć na ten język programowania od JetBrains. Podstawowy problem JVM'a to brak wsparcia prawdziwych typów generycznych, zamiast tego jak komilujesz List<Integer>
to dostajesz pod spodem List<Object>
,
w praktyce nie sprawia to aż tak dużych problemów ale wymaga przyzwyczajenia. C# jest jednym z najlepszych języków w których pisałem, miejsca ustępuje tylko Rocket/Scheme :D Zarówno w przypadku C# (VisualStudio, VSCode) jak i Javy (IntelliJ, Eclipse) IDE w wersji "community" są dostępne za darmo. Eclipse jest całkowicie za darmo i można go używać do tworzenia komercyjnych projektów.
Generalnie nie zgadzam się że setup projektu w Javie trwa dłużej, trzeba używać generatorów najprostszy to gradle init --type java-application
lub https://start.spring.io/ Ogólnie naukę springa zaczyna się od sciągnięcia apki demo PetProject i rozpoczęcia hackowania.
Ogólnie proste i przeciętne aplikacje biznesowe lepiej się piszę w .NET'cie. Skomplikowane systemy (Amazon) to raczej domena Javy.
Ostatnia ważna rzecz: jeżeli jesteś fanem Linuxa lub Mac'a to wybierz Javę, mniej problemów będzie po drodze. Co prawda .NET Core chodzi na wszystkim ale już VisualStudio i toole GUI np. Azure Service Bus Explorer już nie. Wybierając .NET jesteś defacto przykuty do Windy - dla mnie to był deal-breaker, pracuje teraz na mac'u a na domowym PC mam Linux'a - do Windy wracać nie zamierzam.
Podsumowując, w przeciwieństwie do tego co niektóre firmy sądzą na rekrutacjach obie platformy są do siebie bardzo podobne, Mid'owi nie powinno zająć dłużej niż 3 msc przestawienie się z jednej na drugą a kod biznesowy (a więc w bebechach aplikacji) zapewne jest w stanie zmieniać od pierwszego dnia. Rozejrzyj się po lokalnym rynku pracy w Wawie ofert z Javy więcej, wydaje mi się że we Wrocku i Krk jest na odwrót.
0xmarcin napisał(a):
Jako że pisałem .NET/ASP MVC -> Java/Spring -> .NET Core -> Scala to się wypowiem:
Java z drugiej strony stawia na otwartość, prawie wszystko jest w co najmniej dwóch wersjach ... , ORM: Hibernate lub MyBatis,
Uprościłeś. Pierwszy poziom: JPA / non JPA.
JPA ma 2-3 istotne implementacje (w tym Hibernate - ja lubię Eclipselink) i kilka fikuśnych (np zintegrowanych nad bazą obiektową itd)
non-JPA to blisko 5-10 istotnych dla rynku bibliotek
Jeżeli chodzi o same języki programowania, Java to stary język i często ssie, sporo ludzi eksperymentuje teraz z Kotlinem, jeżeli zaczynasz naukę i wybierzesz JVM'a to radzę poważnie spojrzeć na ten język programowania od JetBrains.
Myśl o Kotlinie popieram.
Powiedzmy wyraźnie: to język JVM, czyli w olbrzymim stopniu kompatybilny z Javą.
To ten sam wybór w sensie tego wątku. Można wystartować z Javą i przemieszczać się do Kotlina
PS. Wzmiankujesz o IDE JetBrains IntelliJ Community oraz Eclipse.
Jeszcze jest Netbeans, wydaje mi się bardziej ceniony od Eclipse (a na pewno krócej się go "urabia" pod siebie), i zawiera za darmo elementy niedostępne w "Community"
Idź w Jave.
Ja siedzę w .Net i widzę, że ofert pracy jest połowa tego co na Jave.
A to przekłada się na szanse otrzymania większej pensji.
Gdybym zaczynał od 0, wybrałbym Jave.
Nie ma znaczenia.
Co ma wieksza przyszlosc typescript czy kotlin? Nie chce uczyc sie jaw nie lubie ich.
"Większą" przyszłość mają języki, które powstaną po kotlinie i typescript, a także języki, które powstały przed nimi :]
Kreciarz_ napisał(a):
Co ma wieksza przyszlosc typescript czy kotlin? Nie chce uczyc sie jaw nie lubie ich.
To są zupełnie nieporównywalne języki.
Zależy co w życiu chcesz
BTW co do użycia liczby mnogiej "nie lubię jaw" tzn że niewiele wiesz. Obie, tj Java i "Java w wersji Script" to zupełnie inne języki i tylko klamerki { } mają podobne
Ale ja ich nieporownywalem do czego sie je stosuje, tylko pytalem o ich przyszlosc w stosunku do pracy i plac.
nieporownywalem ich tylko pytalem ktory ma wieksza przyszlosc? Google moze porzuci kotlina jak powstanie fuchsia os i zostanie dart i go. - Kreciarz_ 2 minuty temu
Nie da się tak "oszczędzać" nauki, żeby uczyć się TYLKO tego co w sposób zagwarantowny ma przyszłość.
Co więcej, w procesie edukacji niejeden język tzreba "zmarnować" tzn nauczyć się i nie pracować w nim komercyjnie. To jest trening myślenia w różnych paradygmatach, szeroki horyzont itd... Coś zupełnie odwrotne do "nie lubienia obu Jaw" (dla mnie klapki na oczach)
W tym sensie Kotlin da Ci rozwój, to bardzo ciekawy język.
Ale google moze porzucic kotlina jak powstanie fuchsia os. Dlatego nie promuja juz nawet swojego go tylko dart i flutter. Ba, malo tego dart z flutterem ma byc wykorzystany do pisania aplikacji okienkowych na chromium os i unixa. Canonical tez to rozwiazanie promuje.
https://bulldogjob.pl/news/1185-flutter-dostepny-do-tworzenia-apek-na-linuksie
AnyKtokolwiek napisał(a):
Nie da się tak "oszczędzać" nauki, żeby uczyć się TYLKO tego co w sposób zagwarantowny ma przyszłość.
Jeden wyjątek. Jedna firma i jej ekosystem. Apple
Objective-C
First appeared 1984
** 36 years ago**
Jego następca
Swift
First appeared June 2, 2014;
6 years ago
Nie znam żadnego programisty Apple który by marudził jak mu źle, nudno, mało zarabia itd
*OK może się maskują i pochlipują po kątach kiedy nikt nie widzi ;)
*