Nauka programowania i automatyzacji testów oraz ranking popularności języków 2018. Poradnik dla początkujących
Ostatnio dostaję od czytelników coraz więcej pytań typu: Jak zacząć naukę programowania i automatyzacji? Jakiego języka się uczyć? Wnioskuję z tego, że potrzebujecie w tych tematach nieco wsparcia. Chcę go udzielić właśnie tym nieco dłuższym wpisem, poruszając kilka ważnych wątków, istotnych zwłaszcza na początku nauki.
Wartość umiejętności programowania u kandydatów na testerów
Osoby początkujące w branży poszukują swej pierwszej pracy lub stażu najczęściej w obszarze testowania manualnego. Mają nadzieję, że kiedy już tę pracę zdobędą, to będą mogły poznać praktyczne podstawy zawodu testera, a następnie rozwiną swoje umiejętności również o programowanie i automatyzację testów. Ma to sens, wielu znanych mi testerów przechodziło podobną drogę, która wydaje się najbardziej naturalna. Umiejętność kodowania zwykle nie jest warunkiem koniecznym do uzyskania pierwszej posady w testowaniu.
Niestety, przy obecnych uwarunkowaniach rynkowych ten plan staje się coraz trudniejszy do realizacji. Kandydatów na młodszego testera oprogramowania bez doświadczenia jest znacznie więcej niż ofert pracy i, aby zyskać uznanie pracodawcy, trzeba się wyróżnić na plus. Certyfikat ISTQB Foundation przestaje być takim wyróżnikiem. Ale może nim być znajomość podstaw programowania.
Co ma wspólnego automatyzacja testów z umiejętnością programowania?
W jednym z wcześniejszych wpisów, w którym wymieniłem typowe obowiązki specjalisty ds. kontroli jakości oprogramowania, wspominałem o testowaniu wspomaganym automatami. Aby to było możliwe, trzeba wcześniej stworzyć, a następnie utrzymywać scenariusze testujące automatycznie. A to z kolei wymaga dobrej znajomości zarówno zagadnień testowania, jak i programowania. Pomijam tutaj narzędzia typu capture/playback, bo mają niewielkie znaczenie ze względu na ich ograniczenia.
Warto jednak pamiętać, że w zawodzie testera jest więcej obszarów, w których możemy wykorzystać znajomość programowania.
- Są nimi przykładowo:
- przygotowywanie środowisk testowych,
- przygotowywanie danych testowych,
- symulowanie określonych warunków, w których powinien być przeprowadzony test,
- generowanie raportów czy ich fragmentów dla interesariuszy,
- konsultacje z programistami (wspólny język i lepsze zrozumienie),
- lepsza identyfikacja potencjalnych obszarów występowania awarii (ryzyk produktu).
Biorąc to wszystko pod uwagę, osobom początkującym w zawodzie testera sugeruję następującą kolejność etapów nauki: testowanie, programowanie, automatyzacja testów.
Jakiego języka programowania powinni uczyć się kandydaci na testerów?
Możesz spodziewać się przeróżnych odpowiedzi na to pytanie, podobnie jak przy tym o najlepszy samochód. Aby ułatwić Ci decyzję o wyborze języka do nauki programowania, chcę zwrócić Twoją uwagę na kilka aspektów.
Po pierwsze – weź pod uwagę technologie i języki używane w firmach, do których zamierzasz kandydować (lub w których już pracujesz czy odbywasz staż). Przykładowo: nie warto zaczynać nauki od C#, jeśli w organizacji dominuje Java.
Po drugie – nie ma obecnie większego sensu uczyć się starych języków, gdzieniegdzie wciąż obecnych w tradycyjnym modelu edukacji, jak Pascal, Cobol czy Fortran. Wyjątkiem może być sytuacja, gdy już pracujesz czy będziesz pracować przy utrzymaniu oprogramowania napisanego w tych językach.
Po trzecie – wybierz ten język, przy którym możesz liczyć na największe wsparcie specjalistów z Twojego otoczenia. Jeśli masz bliskie osoby, które znają określoną technologię i mogą od czasu do czasu udzielić Ci konsultacji w trakcie nauki – to rozsądnym będzie z takiej pomocy skorzystać.
Po czwarte – warto przeanalizować najnowsze rankingi popularności języków programowania. Temu tematowi poświęcona jest następna sekcja.
Ranking popularności języków programowania w 2018 roku
Przeszukując internetowe zasoby z ostatnich miesięcy natknąłem się na kilka popularnych rankingów. Każdy z nich bierze pod uwagę nieco inne czynniki. Są nimi: zapotrzebowanie pracodawców z ofert pracy (Indeed w opracowaniu Stackify), ankiety wśród programistów (StackOverflow), liczba trafień w wyszukiwarkach (Tiobe) czy też liczba tzw. pull request’ów (GitHub). Dlatego też, aby zestawienie było bardziej miarodajne, postanowiłem przygotować własny ranking, bazujący na czterech wymienionych źródłach.
Jak się okazało, zwycięzcą jest język Java, który otrzymał aż 34 punkty popularności na maksymalnie 40 możliwych do zdobycia. Pierwsza dziesiątka rankingu popularności jest widoczna na grafice poniżej.
Jak uczyć się programowania?
Oryginalny nie będę – myślę, że najlepsza jest praktyka. Czyli, po poznaniu podstaw teoretycznych, praca przy „prawdziwych” zadaniach i projektach, a nie tylko tych przygotowanych na potrzeby szkolenia. Oczywiście przy asyście i kontroli doświadczonych osób.
Zdaję sobie jednak sprawę, że ten wariant w wielu przypadkach nie wchodzi w grę, zwłaszcza u osób dopiero kandydujących do pracy testerki czy testera. Co więc pozostaje?
- Mamy tu kilka opcji płatnych, takich jak:
- Szkolenie stacjonarne organizowane przez jedną z firm edukujących programistów i testerów. Czasami są to szkolenia rozłożone w czasie (np. wybrane weekendy czy wieczory), co zwykle jest bardziej skuteczne niż duża, ale jednorazowa dawka wiedzy.
- Studia. Jest już sporo uczelni oferujących studia podyplomowe z testowania oprogramowania, ale pojawiają się też studia I czy II stopnia. Większość z nich ma w programie nauczania również programowanie i zagadnienia związane z automatyzacją testów.
- Szkolenia online. Element interakcji zwykle jest tu mniejszy, za to kursanci mają znacznie większą swobodę w wyborze czasu i miejsca edukacji.
- Książki. Najlepiej wybrać taką, gdzie jest dużo ćwiczeń praktycznych. Zachęcam Cię do przejrzenia kilku pozycji z listy dostępnej na moim blogu.
Są też źródła bezpłatne, na przykład blogi, tutoriale i internetowe samouczki.
Wybór należy do Ciebie. Pamiętaj jednak, że złym rozwiązaniem jest udział w kursie czy szkoleniu, a potem brak używania i szlifowania nabytych umiejętności. To, co rzeczywiście potrafisz, jest ważniejsze niż zaświadczenie lub certyfikat.
Podsumowanie
Mam szczerą nadzieję, że w tym wpisie udało Ci się znaleźć wartościowe informacje dotyczące nauki i roli programowania w pracy testerki i testera. A jeśli masz pytania, na które zabrakło odpowiedzi w tym artykule, to zachęcam Cię do pozostawienia komentarza.
Dzięki za ten artykuł który mnie upewnił że zacząłem naukę właściwych języków. Szkoda że firma w której pracuję nie do końca je wykorzystuje w testowaniu. Mimo wszystko będę kontynuował.
I bardzo dobrze Qwerty, że będziesz kontynuował naukę. Nawet jeśli nie wykorzystujesz tej wiedzy teraz, to myślę że będziesz miał taką możliwość w niedalekiej przyszłości. Życzę Ci wytrwałości 🙂
Ja opanowałem język skryptowy AHK – czy może on mieć wykorzystanie przy przygotowywaniu automatycznego środowiska testowego?
Cześć Kellu,
Nie mam większego doświadczenia z AutoHotkey by kompetentnie odpowiedzieć na to pytanie. Może ktoś z czytelników?
Witam. Mam pytanie i fajnie byłoby otrzymać na nie jakąś opinię eksperta, a mianowicie…
mam na koncie szereg projektów, w których brałem udział jak tester manualny i od pewnego czasu coraz powazniej myśle o nauce automatyzacji testów i właśnie…
jak to zorganizować w czasie i etyce pracy, zacząć od poznania narzędzia(na celowniku mam selenium) czy wpierw skupić się na języku programowania ?? Obecnie zakuwam Pythona i troche koduje. Czy to dobra kolejność działania ? Python—>narzędzie do automatyzacji testów czy jest jakaś inna bardziej sprawdzona droga? A może to kwestia indywidualna ? Z góry dziękuje za jakąkolwiek podpowiedź w tym temacie. Pozdrawiam.
Cześć PaweP,
Generalnie uważam, że lepiej zacząć od nauki programowania, a dopiero potem poznawać narzędzia do automatyzacji. Więc to dobrze, że uczysz się Pythona i kodujesz.
Cieszę się też, że piszesz o etyce pracy – w tym kontekście myślę, że warto grać ze swoim pracodawcą czy zleceniodawcą w „otwarte karty”. Czyli, jeśli będziesz czuł się już na siłach i widział opłacalność inwestycji w automatyzację, przekonać go, że warto jej spróbować w określonej części projektu. Może to być tzw. „pilot” czy „proof of concept”, odpowiednio uargumentowany – i niekoniecznie dotyczyć przypadków testowych, można zacząć np. od generowania raportów. Powodzenia!