Znaczenie wyboru języka programowania
Pytaniem, które musi sobie zadać każdy początkujący programista oraz tester automatyzujący jest „Jaki język programowania wybrać?”. Na stronie angielskiej Wikipedii dot. języków programowania jest ich kilkaset. Na szczęście wybór dotyczy raczej kilkunastu najbardziej popularnych. W tym artykule skupię się na 2 językach z top4 w indeksie TIOBE (https://www.tiobe.com/tiobe-index) pomijając C i C++, jako że są mniej popularne przy automatyzacji. Są to Python (#1) i Java (#4). Porównam je na kilku płaszczyznach, co być może ułatwi decyzję początkującym testerom automatyzującym, którego języka się nauczyć.
Porównanie wynagrodzenia
Wg raportu NoFluffJobs o rynku pracy w 2023 r. (https://nofluffjobs.com/insights/raport-rynek-pracy-it), widełki na B2B dla Pythona wynosiły 20000-28000 PLN, a dla Javy 20200-27000 PLN netto. Z kolei dla UoP są to 15500-22000 dla Pythona oraz 15000-22000 PLN brutto dla Javy. Python jest więc językiem, z którym w Polsce można zarobić najwięcej, ale Java jest drugim takim językiem, a różnica między nimi to jedyne 200-1000 PLN, a więc od 1% do ~3.7%. Wynagrodzenie jest na podobnym poziomie, więc wg mnie na tyle podobne, że nie brałbym ich pod uwagę.
Porównanie szansy na zatrudnienie
Wynagrodzenia jest ważne, ale widełki nie mają znaczenia jeżeli sami mamy problem ze znalezieniem pracy. Porównajmy więc możliwość znalezienia zatrudnienia przy znajomości Pythona i Javy.
Wg raportu z poprzedniego rozdziału, obowiązkowe wymaganie Javy pojawia się w 19.39% ofert pracy IT, a Python w 15.93% ofert. Mamy więc ~3.5% więcej ofert pracy z Javy niż z Pythona.
Powyższe dane dotyczą ogólnie ofert pracy z tymi językami oprogramowania, a nie konkretnie ofert dla testerów automatyzujących. W raporcie wspomniano jednak, że najbardziej popularne technologie przy ofertach dla testerów to Selenium, Java i SQL i że każda z nich odpowiada za ¼ ogłoszeń. W Javie jest więc łatwiej znaleźć pracę testerom.
Cechy wspólne
Wspomnę tutaj, co łączy oba te języki i nie jest powodem do wyboru jednego z nich:
Multum bibliotek – i w Pythonie, i w Javie znajdziemy bibliotekę na każdą okazję, wliczając w to biblioteki do testowania.
Dokumentacja – w obu językach mamy dostęp do szczegółowej i aktualnej dokumentacji, niezliczonych forów i społeczności.
W obydwu można pisać testy automatyczne z użyciem Playwrighta, Selenium oraz Appium.
Obydwa są wieloplatformowe i można pisać z ich użyciem testy na Linuxa, Windowsa i Maca.
W obu można pisać z użyciem wysokiej jakości IDE. Np. JetBrains stworzył zarówno IntelliJ IDEA dla Javy oraz PyCharma dla Pythona. W Visual Studio Code są także dodatki ze wsparciem dla obu tych języków.
Zalety Javy nad Pythonem
Wydajność: Java jest językiem kompilowanym, a Python interpretowanym. Oznacza to, że kod w Javie jest kompilowany do instrukcji, które są szybciej przetwarzane przez komputer. Z kolei w Pythonie kod jest bezpośrednio interpretowany, co jest mniej wydajne. Języki kompilowane są więc szybsze od języków interpretowanych.
Obiektowość: Java jest językiem obiektowym. Nie będę się zagłębiał w nazewnictwo, bo nie tego dotyczy artykuł. Dzięki obiektowości możemy mieć bardziej uporządkowany kod z możliwością jego ponownego wykorzystania. Jesteśmy bowiem w stanie utworzyć klasę przypadku testowego z pewnymi polami i deklarując obiekty tej klasy będziemy automatycznie mieli pola z tej klasy bez konieczności ich definiowania. Do tego będziemy mieć możliwość dziedziczenia po klasach, co da się wykorzystać nie tylko do uszczegółowienia przypadku testowego, ale także pomoże nam stworzyć strukturę widoków, o ile zdecydujemy się na użycie POM – Page Object Model (co polecam). W Pythonie także istnieje obiektowość, ale Java na niej bazuje, więc jest ona bardziej rozbudowana w Javie. Przykładowo, w Pythonie nie ma podziału na metody/właściwości publiczne (public), prywatne (private) oraz chronione (protected) – wszystko jest publiczne. Python nie ma także interfejsów oraz klas abstrakcyjnych (chyba że użyjemy biblioteki „abc”).
Silne typowanie: Każda zmienna musi mieć w Javie typ (mimo że nie zawsze musimy go podawać). Przykładowo, musimy powiedzieć czy zmienna jest liczbą czy ciągiem znaków. W Pythonie z kolei deklarujemy zmienne bez podawania ich typów. Może się to wydawać zaletą, ale często nie jest, bo im precyzyjniej opiszemy kod, tym łatwiej później znajdziemy błąd, który popełniliśmy w kodzie. Bez typów błąd może się dłużej ukrywać i być trudniejszy do znalezienia lub zdebuggowania. Co więcej, mając typy zmiennych kod staje się bardziej czytelny, co jest szczególnie ważne jeżeli nie jest to nasz kod i nie ma komentarzy.
Zalety Pythona nad Javą
Czytelność: Składnia Pythona jest unikalna. Wcięcia tabulatorami w kodzie bardzo poprawiają czytelność i nie trzeba się martwić o klamry i średniki, a i struktura kodu jest widoczna na pierwszy rzut oka. Czyni to Pythona jednym z najlepszych języków do nauki programowania, jeżeli nie najlepszym.
Prostota: Przyznam, że nie pisałem wiele w Javie i Python jest moim ulubionym językiem programowania, więc mogę być tutaj subiektywny. Jednak wydaje mi się, że w Pythonie wiele rzeczy prościej napisać niż to samo w Javie. Python ma wiele wbudowanych przydatnych funkcji, a czasami domyśla się, co chcemy osiągnąć. W Javie z kolei musimy wszystko precyzyjnie zapisać i czasem jest to uciążliwe. Przykłady:
inicjalizacja listy, którą można zmodyfikować (mutowalną) z liczbami
Java: List<Integer> list=new ArrayList<>(Arrays.asList(1, 2, 3));
Python: list = [1, 2, 3]
sformatowanie dzisiejszej daty
Java:
import java.time.*;
import java.time.format.*;
LocalDateTime now = LocalDateTime.now();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String formattedNow = now.format(formatter);
Python:
from datetime import datetime
now = datetime.now()
formatted_now = now.strftime("%Y-%m-%d %H:%M:%S")
sortowanie punktów po współrzędnych
Java:
Arrays.sort(points, new Comparator<int[]>() {
@Override
public int compare(int[] point1, int[] point2) {
if (point1[0] != point2[0]) {
return point1[0] - point2[0];
} else if (point1[1] != point2[1]) {
return point1[1] - point2[1];
} else {
return point1[2] - point2[2];
}
}
});
Python: points.sort(key=lambda point: (point[0], point[1], point[2]))
Pamiętajmy jednak, że jeżeli często potrzebujemy zrobić konkretną rzecz (jak którąś z powyższych), to możemy napisać funkcję, która to wykona i będziemy mogli jej szybko użyć w przyszłości. Jednak w Javie wydaje mi się, że jest więcej googlowania – przynajmniej na początku.
Podsumowanie
Bez dwóch zdań Java i Python są dobrym pomysłem, jeżeli chcemy się nauczyć języka programowania i zostać testerami automatyzującymi. Głównym powodem jest wg mnie wsparcie obu w Selenium i Playwrighcie. Zarobki się od siebie póki co nie różnią za bardzo, a oba języki mają narzędzia ułatwiające ich naukę od terabajtów filmów na YouTubie, poprzez fora, IDE i biblioteki, a kończąc na dokumentacji.
Co do różnic, to największą zaletą Pythona jest czytelność jego kodu, co dla osób rozpoczynających przygodę z programowaniem jest wyjątkowo zachęcające. Z kolei w Javie mamy silne typowanie, co może uczynić niektóry kod bardziej czytelnym niż w Pythonie. W Pythonie łatwiej się programuje, a znając Javę powinno nam być odrobinę łatwiej znaleźć pracę, bo ciut częściej pojawia się ona jako wymaganie.
Ciężko więc zdecydować, co wybrać. Nie bez powody oba języki nadal są jednymi z najbardziej popularnych. Na Waszym miejscu pomyślałbym czy macie jakieś dodatkowe wymagania. Może Waszym marzeniem jest napisanie kiedyś programu korzystającego z biblioteki zaimplementowanej tylko w jednym z tych języków. Lub chcielibyście się zatrudnić w konkretnej firmie, która znajduje się blisko Waszego miejsca zamieszkania, a oferty pracy od niej dotyczą głównie jednego z tych języków. Albo nawet macie w planie kiedyś zmianę kwalifikacji i testowanie ma Wam jedynie pozwolić wejść do branży IT. Wtedy sprawdźcie, który z tych (lub innych) języków jest wiodący na danym stanowisku. Jeżeli to back-end – wybierzcie Javę (chociaż w Pythonie także można implementować back-end korzystając z Django), jeżeli front-end – JavaScript, a jeżeli DevOps lub Big Data – Pythona.
Którykolwiek z tych dwóch języków byście nie wybrali, mamy dla Was szkolenia, które pozwolą Wam szybciej go przyswoić.
Jeżeli macie ochotę, tutaj możecie się zapoznać z ofertą szkolenia z Pythona oraz Javy. Powodzenia na drodze do nowej kariery!