fbpx

Jaki powinien być dobry programista? 5 cech i umiejętności dobrego programisty

Jaki powinien być dobry programista? 5 cech i umiejętności dobrego programisty

To nieprawda, że każdy może zostać dobrym programistą, tak jak nie każdy może zostać dobrym lekarzem, grającym światowe trasy koncertowe muzykiem czy kierowcą zawodowym pokonującym miesiąc w miesiąc dziesiątki tysięcy kilometrów. Jak w każdej innej profesji, tak i w programowaniu sukces to wypadkowa ciężkiej pracy, talentu oraz pewnego zestawu cech i umiejętności. Czym one są i jaki powinien być kandydat na dobrego programistę?

Czy każdy może zostać programistą?

W wyobrażeniach na temat zawodu programisty przeszliśmy daleką drogę. Piętnaście – dwadzieścia lat temu większość osób wyobrażała sobie programowanie jako zajęcie dla stroniących od ludzi, świata i światła, wiecznie ubranych w przepocone, flanelowe koszule, nerdów. Dzisiaj z kolei z każdej strony bombardowani jesteśmy pięknymi historiami o przebranżowieniu w kilka tygodni i słyszymy, że programistą może zostać każdy.

I oczywiście bardzo się cieszę, że ten mit niechlujnego, zamkniętego w sobie programisty jest już pieśnią przeszłości, a większość ludzi wie, że programista to zazwyczaj nie żaden potwór czy kosmita, ale z drugiej strony to nowe wyobrażenie pod tytułem “programowanie to zajęcie dla każdego” też niestety wprowadza trochę niepotrzebnego zamieszania.

Bo generalnie w życiu jest tak, że każdy z nas ma jakieś cechy, jakieś predyspozycje, dodatkowo w ciągu życia uczymy się różnych rzeczy, zdobywamy różne umiejętności, a to wszystko bardzo mocno się ze sobą wiąże. Niektóre rzeczy przychodzą nam łatwiej, nauka innych zajmuje więcej czasu i jest to całkowicie normalne. Ja na przykład od najmłodszych lat słuchałem bardzo dużo muzyki i jako dziecko miałem marzenie, żeby zostać gwiazdą rocka. Ale też bardzo szybko zdałem sobie sprawę, że to się raczej nie uda. Nie miałem do tego odpowiednich predyspozycji. Nie potrafiłem ani śpiewać ani nucić usłyszanych melodii, a i z poczuciem rytmu też nigdy nie było idealnie. I ok, gdybym wziął do ręki gitarę, zapisał się na kurs i codziennie ćwiczył, po pewnym czasie – być może – coś by nawet zaczęło z tego wychodzić, może założyłbym jakiś zespół, ale czy zagrałbym trasę koncertową na największych stadionach świata? Szczerze wątpię.

Talent jest ważny, ale jeszcze ważniejsza jest praca

Z programowaniem jest o tyle dobrze, że chociaż potrzebna jest oczywiście pewna doza talentu i jest to istotne zwłaszcza na początku, gdy stawiamy w nim pierwsze kroki, to jednak większości tego, co w pracy programisty jest ważne, możemy się nauczyć. Natomiast świadomość, że każdy z nas ma różne talenty i różne predyspozycje jest ważna, żeby nie narzucać na siebie zbyt dużej presji i nie porównywać się zbyt mocno z innymi. To, że ktoś nie mając wcześniej pojęcia o programowaniu, ogląda jeden film na jego temat, czyta krótkie wprowadzenie i już po chwili pisze swoje pierwsze programy, a my spędzamy drugi tydzień na zrozumieniu absolutnych podstaw, o niczym nie świadczy. Może ten ktoś ma do tego wyjątkowy dryg, a my po prostu potrzebujemy trochę więcej czasu. To jeszcze nie oznacza, że się do tego nie nadajemy.

Mam kumpla, który przeszedł tę mityczną drogę od zera do junior w developera w to mityczne pół roku, o którym sam kiedyś wspominałem. Czy to oznacza, że każdy może zostać programistą w pół roku? Z całą pewnością nie.

Prawdopodobnie 95 albo nawet 99 procent osób będzie potrzebowało więcej czasu – komuś ta droga zajmie rok, ktoś inny zostanie programistą w ciągu dwóch lat, będą też osoby, które będą uczyły się pięć albo dziesięć lat i wciąż będą stać w miejscu. Chociaż w takiej sytuacji warto już się zastanowić, co jest nie tak – czy to my się w niewłaściwy sposób uczymy czy może jednak to nie jest zajęcie dla nas, co też nie powinno być powodem do wstydu. Tak jak napisałem na początku – nie każdy musi mieć predyspozycje do bycia programistą, tak jak nie każdy musi mieć predyspozycje do bycia lekarzem. Zawsze powinniśmy szukać tego, co nam się podoba, czego przyjemnie nam się uczy i w czym czujemy się dobrze.

Bez presji!

Wspominałem przed chwilą o tym, by nie narzucać sobie presji i nie porównywać się zbyt mocno z innymi i jest to ważne nie tylko na początku programistycznej drogi. W pracy wielokrotnie będziemy spotykać osoby lepsze od siebie, takie, które będą pisać lepszy kod, szybciej będą rozwiązywać problemy, czy z większą łatwością będą odnajdywać się w nowych technologiach. I zamiast marudzić, że my nie mamy tyle talentu i nigdy nie będziemy tak zdolni, wykorzystajmy to jako okazję do nauki. Obecność w naszym otoczeniu osób lepszych od nas to jedna z najlepszych rzeczy dla naszego rozwoju, jakie mogą nam się przydarzyć.

Oczywiście sama obserwacja takich osób na niewiele się zda, jeżeli sami nie będziemy ciężko pracować. A nad czym powinniśmy pracować jako programiści? Na jakie cechy i umiejętności powinniśmy zwrócić uwagę?

Najważniejsza rzecz – przez cały czas, bez względu na to, czy dopiero stawiamy pierwsze kroki w programowaniu, czy jesteśmy w branży od piętnastu lat, musimy wykazywać chęć do nauki. Programowanie to nie jest coś, czego nauczymy się raz i już. Programowania naprawdę uczymy się całe życie.

Programowanie to nie tylko pisanie kodu

Bo programowanie to nie jest tylko programowanie. Mówiłem już o tym wielokrotnie i z przyjemnością powtórzę to po raz kolejny – programowanie to nie jest tylko pisanie kodu w wybranym języku.

Kiedy widzimy ofertę szkoły programowania, która obiecuje, że “w 5 tygodni zrobimy z ciebie programistę” powinniśmy to odczytać nieco inaczej. Właściwym hasłem byłoby raczej “w 5 tygodni pokażemy ci wybrane aspekty programowania z użyciem kilku technologii, przejdziemy przez podstawy tych technologii, także zdobędziesz pewną wiedzę, mniej więcej będziesz wiedział, jak to programowanie wygląda, co się z czym łączy i dlaczego, ale to będzie może 10% tego, czego potrzebujesz aplikując do pierwszej pracy, także pamiętaj, ruszaj po bootcampie do roboty, pogłębiaj wiedzę i twórz własne projekty”. Długie hasło i takie raczej mało marketingowe, ale prawdziwe.

Musimy pamiętać, że tworząc projekt, nie tylko piszemy kod w jakimś języku. Zazwyczaj potrzebować będziemy umieścić dane w bazie danych. I tutaj znowu – jaka to będzie baza? SQL-owa? MongoDB? Może jakaś baza typu klucz – wartość? Jeżeli nie kojarzycie wszystkich tych pojęć, nie przejmujcie się, bo nie o tym jest ten artykuł. Chcę wam tylko uświadomić jak wiele jest do nauki, ale oczywiście jeżeli jesteście zainteresowani bazami danych, odsyłam do odcinka na ich temat.

Ok, bazy danych mamy ogarnięte, to teraz pytanie – jak te dane wyświetlić? Potrzebujemy je w jakiś sposób przesłać, więc korzystamy z REST API, a to kolejny koncept, który należy poznać. Dobrze byłoby też na choćby podstawowym poziomie znać zagadnienia związane z testowaniem aplikacji. Dobrze byłoby znać dobre praktyki programistyczne czy wzorce projektowe. I oczywiście rozumieć, jak to możliwe, że nasze dane są przesyłane pomiędzy jednym serwerem a drugim albo między serwerem a naszym komputerem czy telefonem. A skoro tak, to należy poznać podstawy sieci komputerowych. Dobrze byłoby wiedzieć jak się zalogować na serwer i jak się po nim poruszać, jeżeli nie będziemy mieli do dyspozycji interfejsu graficznego, a tylko klasyczną konsolę systemową.

Jak widzicie jest tego trochę, a większość tych niezbędnych zagadnień zebrałem w ebooku Roadmapa programisty, który polecam każdej osobie planującej programistyczną karierę.

Zawsze jest coś nowego do nauki

Zakres materiału jest naprawdę szeroki, także cały czas jest coś do nauki, a co więcej świat IT nieustannie się zmienia i regularnie pojawiają się nowe technologie i nowe narzędzia, dzięki którym stare problemy możemy rozwiązywać na nowe sposoby. Często te nowe sposoby są bardziej efektywne, szybsze, po prostu lepsze, także zawsze powinniśmy być na bieżąco z tym, co się w branży IT dzieje. Dlatego też najlepiej, gdy programowanie jest naszą autentyczną pasją i po prostu lubimy sprawdzać nowinki i eksperymentować z różnymi narzędziami, wtedy ten nasz rozwój jest w zasadzie naturalny i nawet nie zauważamy, że cały czas uczymy się czegoś nowego.

A czy można być programistą, który przez lata nie nauczy się niczego nowego? Oczywiście, są osoby, które latami pracują w jednym projekcie, robiąc te same rzeczy z użyciem tych samych technologii, ale nie polecam takiego rozwiązania, bo decydując się na nie, po pierwsze gdy już w końcu zdcydujemy się zmienić pracę, może się okazać, że pomimo wielu lat w branży tak naprawdę niewiele umiemy, a po drugie, takie zasiedzenie się w jednym projekcie, to najprostsza droga do wypalenia zawodowego, o którym zresztą też planuję w niedługim czasie nagrać ciekawy odcinek.

Dobry programista to samodzielny programista

Druga rzecz niezbędna w pracy programisty to samodzielność, a pod tym pojęciem kryje się kilka bardzo konkretnych umiejętności takich jak umiejętność wyszukiwania informacji w internecie, umiejętność właściwego definiowania problemu i umiejętność formułowania bardzo precyzyjnych pytań.

Wszystko to wiąże się z faktem, że w pracy programisty regularnie mamy sytuacje, gdy robimy coś nowego, coś nie działa, czegoś nie wiemy albo pojawia się błąd. I nieważne, czy programujemy od miesiąca czy od dziesięciu lat, tego typu problemy to codzienność. Różnica jest taka, że im więcej doświadczenia mamy, tym szybciej jesteśmy w stanie te problemy rozwiązać, bo zaczynamy zauważać podobieństwa między nimi, wiemy jak do nich podchodzić, na co zwracać uwagę i jakie kroki podejmować.

Dzisiaj jest zresztą dużo łatwiej niż kilkanaście lat temu, bo praktycznie nie zdarzają się problemy, których rozwiązań nie znaleźlibyśmy w internecie. Zawsze, gdy coś nam nie działa, gdy na ekranie pojawia się jakiś błąd, pamiętajmy, że na dziewięćdziesiąt dziewięć procent ktoś inny miał już ten sam problem, na dziewięćdziesiąt dziewięć procent ktoś o rozwiązanie tego problemu zapytał i na dziewięćdziesiąt dziewięć procent ktoś opisał jego rozwiązanie. Sztuką jest tylko odpowiednie sformułowanie naszego problemu, tak aby odnaleźć właściwą odpowiedź.

I o tym też na pewno nagram niedługo odcinek, bo uważam, że to zdecydowanie jedna z umiejętności, nad którymi należy pracować już od samego początku przygody z programowaniem.

Musimy też pamiętać, że samodzielność nie oznacza siedzenia gdzieś w kącie, z założonymi słuchawkami i robienia wszystkiego samemu, bo równie istotna jest – i to jest nasza rzecz numer trzy – umiejętność pracy z innymi.

Dobry programista umie pracować w zespole

Wiadomo, że na etapie nauki programowania najczęściej robimy to sami, w zaciszu własnego domu – chociaż w dzisiejszym świecie i to nie musi być regułą, bo spokojnie możemy znaleźć inne osoby do wspólnej nauki czy pracy nad projektami – ale gdy zaczynamy już pracę w branży IT, stajemy się częścią większego zespołu.

Projekty, nad którymi pracujemy są bardziej rozbudowane, każdy ma w nich pewien zakres odpowiedzialności i musimy się w tym wszystkim odnaleźć. Musimy nauczyć się odpowiedniej komunikacji – z managerami, scrum masterami, testerami, a przede wszystkim z innymi programistami. Musimy nauczyć się wspólnie dyskutować nad rozwiązaniami, musimy nauczyć się pytać innych o pomoc, a jednocześnie musimy nauczyć się tego, by i samemu potrafić we właściwy sposób dzielić się wiedzą. Bo tak to właśnie w dobrze prowadzonym projekcie, przy którym pracują ogarnięte osoby, wygląda – to nieustanny przepływ wiedzy pomiędzy różnymi członkami zespołu.

Jednego dnia ktoś pomaga tobie, innego dnia ty pomagasz komuś innemu. Oczywiście na samym początku, gdy dopiero zaczynasz programistyczną karierę albo wdrażasz się w projekt, to głównie ty czerpiesz z doświadczeń innych, ale nawet wtedy możesz dawać wiele od siebie, o czym za chwilę opowiem.

Odpowiedni balans

Tutaj jeszcze taka ważna uwaga – w pracy programisty musimy nauczyć się odpowiedniego balansu pomiędzy samodzielnością a pracą z innymi osobami. Z jednej strony powinniśmy korzystać z wiedzy i doświadczenia osób, z którymi pracujemy i nie powinniśmy starać się zrobić wszystkiego samemu, bo czasem zamiast siedzieć nad czymś pół tygodnia i tylko się frustrować, lepiej zapytać o to kolegi lub koleżanki z zespołu i otrzymać bardzo konkretną odpowiedź w ciągu pięciu minut, ale z drugiej strony nie powinniśmy też pytać o wszystko, gdy tylko pojawi się w naszej pracy jakiś problem. Bardzo często te próby samodzielnego rozwiązania problemu są wyjątkowo istotne, bo uczymy się tego, o czym mówiłem przed chwilą – właściwego formułowania pytań i wyszukiwania informacji – a także zgłębiamy kompleksowo zagadnienia dookoła samego problemu. Często musimy coś doczytać, doprecyzować i dzięki temu uczymy się wielu kwestii, które nie zawsze w stu procentach są związane z naszym problemem, ale których znajomość rozwija nas jako programistę. Jak więc tego balansu szukać?

Na to jednoznacznej odpowiedzi nie ma, bo każdy problem jest inny i za każdym razem ta granica, po przekroczeniu której powinniśmy pomyśleć “ok, zrobiłem wszystko, co mogłem, nie mam już więcej pomysłów, pora poprosić o pomoc”, jest trochę w innym miejscu, ale myślę, że będąc początkującym programistą, możemy założyć, że jeżeli siedzimy nad problemem pół godziny czy godzinę i wciąż nie wiemy, w którym kierunku pójść i co z tym wszystkim zrobić, to może to być dobry moment na zadanie pytania. Umiejętność znajdowania tego balansu oczywiście będzie przychodzić z czasem, wraz ze zdobywaniem programistycznego doświadczenia.

Warto słuchać innych!

Z umiejętnością pracy z innymi bardzo mocno powiązany jest punkt numer cztery, którym jest umiejętność słuchania innych. W pracy programisty dobrze jest nauczyć się obiektywnie patrzeć na problemy, które rozwiązujemy i kod, który piszemy. Wiadomo, że zdarzać się będą sytuacje, w których nasze ego będzie starało się nas przekonać, że to właśnie nasze rozwiązanie jest najlepsze, że to właśnie nasz kod wyglada najlepiej na świecie, ale dobrze jest czasem zrobić krok wstecz, spojrzeć na to wszystko chłodnym okiem i zastanowić się, co druga osoba ma nam do powiedzenia i co chce nam przekazać.

Jednocześnie pamiętajmy, by nigdy nie brać niczego za pewnik, bo inne osoby też się mylą, nawet te osoby dużo bardziej doświadczone od nas. Dlatego też od samego początku pracy w IT powinniśmy dążyć do dyskusji. Jeżeli z czymś się nie zgadzamy, gdy coś wydaje nam się niewłaściwe, przedstawmy nasz punkt widzenia i naszą argumentację. Podobnie, gdy ktoś nam daje jakąś radę, gdy tłumaczy jak coś zrobić, gdy daje wskazówki dotyczące rozwiązania – jeżeli czegoś nie do końca rozumiemy, nie do końca wiemy dlaczego powinniśmy to zrobić akurat w taki sposób, zamiast tylko przytakiwać, dopytujmy.

I warto dyskutować!

Pamiętajmy, że zwłaszcza ten początkowy etap kariery w IT, to czas, w którym uczymy się najwięcej, także wykorzystajmy fakt, że mamy dookoła siebie doświadczone osoby. Słuchajmy co mają do powiedzenia, ale bądźmy aktywnymi słuchaczami, takimi słuchaczami, którzy chcą wiedzieć wszystko, słuchaczami, którzy w razie jakichkolwiek wątpliwości nie boją zadać kolejnych pytań i chcą doprecyzować wszystko, co wydaje się niejasne.

Taka dyskusja oraz zadawanie pytań to coś, co jest ważne dla obu stron – dla Ciebie, bo uczysz się nowych rzeczy, ale też dla drugiej osoby, bo ta druga osoba tłumacząc problem czy nakierowując cię na rozwiązanie, po pierwsze uczy się przekazywania wiedzy, co w pracy programisty jest bardzo ważne, a po drugie – dzięki dyskusji – często poszerza swoje spojrzenie na dany problem, zaczyna na niego patrzeć z nieco innej perspektywy. I to jest właśnie to, o czym mówiłem przed chwilą – że nawet będąc osobą bez większego doświadczenia, od samego początku w zespole możesz dawać wiele od siebie.

W kontekście słuchania jest jeszcze jedna ważna kwestia, o której warto wspomnieć, a mianowicie – staraj się zadawać pytania w taki sposób, aby druga osoba mogła dać ci wskazówki zamiast konkretnego rozwiązania wyłożonego na tacy. Oczywiście to nie jest takie proste, bo i sformułowanie odpowiedniego pytania jest w takiej sytuacji sporym wyzwaniem, i osoba, którą prosimy o pomoc, musi do tego właściwie podejść, nie mówiąc za dużo, ale jednocześnie mówiąc tyle, żebyś był w stanie zrobić kolejny krok na drodze do rozwiązania problemu, ale warto mieć to zawsze na uwadze i starać się o tym pamiętać.

Dobry programista to cierpliwy programista

Ostatni punkt, punkt numer pięć to dokładność i cierpliwość. W nauce programowania – i znowu to powtórzę, nieważne czy dopiero ją zaczynamy czy mamy już wiele lat doświadczenia – nie możemy być chaotyczni. Jeżeli będziemy przeskakiwać od jednego zagadnienia do drugiego, od języka do języka, nie mając sprecyzowanego planu, będziemy łapać się na tym, że cały czas coś robimy, ale wciąż nie widzimy konkretnych efektów. A wszystko, czego się uczymy, powinno mieć cel.

Poszczególne koncepty, które decydujemy się poznać, powinny być osadzone we właściwym, bardzo praktycznym kontekście, a kolejne zagadnienia powinniśmy ze sobą łączyć, bo zamiast poznawać na teoretycznym poziomie dziesięć technologii, lepiej wziąć tych technologii pięć i nauczyć się je wykorzystywać razem w praktyce. Ja to nazywam nauką iteracyjną i pisałem o tym w artykule “Jak się uczyć programowania – nauka od podstaw czy projekty z tutoriali?“.

Cierpliwość jest potrzebna, bo po pierwsze nauka programowania zajmuje dużo czasu i jeżeli chcemy widzieć fajne efekty, musimy najpierw spędzić wiele godzin na pisaniu kodu, a i samo pisanie kodu często tej cierpliwości wymaga. Tak jak już dzisiaj wspominałem mówiąc o samodzielności, w pracy programisty często mamy sytuację, gdy coś nie działa, gdy pojawia się jakiś błąd, a my patrzymy na to co napisaliśmy i nie mamy pojęcia, co jest nie tak. Rozwiązywanie tego typu problemów wymaga cierpliwości, a i wtedy mogą zdarzyć się momenty, w których będziemy czuć znudzenie, zniechęcenie czy nawet pewną frustrację.

Każdy problem ma rozwiązanie!

Ale pamiętajmy wtedy, że każdy problem ma rozwiązanie i zawsze, prędzej czy później, to rozwiązanie znajdziemy. A satysfakcja, która wtedy się pojawia sprawia, że nagle zapominamy o tych ciężkich, długich godzinach spędzonych na poszukiwaniu rozwiązania, w jednej chwili nasz nastrój zmienia się o 180 stopni i znowu zdajemy sobie sprawę, że bycie programistą to jedno z najlepszych zajęć na świecie.

Tym optymistycznym akcentem kończę i jak to powiedział Steve Jobs, stay hungry, stay foolish. Bycie programistą, a już na pewno bycie dobrym programistą, to droga. Droga, podczas której nieustannie odkrywamy nowe rzeczy i cały czas czegoś nowego się uczymy. Dlatego życzę wam, aby podczas tej programistycznej przygody ten entuzjazm i chęć do nauki nigdy was nie opuszczały.

Powyższy materiał jest też dostępny w formie filmu:

Cześć!

Nazywam się Kamil Brzeziński. Z branżą IT jestem zawodowo związany od dziesięciu lat, a od ponad dwóch swoją wiedzą i doświadczeniem dzielę się na kanale Jak nauczyć się programowania.

Jeżeli:

✓ chcesz zostać programistą i wejść do branży IT

✓ jesteś początkującym programistą, ale brakuje Ci pomysłów na rozwój

✓ myślisz o zdobyciu pierwszej pracy jako programista

To jesteś we właściwym miejscu.

ROADMAPA PROGRAMISTY

Gdy zaczynamy przygodę z programowaniem problemem nie jest dostęp do wiedzy. Internet jest pełen kursów, poradników i tutoriali. Problemem jest to, że nie wiemy jak z tej wiedzy skorzystać. Jak z tej masy materiałów wybrać to, co faktycznie istotne? Skąd wiedzieć, czego się uczyć, kiedy i dlaczego? Jak się w tym wszystkim nie pogubić?

Odpowiedzią na ten powtarzający się wśród początkujących programistów problem jest Roadmapa programisty.

Zajrzyj do środka:

Fragment nr 1 (Git)

Fragment nr 2 (REST API)

Pierwsze kroki programisty

Młodszy programista