Myślisz o przebranżowieniu na zawód programisty? Warto to wiedzieć!

Odpowiedz Nowy wątek
2019-01-12 13:26
Tig
35

A więc masz X lat, zajmujesz się w życiu Y, mieszkasz w Z.
Myślisz o zmianie zawodu na zawód programisty.
Tematy o podobnej treści pojawiają się wielokrotnie, a jakość odpowiedzi jest niska, spowodowana znużeniem Odpowiadających.

Post ma na celu przedstawienie pewnych kwestii, które powinny rozważyć osoby rozważające przebranżowienie.
Zasady tutaj opisane są spełnione w znakomitej większości przypadków, ale wiadomo, że w życiu od każdej takiej zasady są wyjątki. Wyjątki te są nieliczne.
Uwaga: W celu uniknięcia powtarzania się, będę nazywać "początkującymi programistami" osoby kandydujące na poziom entry-level (staż) oraz junior (programista z małym doświadczeniem).
Będę też używał pojęć "mid" - programista na średnim poziomie doświadczenia, "senior" - programista na wysokim poziomie doświadczenia.

Dla leniwych -- podsumowanie (tzw. TL;DR;) znajduje się na końcu.

Biorąc pod uwagę przebranżowienie, musisz wziąć pod uwagę co najmniej poniższe tematy:

I. Profil osoby, która będzie konkurować z Tobą o pracę

Na stanowisko programisty początkującego będzie kilkanaście-kilkadziesiąt osób chętnych.
W celu pokonania konkurencji musisz się zaprezentować jako najlepsza z tych osób, tzn. każda jedna osoba z tej grupy musi być mniej atrakcyjna dla pracodawcy.

Typowych konkurentów, których musisz POKONAĆ(mowa tylko o takich!) można podzielić na 2 grupy:

student lub absolwent

  1. ma ponadprzeciętne obycie z komputerami -- wie co to folder, jak szybko skasować linijkę w edytorze, umie odpalić terminal i wykonać komendy, zna skróty Ctrl+X/C/V itd. itp.
  2. uczył się matematyki rozszerzonej na poziomie licealnym -- na maturze rozwiązywał problemy podając dane(input), algorytm rozwiązania złożony z kilku mniejszych algorytmów, wynik(output)
  3. ukończył/kończy studia na kierunku informatyka -- w trakcie studiów odbył co najmniej kilkadziesiąt (szacunek dla studiów magisterskich: 20-25 przedmiotów) związanych z językami programowania i technologiami pokrewnymi, na każdym z tych przedmiotów musiał napisać na zaliczenie średnio 3 "większe" programy lub 30 malutkich, o przedmiotach związanych z teorią informatyki nawet nie wspominając
  4. w trakcie studiów rozwiązywał na własną rękę problemy programistyczne - pracował na część etatu i/lub pracował na cały etat w wakacje i/lub robił własne projekty

Zróbmy więc szacunek tego, co taki student minimum wykonał:
10 przedmiotów x3 programy zaliczeniowe "większe" == 30 programów x 20h każdy == 600h
10 przedmiotów x30 programy małe == 300 programów x 2h każdy == 600h
praca własna, niekoniecznie komercyjna == powiedzmy 4x przerwa wakacyjna 2 miesiące x 168h == 1344h
matematyka - doskonalenie umiejętności myślenia(no dobra, raczej wkuwania), algorytmów dyskretnych i grafowych, metod numerycznych itd == powiedzmy 25 przedmiotów x 4h == 1500h (tylko wykłady i ćwiczenia/laboratoria!)

Podsumowując szacunek dobrego, ale nie wybitnego, absolwenta studiów magisterskich, który będzie konkurował z Tobą o miejsce pracy:

  • ugruntowana wiedza z matematyki oraz informatyki licealnej
  • 2500 godzin poświęcone na programowanie i technologie pokrewne
  • 1500 godzin poświęcone na matematykę/teorię informatyki -- wiele z nich może być czasem straconym, tym niemniej część stanowi rzeczy przydatne w życiu typowego mida

samouk

  1. ma ponadprzeciętne obycie z komputerami -- jak wyżej; zna dobrze język angielski -- na tyle dobrze aby wyszukać i zrozumieć informacje w Internecie
  2. ma silną motywację do nauczenia się "rozmowy z komputerami" -- czego dowiódł, poświęcając ogromną ilość czasu implementując samodzielnie nietrywialne rozwiązania informatyczne, które działają, mają ręcę i nogi przynajmniej na poziomie użytkowym, które można zobaczyć, porównać z konkurencyjnymi rozwiązaniami
  3. może mieć niekiedy mniejszy zakres poznanych technologii lub wręcz nie znać pewnych podstaw matematycznych, ale na pewno coś nietrywialnego potrafi w swojej dziedzinie
  4. potrafi rozwiązać problem programistyczny z szerokiej gamy problemów, potrafi wyszukać i zaadaptować jakieś rozwiązanie, potrafi już przewidzieć pewne konsekwencje swoich rozwiązań -- z tym wszystkim spotkał się w pracy własnej, ze szczególnym naciskiem na umiejętność zidentyfikowania problemu, wyszukania rozwiązania, adaptacji do swoich potrzeb

Podsumowując szacunek samouka na poziomie pozwalającym konkurować z Tobą o miejsce pracy:

  • ukończony lub działający co najmniej jeden samodzielnie stworzony spory projekt programistyczny, po którym widać, że autor ma spore doświadczenie w programowaniu, i umie rozwiązać wiele różnych problemów
  • średnio 4h/dzień programowania x 365 dni x 2 lata == 2920 godzin, oczywiście można przyjąć tu wartości dowolne, zależne m.in. od tego, czy konkuruje o stanowisko entry-level czy już junior

II. Przydatność osób początkujących dla pracodawcy

Osoba początkująca ma za zadanie rozwiązać stosunkowo proste problemy.
Dostając zadanie rozwiązania prostego problemu, typowe problemy z którymi może się zmagać osoba początkująca:

  • niezdolność do zidentyfikowania miejsca wystąpienia problemu (w kodzie)
  • niezdolność do zrozumienia, co już istniejący kod robi i dlaczego, w konsekwencji niezdolność do zaproponowania zmiany
  • konieczność przedstawienia (swoim językiem, czyli często w sposób nieprecyzyjny, zaciemniający) napotkanego problemu midowi/seniorowi, który potem mid/senior i tak musi rozwiązać
  • niezdolność do wyjścia z własnych błędów, w konsekwencji prośby o pomoc do midów/seniorów o pomoc z błędami, które to błędy każdy mid natychmiast naprawi, albo nigdy nie popełni

Czyli mamy dwa ogólne przypadki:
a) samodzielna osoba początkująca, typowo rozwiązująca problemy w dużej mierze samodzielnie, ale bardzo wolno lub wolno,
ale po której rozwiązania bez sprawdzenia nikt rozsądny nie puści na produkcję; w wyniku sprawdzenia typowo wychodzą kwestie przypadków pesymistycznych ("nieoczekiwane" sytuacje chwilowej awarii, "niegrzeczni" użytkownicy proszący o dane innych użytkowników, itp.)
b) niesamodzielna osoba początkująca, która więcej zabiera czas osobom realnie pracującym, niż przynosi wartości

Czyli mamy:
a) zysk dla pracodawcy w okolicach zera -- te 10% czasu zabranego midom/seniorom bilansuje się na niewielki plus z pozostałym czasem (90% pracy własnej, którą mid zrobi 3x szybciej, powoduje że wychodzi
90% czasu przepracowanego x 0,33 wydajności - 10% == 30% - 10% == zysk 20% wydajności mida dla pracodawcy
b) zysk dla pracodawcy ujemny -- te 30% czasu zabranego midom bilansuje się na minus z pracą własną (analogicznie 70% czasu przepracowanego x 0,33 wydajności - 30% == STRATA 7% wydajności mida dla pracodawcy)

Podsumowując, jeżeli osoba "a" zarabia więcej niż 20% zarobków mida, to już jest niesprawiedliwie wysoko wynagradzana, jeżeli osoba "b" zarabia cokolwiek zamiast dopłacać, to już jest niesprawiedliwe wysoko wynagradzana.
To powoduje niską chęć pracodawców do zatrudniania osób początkujących, a wysoką do zatrudniania osób mid/senior.
Jeżeli pracodawcy w ogóle mają chęć zatrudniania początkujących, to najczęściej w nadziei, że taka osoba zostanie w firmie i zwróci się w perspektywie czasu.

III. Znajomość technologii a praca programisty

Część osób rozważających przebranżowienie może mieć przekonanie, że znajomość składni języka programowania lub w ogólności znajomość technologii jest jednym z najważniejszych warunków do pracy programisty.
Jest to pogląd równie uzasadniony, jak taki, że umiejętność napisania "Ala ma kota" umożliwia pisanie książek, które się sprzedają w milionowych nakładach. Przecież książka to tylko wielkich rozmiarów ciąg zdań, prawda?

Tymczasem istotna jest umiejętność zastosowania języka programowania, innych technologii, do rozwiązania realnego problemu w czasie akceptowalnym przez pracodawcę, z zachowaniem pewnych zasad co do wydajności; integralności oraz bezpieczeństwa danych; odporności rozwiązania na zmiany, i jeszcze wielu innych podobnych czynników.

Wracając do przykładu z książką, naprawdę nie jest rzeczą trudną nauczyć się pisać zdania. Nie jest łatwo nauczyć się pisać książki, na których można zarobić.
Na wszelki wypadek podam analogię.
Nie jest rzeczą trudną opanować język programowania czy technologie pokrewne. Nie jest łatwo nauczyć się tworzyć oprogramowanie, które ma ręce i nogi.

(IV. do 2^64 - 1 -- zarezerwowane na potem, jeżeli mi się coś przypomni)

PODSUMOWANIE

I. Konkurujesz lub rozważasz konkurowanie na stanowisko początkującego programisty z osobami, które poświęciły typowo kilka tysięcy godzin na programowanie, i potrafią samodzielnie rozwiąząć albo szeroką gamę problemów, albo są doskonali w jednej dziedzinie. Mowa o bezpośrednich konkurentach -- najlepszych z aplikujących na to stanowisko, a nie średnich, nie słabych.

II. Przydatność początkującego programisty dla pracodawcy jest niska albo bardzo niska, o wiele niższa niż przeciętna osoba początkująca sobie wyobraża. Liczba ofert pracy i płace to odzwierciedlają, przy czym pozornie niskie płace początkujących programistów, są lepsze niż się wydaje.

III. Nauczenie się "na 95%" języka programowania i technologii pokrewnych do warunek konieczny do pracy programisty, ale nie warunek dostateczny. Trzeba też wiedzieć, jak w praktyce się stosuje ten język programowania, aby rozwiązać praktyczne, realne problemy, i do tego potrzeba doświadczenia w tworzeniu oprogramowania. Sporo doświadczenia.

edytowany 2x, ostatnio: Tig, 2019-01-12 13:33

Pozostało 580 znaków

2019-01-27 19:09
0

ale zrezygnowałęm, bo pomyślałem, że będzie lepiej jak podszlifuję jeszcze jeden rok springa

ahahahahahah

Pozostało 580 znaków

2019-02-01 10:09
0

Coś mi się wierzyć nie chce.. W jakim mieście szukasz? Może po prostu faktycznie jestes za słaby? Ja zmieniałem prace w lipcu jeszcze jako junior, i ofert było w bród.

Jakie miasto? Bród == ile? Junior czy mid? - BluzaWczolg 2019-02-01 11:07

Pozostało 580 znaków

2019-02-03 13:22
1

Hmmm to ja mam zupełnie inne odczucia... Niedawno sam startowałem w "komercyjnym" IT, wcześniej byłem "zaawansowany amatorem". Robiłem kilka rzeczy dość rozbudowanych, ale napisanych tak, że jak teraz na to patrzę to mi się płakać chce. Fakt działało, spełniało swoje zadanie itp. W prywatnej pracy stosowałem (jak się później okazało) wiele rzeczy/praktyk, które są normalnie używane w firmach tj. np. gita, dzieliłem sobie pracę na taski, które opisywałem "żeby nie zapomnieć" itp. Oczywiście w pracy okazało się, że robi się to trochę inaczej, ale szybko się przestawiłem.
Pracy dla juniorów nie ma to fakt, ale drugi fakt, że seniorów też nie ma na rynku. Cóż wysłałem ogłoszenia na stanowiska mid/senior - uczciwie opisałem co umiem, czego nie umiem i dostałem sporo odpowiedzi. Oczywiście w CV napisałem coś w stylu (oczywiście bardziej oględnie) - wiem nie jestem seniorem, umiem czytać i widzę, że szukacie seniora, ale szybko się nauczę i mogę pracować za miskę ryżu zanim się nie nauczę. Odzew był spory, na rozmowach nie ściemniałem. Pracę dostałem bardzo szybko. Faktycznie początki były bardzo trudne, bo nie wyobrażałem sobie ile mi nawet brakuje (kończyłem studia zupełnie z innej dziedziny i wszystko czego się nauczyłem było z książek/internetu), ale bez jaj to tylko programowanie, skoro są ludzie, którzy się tego nauczyli, to znaczy, że ludzie mogą się tego nauczyć. Oceniam, że mi było potrzebne 3 miesiące aby nie być kosztem dla firmy. Kolejne 3 aby stać się prawdziwym developerem - pewnie nadal najsłabszym w firmie, ale jednak w 100% samodzielnym, który realizuje wszystkie powierzone zadania i nie ma zwrotek tasków z QA.

Teraz oglądam sytuacje z drugiej strony i widzę jak komicznie wygląda rekrutacja w IT. Firma oferuje standardowe finanse, górna granica widełek może nawet być uznana za dość atrakcyjną. Na ogłoszenie odzew jest praktycznie zerowy. Na rozmowę przychodzi może z 1 osoba na 2 tygodnie z oczekiwaniami finansowymi nieadekwatnymi do swoich umiejętności. I stało się dla mnie jasne czemu mnie zatrudniono. Po prostu po rozmowie ktoś uznał "pie&*&, gość nie jest głupi, coś już umie, racjonalnie podchodzi do swoich możliwości i widać u niego motywację - za tą kasę co chce warto spróbować bo więcej wydajemy na kawę". Tak więc ogólnie, uważasz że coś umiesz (2 lata się uczysz to zakładam, że coś umiesz) wysyłaj na mid/seniora, zaprezentuj się dobrze i tyle. Łatwiej tak dostać pierwszą prac\ę niż konkurować z 50 osobami na stanowisko juniorskie, gdzie Twoje CV zginie w stercie papierów. Jest spora szansa, że po drugiej stronie napotkasz mocno zestresowana osobę, która od miesiąca czy dwóch nie ma kim obsadzić wakatu (a często kilku wakatów) i jak jej dasz choć namiastkę nadziei, że jesteś poważną i pracowitą osobą, a nie milenialsem to może da Ci szansę. Tak żeby uzmysłowić skalę problemu - ja aplikując tym sposobem dostałem 2 oferty pracy, ta którą odrzuciłem nadal wisi w internecie.

MZ w tej sytuacji jest win:win - firma dostała pracownika za śmieszne pieniądze, ja uzupełniłem braki wiedzy. Teraz porozmawiamy o finansach i prawdopodobnie dostanę normalną pensję. Firma znów wygra, bo ma pracownika wdrożonego w wewnętrzne systemy/projekt/workflow za kasę za którą nikt ogarnięty nie będzie skory zmieniać pracy.

Pozostało 580 znaków

2019-02-03 13:50
0

It i programowanie stało się super modne. Teraz nawet Babcia co sprzedawała precle idzie an bootcamp i potem po kursie wysyła CV :) Dlatego na juniora jest ok 50-100cv na 1 miejsce ;)
Dobrze, że już człowiek ma doświadczenie i coś umie i może pracować jako mid bo teraz znależć prace jako junior graniczy z cudem, dlatego lepiej przez te 6-8 miechów robić sobie coś komercyjnego i potem startować już jako programista z doświadczeniem. Swoją drogą ciekawi mnie kiedy już midów będzie wysyp i na 1 projekt będzie 50 aplikacji :)

edytowany 3x, ostatnio: somekind, 2019-02-03 21:21
Pierwsza odpowiedź i cytat całego wpisu :D @Somekind troolujesz teraz mnie... trzeba było chociaż zostawić w komentarzu ze usunąłeś cytat, kompletna samowolka na tym forum 😵 - Visual Code 2019-02-03 16:40

Pozostało 580 znaków

2019-02-03 14:03
0
Łukasz Filip Gucma napisał(a):

Dobrze, że już człowiek ma doświadczenie i coś umie i może pracować jako mid bo teraz znależć prace jako junior graniczy z cudem, dlatego lepiej przez te 6-8 miechów robić sobie coś komercyjnego i potem startować już jako programista z doświadczeniem. Swoją drogą ciekawi mnie kiedy już midów będzie wysyp i na 1 projekt będzie 50 aplikacji :)

> 6-8 miesięcy doświadczenia
> mid
> wybierz jedno

No wysyp midów będzie, jak zaczną rozdawać stanowiska mida po miesięcznym okresie próbnym, a seniorem będzie ktoś po pół roku.


Prosząc o pomoc w wiadomości prywatnej odbierasz sobie szansę na otrzymanie pomocy od kogoś bardziej kompetentnego :)

Pozostało 580 znaków

2019-02-03 15:18
0
superdurszlak napisał(a):
Łukasz Filip Gucma napisał(a):

Dobrze, że już człowiek ma doświadczenie i coś umie i może pracować jako mid bo teraz znależć prace jako junior graniczy z cudem, dlatego lepiej przez te 6-8 miechów robić sobie coś komercyjnego i potem startować już jako programista z doświadczeniem. Swoją drogą ciekawi mnie kiedy już midów będzie wysyp i na 1 projekt będzie 50 aplikacji :)

> 6-8 miesięcy doświadczenia
> mid
> wybierz jedno

No wysyp midów będzie, jak zaczną rozdawać stanowiska mida po miesięcznym okresie próbnym, a seniorem będzie ktoś po pół roku.

Nie napisałem, że ktoś ma mida po 8 miesiacach ale zeby juz startować na mida bo anuż się uda :) Po prostu jest wysyp amatorów po bootcapmach co nic nie potrafią jeszcze, ale uważają się już za programistów :) Wiem z kilku źródeł co rekrutują. Na juniora idzie średnio ok 50 CV. Jako doświadczenie 3 banalne strony co w gimnazjum ktoś zrobi i tyle. Może z tych 50 wartych uwagi jest 1-3, a przeważnie ani jeden nie jest wart zaproszenia na rozmowe ;) A jak firma potrzebuje to słyszałem od kumpla, że dal te cv rekruterce i żeby sobie po zdjęciu wybrała :D

edytowany 4x, ostatnio: Łukasz Filip Gucma, 2019-02-03 15:23
O cholera a ja nie mam zdjecia w CV xd - Czitels 2019-02-20 20:44

Pozostało 580 znaków

2019-02-03 15:49
3

Pomijając kwestię, że dla mnie wszelkie tytularstwo w stylu junior/mid/senior jest bezcelowe, to pozostaje pytanie czy warto pracować w firmie, gdzie się zatrudnia midów po 8 miesiącach doświadczenia, nawet jeśli się do takiej dostaniemy.

edytowany 1x, ostatnio: Michał Sikora, 2019-02-03 15:50

Pozostało 580 znaków

2019-02-04 16:41
0

Warszawa.. Wysłałem na pewno około 40-50 CV. Junior.
Tak było jak startowałem bez doświadczenia - koniec 2017. Odzew był dosyć spory, byłem na 7 rozmowach i po miesiącu od rozpoczęciu szukania dostałem pracę.
Po niecałych 7 miesiącach postanowiłem zmienić, wysyłałem na juniora z 7 miesięcznym doświadczeniem, znowu około 40CV wysłanych. BARDZO duży odzew, tym razem znacznie większy. Pracę znalazłem po tygodniu od wysłania pierwszego CV. Nie wiem jak to wygląda w innych miastach, ale w Wwa na pewno jest dużo miejsc dla juniorów.

edytowany 2x, ostatnio: januszprogramowania666, 2019-02-04 16:47
40 CV wysłanych i to niby jest dobrze... - Papec 2019-02-04 22:29
@Papec: wystarczy nawet jedno miejsce, byle skutecznie :D sorry, ale nie wiem do ilu firm przywykłeś wysyłać CV, 100? 200? 500? 40 to całkiem dużo, jeśli odezwie się nawet 1/3 to i tak daje ci to sporo rozmów - januszprogramowania666 2019-03-22 15:39

Pozostało 580 znaków

2019-02-04 18:34
0
januszprogramowania666 napisał(a):

Warszawa.. Wysłałem na pewno około 40-50 CV. Junior.
Tak było jak startowałem bez doświadczenia - koniec 2017. Odzew był dosyć spory, byłem na 7 rozmowach i po miesiącu od rozpoczęciu szukania dostałem pracę.
Po niecałych 7 miesiącach postanowiłem zmienić, wysyłałem na juniora z 7 miesięcznym doświadczeniem, znowu około 40CV wysłanych. BARDZO duży odzew, tym razem znacznie większy. Pracę znalazłem po tygodniu od wysłania pierwszego CV. Nie wiem jak to wygląda w innych miastach, ale w Wwa na pewno jest dużo miejsc dla juniorów.

Napisz coś więcej. Jaka technologia, oczekiwania, co umiałeś, jakie projekty wcześniej wykonałeś i tak dalej. Samo to, ile cv wysłałeś, nic nie mówi.

Pozostało 580 znaków

2019-02-05 15:00
0

Co potrafiłem pod koniec 2017? Dobrze znałem język java (tzn. znałem jego możliwości, składnię itp. Potrafiłem napisać stronę internetową w html, rozwiązać skomplikowane problemy na codility/hackerranku (wymyślić algorytmy). Napisać proste SQLki, a z pomocą internetu bardziej skomplikowane. Podstawowo (bardzo) znałem springa - ale miałem już napisanych kilka prostych 'projektów' - strona z generatorem losowym, biblioteka, jakas strona do zapisywania/usuwania/edycji danych. Wiedziałem po co są interfejsy, co to jest generycznośc, co to jest dependency injection (na tyle ile mogłem to wtedy rozumieć, ale w praktyce w miarę wiedziałem o co chodzi). Wiedziałem co to git i jak się nim posługiwać(tyle, żeby zrobic commita, pusha, stasha). Miałem 0 doświadczenia komercyjnego. po 7 miesiącach rozwinąłem jave, poznalem Reacta, cssa, Springa, bazy danych - Postgres i cassandra, lepsza obsługa gita.

Nie wiem co mają moje doświadczenia bo mówimy tlyko o ILOŚĆI ofert dla juniora.

"Dobrze znałem język java" - efekt Krugera-Dunninga. - winuser 2019-02-12 13:14
@winuser: ""Dobrze znałem język java" - efekt Krugera-Dunninga." Efekt doczepiania się do znaczenia. - januszprogramowania666 2019-02-14 17:06
Kolego, nie denerwuj sie, kiedys w koncu go poznasz dobrze. - winuser 2019-02-15 09:01
moze dał sobie 4 kropki z 5 na cv przy znajomosci java. wiec to juz powazny zawodnik - m123 2019-02-15 09:05
@januszprogramowania666: ostrożniej ze słownictwem. - Patryk27 2019-02-15 09:05

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0