Java czy Python? Język dla początkującego programisty
Myślisz o karierze w IT i zastanawiasz się czy na początek lepsza będzie Java czy Python? Zobaczmy, jakie plusy i minusy ma każdy z tych języków oraz jak wypadają w bezpośrednim porównaniu. Co - mamy nadzieję - ułatwi Ci właściwy wybór.
Porównamy Javę i Pythona przez pryzmat:
Popularność Javy i Pythona
Obydwa języki należą do bardzo popularnych i w zasadzie bardziej popularnym językiem w IT jest tylko JavaScript. Mamy dane z Badania społeczności IT 2024 na temat języków wykorzystywanych na co dzień w pracy przez zawodowych programistów w Polsce. 30% programistów używa Javy, a nieco ponad 25% używa Pythona.
Jeżeli chodzi o języki używanie w całym IT, a więc również przez np. testerów czy administratorów IT, to wygrywa tu Python. Aż 33% specjalistów używa Pythona, a Java wykorzystywana jest przez 27%.
To już wskazuje na pewne różnice w zastosowaniu obydwu języków.
Zastosowanie
Domeną, w której Java ma się najlepiej, jest zdecydowanie backend w systemach informacyjnych. Szczególnie firmy, które potrzebują większych systemów upodobały sobie ten język programowania, ze względu na to, że dobrze się skaluje, a ekosystem Javy dostarcza wszystkiego, co można sobie zamarzyć. Tu praktycznie monopol ma framework o nazwie Spring, ale są też nowofalowe frameworki, które lepiej nadają się do uruchamiania Javy w środowiskach chmurowych. W Polsce ponad 37% backendowców używa Javy jako głównego języka, w którym programuje.
Historycznie Java była jedynym wyborem do programowania na system Android, natomiast została praktycznie całkowicie wyparta przez Kotlina. Podobnie jest z desktopowymi aplikacjami wieloplatformowymi, gdzie tę rolę przejął JavaScript wraz z frameworkiem Electron.
Inaczej sprawa wygląda z Pythonem. Co prawda Python jest wykorzystywany na backendzie aplikacji webowych - za pośrednictwem frameworków Django czy Flask, w ten sposób używa Pythona ok. 10% polskich backendowców.
Natomiast Python ma wiele innych, ciekawych zastosowań poza webem. Przede wszystkim Python to lingua franca w ML/AI i bez jego znajomości o wiele trudniej cokolwiek zrobić.
Python jest też często używany w skryptowaniu - testów, automatyzacji, programowania infrastruktury (IaaC). Stąd zresztą wynika jego większe użycie wśród wszystkich specjalistów IT, niż wśród programistów.
Strona techniczna
Java i Python technicznie różnią się mocno.
Java jest statycznie typowana i kompilowana do kodu pośredniego, uruchamianego na maszynie wirtualnej (JVM), również wielowątkowo. Java skupia się na podejściu obiektowym, ale ma też sporo elementów funkcyjnych i wszystko w niej musi być dokładnie zdefiniowane, przez co pisze się w niej dużo kodu.
Maszyna wirtualna Javy jest mocno zoptymalizowana, co sprawia, że aplikacji napisane w Javie mogą być naprawdę szybkie (chociaż wszyscy wiemy, że nie zawsze są) i mogą przyjąć na siebie duże obciążenie. Na tej samej maszynie wirtualnej można uruchamiać kod innych języków, takich jak Kotlin czy Scala, a nawet Pythona (poprzez projekt o nazwie Jython). Dodatkowo w czasach kiedy Java powstawała dużym plusem maszyny wirtualnej była możliwość uruchamiania tego samego kodu w różnych środowiskach. Obecnie nie jest tak nowatorskie jak kiedyś. Minusem jest to, że aplikacji Javy relatywnie długo się uruchamiają, co jest nieporządane w środowiskach chmurowych, natomiast zespół Javy intensywnie pracuje nad tym by to zmienić (projekt GraalVM).
Deweloperzy narzekają na dużą ilość boilerplate’u - czyli kodu, który nie ma zbyt wielkiego znaczenia z punktu widzenia logiki, natomiast jest konieczny do uruchomienia aplikacji. Tu często mówi się o wykorzystaniu Kotlina, który jest interoperacyjny z Javą, ale jest o wiele bardziej zwięzły. Java rozwija się też dość sprawnie i w ciągu ostatnich kilku lat doszło do niej kilka ulepszeń składni, które sprawiają, że można w niej pisać bardziej ekspresyjnie. Ważnym elementem w Javie są wzorce architektoniczne, które są bardzo często wykorzystywane w systemach napisanych w Javie.
Python to inna historia. To język dynamicznie typowany i interpretowany, a uruchamia się w jednym wątku (chociaż są prace, które mają doprowadzić do zdjęcia tego ograniczenia). Co prawda też mamy tu obiektowość i są elementy funkcyjne, ale Python skupia się prostocie i ekspresyjności kodu. Programiści Pythona często mówią, że faktyczny kod przypomina pseudokod i za to go kochają.
Python jest jednym z najmniej wydajnych języków. Można to obejść (np. przez użycie Cythona, albo wypróbowanie nowego i obiecującego projektu Mojo), ale filozofią Pythona jest raczej postawienie na szybkość pisania kodu, niż jego wykonania.
Bardzo mocną stroną Pythona jest ekosystem, gdzie znajdziemy praktycznie wszystko, co trzeba. Włącznie z bibliotekami ML/AI, które nie są tak rozwinięte w żadnym innym języku programowania. Niektórzy narzekają nieco na zarządzanie zależnościami w Pythonie, które staje się problematyczne, gdy miesza się różne podejścia.
Rynek pracy
Gdy patrzymy na polski rynek pracy IT, to można powiedzieć, że łatwiej znaleźć pracę w Javie niż w Pythonie, jeżeli mówimy o głównym języku programowania. Natomiast łatwiej będzie znaleźć pracę, w której wykorzystuje się w jakimś stopniu Pythona, niż Javę.
Oznacza to, że jest dużo wakatów, gdzie stanowisko to “Java Developer”, a mniej będzie takich o nazwie “Python Developer”. Natomiast Python będzie na liście wymagań w wielu ofertach, które nie są bezpośrednio związane z rozwijaniem aplikacji w Pythonie. Zobaczymy go często na liście wymagań specjalisty Data Science, AI, QA, Analityka Danych, specjalisty DevOps.
Jeżeli chodzi o wynagrodzenia, to możemy porównać mediany wynagrodzenia uzyskiwanego na rękę na umowie o pracę z tegorocznej edycji naszego badania.
Programista Javy zarobi 9600 PLN netto (mediana)
Programista Pythona zarobi 8200 PLN netto (mediana)
Tu Python przegrywa dość zdecydowanie z Javą. Jednak trzeba pamiętać, że Python jest wykorzystywany też w innych specjalizacjach, takich jak np. ML/AI. Tu pensje będą wyższe, porównywalne do tych w Javie.
Przyszłość
Python jest językiem, który od kilku lat zyskuje na popularności - głównie za sprawą licznych zastosowań i niskiego progu wejścia. Java lata największej popularności może mieć już za sobą.
Pokazują to wyniki badania StackOverflow, które jest przeprowadzane tak długo, że możemy zobaczyć jak zmieniła się popularność tych języków w ciągu 10 lat.
W 2013 tak prezentowały się wyniki znajomości obydwu języków:
- Java - 42,5%
- Python - 21,9%
A w 2023:
- Java - 30,5%
- Python - 45,3%
Obecnie Python jest bardziej popularny niż Java była 10 lat temu i ten trend raczej będzie kontynuowany.
Nie oznacza to, że Java nie ma przyszłości. Natomiast jej występowanie będzie się ograniczać głównie do backendu, gdzie ma mocną pozycję i nadal może wiele zaoferować, szczególnie dla większych aplikacji. To zapewni stabilne zatrudnienie jeszcze przez wiele lat.
Python obecnie wygrywa pod względem różnorodności zastosowań, natomiast króluje w zasadzie tylko w niszy AI. Być może będzie bardziej funkcjonować jako wspólny język, łączący różne stanowiska i kompetencje w IT. Bez wątpienia jego znajomość do duży plus na rynku pracy.
Zarówno Python jak i Java są nadal rozwijane. Nowa wersja Pythona pojawia się raz w roku, a Java raz na pół roku, z wersją LTS (long term support) co dwa lata.
Python rozwija się by nadążyć za nowymi wyzwaniami, jakie stawiają mu nowe zastosowania - np. usunięcie GIL, który sprawia, że Python jest jednowątkowy, co z kolei zmniejsza prędkość treningu modeli AI.
Java przechodzi stopniową modernizację, dokładając koncepcje sprawdzone już w innych językach - np. bardziej ekspresyjna składnia, czy lekkie wątki.
Werdykt - Java czy Python?
Jeżeli zależy Ci na tworzeniu backendu, to Java stworzy tu najwięcej możliwości. Zarówno jak chodzi o opcje dostępne na rynku, jak i też zostanie ekspertem w tej dziedzinie.
Jeżeli zależy Ci na karierze związanej z data science czy AI, to oczywiście, że Python. Tak czy siak warto się go nauczyć, ze względu na liczne zastosowania. Natomiast wcale nie oznacza to, że musisz spędzić całą karierę pisząc tylko w Pythonie.
Z punktu widzenia początkującego Python ma też jedną zaletę - jest prostszy, a więc ma niższy próg wejścia. Natomiast to IT, więc wszystko ma też drugą stronę. Niższy próg wejścia oznacza też większą konkurencję na samym początku kariery.