Sama znajomość języka to często za mało. |
Zdecydowanie, trzeba jeszcze poznać biblioteki. Tyle że w przypadku większych firm okazuje się, że mają jakieś własne frameworki, więc nawet jeśli znasz jakieś biblioteki, to oczywiście to się przyda, ale i tak dopiero po przekopaniu się przez większy kawałek projektu będziesz miał pojęcie, co się tam właściwie dzieje. A jeśli firma wytwarza jakieś własne urządzenia działające u klienta, to jest spora szansa, że będzie tam jakiś Unix/Linux, może nawet trafisz na dystrybucję rozwijaną wyłącznie przez daną firmę.
Jak projekt ma wiele linii kodu i po otwarciu repozytorium widzisz kilkaset projektów, to ogarnięcie tego może trochę zająć. Przy wieloletnich kobyłach zwykle firma ma własne narzędzia do wszelkich możliwych celów. Nie będąc pracownikiem prawdopodobnie nie uzyskasz dostępu do takiego kodu - doświadczenie się przydaje w ogarnięciu tego, ale zwykle i tak każdy startuje z pozycji osoby znającej język (i ewentualnie standardowe biblioteki), a całą resztę poznaje później. W takich sytuacjach zwykle trzy miesiące nie starczą na wdrożenie się w taki monolit i trzeba na to poświęcić jakieś pół roku (albo i dłużej, w zależności od bagienności kodu).
Musisz znać różne struktury danych i umieć rozwiązywać zadania algorytmiczne. |
Co tak z grubsza jest niezależne od języka, a bardziej dotyczy paradygmatów. Oczywiście, inne będą nazwy klas, nieco inaczej będzie wyglądała biblioteka standardowa, ale tak czy inaczej to są rzeczy, które po solidnym jednorazowym ogarnięciu zostają na dłużej. Tablica, lista (jedno i dwukierunkowa) oraz ich wady i zalety będą podobne w różnych językach. Liczby zmiennoprzecinkowe z grubsza są implementowane podobnie. Składnia w językach imperatywnych mających jakieśtam korzenie w C też będzie bardzo podobna, te same priorytety operatorów, takie same reguły stawiania średników, zbliżone słowa kluczowe i wiele, wiele innych rzeczy też się powtórzy.
Co do zadań algorytmicznych, to możesz je ćwiczyć na SPOJu. Co prawda tam czasami bardziej liczy się żyłowanie wydajności, ale to też się spotyka w komercyjnym kodzie (przedwczesne optymalizacje są złe, ale umiejętność czytania takiego kodu bywa czasem przydatna), a przy dobrym algorytmie testy zwykle przejdą bez konieczności osiągania od razu szczytów rankingu. Ogólnie, jeśli na takim SPOJu napiszesz program w C++, to nie powinno być większych problemów z przerobieniem tego na Javę, C#, Python czy inne języki.
Jeszcze co do języka: to, że kod jest na przykład w C# nie musi oznaczać, że będzie pisany obiektowo i okaże się "ładny". Widziałem proceduralnie napisane monolity z rozszerzeniem *.cs, docelowo takie rzeczy mają zginąć, ale czasami trzeba naprawiać błędy z nimi związane (lub znaleźć kogoś, kto wie, co tam się właściwie dzieje). A jak okaże się, że autora już dawno nie ma w tej firmie, to nagle umiejętność czytania czegoś takiego jest na wagę złota. Refaktoryzacja kosztuje, oczywiście, ale jeśli czegoś nie da się czytać, to po prostu nie ma innego wyjścia (jak już znajdą się takie kwiatki, to prędzej czy później ktoś będzie musiał taplać się w takim bagnie).
resztę czasu będziesz wykonywał zadania, które są oczywiście edukujące, ale nie będziesz nabywał umiejętności IT (czyli umiejętności programistycznych) |
U nas bywały pojedyncze przypadki, gdzie testerzy zostawali programistami. Oczywiście nie od razu, ale parę osób pokazało, że jest to możliwe. Wiele zależy również od tego, do jakiego działu trafisz i czym zajmuje się firma. Bo jeśli masz zespół, który robi coś, co
być może zostanie dostarczone do klienta
za parę lat, to tam atmosfera jest zupełnie inna niż wtedy, gdy działasz na żywym organizmie i naprawiasz błędy zgłoszone przez konkretnego klienta i całość ma działać na wczoraj.
Firmy są różne, jeśli uważasz, że się nadajesz, to śmiało bierz udział w rekrutacji. W najgorszym przypadku po prostu Cię nie przyjmą, a istnieje dość spora szansa na to, że dowiesz się, co musisz poprawić, czego się douczyć, jakie są pytania, jak działa firma i czy to jest kierunek, w którym chcesz dążyć. A i tak zanim zaczniesz pisać coś poważniejszego, to minie pewnie sporo czasu. W wielu przypadkach całość zaczyna się od naprawiania prostych błędów zgłaszanych przez testerów. Dorzucanie nowych funkcjonalności to nieco inna bajka, bo to musi być zgodne z wymaganiami, trzeba napisać do wszystkiego testy i ogólnie jak jest coś nowego, to musi rzeczywiście coś wnosić, bo inaczej może zostać wycięte jako zbędna funkcjonalność (a przy utrzymaniu wieloletniej kobyły cały kod jest zwykle wystarczająco pokręcony, więc to, co jest nowe, ma być jasne, czytelne i przejrzyste, nawet jeśli stary kod nie był zgodny z tymi nowymi wytycznymi - refaktoryzacja nie jest szybkim i chętnie stosowanym procesem).