Mówi się, że w piłce nożnej pojedyncze mecze wygrywa się dzięki napastnikom, natomiast wielkie turnieje wygrywa się dzięki żelaznej formacji obronnej.

Napastnicy to z jednej strony niezapomniane gole i bardzo bezpośredni wpływ na wynik meczów, natomiast z drugiej to dość łatwy cel do zneutralizowania przez przeciwnika przygotowanego pod względem taktycznym. Z obrońcami jest inaczej - nie jest to najbardziej efektowna pozycja na boisku, nie ma swojego odpowiednika strzelonych bramek, jednak długofalowo to właśnie ona gwarantuje, że kończysz mecz “na zero z tyłu”. Ze skuteczną obroną masz gwarancję, że w trakcie meczu nic cię nie zaskoczy, że przeciwnik z każdą kolejną próbą strzelenia gola będzie bardziej zniechęcony, a ty nie będziesz musiał odrabiać strat. Niezależnie od tego w jakiej formie są twoi napastnicy, twoja obrona zagwarantuje ci spokój przez cały mecz.

W taki sam sposób można rozumieć skuteczną naukę programowania, która tak jak piłka nożna, ma swoje formacje ataku oraz obrony.

Z opisem tej pierwszej nie ma zbyt dużego problemu - dla programistów będzie to po prostu aktywny rozwój. Setki kursów, dziesiątki ekspertów, długie tygodnie szkoleń. Napastnicy to dla nas jasno określona dawka twardej wiedzy, dzięki której rozbudowujemy swoje drzewko umiejętności stając się bardziej wartościowymi dla naszego pracodawcy czy społeczności w której aktywnie uczestniczymy.

Można się zastanawiać, czy w programowaniu - tak jak i w piłce nożnej - znajdziemy coś, co moglibyśmy określić naszą formacją obronną? Czy znajdziemy coś, co będzie fundamentem wszystkiego co wypracujemy w dalszych latach kariery niezależnie od kursu w którym będziemy uczestniczyć, książki którą przeczytamy, czy firmy w której zostaniemy zatrudnieni?

Aby znaleźć odpowiedź na to pytanie postanowiłem chwilowo zrezygnować z moich subiektywnych opinii na ten temat i w zamian zapytać o zdanie 115 dbających o swój rozwój programistów i pasjonatów programowania. Zrobiłem to jednak nieco przewrotnie, ponieważ pytanie dosłownie brzmiało: “Cofasz się w czasie i odwiedzasz samego siebie z początków przygody z programowaniem. Jakie trzy kluczowe rady przekażesz takiej osobie, mając na uwadze twoją wiedzę i aktualne doświadczenie?”. Zadając to pytanie miałem nadzieję, że na podstawie własnych historii oraz refleksji związanych z zawodem programisty, każdy z odpowiadających zastanowi się co tak naprawdę decyduje o tym, jak potoczy się jego programistyczny los.

Jesteście ciekawi “jak odpowiedzieli ankietowani”? Zapraszam!

Fundamenty skutecznej nauki programowania

Odpowiedziami, które okazały się najpopularniejsze bez podziału na lata doświadczenia, a tym samym wskazują na swoiste fundamenty rozwoju programisty, były odpowiednio:

Praca z bardziej doświadczonymi od siebie (43 głosy)

Sokrates miał kiedyś wypowiedzieć słynne „Wiem, że nic nie wiem” - czy my, programiści, możemy się pod tym podpisać? Praktyka i badania dowodzą, że w początkowych latach kariery jest to praktycznie niemożliwe.

Jak pokazuje Efekt Dunninga-Krugera, jako początkujący ulegamy złudzeniu związanemu z własnymi umiejętnościami i mówiąc najprościej jak się da - po prostu przeceniamy je. Ulegając takiemu zjawisku jesteśmy narażeni na trwanie w spowalniających nasz rozwój przekonaniach, podejmowanie zbytniego ryzyka czy też zbyt aroganckie podejście do osób z którymi współpracujemy.

A co zrobić, żeby takiego złudzenia uniknąć? Jednym z przykładowych rozwiązań wydaje się praca z lepszymi od siebie, która - jeśli tylko przyjmiemy, że istnieją na świecie osoby bardziej kompetentne od nas - pokaże nam bardziej obiektywną wycenę naszych umiejętności.

Współpraca z mentorami i ekspertami w dziedzinie którą chcemy zgłębić to znakomita okazja na przebicie “szklanego sufitu” związanego z własnym rozwojem - poznamy konkretne zachowania i umiejętności o których nie mieliśmy pojęcia, dowiemy się jak radzić sobie z problemami na które natrafiliśmy po raz pierwszy a także będziemy mogli przekonać się jak “wzory do naśladowania” radzą sobie pod wpływem stresu. Niezależnie od języka programowania który chcesz opanować, stacku technologicznego który chcesz zrozumieć czy celu który chcesz osiągnąć w naszym zawodzie, praca z osobami bardziej doświadczonymi od ciebie to coś, z czego wyciągniesz niezaprzeczalne korzyści.

Zgodnie z pewną popularną prawdą związaną z nauką, “jeśli najmądrzejszą osobą w pokoju w którym pracujesz jesteś ty sam, to warto zastanowić się, czy to na pewno pokój dla ciebie”.

Poświęcenie większej ilości czasu na język angielski (41 głosów)

W naszym programistycznym światku krąży dość popularny mem, który dobrze obrazuje wartość nauki tego właśnie języka:

Jaki język powinien znać każdy programista? Angielski

Nie Python, nie JavaScript, nie C#, ale właśnie angielski. Angielski, jako język łączący programistów niezależnie od narodowości, przekonań czy strefy czasowej okazuje się kluczowym narzędziem w pozyskiwaniu wiedzy.

Początkujący programiści przez pewien czas mogą się rozwijać w lokalnych społecznościach gdzie wszyscy posługują się językiem ojczystym, jednak dopiero wypłynięcie na wody międzynarodowe (jeśli chodzi o język) otwiera przed nimi najwięcej możliwości.

Angielski to język w którym tworzone są wszystkie najważniejsze blogi związane z programowaniem, jest to język w którym publikują najbardziej renomowani eksperci z naszej branży, a także którym komunikują się firmy, które wielu z nas chciałoby mieć w swoim CV.

Rzeczywistość pokazuje, że wszyscy ci, dla których był to naturalny “drugi język” w ich latach szkolnych powinni się naprawdę cieszyć z ilości godzin, które przy nim spędzili. Osoby które nie miały do czynienia z angielskim, bądź też zaczynają naukę programowania stosunkowo późno, podkreślają często jak brak umiejętności posługiwania się tym właśnie językiem ograniczał je w tych kluczowych, początkowych miesiącach na programistycznej ścieżce.

Taki wynik naszej ankiety to kolejny argument za tym, żeby debatę na temat najważniejszego języka do opanowania przez programistę zakończyć raz na zawsze.

Wcześniejsze wejście na rynek pracy (36 głosów)

Wątpliwości co do własnych umiejętności, stres oraz nie do końca prawdziwe wyobrażenia o pracy to naturalny stan każdej osoby rozpoczynającej pracę w naszym zawodzie. W kontekście własnego rozwoju kluczowe jest jednak to, żeby wszystkie te obawy nie powodowały nieustannego przekładania momentu startu na później.

Niemal każdy programista z kilkuletnim doświadczeniem potwierdzi fakt, że nie ma bardziej wydajnego motoru wzrostu, jak praca w warunkach rzeczywistych. Na nic książki, teoria czy opinie znajomych, jeśli na własnej skórze nie poczujemy “tego czegoś” - presji związanej z dowożeniem projektu, walki z samym sobą w momencie wybierania konkretnej technologii czy też współpracy z grupą ludzi, w której każdy nieco inaczej definiuje pojęcie “dobrego programisty”. Właśnie w takich sytuacjach będziemy mieli okazję odkryć prawdziwe oblicze programowania, oraz nasz stosunek do spędzania czasu “przed komputerem”.

Po naszej ankiecie widać, że wkroczenie na rynek pracy odpowiednio szybko docenianie jest praktycznie na równi z językiem angielskim czy pracą z mentorami. Z pewnością wiąże się to z tym, że początkowe lata pracy to okres w którym mamy najwięcej energii i sił, które mogą być spożytkowane na rozwój, a skoro tak, to warto skonfrontować się z rzeczywistością odpowiednio wcześnie.

Rozwój umiejętności miękkich (31 głosów)

W początkowych latach kariery umiejętności miękkie mogą być uważane za wiedzę która niepotrzebnie zajmuje miejsce w pamięci, bo przecież na rozmowie kwalifikacyjnej przedstawiamy algorytmy i historie związane z wybranymi technologiami, a nie opowiadamy o empatii.

Wszystko to prawda, jednak po pierwsze - dotyczy to tylko kilku początkowych miesięcy kariery kiedy nasze zadania są wciąż stosunkowo proste i jasno określone, a po drugie - ten utarty model programisty-klepacza kodu staje się coraz bardziej nieaktualny w świecie, który wymaga od nas ciągłego i jeszcze szybszego przystosowywania się do nowych okoliczności pracy.

Umiejętności miękkie to zestaw kompetencji, który jest zdecydowanie trudniejszy do oceny w porównaniu do wszystkiego tego, co wiąże się z twoją zawodową specjalizacją, jednak ma wpływ na zdecydowanie więcej aktywności w których bierzesz udział, niż samo programowanie. Mówimy tutaj np. o umiejętności skutecznej komunikacji, przedstawiania swoich pomysłów w angażujący sposób, umiejętności związanych z negocjacjami, pracą w grupie czy radzeniem sobie ze stresującymi sytuacjami.

Warto pamiętać o tym, że przy tak szybko zmieniających się warunkach pracy, postępie technologicznym oraz konkurencyjności tego zawodu, umiejętności miękkie są tym, dzięki czemu będzie w stanie przedłużać naszą datę przydatności do pracy praktycznie w nieskończoność.

Nikt nie wie, jak będzie wyglądać programowanie za 20 lat, natomiast niemal pewne jest, że ludzie wciąż będą ze sobą wchodzić w interakcje, a potrzeba posiadania kogoś, kto rozwiąże konflikt w zespole, będzie nie do przecenienia.

Cierpliwość w nauce (28 głosów)

Punkt dotyczący cierpliwość w kontekście nauki programowania był piątą najpopularniejszą odpowiedzią w naszej ankiecie. Zastanawiając się nad tym, jak wyglądała moja własna droga do zostania programistą, oraz wspominając wszystkie historie opowiadane mi przez znajomych, uważam, że ten punkt miałby szansę powalczyć o zdecydowanie wyższą pozycję.

Cierpliwość, oraz wytrwałość (którą dodałbym od siebie) to kluczowe cechy dla kogoś kto zostaje postawiony przed wyzwaniem wymagającym od niego pracy na granicy swoich umiejętności oraz doświadczenia, albo też na poziomie, który je przekracza. To nie gotowa lista posiadanych umiejętności decyduje o tym jak poradzimy sobie w okolicznościach, które są trudniejsze niż wszystko co robiliśmy do tej pory, ale właśnie wytrwałość w pokonywaniu kolejnych przeszkód (takich jak pytania, na które początkowo nie znamy odpowiedzi) i cierpliwość w osiąganiu celu.

Te dwie cechy zdecydują o tym jak długo będziemy w stanie wytrzymać w niekomfortowych dla nas warunkach - warunkach, w którym test świeci się na czerwono chociaż powinien przechodzić pomyślnie, warunkach, w których proces budowania aplikacji zatrzymuje się w najmniej oczekiwanym momencie, lub też warunkach, w których zostaliśmy poproszeni o rozwiązanie problemu, którego tak naprawdę nie rozumiemy.

Wydawałoby się, że tego typu sytuacje to przykre wyjątki od spokojnej pracy przy ciastku i kawie, jednak nasza ankieta pokazuje coś innego. Dlatego właśnie nie dziwi tak wysoka pozycja dotycząca cierpliwości w nauce (i zapewne w pracy samej w sobie).

Pięć kluczowych porad dla uczących się programowania

Wyniki naszej ankiety - co cieszy - nie zaskakują, lecz tylko potwierdzają to, o czym mówi się od dawna:

  • Programista, który nie opanował języka angielskiego, będzie miał po prostu trudny start w zawodzie.
  • Programista, który nie otacza się lepszymi od siebie, nie pozna realnej wartości swoich umiejętności oraz nie da sobie szansy na przebicie szklanego sufitu.
  • Programista, który nie wejdzie na rynek pracy odpowiednio wcześnie, nie będzie mógł się rozwijać w tempie, na które wskazuje jego potencjał.
  • Programista, którego jedynym zainteresowaniem jest kod, będzie miał “pod górkę” w sytuacjach wymagających pracy w grupie oraz interakcji z innymi.
  • Programista, któremu brakuje cierpliwości oraz wytrwałości, nie będzie w stanie mierzyć się z wyzwaniami przekraczającymi jego obecne możliwości.

Warto zauważyć, że w piątce kluczowych porad, które powstały na podstawie odpowiedzi zaproszonych do ankiety programistów, nie znajduje się nic o konkretnym języku programowania, frameworku czy bibliotece. Jak pokazuje historia, tego typu narzędzia zmieniały się w przeszłości i będą się zmieniać w przyszłości, natomiast niezależnie od czasu i miejsca pracy wszyscy docenią to, jak komunikujemy się z innymi, jak podchodzimy do rozwiązywania problemów oraz jak wytrwali jesteśmy w tym co robimy.

Na koniec

W formie ciekawostki, na sam koniec prezentujemy jeszcze odpowiedzi, na które oddano zero głosów w grupie osób posiadających co najmniej pięć lat doświadczenia:

  • Najbardziej rozwinie cię w firmie która jest liderem rynku
  • Specjalizuj się w wąskiej dziedzinie programowania lub konkretnej technologii
  • Socjalizuj się i poznawaj nowych ludzi dzięki konferencjom i meetupom
  • Zostaw książki które czytasz i skup się na faktycznych projektach

Autorzy książek mogą odetchnąć z ulgą, natomiast organizatorów konferencji takie wyniki powinny nieco zaniepokoić. A jakie jest wasze zdanie - czy zgadzacie się z wynikami naszej ankiety? Czekamy na wasze komentarze!