← Wszystkie wpisy

C# czy Java na start? Praktyczna odpowiedź

Oba języki dają pracę w Polsce. Realna różnica jest w tym, jak szybko zobaczysz działający efekt i ile narzędzi musisz poznać, zanim napiszesz coś sensownego.

Artur Kot 9 min czytania

Masz otwarte dwie zakładki. W jednej kurs Javy, w drugiej kurs C#. Oba wyglądają sensownie, oba obiecują pracę i nie chcesz stracić pół roku na wybór, który okaże się pomyłką.

Dobra wiadomość: nie okaże się pomyłką. Gorsza: pytanie „C# czy Java” postawione w ten sposób nie ma dobrej odpowiedzi, bo pyta o właściwość języka, a decyduje coś innego.

Kryterium, które faktycznie rozstrzyga

Nie składnia ani wydajność. Nie to, co ktoś napisał na forum o typach generycznych albo o tym, że jeden język jest „poważniejszy” od drugiego.

Rozstrzyga długość drogi od „nic nie umiem” do „mam coś, co działa i mogę to komuś pokazać”.

Tam odpada większość ludzi, i nie na wskaźnikach ani na wielowątkowości, ale dwa tygodnie wcześniej, przy konfiguracji środowiska, kiedy jeszcze nic nie umieją i już są zmęczeni. Sześć miesięcy nauki wygrywa nie ten, kto wybrał lepszy język, ale ten, kto po trzech tygodniach nadal siadał wieczorem do komputera.

Wszystko inne jest wobec tego drugorzędne.

Rynek pracy: policz sam, nie wierz artykułom

Zanim zdecydujesz, otwórz Just Join IT albo No Fluff Jobs. Ustaw filtr na juniora, wpisz oba języki po kolei, zawęź do swojego miasta i policz ogłoszenia.

Dziesięć minut, aktualne dane, zero cudzych opinii. To lepsze źródło niż jakikolwiek tekst, w tym ten, bo ogłoszenia z tego tygodnia mówią o rynku więcej niż moje obserwacje z zimy.

Prawdopodobnie zobaczysz coś nudnego: liczby są zbliżone. Java trzyma mocną pozycję w bankowości, ubezpieczeniach i dużych systemach korporacyjnych. C# znajduje się głównie w firmach produktowych, w software house’ach robiących systemy dla biznesu, w integracjach i w Unity. W Warszawie, Krakowie, Wrocławiu i Trójmieście jest jedno i drugie, w podobnych ilościach i w podobnych widełkach.

Właśnie dlatego rynek nie jest tu kryterium rozstrzygającym. Gdyby jeden język miał trzy razy więcej ofert dla juniora, cała ta rozmowa byłaby krótka i nie pisałbym tego tekstu.

Pierwszy tydzień wygląda inaczej

Tutaj różnica jest realna i mierzalna w minutach.

W C# instalujesz .NET SDK, tworzysz plik, piszesz jedną linię:

Console.WriteLine("Cześć");

Uruchamiasz:

dotnet run

Program działa. Nowsze wersje C# nie wymagają w pliku startowym ani klasy, ani metody Main, a dotnet run sam kompiluje i uruchamia.

W Javie ten sam program potrzebuje klasy i metody main:

public class Program {
    public static void main(String[] args) {
        System.out.println("Cześć");
    }
}

Trudne to nie jest. Ale każde z tych słów kluczowych jest pytaniem, na które nie umiesz jeszcze odpowiedzieć, a zadajesz je sobie w pierwszej godzinie nauki. Dlaczego public? Co znaczy static, i po co tablica String[], jeśli nie przekazujesz żadnych argumentów.

Odpowiedź „na razie tak zapisz, wyjaśnimy za trzy rozdziały” jest poprawna dydaktycznie i męcząca w praktyce, bo uczysz się wtedy przepisywać, a nie rozumieć.

Do tego dochodzi wybór narzędzi. W ekosystemie Javy prawie natychmiast trafiasz na decyzję Maven czy Gradle, a obie odpowiedzi wymagają, żebyś zrozumiał system budowania projektu, zanim napiszesz cokolwiek większego niż jeden plik. W .NET polecenia dotnet new, dotnet add package i dotnet test wystarczają na bardzo długo i uczysz się ich po jednym, wtedy gdy są potrzebne.

Po miesiącu różnica przestaje być językowa

Wygląda to wtedy tak samo w obu światach: pętle, kolekcje, klasy, interfejsy, wyjątki. Te same pojęcia, inny zapis.

Porównaj filtrowanie listy. W C#:

var dorosli = osoby.Where(o => o.Wiek >= 18).ToList();

W Javie:

var dorosli = osoby.stream().filter(o -> o.getWiek() >= 18).toList();

Jeśli rozumiesz jedno, drugie przeczytasz bez kursu. Tak wygląda większość Twojej dalszej nauki, więc pierwotny wybór traci znaczenie szybciej, niż się wydaje przy tych dwóch otwartych zakładkach.

Kiedy sensowniej zacząć od Javy

Krótsza droga nie zawsze wygrywa.

Jeśli celujesz w konkretny bank, firmę ubezpieczeniową albo dużą instytucję i widzisz w ich ogłoszeniach wyłącznie Javę, ucz się Javy. Rekrutacja patrzy na stack, którego używa zespół.

Drugi powód jest ważniejszy niż cała reszta tego tekstu: jeśli masz w otoczeniu kogoś, kto zna Javę i zgodzi się czasem przeczytać Twój kod, wybierz Javę. Mentor, który w środę wieczorem odpowie na pytanie blokujące Cię od dwóch dni, jest wart więcej niż dowolna różnica w składni, w narzędziach i w liczbie ogłoszeń razem wzięta.

Trzeci: Android. Kotlin jest tam dzisiaj domyślny, ale to ta sama maszyna wirtualna i ta sama biblioteka standardowa, więc wiedza przenosi się prawie w całości.

Argumenty za C#

Zacznij od C#, jeśli uczysz się sam. Krótszy program startowy, jedno narzędzie wiersza poleceń, jedna dokumentacja od jednego producenta. Mniej decyzji w tygodniu, w którym każda decyzja jest kosztem.

Zacznij od C#, jeśli interesują Cię gry. Unity to C# i nie ma tu realnej alternatywy po stronie Javy.

Ostatni argument jest najbardziej praktyczny: przy zbliżonym rynku pracy lepiej startować tam, gdzie pierwszy działający program jest bliżej, bo to jedyna zmienna, na którą naprawdę masz wpływ.

O co pytają na rozmowie na juniora

Warto to wiedzieć zawczasu, bo lista pytań jest w obu stackach zaskakująco podobna i szybko pokazuje, czego warto się uczyć.

Pytania o język są proste i powtarzalne. Różnica między typem wartościowym a referencyjnym. Co robi null i skąd bierze się wyjątek przy odwołaniu do niego. Czym różni się lista od tablicy. Jak działa dziedziczenie i po co istnieją interfejsy. W Javie zapytają dodatkowo o equals i hashCode, w C# o właściwości i o struct, ale to warianty tego samego zestawu.

Dalej idą pytania o rzeczy niezależne od języka i tu odpada więcej osób: SQL i relacje między tabelami, HTTP i kody odpowiedzi, Git na poziomie gałęzi i scalania, podstawy testów jednostkowych. Nikt nie oczekuje eksperta, ale odpowiedź „nie używałem” trzy razy pod rząd zamyka rozmowę.

Najczęściej rozstrzyga zadanie praktyczne albo projekt, który przynosisz. Rekruter techniczny w pięć minut widzi, czy pisałeś kod sam, czy skleiłeś go z poradników: po nazwach zmiennych, po obsłudze błędów i po tym, czy w projekcie jest cokolwiek, czego nie było w tutorialu.

Zwróć uwagę, że w całej tej liście nie ma ani jednego punktu, który wygrywa się wyborem języka.

Ile to realnie zajmuje

Uczciwa odpowiedź: dłużej, niż obiecuje większość reklam kursów, i krócej, niż sądzisz w trzecim tygodniu, kiedy nic nie działa.

Przy dwóch godzinach dziennie pierwszy własny program napiszesz w kilka dni, składnię i podstawy obiektowości ogarniesz w dwa, trzy miesiące, a pierwszą aplikację z bazą danych i logowaniem zbudujesz gdzieś między czwartym a szóstym miesiącem. Portfolio na tyle sensowne, żeby wysyłać CV, to zwykle horyzont dziewięciu do dwunastu miesięcy nauki bez etatowego wsparcia.

Te liczby są przybliżeniem i zależą od tego, ile masz czasu, czy ktoś czyta Twój kod i jak szybko przestajesz szukać kolejnego kursu, a zaczynasz pisać własne rzeczy.

Rachunek wychodzi prościej, niż wygląda: plan liczony w godzinach tygodniowo zamienia te widełki w harmonogram na konkretne wieczory. Wybór między C# a Javą wpływa na nie w granicach błędu pomiaru.

A jeśli wybiorę źle

To jest prawdziwe pytanie pod spodem, więc odpowiem wprost: koszt zmiany jest znacznie niższy, niż się teraz wydaje, i spada z każdym tygodniem nauki.

Wyobraź sobie, że po czterech miesiącach z Javą trafiasz na ofertę w C# i chcesz spróbować. Tracisz składnię, konwencje nazw, nazwy klas w bibliotece standardowej i znajomość narzędzi. Kilka tygodni niewygody.

Zostaje wszystko, co było trudne. Myślenie o programie jako o zestawie obiektów z odpowiedzialnościami. Czytanie stosu wywołań po wyjątku. Zrozumienie, dlaczego zapytanie do bazy zwraca duplikaty. Rozbijanie problemu na kawałki mieszczące się w głowie. Ta część zajmuje miesiące i przenosi się w całości, ponieważ nie jest wiedzą o języku, tylko o programowaniu.

Widać to po ogłoszeniach. Firmy szukające mida piszą „doświadczenie w C# lub podobnym języku obiektowym”, bo wiedzą, że osoba z trzema latami Javy wejdzie w C# w miesiąc. Na poziomie juniora bywa sztywniej, ale nawet wtedy pytanie na rozmowie brzmi „co zbudowałeś”, a nie „ile lat piszesz w tym konkretnym języku”.

Naprawdę kosztowna pomyłka wygląda inaczej: to trzy miesiące skakania między kursami Javy, C#, Pythona i JavaScriptu, po których nie umiesz żadnego z nich i masz wrażenie, że programowanie jest nie dla Ciebie. Wybór języka jest tani. Brak wyboru jest drogi.

Czego ten wybór nie zmienia

Po dwóch latach przeczytasz kod w obu językach. Typy, klasy, interfejsy, kolekcje, wyjątki, testy jednostkowe, wstrzykiwanie zależności: to te same pojęcia w innym zapisie, a programista C# czyta Javę z niewielkim wysiłkiem i odwrotnie.

Co realnie zmienia Twoje szanse na pierwszą pracę:

  • czy potrafisz przeczytać komunikat błędu i zrozumieć, co się stało
  • czy używasz debuggera, zamiast wstawiać wypisywanie na konsolę w dziesięciu miejscach
  • czy skończyłeś jakikolwiek projekt do końca, z bazą danych i testami

Żadna z tych trzech rzeczy nie zależy od języka. Wszystkie zależą od tego, czy nie przestaniesz w trzecim tygodniu, i to jest jedyny powód, dla którego warto w ogóle porównywać C# czy Java pod kątem pierwszego tygodnia, a nie pod kątem listy funkcji.

Zrób to dziś wieczorem

Daj sobie jeden wieczór na obie strony. Zainstaluj .NET SDK, napisz program, który zapyta o imię i odpowie, uruchom go. Potem to samo w Javie.

Wybierz ten, po którym miałeś ochotę zrobić coś więcej, a nie ten, który wygrał w tabelce porównawczej. Pierwsza reakcja jest jedyną rzeczą, która przetrwa sześć miesięcy nauki.

Jeśli wyjdzie C#, program kursu pokazuje, w jakiej kolejności ma sens układać naukę: od pierwszego programu, przez obiekty i LINQ, do API w ASP.NET Core i projektu z bazą danych. A jeśli zastanawiasz się, czy uczenie się programowania ma jeszcze sens, gdy AI pisze kod, to osobne pytanie i mam na nie osobną odpowiedź.

Tematy: csharpprzebranzowieniekariera

Pobieranie ruszyło

DevJourney_1.0.0_x64-setup.exe · 1.0.0

Jeśli Windows ostrzeże

Komunikat „System Windows ochronił Twój komputer” nie oznacza wykrycia wirusa. SmartScreen ufa certyfikatowi, którym podpisany jest instalator, a ten jeszcze zbiera reputację poprzez licznik pobrań.

W oknie ostrzeżenia: Więcej informacji → Uruchom mimo to.

Sprawdź to sam

Zobacz wynik skanowania w VirusTotal

Albo w PowerShellu, w katalogu z pobranym plikiem:

Get-FileHash .\DevJourney_1.0.0_x64-setup.exe

Powinno wypisać:

7cd001be4463317f601b8bb2eed78537982a3559c92f06e96288434c79931fd6