Poczytując tutejsze wątki akurat wibowit sprawia takie wrażenie marudy, jakby pogardzał "klepaczami". Ciekaw jestem jego zdania.
Cholera, kolejny sobie założył temat o studiach. ATSD: Mój nick jest z wielkiej litery.
Na stronie uczelni, przejrzałem plan przedmitów. Z tej listy wyznaczyłem sobie część, która mnie interesuje i były to takie pozycje jak np. algorytmika, paradygmaty programowania, metody realizacji języków programowania, sztuczna inteligencja czy systemy ekspertowe.
Brzmią jak przedmioty z mojego wydziału (WMiI UJ). Jeśli tak, to możesz mnie zapytać na PW o opinię nt wykładowców :)
A wracając do meritum wątku:
Jak do tej pory pracowałem tylko w Comarchu i to dość krótko. Rozmawiałem jednak z pracownikami i znam opinie kolegów ze studiów, którzy też pracowali w Comarchu. Moja opinia nt Comarchu (załóżmy że to reprezentatywna firma klepaczy):
- nie liczy się tam indywidualizm, ponadprzeciętne zdolności, no chyba, że się chce być magikiem wołanym przez kolegów, np "Pomóż mi z tym bo nie wiem jak to zrobić", czyli generalnie niewiele by się to różniło od odpowiadania na problemy na forum, no może oprócz tego, że rozwiązanie zobaczyłoby mniej osób,
- często na wysokich stołkach są barany z długim stażem, np analityk czy jakiś tam team leader nie wiedział czemu wyszukiwanie w małej poindeksowanej tabeli jest niewiele szybsze od wyszukiwania w dwa razy większej poindeksowanej tabeli, albo inna sytuacja, hicior, analityk z kilkuletnim doświadczeniem nie znał różnicy pomiędzy ziarenkami stanowymi, a bezstanowymi w EJB (!) i jeszcze zarzekał się, że wymyślił dobrze architekturę. Kumpel, który znał EJB od kilku miesięcy najpierw go przekonywał, że trzeba zmienić lekko architekturę. Nie dotarło do pustego łba analityka, więc kumpel musiał zrobić coś w stylu programu proof-of-concept,
- pracowałem tam trzy miesiące jako programista i tester. Generalnie moja robota polegała na przeszukiwaniu iluś tam pdfów w poszukiwaniu odpowiednich identyfikatorów, które trzeba wklepać do kodu, wyglądającego jak by komuś się Ctrl+V zaciął. Testowanie polegało na wrzucaniu CSVa kilka razy dziennie na serwer i odpalaniu obliczeń - wszystko ręcznie. Niestety format pliku CSV zmieniał się co kilka dni i musiałem wypytywać ludzi o nowe przykłady plików testowych, albo dopisywać sobie kolumny na czuja - nie było żadnych informacji nt tego co się zmieniło w systemie.
- kod jest tworzony jak, jakby ludzie nie wiedzieli jak się używa Javy. Oprócz ogromnych rozmiarów powielania kodu (zamiast refaktoryzacji), był np taki kwiatek jak niby "przeciążanie" statycznych stałych w interfejsach. Nie wiem co za idiota to wymyślił, ale wystarczyłoby zaklepać jakieś singletony do tego. Cóż, "weterani" Javy często nawet nie wiedzą, że od Javy 1.5 istnieją generyczne metody (http://download.oracle.com/javase/tutorial/extra/generics/methods.html), więc jak tu oczekiwać dobrze napisanego kodu?
- od refaktoryzacji to chyba stronią ile się da, nowe funkcjonalności mają być wdrażane natychmiast. Głębsza refaktoryzacja wymaga wstrzymania rozwoju aplikacji na jakiś czas, a to jest nie do pomyślenia dla "managerów". Systemy są rozwijane, aż do momentu, gdy ich rozwijanie staje się tak uciążliwe i gdy mają tak dużo błędów, że przynoszą więcej strat niż zysków. Potem na szybciora piszą nową wersję od nowa, biorąc pod uwagę pomyłki przy tworzeniu wcześniejszej wersji.
Ogólnie sama nauka Javy/ C# + frameworków spowoduje, że nie będziesz musiał martwić się o robotę. Z mojego punktu widzenia, to jednak tworzenie 1500-nej implementacji CRMa, który niewiele różni się od tych już napisanych jest totalnie nudne i nie satysfakcjonuje. Aby nie popaść w całkowitą rutynę można sobie zmieniać firmę co kilka lat.
Posad dla teoretyków jest mało, ale robota jest wg mnie ciekawa. Nie wiem jak wy, ale ja lubię wymyślać nowe algorytmy/ architektury lub ew szybsze implementacje. Nie lubię pisania na zlecenie, wg z góry ustalonego schematu, obojętne czy byłbym freelancerem czy podwykonawcą (czyt: pracownikiem) w jakiejś firmie, np Comarch. Albo napiszę inaczej: lubię wyzwania, które wymagają nieszablonowego myślenia i być może wielu nieudanych podejść, aby dojść do tego udanego. Jestem jednak dość utalentowany, w szkole wygrywałem konkursy matematyczne, np Kangur Matematyczny, a więc niejako jestem przystosowany do podejmowania wyzwań programistycznych/ matematycznych. Sami sobie oceńcie czy macie talent.
Znajomość matmy, algorytmów, a nawet znajomość wielu pojęć związanych z branżą nie jest koniecznie potrzebna do dobrego zarabiania. Mam kumpla, bez studiów (miał chyba już ze dwa podejścia, ale zrezygnował), który zajmuje się pozycjonowaniem oraz tworzeniem stronek w PHP, zarabia kilka kafli miesięcznie mając własną firmę, a np nie potrafi wyrzucić z tablicy duplikatów, albo nie wie co to są indeksy w bazie danych.
Somekind pewnie napisze, że mogę sobie algorytmy w rzyć wstawić, bo jemu to się nie przydaje. Może w takim razie niech się pochwali swoimi osiągnięciami, zainteresowaniami i np o czym pisze pracę magisterską. Ja interesuję się wieloma rzeczami, a z tych w których coś już dokonałem to np kompresja danych. Stworzyłem własne programy do kompresji danych, a teraz tworzę program (i pracę magisterską o nim) do współbieżnego sortowania blokowego - czyli sortowania używanego np do obliczania transformaty Burrowsa-Wheelera, która znowu służy jako krok w bezstratnej kompresji danych. Jest to pierwszy na świecie tego typu program; wcześniejsze albo wcale się nie skalowały, albo skalowały bardzo słabo. Mam na myśli skalowanie w obrębie jednego bloku.
Ostatni akapit nie jest na miejscu. Aż tak dobrze się teraz masz?
Dlaczego nie jest na miejscu? I co ma oznaczać to drugie pytanie?
Sporo gulgoczesz, a rzuciłeś właściwie tylko dwie myśli, niezbyt istotne. 1. Praca w oparciu o algorytmy jest ciekawa. 2. I bez algorytmiki da się sensownie zarabiać.
A jakie były twoje pytania?
Może to?
Reasumując:
Czy zajmując się bardziej teoretycznymi przedmiotami (tzn. fundamentem, który nie ulega szybkim zmianom), mam spore szanse znaleźć dobrze płatną pracę na stanowisku programisty?
Stanowisko programisty oznacza, że działasz w ramach schematu obmyślonego przez np jakiegoś tam analityka oraz oznacza, że nie pracujesz w ośrodku badawczym. A więc znajomość teorii raczej nie będzie się bardzo liczyć w oczach pracodawcy. Chociaż tobie mogłaby pomóc przy wytykaniu niedociągnięć/ błędów projektowych i naprawianiu ich. Jednak będąc na stanowisku programisty płacą ci za klepanie w miarę działającego kodu, a twoją pracę ocenia pewnie ten sam analityk, więc najlepiej nie wynurzać się tylko spełniać żądania analityka, żeby mieć przychylną opinię.
Wszystko zależy też od wielkości firmy. W małych firmach hierarchie są pewnie trochę "spłaszczone" i łatwiej się dogadać/ wymieniać poglądy. Z drugiej strony jednak małe firmy to małe możliwości awansu, a przez to potencjalnie niższe zarobki niż w korporacjach, a ty chcesz mieć dobrze płatną pracę.