Przyszły backendowiec - Java vs C#? - dylemat, przyszłość obu języków, warunki pracy

1

Mam nadzieję, że to będzie mój ostatni wpis tego typu i wreszcie uda mi się rozstrzygnąć ten dylemt.Jestem na 2 roku informatyki.Podstawy miałem w C#, potem obiektówkę w Javie i teraz algorytmy znowu w Javie.Chcę zostać backendowcem i zastanawiam się od dłuższego czasu nad wyborem między Javą a C#.Do Javy przekonuje mnie większa ilość ofert pracy, większa społeczność i mnogość bibliotek.Do tego jak wcześniej wspomniałem Java wydaje się królować u mnie na studiach.Mam też upatrzoną fajną książke "Kompendium programisty Java" wydanie XI.Jeśi chodzi o minusy, to obawiam się ilości kandydatów na juniora i wymagań, które wydaje mi się, że mogą być większe niż w przypadku C#.Do tego dochodzi to czy nie pogubie się w tych różnych frameworkach i bibliotekach i czy nie trafie na jakiś straszny legacy code no i jaka będzie przyszłość Javy mimo, że wiem, że pracy będzie nadal dużo w tym języku.Co do C# to podoba mi się, to, że składnia jest trochę bardziej przejrzysta i nowoczesna, wsparcie MS i to, że .NET stał wieloplatformowy oraz to, że próbuje objąc różne dziedziny, backend, apki mobilne, gry, teraz przez tego Blazora chyba frontend też, więc C# wydaje mi się taki bardziej wszechstronny i bardziej przyszłosciowy.Misem jest na pewno to, że jest mniej popularny niż Java, mniejsza społeczność no i jakoś nie mogę znaleźć fajnej książki po polsku do niego (tak, tak, wiem, że MC docs ( ͡° ͜ʖ ͡°)).Druga sprawa to warunki i jakość pracy w tych językach o ile da się tak jednozancznie to określić.Gdzie jest więcej januszowych firm? Gdzie jest więcej g**no kodu, z którym trzeba pracować? Gdzie jest więcej legacy code? W czym powstaje więcej nowych projektów? Podsumowująć mam trochę mętlik w głowię i mam nadzieję, że mi pomożecie trochę to rozraśnić.Zapraszam do dyskusji i głosowania w ankiecie.

5

IT szybko się zmienia. Jak już chcesz iść w jakiś język to polecam Angielski. :)

Moim zdaniem przede wszystkim warto być dobrym programistą, bo takich jest stosunkowo mało.
Jeżeli masz do wyboru te dwa języki to wybierz taki, który Cię bardziej interesuje, bo są bardzo podobne i wydaje mi się, że oferty też.

5

Java - jest trochę więcej dobrych narzędzi od nieproducenta języka.
Poza tym to kolejny wątek- wojenka. Język wybrany jako pierwszy ma to do siebie, że jest... pierwszy a bynajmniej nie ostatni. Nie dość, że rynek się zmieni to i język może się znudzić.

1

Mnogość ofert pracy wynika cześciowo z mnogości frameworków i tooli. Nie wszystkie ogłoszenia Java będą dla Ciebie.

3

Jak wybierasz Javę to łatwiej zmienic się na inny język typu Kotlin/Scala.

1
PerlMonk napisał(a):

Język wybrany jako pierwszy ma to do siebie, że jest... pierwszy a bynajmniej nie ostatni. ...

Skąd wiesz, że kolega nie planuje kariery w postaci "informatycznego dziadka", 30 lat z jednej raz nabytej wiedzy?
;)

8

Lata mijają a tutaj się nic nie zmienia.

11

Nie możesz się zdecydować. Chcesz, żeby inni ludzie w internetowej ankiecie wybrali Ci język. Powtarzasz pytania na forum.
C# zdecydowanie.

1

Jedyny argument za javą jaki potrafię znaleźć to większa ilość ofert pracy. To też minus bo ludzie patrzą na statystyki i bezmyślnie rzucają się na języki na samym szczycie co skutkuje tym że kandydatów przybywa nie liniowo w stosunku do ilości ofert a wykładniczo - w rezultacie moim zdaniem znalezienie pracy w javie trwa dłużej. Język sam w sobie mniej interesujący niż jakikolwiek inny z którym miałem kontakt, choć w ostatnich wersjach trochę zaczyna nadganiać - przykładowo lambda expressions weszły do javy zaledwie 7 lat po C# - co prawda jeszcze nie można z nich w wielu projektach korzystać bo extended support dla javy 7 jest do lipca 2022 a w dużych korporacjach wzbraniają się od upgrade'u tak długo jak to możliwe, z kolei duże korporacje to główne miejsce gdzie java jest w użytku; im mniejsza firma tym nowsze i ciekawsze rozwiązania są w użyciu, więc java jest raczej rzadko spotykana. Z kolei z javy łatwo przejść na kotlina który jest taką połataną javą z featurami z 21 wieku. Dużo zależy - czy czujesz jakikolwiek pociąg do programowania, czy chcesz czerpać z tego przyjemność, czy liczy się głównie dla ciebie kasa i stabilność zatrudnienia.

0

@jarekr000000: Dlaczego C# zdecydowanie?
@obscurity: Lubię programować i zależy mi na dobrych warunkach pracy, ale pieniądze i stabilność też są ważne o ile nie ważniejsze.Za coś trzeba żyć i mieć komfort psychiczny w postaci stabilności zatrudnienia.

1

Bo w C# w wiekszosci jest one-way-to-do-it. Nie bedziesz musial ludzi pytac o decyzje ;)

9

@Edelner:

Dlaczego C# zdecydowanie?

Bo lepiej żebyś męczył gości od C#. Poza tym tam są sami przyjaźni i wyrozumiali ludzie. Nie to co w javie :-)

2

Tl;dr, ale wszystko ma swoje plusy i minusy. Java wydaje się dawać większe perspektywy, wybór bibliotek, języków na JVM i ogrom ofert pracy. Z drugiej strony C# ma mniej legacy i w sumie to żadna z minionych technologii w C# (Web Forms czy Windows Forms) nie budza tak negatywnych emocji jak legacy Java, mniejsza konkurencja, świetne IDE, cywilizowany język, który nie potrzebuje być zastępowany alternatywami typu Kotlin i pragamtyczni programiści.

4
Edelner napisał(a):

@jarekr000000: Dlaczego C# zdecydowanie?

@obscurity: Lubię programować i zależy mi na dobrych warunkach pracy, ale pieniądze i stabilność też są ważne o ile nie ważniejsze.Za coś trzeba żyć i mieć komfort psychiczny w postaci stabilności zatrudnienia.

Wybierz COBOLa. Java to przerost formy nad treścią. W COBOLu kasa się zgadza, nauki masz na 2 tygodnie. Warunki dobre. Na Coursera są prawilne kursy.
Komfort psychiczny zapewniony.
W Javie to nigdy nie wiadomo czy trafisz na 1.3, 1.8 czy może 11.
Jakieś testy wydajnościowe, analiza statyczna, jakoki, mejweny czy gradle, lomboki, guławy, commonsy, jamle - kiedyś tego nie było i ludzie żyli.
Teraz nawet pętle trzeba uzasadniać. Normalnie z nudów ludzie w tej dżawie wyprawiają cuda. Przykładowo w jednym projekcie strzelają celowo do programu i sprawdzają czy nadal działa.

2

Jeśli chcesz zostać 'backendowcem' to osobiście polecałbym zamiast skupienia się na pojedynku Java vs C#, zajęcie się zrozumieniem pojęć wokół tego gdzie będziesz te języki używać. Czyli zrozumienie dobre baz danych, sieci, konteneryzacji itp.
Jednak oczywiście nie jest też tak, że sam język nie jest ważny bo większość pytań rekrutacyjnych dotyczy właśnie tego. Z mojego doświadczenia wiem że studenci na ogół najliczniej składają CV na staże w Javie bo jest to najczęściej używany język na studiach. Tak więc rywalizacja o staż jest dość spora.
Jeśli chodzi o legacy code i klepanie starych projektów to raczej króluje tutaj Java, jednak raczej nie często dostaniesz na początku wielką bazę kodu do utrzymania. Generalnie koniec końców i tak to musi się rozbić o Twoją preferencję Javy lub C#. W obu przypadkach możesz znaleźć dobrą pracę jak również w obu przypadkach możesz dostać g**no kod. Polecam zapoznanie się Kotlinem, w miarę nowy język więc projekty też raczej są nowe i ciekawe.

0
WJh3NiX.png

jak inne technologie kojarzy się z firmami typu rust mozz, .net ms, to teraz chyba bardziej jb aniżeli oracle

0

Nie jest trochę tak, że to nie tylko wybór języka, ale też całego uniwersum?

IMO jeśli ktoś szanuje MSSQL, dobrze się czuje w Windows Server i lubi autoryzację userów przez AD, to w C# i .net się odnajdzie jak ryba w wodzie. Niby teraz dotnet core jest już multiplatformowe, ale chyba jeszcze nie wiadomo, jak ostatecznie wypali ten projekt.

Java pod tym względem wydaje się bardziej uniwersalna - jest powszechnie stosowana w takim klasycznym enterprise, ale też i w obszarach, gdzie konkuruje z Ruby, PHP czy node.

Jeśli piszę bzdury, to proszę śmiało komentować :).

3

@roSzi: Właśnie o to chodzi, że język to tylko narzędzie, które jest cząstką czegoś większego. Zadawanie pytania "Java czy C#" to jakby mechanik pytał "Używać klucza czy młotka" w momencie kiedy nie ma naprawienia do żadnego samochodu. Mechanik naprawi każdy samochód i po wszystkim nikt nie będzie nawet wiedział jakie narzędzia zostały użyte. Podobnie z budowlańcami. No bo kto mieszkając w bloku zastanawia się jaka betoniarka była używana podczas budowy? A programiści lubią dyskutować i rozpisują się o narzędziach. Oczywiście w innych zawodach też są takie dyskusje, ale nie w takim stopniu.

1
Edelner napisał(a):

Gdzie jest więcej januszowych firm? Gdzie jest więcej g**no kodu, z którym trzeba pracować? Gdzie jest więcej legacy code?

Pewnie w tym, co jest popularniejsze.

W czym powstaje więcej nowych projektów?

Pewnie w tym, co jest popularniejsze.

Ogólnie - więcej ofert pracy, więcej słabych projektów, jak i więcej lepszych będzie w tym, co jest popularniejsze. Efekt skali.
Tylko będzie tam też większa konkurencja ze strony bootcampowców.

stivens napisał(a):

Bo w C# w wiekszosci jest one-way-to-do-it. Nie bedziesz musial ludzi pytac o decyzje ;)

Tak, tylko zupełnie odwrotnie To w .NET jest wybór, w Javie jest Spring.

roSzi napisał(a):

IMO jeśli ktoś szanuje MSSQL, dobrze się czuje w Windows Server i lubi autoryzację userów przez AD, to w C# i .net się odnajdzie jak ryba w wodzie.

No nie wydaje mi się, jak się robi system intranetowy dla firmy stojącej na Windowsach, to integrację z AD trzeba będzie zrobić niezależnie od technologii. A jak się robi coś publicznego, to AD nie będzie potrzebne. Analogicznie z MSSQL, jeśli klient go używa, to trzeba się połączyć, nawet z PHP.

Niby teraz dotnet core jest już multiplatformowe, ale chyba jeszcze nie wiadomo, jak ostatecznie wypali ten projekt.

Tak to można było 3 lata temu pisać.

Java pod tym względem wydaje się bardziej uniwersalna - jest powszechnie stosowana w takim klasycznym enterprise, ale też i w obszarach, gdzie konkuruje z Ruby, PHP czy node.

Java na pewno chodzi w większym enterprise, ale jako konkurencja z rynkiem RoR/PHP (małych/średnich systemów) to chyba jednak .NET

0
somekind napisał(a):
roSzi napisał(a):

IMO jeśli ktoś szanuje MSSQL, dobrze się czuje w Windows Server i lubi autoryzację userów przez AD, to w C# i .net się odnajdzie jak ryba w wodzie.

No nie wydaje mi się, jak się robi system intranetowy dla firmy stojącej na Windowsach, to integrację z AD trzeba będzie zrobić niezależnie od technologii. A jak się robi coś publicznego, to AD nie będzie potrzebne. Analogicznie z MSSQL, jeśli klient go używa, to trzeba się połączyć, nawet z PHP.

Jeśli wchodzisz do przedsiębiorstwa, gdzie cały stack jest z rodziny MS (Windows Server, MSSQL, wszystkie usługi uwierzytelniane w AD i rasowy admin od przydzielania uprawnień), to sytuacja uzasadnia wybór C# i .NET i spowoduje, że wiele rzeczy będziesz miał rozwiązanych out-of-the-box, albo zwyczajnie wiarygodniej i stabilniej. Dla wielu konkurencyjnych języków to są obszary bardzo nisko na liście priorytetów, bo 95% ich użytkowników wybiera CentOS, MySQL/Postgres/NoSQL itp. Potem widzisz biblioteki na githubie, które ostatni commit mają sprzed 5 lat. Ale ok, to tylko moja opinia.

0
roSzi napisał(a):

Jeśli wchodzisz do przedsiębiorstwa, gdzie cały stack jest z rodziny MS (Windows Server, MSSQL, wszystkie usługi uwierzytelniane w AD i rasowy admin od przydzielania uprawnień), to sytuacja uzasadnia wybór C# i .NET i spowoduje, że wiele rzeczy będziesz miał rozwiązanych out-of-the-box, albo zwyczajnie wiarygodniej i stabilniej.

No owszem. Ale nie zawsze tworzy się "dla przedsiębiorstwa". Czasem tworzy się "dla ludzi", np. sklepy, banki, linie lotnicze, i inne tego typu portale.
Ja już nawet nie pamiętam kiedy ostatnio AD albo MSSQL widziałem.

Potem widzisz biblioteki na githubie, które ostatni commit mają sprzed 5 lat. Ale ok, to tylko moja opinia.

No różne biblioteki są na GitHubie, jedne porzucone, inne zakończone, inne ciągle rozwijane - ale trochę nie wiem jaki to ma związek z wyborem języka/technologii.

1

Odpisze w nowym poście. Scala powstała w 2004 roku jako język który miał łączyć OOP i FP. Powstała zarówno na CLR i JVM ale wersja na clr został porzucona. Bodźcem z kolei dla Kotlina były wojenki Google z Oracle odnośnie praw autorskich. Java rzeczywiście przez pewien czas była w daleko w tyle za C#, ale ten dystans znacznie zmalał a nawet w Javie zaczynają być wprowadzane elementy których C# nie na, np Sealed Class
http://openjdk.java.net/jeps/360
Po prostu bawi mnie podejście c sharpowcow że ten C# jest taki dobry i to dlatego nie powstają alternatywy.
Języki się starzeją i na ogół powstają nowe, bardziej spójne niż z pierdyliardem ficzerów.

Edit
To czego Javovcy szukają w Kotlinie i Scalii
nie znajdą w C#.

1
scibi92 napisał(a):

Po prostu bawi mnie podejście c sharpowcow że ten C# jest taki dobry i to dlatego nie powstają alternatywy.

C# nie jest "taki dobry" jest po prostu "wystarczająco dobry", aby nie było takiego parcia na alternatywy.

Edit
To czego Javovcy szukają w Kotlinie i Scalii
nie znajdą w C#.

Jedna osoba mieszka w kawalerce. Mimo ciasnoty i braku możliwości organizowania imprez ma jedzenie, ciepło i nie moknie podczas deszczu.
Druga osoba mieszka w kartonie po telewizorze. Na ogół jest zimno, leje się na łeb, no i nie może przekroczyć 10cm przekroju, bo karton się rozpadnie.
Kto ma większą motywacje, aby zmienić lokum?

3

Java, dlatego że jest lepsza

1

@somekind: to jest Twój punkt widzenia. Jeśli dla Ciebie to że musisz napisac stream przed map jest robi taką różnice że nawet o tym piszesz to cóż...
Mnie w Kotlinie zainteresowały elementy których nie było kilka lat temu w C# a i nadal nie ma. C# 9 ma rekordy, a Kotlin miał kilka lat temu. Kotlin ma val, C# i Java mają tylko var. W C# nie ma sealed class itp.
Kotlinowy interfesj Collection nie ma metod void, C# i Javove mają. W C# też jest kilka raków (poza oczywiście zrytym interfejsem kolekcji) takich jak przekazywanie przez referencje czy istnienie wskaźników.

1

co z tymi wskaźnikami których to używa się w bardzo specyficznym kodzie? czyt. raczej nie spotkasz ich w enterprise™

1

Słowo kluczowe: raczej. Niepotrzebny element jeśli język ma być wysokopoziomowy.
@somekind pokazywał jak można rozwalić generyki w Javie przez stosowanie raw Collection, i jakoś go nie obchodziło że nikt tego nie robi.
Edit
Nie chce mi się kłócić czy Java czy C# są lepsze, po prostu śmieszy mnie podejście niektórych osób w nim piszących.

1

Ze swojej strony mogę dać radę:
Opóźniaj moment wyboru jak najdłużej. Jeśli coś napisałeś w Javie sprawdź, jak to będzie w C#, a jeśli napisałeś coś w C# zobacz, jak można to zrobić w Javie. W ten sposób sam wyrobisz sobie pogląd.
W mojej opinii C# jest bardziej nowoczesny (w końcu powstał 10 lat po Javie), za to w Javie aktualnie jest więcej ofert pracy i więcej się zarabia.

Wybierając język, pośrednio wybierasz całą infrastrukturę do wytwarzania i uruchamiania aplikacji.
IDE: po jednej stronie znakomite Visual Studio, po drugiej robiące robotę IntelliJ IDEA, Eclipse czy NetBeans
System: C# to z reguły Windows Serwer, Java to głównie Linuxy i Unixy
Serwer aplikacji: produkcja to głównie IIS a po drugiej stronie do koloru i wyboru: Tomcat, JBoss, WebLogic czy WebSphere
Bazy danych: po jednej stronie SQL Server, po drugiej Oracle czy Postgres.

Oczywiście pewne rozwiązania można używać krzyżowo, ale na produkcji rzadko spotykane są takie kombinacje.

O ile te języki są dość do siebie podobne to na przykład to na przykład bazy danych SQL Server i Oracle to dwa różne światy. Widziałem aplikację, której cała logika biznesowa była napisana w PL/SQL-u. Backend napisany w Javie miał za zadanie jedynie prezentować dane a do zapisywania informacji na bazie służyły odpowiednie procedury na bazie. Coś w świecie Microsoftu byłoby antywzorcem, w Oracle miało swoje niepodważalne atuty. Tak samo rożnice wystepują w serwerach aplikacji: IIS można urchomić tylko jeden w systemie, ilość serwerów np. JBoss ograniczona jest tylko możliowścimi serwera itd.

1

@adam_qwe:

Wybierając język, pośrednio wybierasz całą infrastrukturę do wytwarzania i uruchamiania aplikacji.
IDE: po jednej stronie znakomite Visual Studio, po drugiej robiące robotę IntelliJ IDEA, Eclipse czy NetBeans
System: C# to z reguły Windows Serwer, Java to głównie Linuxy i Unixy
Serwer aplikacji: produkcja to głównie IIS a po drugiej stronie do koloru i wyboru: Tomcat, JBoss, WebLogic czy WebSphere
Bazy danych: po jednej stronie SQL Server, po drugiej Oracle czy Postgres.

Ja rozumiem że może stosunkowo i ze względu na stare aplikacje taki podział może mieć sens, ale niemniej jednak współczesność jest trochę inna i o wiele bardziej elastyczna, więc może unikajmy wbijania ludziom że C# = IIS+SQL SERVER+WIN Server, bo nikt nie broni postawić web apki na nginxie+postgresie+raspberry pi z pochodną debiana w kilka minut, bez żadnego problemu.

7

@adam_qwe:

Serwer aplikacji: produkcja to głównie IIS a po drugiej stronie do koloru i wyboru: Tomcat, JBoss, WebLogic czy WebSphere

Co Ty piszesz? Nie ma takich rzeczy jak Jboss, WebLogic czy WebSphere ani nawet Tomcat.
To znaczy zasadzniczo są i w niejednej firmie się spotka (sam spotykam), ale:

Po pierwsze: To zrobili naziści (architekcji) - my, (programiści java) byliśmy wtedy na wakacjach
Po drugie: przeprosiliśmy
Po trzecie: zanim OP trafi do pracy to ma już dużą szansę uniknąć

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