Czasami się zdarza, że ktoś wysyła do mnie maila z zapytaniem o radę. Rzadziej się zdarza, że ktoś wysyła maila i podaje nie istniejący adres e-mail. Tak się zdarzyło teraz. 2h odpowiadania na maila by się dowiedzieć iż sorry ale adres e-mail nie istnieje.

Tak więc by moja praca nie poszła na marne, zamieszczam tutaj zarówno pytania jak i odpowiedzi także zachęcam do komentowania :)

1. Czy Python bądź Ruby to dobry wybór na start?

Trochę mnie to zastanawia, bo oba języki charakteryzują się wygodą i szybkością tworzenia rozwiązań. Poza tym nie ma tu takiego overheadu jaki przykładowo narzuca Java na programitę, dzięki czemu postępy w nauce jak i pracy przebiegają znacznie sprawniej.

Ciężko mi powiedzieć czy dobry na start, na pewno dobry wybór – zarówno Python jak i Ruby. Kłopot jest z tym startem, nie orientuje się czy poszukiwani są w Polsce programiści P i R. Na pewno jeżeli masz pomysł na aplikację i chcesz wystartować z jakimś projektem to P i R są dobrym wyborem. Dla przykładu 37signals tworzą swoje produkty w RoR tak samo jak Twitter. Jednak czy to był pierwszy język jaki poznali i zaczęli pisać? Wątpię, raczej na początku odkryli std. języki programowania i stwierdzili, że im to nie wystarcza, denerwują ich ograniczenia, brak dynamiczności itp. itd. Wybrali więc język w którym czują się najlepiej. Taka sama jest imo moja rada, opanuj języki i powiązane z nimi technologie, wyrób sobie zdanie na temat w którym Ci jest lepiej programować. Zobacz jak stoi rynek dla języka Twojego wyboru – może praca zdalna dla angoli? Amerykańców?

Na przykład chłopaki od devMedia programują w tym i w tym plus do tego Java i .NET. Język wybierają w zależności od typu projektu oraz przeznaczenia (przynajmniej takie mam wrażenie po ich tweetach). I tak jest chyba najlepiej.

2. Czy w przypadku Java i C# programista powinien kierować się tylko swoimi gustami?

Mam wobec tego pytania pewne wątpliwości. Z jednej strony programisci na forach opowiadają się, że poza sprawami ‘religijnymi’ reszta jest w porządku. Zastanawia mnie tylko to, że na forach, które odwiedzam najczęściej widzę właśnie ogłoszenia dla programistów Java. Czemu o C# jest tak cicho? Czy to oznacza, że większość poważnych firm nastawiona jest głównie na Javę? Mnie osobiście C# bardziej się podoba niż Java dlatego wolałbym rozwiać te wątpliwości i widzieć całą sprawę jaśniej.

O C# nie jest cicho, jest tak samo dużo pracy dla Javowców jak i dla C#powców, problem jest rynek na jaki aplikacje są pisane. Java nie nadaje się zbytnio do pisania ładnych windowsowych aplikacji, zaś C# kiepsko stoi jeżeli chodzi o stronę serwerową – na przykład t-mobile de to w 90% java. Te rynki różnią się tak znacząco iż ciężko jest powiedzieć co lepiej wybrać. Zarówno jeżeli chodzi o wynagrodzenie jak o liczbę projektów. Widziałem wynagrodzenie tak samo duże w C# jak i w Java, jednak mam wrażenie iż rozpiętość widełek jest większa w C# gdyż dolny próg jest dużo niżej – minimalna płaca.

Wybierasz więc to co byś raczej chciał robić, chcesz się koncentrować na centralkach telefonicznych, dużych serwerowych projektach to masz większe szanse, że Java spełni Twoje oczekiwania. Jeżeli zaś byś chciał się bawić aplikacjami na windows, stronami internetowymi to z tych dwóch wybrałbym C#. IMO tu już nie ma wyboru języka tylko wybór czym byś chciał się zająć i co Cię bardziej kręci.

Jak jesteś z wwa to dla Javy masz dużo większe wsparcie offlinowe (grupy) niż dla .NET – to też może być jakiś wyznacznik.

Teraz w Polsce nie ma problemu by znaleźć dobrze płatną pracę zarówno w C# jak i w Java, ale kiedyś te różnice były znaczące. Największym problemem jaki ja miałem przy wyborze języka to przeznaczenie aplikacji. W Java popełniłem 3 strony internetowe i stwierdziłem, że więcej w tej technologii pisać stron nie chcę, nie odpowiada mi, po prostu mnie odrzucało. W tym samym czasie wchodził C# i nowe ASP.NET które mimo kilkunastu minusów jak dla mnie dawało mi dużo większą satysfakcję pisania. I w ten oto sposób ostałem się przy C#. Trochę siły się wyrównały w trakcie kiedy wyszedł Eclipse dla Javy, jednak nie na tyle by mnie znów pchnąć w stronę tego języka. Jedyna rzecz, która by mnie teraz przekonała to raczej niewiarygodna pensja i gwarancja 2 rocznego kontraktu.

3. Co mogę robić poza programowaniem, aby podkręcić swoją wartość na rynku?

Obserwuje zachowania innych i np widzę, że programiści, by się wyróżnić:

+ tworzą blogi techniczne,

+ piszą książki o programowaniu,

+ piszą tutoriale/artykuły,

+ udzielają się na forach

+ studiują

+ zdobywają certyfikaty

+ biorą udział w konkursach

Jestem niezmniernie ciekaw, czy robienie tych rzeczy ma jakiś wpływ wogóle na wynik negocjacji? Jeśli tak to które i w jakim stopniu?

Ze wszystkich rzeczy polecam:

Pet Project – stwórz projekt, jeden lub więcej i się baw kodem, udostępnij projekt, niech ludzie popatrzą, dadzą komentarze lub cokolwiek. Testuj na tych projektach technologię na przykład server-sent events czy websockets, zobacz jak to się je. To naprawdę pomaga, nie tylko może się okazać, że projekt będzie popularny ale także iż przy zatrudnianiu będziesz miał takie kryterium. Zresztą o pet project już kiedyś pisałem.

OSS – możesz też dołączyć do jakiegoś open source project, i tam zacząć się udzielać.

Fora – to pomaga w rozpoznaniu w local community, na przykład będziesz aplikował do firmy X, której pracownik zadał pytanie na forum. W zależności od wielkości zespołu może się okazać iż ten pracownik powie „no super gościu to on rozwiązał ten problem”… to pomaga. Takie wyrabianie imienia w sieci, reklama , połączona z OSS i Pet Project.

Blog – nie koniecznie ale może się przydać. Piszesz o tym co Cię pasjonuje i ciekawi, reklamujesz swoje pet projetcs jak i/lub swoje zaangażowanie w OSS.

Co do tego czy te rzeczy wpływają na wpływ negocjacji to zależy. Jeżeli idziesz do firmy i osoba techniczna przepytująca Cię, nie słyszała nigdy o OSS do którego dołączyłeś, lub o żadnym z for na których się udzielasz to jeszcze jest szansa, że zrobiła mały search i znalazła Twojego bloga. Jeżeli nic z tych rzeczy to ja bym podziękował za rozmowę. Chodzi o to, że najlepiej pracuje się z ludźmi dla których to jest pasją a nie pracą. Tacy będą o Tobie słyszeć lub o czymś co zrobiłeś nie koniecznie powiązując to z Twoją osobą. U mnie raz babka na interview miała pytania które przygotowała z mojego bloga. Po 3 minutach skapnąłem się i zapytałem jej wprost czy Pani wie kto jest autorem bloga z którego Pani ma te pytania? Odpowiedziała, że nie i że to nie z bloga itp. itd. to powiedziałem by sprawdziła autora postów bo i tak nie wierzę, że ktoś inny to napisał i potem w razie co się do mnie odezwała. Więc zdarzają się palanty.

Czasami jednak mam interview i gościu mówi, że słuchaj ale ten twój przykład to uratował nam życie.

Zasada prosta: osoba z pasją będzie wiedziała co się dzieje w okolicy, wyrobnik nie będzie. Dla osób z pasją opłaca się pracować, dla wyrobników nie bo mogą Cię zdusić :(

4. Niepodważalnym faktem jest to, że doświadczenie jest wszech miarą wartości programisty, ale czy w takim doświadczeniu uwzględniane są projekty o niecodziennym znaczeniu?

Np. programy z sztuczna inteligencja w prologu albo lisp, albo np. projekt własnego języka kompilowanego? Chodzi mi o takie domowe projekty, robione w celach czysto rozrywkowych.

Patrz Pet Project z punktu 3. Jasne, że tak, plusem jest ich udostępnienie, oraz to by to nie były projekty z przed 10 lat. Ale by najświeższy był z ostatniego kwartału. Pamiętaj też, że jak idziesz na Web Dev to na przykład pokazywanie, że w lisp napisałeś sztuczną inteligencję nie koniecznie będzie miało wpływ na jaki liczyłeś, ale na pewno spowoduje, że osoby zaczną myśleć, że jesteś nie tylko wyrobnikiem ale też kimś więcej.

Także jakbym zobaczył Twoją pasję to bym chętniej Cię zatrudnił, pytanie jednak postawiłbym sobie takie „czy to co Ci jestem wstanie zaoferować nie spowoduje iż Twoja pasja zostanie stłamszona, czy będę wstanie Ci zagwarantować to byś robił to co kochasz?” więc najlepiej dopasowywać trochę te pet projects pod pracę. Web Dev? To może coś z nowych technologii? FubuMVC plus CQRS plus WebSockets? Coś co stworzyłeś by sprawdzić jak to działa i jak to można połączyć.

Wszystko zależy od firmy. Jak firma jest wyrobnikiem to raczej będzie ciężko, jak firma ma duże możliwości to może być super – mój znajomy w firmie pisał przeróżne rzeczy i wszystko powiązane z jego pasją, wiedzieli, że zna się na językach, które są rzadko używane, lub jak są to do specyficznych rzeczy. Zaczęli więc szukać klientów dla jego zainteresowań.

5. Czy programista który ma ambicje zarabiać kokosy powinien być gościem odpowiadającym za możliwie wiele zagadnień w firmie, czy może to powinien być super spec w zakresie jednego-dwóch tematów?

I tak i nie, wszystko zależy of firmy. W MS masz poziomy na konkretnym stanowisku, chcesz być dev? Proszę bardzo bądź i rozwijaj się w szeroko rozumianym programowaniu, chcesz być specjalistą od SharePoint? Nie ma problemu, możesz przez całe życie nim być – póki produkt istnieje. Jednak moim zdaniem trzeba być dobrym naprawdę dobrym w kilku rzeczach a resztę umieć. Znajomy jest specjalistą od centralek telefonicznych w Java, jednak to wszystko, ciężko mu jest zrobić coś innego (IMO), co się stanie jak go zwolnią? Jak straci pracę? Albo zamkną jego dział? Trzeba być zarówno zamkniętym jak i otwartym. Możesz na przykład znać się bardzo dobrze na tym jak stworzyć wydajne aplikacje Web, ale by być kimś takim to musisz się znać zarówno na serwerach, jak i na bazach danych jak i na programowaniu, niby mało ale pod każdym z punktów jest tysiące pomniejszych.

Pamiętaj też że w którymś momencie przestaje się programować dla kasy, staje się człowiek konsultantem, lub zasiada na jakimś wyższym stanowisku w firmie. Z programowania przez całe życie będzie się ciężko utrzymać. Za 3-4 lata wpadnie młody gościu który będzie miał więcej wolnego czasu by nadążać za zmianami w technologii, ty staniesz się dinozaurem. Będą Ci płacili masę kasy, ale coraz trudniej będzie znaleźć pracę. W końcu ktoś za doświadczenie da Ci architekta lub coś innego i przestaniesz programować. Kokosy można zbierać tu i tu, ale ciężko jest zbierać duże kokosy przez cały czas w jednej działce.

Dlatego pamiętaj o innych możliwościach, szkól się już teraz by potem móc przejąć pałeczkę. Na pewno doświadczenie i Twoja wiedza nie pójdzie na marne.

6. Jakie rady bazując na własnym doświadczeniu wskazałby mi Pan, abym mógł dopiąć swego?

Wytrwałość, wytrwałość, praktyka, praktyka i praktyka. Niestety to jest najlepsza rada. Masz pomysł? Zrealizuj go i co z tego że do niczego on jest? Poświęć tydzień, masz teraz czas na to. Zrób coś, w którymś momencie zacznij segregować pomysły, pomyśl czy się sprawdzą, zacznij inwestować czas w te, które Twoim zdaniem są niezłe.

Rzadko bywa tak, że pierwszy pomysł i boom, ale się tak zdarza, częściej jest tak, że im więcej razy spróbujesz i upadniesz, tym większe prawdopodobieństwo, że za kolejnym razem się uda. Naucz się wyciągać wnioski z tego co zrobiłeś i na pewno nie przejmuj się porażką.

Znajdź ludzi z którymi możesz dzielić się swoja pasją a oni swoją z Tobą. Nie mów nigdy, że idea są głupie i nie odrzucaj pomysłu ot tak.

Miej cele i staraj się je realizować.

Baw się!

Działaj nie jęcz, nie mów „baa też bym to zrobił gdyby…” bo czemu w takim momencie tego nie zrobiłeś? Są ludzie którzy mówią i są Ci którzy robią, bądź tą drugą grupą.

Trochę luźne punkty ale to tak naprawdę ważne, każdy z punktów.

PS.: Następnym razem użyj istniejącego adresu e-mail :)

6 KOMENTARZE

  1. [quote]Jak jesteś z _wwa_ to dla Javy masz dużo większe wsparcie offlinowe (grupy) niż dla .NET – to też może być jakiś wyznacznik.[/quote]
    Co to jest wwa? Spróbuję wymyślić z kontekstu. "Wrocławia"?

Comments are closed.