Java czy C# do fullstack developera?

1

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?

5

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.

2

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

1

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.

9

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.

2
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"

1

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.

1

Nie ma znaczenia.

0

Co ma wieksza przyszlosc typescript czy kotlin? Nie chce uczyc sie jaw nie lubie ich.

2

"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 :]

0
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

0

Ale ja ich nieporownywalem do czego sie je stosuje, tylko pytalem o ich przyszlosc w stosunku do pracy i plac.

0

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.

0

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

0
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 ;)
*

3

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