Czy do programowania i bycia dobrym programistą wystarczy znajomość zagadnień technicznych? Oczywiście, iż nie!
W dzisiejszym wpisie opowiem o dziesięciu cechach charakteru, jakie według mnie powinien posiadać każdy programista.
Odpowiem na następujące pytania:
- Czy dobre cechy są konieczne, by zostać programistą?
- Czy sam wszystkie je posiadam
- Jak je w sobie wyrobić w przypadku, gdy ich nie posiadamy?
Zatrzymaj się!
Książka „Programistą być” to obowiązkowa pozycja dla wszystkich zainteresowanego programowaniem!
Jest to zdecydowanie najlepsza na polskim rynku książka na temat programowania! Zyskasz przewagę w branży IT i osiągniesz dużo jako deweloper.
Z książki dowiesz się między innymi o tym:
- Czy matematyka, studia techniczne i język angielski są konieczne do tego, by rozpocząć pracę jako programista?
- Gdzie szukać informacji o programowaniu i w jaki sposób się uczyć?
- Jak znaleźć pierwszą pracę i w jaki sposób rozwijać swój programistyczny potencjał?
- Czym na co dzień zajmuje się programista?
- Czy każdy może zostać programistą?
I wiele, wiele więcej…
Wprowadzenie
Wszyscy zdajemy sobie sprawę z tego, iż cechy naszego charakteru w dużym stopniu determinują to, w jaki sposób na co dzień żyjemy. Co robimy, jak pracujemy i jaki mamy kontakt z otoczeniem. Słyszymy stwierdzenia w stylu „Jesteś strasznie uparty”, „Zawsze jesteś pozytywnie nastawiony do życia” czy „On zawsze taki był”. Każde z takich stwierdzeń pośrednio lub bezpośrednio odnosi się właśnie do naszych cech charakteru.
Do niedawna nie byłem świadom swoich cech charakteru. Podchodziłem do tego tematu jak do innych oczywistych, jak to, iż oddycham, co i jak jem albo jak spędzam wolny czas. Był to błąd i uważam, iż poznanie moich mocnych i słabych stron jest niezwykle istotne. Abstrahując już od życia prywatnego, to właśnie w zawodowych aspektach cechy charakteru decydują o tym, w jakim kierunku zawodowo zmierzamy, jak się rozwijamy, ile zarabiamy, czy w ogóle dostaniemy awans lub premię. Świadomość siebie to temat na zupełnie inny artykuł, ale wspominam o tym przy okazji tego właśnie materiału.
I od razu zaznaczam, iż nie jestem psychologiem, lubię czytać i oglądać materiały na temat ludzkiego umysłu, poddałem się prawie trzyletniej psychoterapii u psychologa i uważam, iż moja świadomość siebie i swoich zachowań jest na tyle dobra by o tym opowiadać, ale z dnia na dzień pracuję nad tym by było jeszcze lepiej. Dziesięć cech charakteru, które wymieniam w tym wpisie są moją własną interpretacją i masz prawo się z nimi nie zgodzić. jeżeli tak będzie to zapraszam wtedy do dyskusji.
Myślę, iż to praca nad tą właśnie dziesiątką cech sprawiła, iż dziś mogę siebie nazywać prawdziwym, spełnionym i dobrym programistą. Nie wszystkie cechy charakteru mam wyrobione na wysokim poziomie, pracuję nad nimi, ale inne miałem niemal naturalnie od początku zawodowej kariery na dość dobrym poziomie. Jak usłyszysz za chwilę, nie musisz mieć ich wszystkich, by zostać lub być programistą. Granica między programistą a dobrym programistą jest niezwykle cienka i warto, byś zapoznał się z każdą z tych cech i porównał, jak u Ciebie każda z nich wygląda. Co możesz poprawić, zmienić i gdzie masz największe luki. Przy okazji, nie porównuj siebie do innych czy do mnie, bo to mija się z celem. Każdy z nas ludzi jest wyjątkowy i powinno się patrzeć tylko na siebie. Gdzie mogę ulepszyć swoje cechy charakteru, by jutro obudzić się o 1% lepszym człowiekiem, partnerem, pracownikiem czy programistą.
Warto byś miał też świadomość tego, iż cechy charakteru nie są stałe. Zarówno w krótkim, jak i długim odstępie czasu. Zależnie od sytuacji, dnia, godziny czy choćby minuty możemy zachowywać się nieco inaczej. Słynnym przykładem jest Stanfordzki eksperyment więzienny, gdzie w 1971 roku amerykański psycholog Philip Zimbardo przeprowadził kontrowersyjny eksperyment. W eksperymencie tym wybrał zdrowych psychicznie i bez przeszłości kryminalnej studentów, którym stworzył symulację życia więziennego. Wybrano 18 najlepszych kandydatów, następnie potraktowano ich jak prawdziwych kryminalistów – od zatrzymania przez policję, rozbieranie do naga, przesłuchania, znieważenia aż po więzienie w trudnych warunkach. Eksperyment miał trwać 14 dni, po 6 został zakończony ze względu na zły stan psychiczny zdrowych wcześniej studentów. Nie będę opisywać całości eksperymentu, ale wnioski są z tego następujące. Ludzie zdrowi psychicznie w specyficznych warunkach mogą z powodzeniem wcielać się w role oprawców i ofiar. Powodów takich zachowań nie upatruje się w zaburzeniach ludzkiej psychiki, ale we wpływie otoczenia na jednostkę. Można spokojnie zaobserwować u siebie, iż potrafimy zachować się różnie w zależności od sytuacji czy ludzi nas otaczających. W dłuższej perspektywie czasu tak mocno odciśnięte piętno na studentach nie wywołało większego wpływu, ale przez kilka miesięcy po eksperymencie zostali poddani terapii.
Podobny eksperyment przeprowadził również amerykański psycholog Stanley Milgram. Na Uniwersytecie Yale w 1963 roku przeprowadził eksperymenty posłuszeństwa wobec władzy. W tej serii eksperymentów autor skupiał się na zbadaniu, dlaczego ludzie są ślepo posłuszni, mimo, iż coś jest nie po ich myśli. Dlaczego nie buntują się i ufają autorytetom. Ludzie w takich sytuacjach chowają swoje cechy charakteru do kieszeni i myślą nieracjonalnie. w uproszczeniu eksperyment polegał na rażeniu prądem. Osoba biorąca udział w badaniu miała za zadanie razić prądem osoby podpięte do krzesła. Osoba rażona była w rzeczywistości podstawionym aktorem, a cała aparatura nie była podłączona do prądu. Badani mimo iż ból był udawany rozkręcali się i zadawali jeszcze większy ból poszkodowanemu. Niektórzy próbowali zaprzestać, ale autorytet w postaci naukowca rozkazywał kontynuację rażenia prądem. W dzisiejszych czasach raczej tego typu eksperyment nie miałby prawa bytu. Odbił się tak szerokim echem, iż powstał choćby film Eksperymentator z 2015 roku. Zapoznaj się z nim w wolnej chwili. Naprawdę polecam.
Wracając do naszej rzeczywistości. Potraktuj swój charakter i cechy jako coś zmiennego w czasie, coś nad czym zarówno sam możesz panować i pracować, jak i możesz być poddany naciskom z zewnątrz, które mogą wpłynąć okresowo na Twoje zachowanie.
Artykuł ten też mogę nazwać niejako dopełnieniem jednego z rozdziałów mojej książki Programistą być. Opowiadam tam bardziej szczegółowo o sporej ilości umiejętności miękkich, które pomagają i przeszkadzają w budowaniu programistycznej kariery. jeżeli jeszcze nie wiesz nic o mojej książce, to informacje o niej znajdziesz pod adresem www.programistabyc.online.
Po tym wstępie czuję, iż mogę przejść do omawiania pierwszej cechy charakteru.
10 cech dobrego programisty – Asertywność
Pierwszą cechą charakteru którą chcę omówić jest asertywność. W kontekście dwóch powyższych eksperymentów, to właśnie brak asertywności był jedną z głównych badanych cech. Asertywność to umiejętność mówienia „nie” i właśnie mówienie nie jest często postrzegane jako coś złego. My ludzie szukamy akceptacji u innych, dlatego mamy tendencję do nadmiernego zgadzania się na wszystko, co inni od nas chcą. Jest to widoczne głównie w pracy zawodowej. Ale asertywność to nie tylko branie rzeczy na siebie. To też umiejętność wyrażania własnego zdania oraz emocji, które w nas siedzą w sposób otwarty i bez budzenia złej atmosfery. Bez agresywności i pretensji do całego otaczającego nas świata.
Bycie asertywnym w pracy programisty jest w mojej opinii na pierwszym miejscu. Gdyby każdy z nas, programistów potrafił powiedzieć nie lub wyrazić swoje wątpliwości w pracy, to nie mielibyśmy na przykład opóźnień w projekcie. Praca mogłaby być inaczej rozłożona, a nie wrzucana na plecy jednego uległego programisty, który pragnie się wykazać, pracuje ponad swoje siły i wydajność. Opóźnienia nie byłyby wtedy aż tak widoczne. Po drugie właśnie takie opóźnienia generują koszty w firmach. Złe rozłożenie sił w zespole jest przyczyną przeciągających się projektów, zatrudnienia zbyt dużej ilości ludzi na czas wykonania danej aplikacji. Po trzecie, taka sytuacja przekłada się na stres całej grupy, jak i poszczególne jednostek. Boimy się konfrontacji z klientami, osobami zarządzającymi a choćby kolegami z zespołu. Tracimy zaufanie w oczach innych. Pomyśl tylko, iż wszystko to może być przyczyną braku asertywności, zwłaszcza na początku pracy w projekcie.
Złe rozłożenie sił generuje wiele konsekwencji. Można nazwać to tak zwanym efektem motyla. Trzepot małych skrzydeł na jednym końcu świata potrafi wywołać huragan na drugim jego końcu. Proste powiedzenie nie, gdy ktoś chce Ci dać kolejne zadanie i umiejętność uargumentowania tego w przyjazny sposób to jeden z dziesięciu kluczy do tego, by być dobrym programistą. Na początku pracy wydaje Ci się, iż taka postawa jest ok. Bierzesz zadania, których nikt nie chce wziąć, pracujesz od rana do wieczora, często wyrabiając dziesiątki nadgodzin w miesiącu, a koledzy wychodzą równo o 16 i podśmiewają się za plecami, iż znalazł się ktoś, kto odwali za nich brudną robotę po godzinach. Ty z kolei możesz pomyśleć, iż super, bo dzięki temu masz nowych kolegów, którzy Cię akceptują. W takich sytuacjach łatwo pomylić ambicję z brakiem asertywności. Ambicje to plany i pomysły na siebie, realizacja w nowych, ciekawych gałęziach branży IT, a nie robienie po godzinach powtarzających się zadań i stanie w miejscu z myślą o zbawieniu świata. Proszę Ciebie byś tego nie robił, bo to droga donikąd.
Pewnie pojawia się pewnie w Twojej głowie pytanie, jak uczyć się asertywności. Powiem Ci w tajemnicy, iż asertywność umieszczona tu na pierwszym miejscu, jest u mnie najgorszą z tych dziesięciu cech. Dorobiłem się przez brak asertywności pracoholizmu, który ciągle mnie dopada, mimo pracy nad nim u psychologa. Do tego duża ilość stresów odbiła się na moim zdrowiu, a ja wcale zbyt wiele nie zyskałem na tym, iż robiłem więcej niż inni. Aby pracować z asertywnością musisz zaakceptować to, iż masz ograniczoną ilość czasu i iż masz swoje plany po pracy. Możesz mieć swoje zdanie i nie czuć wyrzutów sumienia gdy komuś odmówisz. Od tego po prostu trzeba wyjść. Kolejnym krokiem jest trening asertywności, choćby w tak drobnych czynnościach, jak rozmowa z bliskimi czy Panią przy kasie na stacji paliw. Słyszałem przykład treningu asertywności, gdzie ludzie właśnie na stacjach benzynowych albo różnych sklepach są kuszeni przy kasie dodatkowymi produktami. Płacisz za paliwo albo książkę w księgarni a miła osoba obsługująca Cię proponuje batonika, nową książkę Stephena Kinga, która jest hitem albo dodatkową kawę na drogę. Podobnie jest z całą rzeszą telemarketerów, którzy za każdym razem chcą Ci coś sprzedać. Pomyśl ile razy na coś się zgadzasz, a później zastanawiasz się, iż po co Ci to było. Takie sytuacje są idealne, by mówić nie. Do tego wyraź swoje emocje lub wytłumacz, dlaczego mówisz nie. Nie potrzebuję kawy na drogę, bo już jedną wypiłem w domu, nie potrzebuję tej książki, bo już ją kupiłem albo nie potrzebuję batonika, bo mam problemy z cukrem i nie mogę jeść słodyczy.
Jeśli nie jesteś gotów odmawiać w pracy, to trenuj w takich właśnie, mniej stresujących warunkach. Zobaczysz, iż z czasem odrzucenie kolejnych zadań, które są ponad Twoje siły i zasoby czasowe w pracy będzie przyjemnością. Sam wiem to z autopsji i przez cały czas walczę ze sobą w takich sytuacjach! Postępy w byciu asertywnym dały mi niezwykle dużo i dziś mam wbrew pozorom lepsze relacje z kolegami i koleżankami w zespole niż w momencie, gdy brałem ich zadania na siebie i nie dowoziłem w terminie.
10 cech dobrego programisty – Ciekawość
Drugą cechą, która w przeciwieństwie do asertywności, była u mnie najlepiej rozwinięta z tych dziesięciu omawianych to ciekawość. Od zawsze miałem tak zwaną ciekawość dziecka. Dużo czytałem i dużo analizowałem. Często oglądam programy popularnonaukowe, słucham podcast i dyskutuję z osobami, by poznać ich punkt widzenia. Ciekawi mnie niemal wszystko. Nad tym też nieco pracowałem u psychologa, by moja ciekawość była ograniczona. BY była skierowana na mniej destrukcyjne newsy. Często czytałem w przerwach od poważniejszych tematów takie informacje jak fake newsy, informacje o brudnej polityce czy plotki ze świata show biznesu. Nic to nie wnosiło do mojego życia, a powodowało pewien niepokój, zakłopotanie czy choćby strach. Jak słyszysz, nadmierna ciekawość może doprowadzić w ślepy zaułek. Patrząc jednak na ciekawość w kontekście programowania, to jest to złota cecha. Wyobraź sobie, iż codziennie branża IT produkuje tyle nowości, iż nie da się jednego dnia ogarnąć w tydzień. Nie da się więc być w 100% na bieżąco, ale nie czytanie o newsach branżowych w ogóle pozostało bardziej nie na miejscu. Dziś pracując jako .NET developer nie wiem, czy za 10 lat moje stanowisko będzie jeszcze istnieć. Dlatego uczę się nieco o popularnym dziś NFT, Blockchain czy IoT, by w razie kryzysu na rynku pracy mieć kilka alternatyw. Dodatkowo nauka takich rzeczy okołoprogramistycznych wzbogaci Twoją karierę o nowe elementy. Może dzięki dodatkowym tematom poznasz nowe algorytmy, interesujące frameworki czy nietypowe rozwiązania architektoniczne. Tu już abstrahuję od rzeczy, które każdy programista znać powinien, jak struktury danych, algorytmika, wzorce projektowe, bazy danych czy wiedza z zakresu konkretnego języka programowania. Chodzi o ciekawość poza tymi rzeczami podstawowymi. Coś ekstra, co pozwoli mi jutro stać się lepszym programistą. A jak ciekawość w sobie obudzić? To już chyba trudniejsze w tym przypadku. Ciekawość jednak wynika z pasji. Pasji do nauki, pasji do programowania, pasji do rozwoju osobistego. jeżeli coś Ciebie pasjonuje, to naturalnie o tym czytasz i uczysz się tego.
Często o ciekawości mówi się, iż jest to domena dziecka. I chyba w ten sposób możemy w sobie obudzić ciekawość. Być takim dzieckiem w dorosłym życiu. Niestety tu nie wiem jak to osiągnąć. Musisz w sobie sam poszukać. To, co wiem, iż pomoże to planowanie swojej kariery. Wyobraź sobie siebie za 5 lat. Gdzie w programistycznym świecie chcesz się znaleźć? Gdzie pracować? Co konkretnie programować? Zapisz to sobie, jako pewien cel długoterminowy i krok po kroku idź w jego stronę poznając nowe rzeczy, które zbliżają Cię do celu. Im więcej będziesz osiągać, tym większe pokłady ciekawości w sobie obudzisz. Im więcej programistycznych elementów poznasz i zrozumiesz, tym bardziej interesujący będziesz w przyszłości. Wiedza będzie przychodzić naturalnie. Programowanie okaże się banalnie łatwe i zarazem nie do odkrycia w całości. Poznanie tego świata w całości będzie Cię motywować, ciekawić. Nie wiem czy grasz w gry. Ja kiedyś grywałem w gry typu MMO RPG czy gry strategiczne takie jak Age of Empire. W grach takich jest motyw zakrytej mapy. Widzisz jej pewien fragment, nie wiesz co kryje się za rogiem, co kryje się za tym zacienionym fragmentem mapy. Są tam złoża surowców czy może ukryty przeciwnik? To jest właśnie naturalna ciekawość. Z odkrywaniem programistycznego świata będzie podobnie. Zacznie Cię ciekawić czym jest ten nowy framework JS, jak od strony technologicznej działają te całe kryptowaluty i dlaczego w ogóle mój program działa na takiej metalowej puszce jak komputer. Odkrywanie jest świetną zabawą dostępną za darmo przez całe życie.
10 cech dobrego programisty – Cierpliwość
Trzecią bardzo istotną cechą programisty jest cierpliwość. Wiele osób nie staje się programistą właśnie przez brak cierpliwości. Siadają do nauki przez kilka dni, ciągle coś im nie wychodzi i rzucają programowanie. Mawia się, iż największą cnotą jest cierpliwość. Osoby cierpliwe mają wielki szacunek u innych osób. Cierpliwość jest też postrzegana z zupełnie innej strony. Programowanie to często praca w kryzysowych sytuacjach. Zachowanie zimnej krwi w takich momentach to również cierpliwość. Moim zdaniem cierpliwość to też najbardziej uniwersalna cecha ze wszystkich. Jest podłożem pracy nad każdą z wymienionych w tym wpisie cech. Bez cierpliwości nie zajedziemy daleko czy to prywatnie, czy zawodowo. Ciągle szukamy szczęścia, ale nie potrafimy zauważyć, iż szczęście wynika z cierpliwości i dostrzegania małych elementów w naszym codziennym życiu. Oczekujemy gadżetów, lepszych pieniędzy czy nowego samochodu. To wprowadza w nas nieszczęście i spirala się rozkręca. Nie potrafimy czegoś odroczyć i poczekać cierpliwie. Widać to też bardzo dobrze w życiu programisty. Trafia taki programista do projektu, który z czasem się dłuży i z kilku miesięcy rozciąga się choćby na lata pracy. Zespół nie potrafi cierpliwie dokończyć tego co zaczął, zaczynają się roszady, osoby jedna po drugiej uciekają w inne miejsce. Zwłaszcza w dzisiejszych czasach, gdzie rynkiem pracy w IT rządzą pracownicy. Tylko cierpliwi na końcu zyskają, bo rynek pracownika prędzej czy później się wywróci i w następnych latach to pracodawcy znowu mogą rozdawać karty. Wtedy osoby cierpliwe zostaną docenione. Z awansami jest tak samo. I z premiami i podwyżkami również. Jeden programista przepracuje 5 lat w jednej firmie i zaliczy duży skok jeżeli chodzi o rozwój, podwyżki i awanse. Drugi z kolei będzie co roku zmieniać projekt lub pracę, umiejętności nie koniecznie pójdą w górę, a przez co zarobki zostaną w tym samym poziomie co kilka lat wcześniej.
Co jeszcze daje cierpliwość? Pogodzimy się z niektórym rzeczami dużo łatwiej. Nie poznasz wszystkich języków programowania, nie będziesz pracował we wszystkich wielkich korporacjach technologicznych na świecie czy nie zbudujesz prawdopodobnie drugiego Facebook czy Netflixa. jeżeli tak zaczniesz postrzegać swoją karierę zawodową, to możesz się jedynie mile zaskoczyć kolejnymi odkryciami, awansami czy nieszablonowymi projektami rozwijanymi po godzinach. Mój ulubiony autor książek grozy Stephen King powiedział kiedyś, iż cierpliwość jest cechą geniuszy. Tego się trzymajmy, pielęgnujmy w sobie programistycznego geniusza.
A jak programista może trenować cierpliwość? Kolejny już raz wspomnę o planowaniu. Zapisanie czegoś na papierze lub w aplikacji uruchamia magiczny przełącznik w naszej głowie, który pozwoli czekać do końca na realizację danego założenia. Napisz w kalendarzu, iż zmienisz projekt jak odłożysz X pieniędzy, zmienisz firmę, jeżeli ukończysz studia albo pójdziesz prosić o podwyżkę po wdrożeniu aktualnego projektu na produkcje. W dzisiejszych czasach trening cierpliwości jest niezwykle trudny. Ciągle ktoś chwali się swoimi osiągnięciami na żywo czy w Social Media. Każdy dziś chce tego samego co sąsiad albo ten koleś z instagrama. Tomek, Karol czy Mariusz z pracy dostają najciekawsze i najbardziej odpowiedzialne zadania w zespole. Ja też tak chcę teraz i już! W takich momentach pomaga medytacja i techniki mindfullness. Podchodziłem do tych tematów jak przysłowiowy pies do jeża. Nie ufałem, nie wierzyłem, nie wiedziałem jak zacząć pracować ze sobą. Po kilku różnych próbach udało mi się wkręcić i stwierdzam, iż moja cierpliwość jest na odpowiednim poziomie. Aktualny projekt w banku jest moim najdłuższym w karierze. Do tej pory nie wytrzymywałem dłużej niż dwa lata w jednej firmie. Dosłownie dziś gdy to piszę mija równe 3 lata od podpisania umowy i dołączenia do zespołu. Można? Oczywiście, iż można! choćby czasami trzeba być cierpliwym.
10 cech dobrego programisty – Odporność na stres
Czwartą cechą, którą niezwykle cenię to odporność na stres. Pokutuje w społeczeństwie taki ogromny mit na temat tego, iż bycie programistą to luksus. Branża IT to kraina mlekiem i miodem płynąca. Przychodzisz do pracy o której chcesz, poklepiesz kilka godzin w klawiaturę, wypijesz litr kawy, porozmawiasz z kolegami, zjesz lunch na mieście, pograsz w pracy na konsoli i wrócisz spełniony do domu. To bzdura i uważaj na tego typu obiecanki.
Praca programisty bywa bardzo stresująca. Bywają projekty, gdzie codziennie gasimy pożary, pracujemy po godzinach i choćby weekendy nie mogą być spokojne. Niejednokrotnie spędzałem noce w pracy. I to jeszcze z piątku na sobotę. Nici z imprezy, a jeszcze w sobotę musiałem odespać. Niedziela to chwila wolnego i od poniedziałku znowu walka z błędami i optymalizacjami.
Każdy taki moment w życiu programisty odciska piętno na psychice i zdrowiu. choćby jeżeli nie odczuwasz na początku stresu, za pewien czas wszystko się skumuluje i może poskutkować problemami ze zdrowiem, wypaleniem zawodowym, a w skrajnym przypadku niektórzy programiści porzucają kodowanie na rzecz innego zawodu. Sam tego doświadczałem, uciekałem w biznesy i inne zajęcia, tylko po to, by nie wrócić do stresującego programowania. Wiele zależy od odporności na stres, ale swój duży wkład ma również odpowiedni projekt, zespół czy przełożony.
W pewnym momencie przychodzi taki moment, iż stresuje Cię choćby najdrobniejszy błąd w kodzie, który w normalnej, spokojnej atmosferze rozwiążesz w 30 sekund. W stresie potrafisz kilka godzin patrzeć w monitor i zakopywać się w swojej beznadziejnej sytuacji. Myślę, iż każdego to dopada. Czasami w pracy poruszamy takie tematy i nie ma osoby, która by się nie przyznała do paraliżującego stresu podczas ciężkich dni w projekcie.
Praca programisty niejednokrotnie wiąże się też z pracą z klientem. W dużej korporacji możemy mieć sytuację, iż ktoś za nas rozpisuje zadania, oddaje projekt i rozlicza się z podwładnymi. W mniej idealnej sytuacji, czyli niemal zawsze w mniejszych projektach bywasz narażony na rozmowy z klientem. Aktualnie mnie to nie dotyczy, ale podczas innych projektów pamiętam, jak dużo nerwów mnie kosztowało zaprezentowanie pracy całego zespołu przed wymagającą firmą, która już chcę projekt dziś na produkcji na produkcji, nie za miesiąc. Wtedy cokolwiek byś nie pokazywał i tak zostaniesz zjedzony wzrokiem i zarzucony niewygodnymi pytaniami. Pomyśl, jak patowa jest to sytuacja. Jesteś dobrym developerem, piszesz kod najlepiej jak umiesz, do tego nadzorujesz zespół. Mały, ale ambitny. Jesteś najstarszy stażem w zespole, do tego znasz każdy aspekt kodu i choćby jesteś z niego dumny. W firmie jednak nie ma nikogo, kto poszedłby zaprezentować ten produkt. A choćby jeżeli są takie osoby, to przecież Ty jako programista wiesz wszystko najlepiej co się dzieje w danym programie. I wysyłają właśnie Ciebie do firmy X, by zaprezentować pierwsze owoce pracy. Stres gotowy, wypalenie zawodowe za rogiem. Zaczynasz programowanie kojarzyć z takimi właśnie sytuacjami, nie zaś z sielankowym pisaniem kodu. Przechodziłem przez to wielokrotnie i z czasem uodporniłem się na takie sytuacje, jednak początki bywały niezwykle dołujące. I tu masz klucz do tego, jak osiągnąć odporność na stres. Musisz z jednej strony się na niego wystawiać, eksponować i brać na siebie. Z drugiej strony fajnie jest mieć bufor w postaci hobby, zajęć po pracy, które rozładują emocje. U mnie idealnie sprawdza się rower, piłka nożna, squash czy spacery z psem. Do tego dobra książka i zawodowy stres odchodzi w niepamięć.
10 cech dobrego programisty – Komunikatywność
Piąta cecha, czyli komunikatywność to prawdziwa zmora wśród programistów. Stereotypowo programista to typowy introwertyk. Wokół wielu ludzi pokutuje błędne przekonanie, iż programowanie to siedzenie w piwnicy, w koszuli flanelowej i pisanie kodu bez rozmowy z kimkolwiek. Zajadanie się pizzą, nie dbanie o siebie i bycie aspołecznym typem. W rzeczywistości jest zupełnie inaczej. Pracujemy w zespołach, codziennie spotykamy się na rozmowach, chodzimy na spotkania analityczne, wyceniamy projekty, podsumowujemy cyklicznie naszą pracę oraz zadania. Omawiamy problemy, pytamy o zdanie innych czy wykonujemy przegląd kodu kolegi z biurka obok. Wszystko to opiera się na zdrowej komunikacji, czyli takiej, gdzie w prosty sposób potrafimy przekazać wszystkie niezbędne informacje. Oglądałem ostatnio film Nie patrz w górę, z Leonardo Di Caprio w roli głównej, który gra znerwicowanego naukowca. Wraz ze swoją studentką odkrywają przerażającą prawdę na temat pędzącej w kierunku ziemi komety, która jest na tyle duża, iż za kilka miesięcy zabije całą ludzkość. Jedna scena idealnie oddaje podejście do komunikacji. Naukowiec spotyka się z prezydentem Stanów Zjednoczonych, by przekazać tę szokującą informację. Zaczyna opowiadać bardzo złożonym, matematycznym językiem, z którego nic nie wynika. Po kilku zdaniach wyrywa się studentka grana przez Jennifer Lawrence i jednym zdaniem mówi, iż za kilka miesięcy życie na ziemi skończy się po tym, jak w ziemię uderzy asteroida. Jedno zdanie studentki mówi więcej niż kilka złożonych zdań profesora.
I tak też bywa wśród programistów. Potrafimy bardzo skutecznie odstraszyć postronne osoby. Opowiadamy w tak złożony sposób, iż choćby kolega czy koleżanka z zespołu może nas nie zrozumieć. Rozmawiając z klientem, który nie jest osobą techniczną bywa trudne. Powiedz do niego „zrobiliśmy deploy z release na proda w piątek przed retro”. Zakładam się, iż spojrzy na Ciebie jak na kogoś z innej planety. A wystarczy zadbać o bardziej przystępny język i powiedzieć „Zainstalowaliśmy najnowszą wersję aplikacji na środowisku produkcyjnym w piątek o godzinie 11”. Niby dłuższe zdanie ale daje niemal 100% gwarancję, iż klient zrozumie co do niego mówisz.
Z komunikacyjnego punktu widzenia musisz zrozumieć jedno. Nie masz prawa zakładać, iż ktoś siedzi w Twojej głowie i zna wszystkie oczywiste z Twojej perspektywy fakty. To, iż powiesz drugiej osobie, iż wgrana zostaną nowa wersja aplikacji przed retro w piątek nie zagwarantuje, iż będzie potrafiła ulokować to w czasie. W jednej firmie retro może być o 12, w innej o 15. Dla niektórych retro to sformułowanie, którego w ogóle nie rozumieją i mogą go traktować jako koniec pracy o 17 w piątek. Dla Ciebie przecież oczywiste jest, iż Wasz zespół ma retro o 14 i koniec. Ale inni tego nie muszą wiedzieć. Bądź precyzyjny w tym co mówisz lub piszesz.
10 cech dobrego programisty – Bycie dokładnym
A skoro o precyzji mowa, to szóstą, niezwykle cenną cechą wśród programistów jest bycie dokładnym. Osobiście uważam, iż obok asertywności, to właśnie dokładność jest moją najgorszą cechą, którą muszę bardzo mocno podciągać w górę. Miałem i mam przez to czasem sporo problemów w pracy. Popełniam proste błędy, które później wychodzą w testach i muszę poprawiać coś kilka razy. To mój największy grzech jako programista. Zdaję sobie sprawę z tego, iż bywa to męczące chociażby z perspektywy testerów, którzy odbierając ode mnie zadanie do testów mają zapaloną z tyłu głowy lampkę, iż tu trzeba dokładniej coś sprawdzić, bo to pisałem ja, a nie ktoś inny, bardziej dokładny.
Nie powielaj mojego błędu i bądź do bólu dokładny! choćby jeżeli jesteś czegoś w 100% pewien, to sprawdź to jeszcze raz przed zakończeniem zadania. Często okaże się, iż jednak te 100%, to nie było 100% tylko 50%. I znalazło się dwa błędy, które były Twoim niedopatrzeniem. Dziś z perspektywy czasu widzę, jak bardzo ważna jest to cecha. Jak wiele złości można uniknąć, robiąc coś bardziej dokładnie. Unikasz błędów, które do Ciebie wracają i czasami są ciężkie do wykrycia, bo jedno niedopatrzenie, pomylenie zmiennej lub zbyt optymistyczne założenie co do wydajności powoduje, iż tracisz dzień na analizy i poprawy. A gdyby tak od razu to zweryfikować, to zajęłoby to może 30 minut pracy więcej.
Bycie dokładnym może być też stosowane we wspomnianej chwilę wcześniej komunikacji. Wyrażanie swoich myśli w dokładny sposób sprzyja budowaniu relacji. Nie pojawiają się niedomówienia. Podobnie jest z czymś, czego programiści nienawidzą robić. Chodzi o tworzenie dokumentacji. Im dokładniej jako programista zbudujesz dokumentację, tym później mniej problemów Ty i Twój zespół napotkacie. Często można usłyszeć pochwały, iż ktoś jest rzetelny, iż jeżeli dasz tej osobie zadanie, to zrobi je dokładnie. Chciałbym żyć w takim społeczeństwie, gdzie programiści będą do bólu dokładnymi osobami. Sam z tym walczę i zachęcam Ciebie do bycia dokładnym!
10 cech dobrego programisty – Samodzielność
Skoro już wiesz, iż dokładność i asertywność to moje dwie najgorsze cechy, to teraz obok ciekawości samodzielność to moja druga najlepsza cecha. Szczęśliwą siódemką w tym zestawieniu jest właśnie bycie samodzielnym. Od dziecka wyróżniałem się jako ta osoba, która jest samodzielna. Wszędzie sam, ja zrobię, ja pójdę, ja pomogę. Ma to swoje ciemne strony, ale dziś skupimy się jedynie na tych jasnych. Rynek IT jest aktualnie taki, iż brakuje specjalistów. Przez co zespoły bywają obciążone, mają dużo pracy i bywa tak, iż ciężko o konsultację w sprawie konkretnych problemów czy bieżących tematów. W takich sytuacjach najlepiej sprawdzają się programiści, którzy są bardzo samodzielnymi jednostkami. Dasz takiej osobie zadanie, ona go przeanalizuje, wykona i jeszcze podrzuci interesujące materiały innym, które pomogą rozwinąć cały zespół. Nie jest to sytuacja idealna, ale często konieczna. Są niestety i takie osoby, które boją się napisać linijki kodu bez Twojej akceptacji. Jest to skrajna nieodpowiedzialność i brak jakiejkolwiek samodzielności. Miałem w zespole kilka takich przypadków, gdzie dziesiątki razy w ciągu dnia musiałem kogoś zmotywować dobrym słowem albo potwierdzić, iż to co napisali jest ok i nie rozwali systemu na produkcji. Czasem jest to aż śmieszne, ale bywa bardzo denerwujące, gdy musisz odrywać się od swojej pracy. Rozumiem sytuacje, gdzie już ktoś nie widzi wyjścia, wtedy pytania są choćby konieczne. Lubię pomagać, ale brak samodzielności w podstawowych aspektach programowania mnie przeraża.
Samodzielność w programowaniu widoczna jest na wielu poziomach. Często dostajesz zadanie zbudowania struktury aplikacji, zaproponowania modelu bazy danych czy znalezieniu bardziej optymalnego rozwiązania do kodu, który musisz zrefaktorować. Wtedy to TY musisz zadecydować, jak coś zrobić, jakiego typu zmienne stworzyć, której biblioteki użyć albo gdzie wdrożyć optymalizacje, by całość działała płynnie. I o ile możesz to później omówić z zespołem, o tyle w początkowej fazie wszystkie decyzje musisz podjąć samodzielnie. Witaj w świecie programowania!
Czasem rozmyślam o tym, jak moja programistyczna kariera się układa i to, iż jestem dziś tu, gdzie jestem, choćby pisząc bloga i ten artykuł zawdzięczam głównie samodzielności. To ona powodowała, iż potrafiłem wyróżnić się na tle innych. Robiłem zadania szybciej, podejmowałem decyzje w inny sposób niż osoby z zespołu czy wreszcie tak się usamodzielniłem w życiu osobistym, iż dziś jako programista nie widzę przysłowiowego szklanego sufitu. Jako programista mogę niemal wszystkiego co techniczne dokonać w skończonym czasie. Zechcę pracować w innym języku? Proszę bardzo! A może pójdę w inną technologię typu blockchain czy IoT? Ok, nie ma problemu! Może jakiś startup po godzinach? Czemu nie! Samodzielność daje Ci ogromne możliwości.
Nie odpowiem Ci na pytanie w jaki sposób na pewno możesz ją w sobie wyrobić. To, co może pomóc to wychodzenie ze strefy komfortu. Eksperymentowanie w kodzie i nie banie się wyników. Przyjmowanie krytyki i nauka na własnych błędach. Ona zbuduje pewność siebie, a pewność siebie przełoży się na samodzielną pracę.
10 cech dobrego programisty – Kreatywność
Ósma cecha to klasyk. Programista w swej naturze musi być kreatywny. I o kreatywności w tej części powiem.
Mawia się, iż kreatywność to domena wynalazców, artystów, muzyków czy pisarzy. Branża IT też wymaga bycia kreatywnym. W projekcie bywa tak, iż często musimy tworzyć coś od nowa. Nowa metoda, nowy moduł czy nowy pomysł na optymalizację kodu. Wszystko to jest łatwiej wykonać, gdy ma się odpowiednie pokłady kreatywności. Psychologowie kreatywność traktują jako coś otrzymanego w genach, jednak jako umiejętność, jest to coś, co można spokojnie rozwinąć i pielęgnować. Gdy myślę o kreatywności, to od razu przychodzi mi do głowy postać Leonardo da Vinci. Człowiek ten nie miał żadnych ograniczeń. Poza malowaniem zajmował się matematyką, anatomią, pisarstwem, rzeźbą, geologią, filozofią czy muzyką. Prawdziwy człowiek renesansu, a kreatywnością cechował się od dziecka do samej śmierci. Kreatywność napędzała go do działania. Zostawił po sobie tysiące stron notatek, z których powstała między innymi biografia da Vinci napisana przez Isaacsona Walter. Gorąco polecam mimo tego, iż ma ponad 800 stron.
Trend na bycie kreatywnym jest widoczny na niemal każdym kroku. Dziś pracodawcy i działy zajmujące się rekrutacją szukają różnych sposobów na to, by odkryć W jak nieszablonowy sposób kandydat potrafi myśleć. Znane są pytania rekrutacyjne dla inżynierów w firmach takich jak Google, Microsoft, Amazon czy Apple o to, ile piłeczek ping-pongowych zmieści się w samolocie pasażerskim, dlaczego studzienki kanalizacyjne są okrągłe lub proszą o opis internetu osobie w XIX wieku. Niby trywialne, ale podczas odpowiedzi wymagana jest kreatywności. Więcej o pytaniach rekrutacyjnych napisałem w mojej książce Programistą być.
Ale nie tylko pracodawcy chcą sprawdzić naszą kreatywność. MY sami chcemy być kreatywni jako programiści. Mieć przebłyski geniuszu, być docenionym za pomysłowość. Rozwiązanie zadania w sposób nieszablonowy podbuduje nasze morale i pewność siebie. Zyskamy też w oczach innych, co przełoży się bezpośrednio na relacje.
Kiedyś kreatywność postrzegano najpierw jako coś, czego nie da się wytrenować, następnie panowało przekonanie, iż kreatywność kształtuje się w dzieciństwie. Dziś wiemy, iż nie ma żadnych granic i problemów, by taką kreatywność wytrenować z wiekiem. Jak można to zrobić? Programiści mają łatwiej. Kluczową zasadą w budowaniu swojej kreatywności jest wystawianie siebie i swojego umysłu na ciągły rozwój. Zawodowo mamy to zapewnione na co dzień. Dodatkowo otaczamy się innymi osobami z branży, które kreatywność mają wyrobioną. Są to architekci, którzy muszą mieć wizję całego produktu w szczegółach. Graficy którzy przygotowują całe szablony graficzne używane w projekcie. Czy wreszcie inni programiści, od których uczymy się i czerpiemy inspirację. Każdy kontakt z osobą kreatywną pobudza kreatywność w nas. Później sami możemy kopiować i modyfikować ich wzorce czy charakter pracy.
Dobrymi sposobami poza programowaniem jest czytanie książek, pisanie na przykład bloga, własnych książek czy chociażby wierszy. Znasz pewnie wielu blogerów, którzy bezinteresownie oddają się pisaniu. Sam znam dwie osoby, które poza byciem dobrymi programistami piszą wiersze. Co prawda do szuflady, ale jeżeli kiedyś wydadzą swój tomik, to napiszę o tym.
Granie na instrumentach też jest fajną opcją do rozwijania w sobie kreatywności. Niektóre firmy kuszą programistów tym, iż w biurze posiadają specjalny pokój, gdzie można pograć na wielu ciekawych instrumentach. Kolejną opcją są gry komputerowe, układanie klocków lego czy granie w planszówki lub gry łamigłówkowe. Polecam spróbować każdej z tych aktywności!
10 cech dobrego programisty – Odwaga
Przedostatnia, dziewiąta cecha to bycie odważnym. Jacek Walkiewicz powiada „Puk, Puk – strach puka do drzwi. Otwiera mu odwaga, a tam nikogo nie ma”. Ale dlaczego w ogóle opowiadam o odwadze w kontekście bycia programistą? Wejście w branżę IT to postawienie kroku w nieznane. Niemal każdy na początku kariery doświadczył niepewności. Nie wiedział czy sobie poradzi, czy czegoś nie zepsuje, czy da radę spełnić oczekiwania. Do przejścia tej bariery na początku potrzebna jest właśnie odwaga. Odważni ludzie stają się programistami.
W późniejszym etapie kariery odwaga również jest bardzo pomocna. Często musisz podjąć decyzję jak powinien wyglądać Twój kod, czy sprawdzi się na produkcji lub będziesz musiał zanegować pewne pomysły klienta.
Już sama zmiana wspomnianych cech charakteru to akt odwagi. Podjęcie się czasem niemal niemożliwego zadania, praca nad słabościami, przyznawanie się do popełnionych błędów i ich analiza. To wszystko oparte jest o odważne postępowanie.
Odważną decyzją bywa rozpoczęcie studiów, zmiana pracy czy prośba o podwyżkę. Jedni będą siedzieć i bezczynnie czekać, innych odwaga popchnie na nowe zawodowe tory i ich kariera znacząco przyśpieszy. To dzięki odwadze masz szansę przeskoczyć barierę pomiędzy zwykłym programistą a dobrym programistą.
Odwagę można wyrobić w sobie tylko poprzez działanie. Przełamywanie siebie i swojego lęku. Boisz się porozmawiać z przełożonym? Zaryzykuj i zagadaj, choćby w luźnej rozmowie. Zastanawiasz się, czy wrócić na studia? Idź bez zastanowienia. Najwyżej zrezygnujesz w trakcie, ale będziesz mieć świadomość, iż się odważyłeś i spróbowałeś. Chcesz iść do pierwszej pracy jako programista, ale nie wiesz, czy jesteś wystarczająco przygotowany? Składaj CV i bez zastanowienia idź na kolejne rozmowy o pracę. Zobaczysz, iż ktoś prędzej czy później miło Cię zaskoczy.
10 cech dobrego programisty – Pokora
Ostatnią cechą jest pokora. Celowo zostawiłem ją na końcu, bo uważam, iż jest ona przyczyną upadku wielu świetnych programistów, którzy później stają się przeciętnymi klepaczami kodu. Przekroczyli magiczną granicę, w której ego bierze górę nad pokorą. W pracy zawodowej poznasz, jeżeli już nie poznałeś takie osoby. Zarozumiałe, niechętne pomagać i uważające, iż zjadły wszystkie rozumy świata. W Przypowieści Salomona możemy przeczytać takie słowa – Przed upadkiem idzie pycha. I podpisuję się pod tymi słowami jedną i drugą ręką. Sam tego doświadczyłem, zarówno jako programista, jak i przedsiębiorca. Zacząłem programować i już na początku czułem się niemal nieomylny. Potrafiłem ledwie napisać pętlę i proste metody, a zachowywałem się skandalicznie. Jak gdybym pracował w zawodzie dziesiątki lat. Dziś im więcej wiem, tym mniej umiem. Ilość informacji i świadomość ogromu branży IT spowodowała, iż nabrałem pokory. Upadałem przez takie myślenie wiele razy. Masa błędów, złe implementacje czy tragiczna wydajność kodu, to moje upadki, przed którymi kroczyła pycha.
Podobnie było, gdy założyłem swoją pierwszą firmę. Mieliśmy kilku klientów na start i ja już uważałem, iż mamy autostradę zostania milionerami. Że klienci będą walić drzwiami i oknami, a my będziemy wybierać tych najlepszych, bo przecież jesteśmy tak świetną firmą. Kilka miesięcy później byliśmy jak rozbitkowie, którzy na otwartym oceanie kurczowo trzymają się resztki deski, by nie utonąć. Piękna lekcja od życia w jednym i drugim przypadku. Lepiej jednak mieć pokorę już na starcie, niż uczyć się jej w trakcie. Uważam, iż te stresujące sytuacje, które wynikały z braku pokory spowodowały szereg problemów, które nawarstwiły się w ostatnim czasie. Od nadwagi po skoki ciśnienia. Wszechobecny stres po upadkach odbija się na zdrowiu. W moim przypadku było to krótkoterminowe i jakoś sobie z tym poradziłem, ale są osoby, które upadają niemal na każdym kroku i nie wyciągają wniosków.
Wyciąganie wniosków jest tu kluczowym procesem, by stać się pokornym. Z czasem dochodzi wdzięczność, a to już jest niemal gotowy przepis na szczęście w życiu. Popatrz na prezesów wielkich korporacji. Oni przeszli taką drogę, iż my nie potrafimy sobie choćby wyobrazić. Osoby te cechują się tak dużymi pokładami pokory, iż aż czasem ciężko w to uwierzyć. Na każdym kroku dziękują, podkreślają swoją mało istotną rolę w otaczającym nas świecie. Doceniają każdy dzień i są wiecznie uśmiechnięte. A przecież mogłyby opowiadać coś o swoich umiejętnościach, super karierze, byciu na topie, a choćby mógłby się otwarcie wywyższać. Wiedzą jednak, niejednokrotnie z własnego doświadczenia i upadku, iż to droga donikąd. Często błędnie pokorę odbiera się jako oznakę słabości. Poczuciem braku własnej wartości i niską samooceną. Tacy ludzie ze szczytów pokazują jednak, iż jest inaczej. Takie myślenie jest krzywdzące i przez to nie lubimy być pokorni, co jest szkodą dla nas samych.
Jak my, programiści możemy pracować nad pokorą? Przede wszystkim musisz zdać sobie sprawę z tego, iż nie jesteś pępkiem świata. Są wokół Ciebie inni ludzie, którzy mają swoje przemyślenia, doświadczenia i emocje. Nie zawsze Twój fragment kodu będzie najlepszy. jeżeli przy code review ktoś wytknie Ci błąd, to nie będzie wcale oznaczać, iż się pomylił, bo przecież Twój kod jest idealny. To dobry moment by popatrzeć na swoją pracę z innej perspektywy i przyjąć punkt widzenia innego programisty. Czasem bardziej doświadczonego, od którego powinieneś się uczyć, a nie traktować jako wroga. Nie bój się też prosić o pomoc. Taka nauka pokory będzie świetna na start, bo pokaże Ci, jak wiele jeszcze musisz się nauczyć. A jeżeli wkradnie Ci się błąd w kodzie, to nie odwracaj kota ogonem. Przyznaj się, iż to Twój błąd i iż go naprawisz. Uciekanie od odpowiedzialności, to coś, co podkopie Twoją pozycję w zespole.
I chyba najważniejsze. Nie utożsamiaj się z sukcesem. jeżeli osiągniesz coś fajnego, to pociesz się tym chwilę i leć dalej. Ciągłe wracanie do sytuacji z przeszłości, zwłaszcza dalekiej nie ma sensu. Po co masz rozpamiętywać idealne wdrożenie z przed 3 lat, którego byłeś głównym kierownikiem. Do tego czasu powinieneś mieć już dziesiątki innych, mniejszych i większych sukcesów. Po prostu nie przywiązuj do nich wielkiej wagi.
10 cech dobrego programisty – Podsumowanie
Reasumując, główne dziesięć cech, które polecam rozwijać z perspektywy programisty to Asertywność, Ciekawość, Cierpliwość, Odporność na stres, Komunikatywność, Bycie dokładnym, Samodzielność, Kreatywność, Odwaga i Pokora. Cech takich jest więcej i o nich pisałem w swojej książce Programistą być. Możesz się nie zgadzać z moim zdaniem, bo każdy z nas ma inną perspektywę, inaczej żyje i ma własne przemyślenia. Jedno jest pewne. Każdą z tych cech można rozwijać i pielęgnować, by być lepszym programistą. Nie musisz wszystkich tych cech mieć rozwiniętych na wysokim poziomie, jednak każda dobrze rozwinięta cecha pozwoli Ci zostać lepszym programistą. Sam wielu z tych cech nie posiadałem, rozwijam je codziennie. Inne miałem naturalnie od dziecka. Każdy z nas jest inny i nie ma co szukać podobieństw w osobach, na których się wzorujemy. Szukaj, doświadczaj i eksperymentuj, bo programowanie to piękna przygoda, zwłaszcza gdy ma się odpowiednie nastawienie i świadomość swoich słabości.
Newsletter
Nie przegap i dołącz już dziś do 815 osób będących w tym Newsletter! Otrzymuj co niedzielę o godzinie 20 listę kilku ciekawych tematów, które miałem okazję obserwować w mijającym tygodniu.
Tematy będą głównie techniczne, ale czasami pojawi się coś, co może wprowadzi Cię w stan zadumy i zmusi do dyskusji w szerszym gronie. Zero spamu!
Sprawdź swoją skrzynkę odbiorczą (albo katalog na spam) i potwierdź swoją subskrypcję.