bookmark_borderPytania do przyszłego pracodawcy

Podczas rekrutacji potencjalny pracodawca nas testuje. Zadaje nam pytania techniczne i miękkie, pyta o nasze sukcesy i porażki, mocne i słabe strony. To bardzo rozsądne. Czy jednak programiści zadają odpowiednie pytania pracodawcy? Czy warto pytać i jakie pytania warto zadać?

Gdybyśmy zastanowili się, czemu rekruterzy egzaminują nas technicznie i wypytują o umiejętności współpracy, udane projekty, naszą osobowość i temperament doszlibyśmy szybko do wniosku, że robią to w bardzo słusznym celu – dopasowaniu do zespołu, w jakim mamy się znaleźć. Lista pytań, jakie zadaje się kandydatom jest do pewnego stopnia standardowa i możemy być pewni, że jeśli zadano je nam, to zadano również wszystkim pozostałym kandydatom, by porównać nasze i ich odpowiedzi.

Z moich doświadczeń, jako rekrutera technicznego, wynika jednak, że zaskakująco mała ilość programistów zadaje pytania przyszłemu pracodawcy. Zwykle jest ich niewiele i są dość ogólne lub powierzchowne.

Nie wiem, czy wynika to z braku śmiałości, z przeświadczenia, że i tak nie dowiemy się prawdy, z zaślepienia stawką w nowej firmie, czy może z braku przygotowania i refleksji, ale uważam to za błąd. Moim zdaniem nieodpowiedzialne jest zgłaszać się do firmy, jako kandydat głównie z powodu technologii, w jakich realizuje ona projekt oraz pieniędzy. Zespół to ludzie, a praca programisty to nie tylko technikalia i warto pomóc przyszłemu pracodawcy w dopasowaniu się do zespołu.

Rekrutacja jest niezwykle kosztowna. Przejście programisty z jednej firmy do drugiej to gigantyczny koszt dla obu przedsiębiorstw, jak i stres dla pracownika. W interesie wszystkich stron jest jak najdoskonalsze dopasowanie do nowego zespołu i firmy.

Lista pytań

Szukając nowego projektu lub zmieniając pracodawcę warto stworzyć listę pytań, które będziemy zadawać podczas każdego procesu rekrutacyjnego. Pozwoli nam to w naukowy, rzeczowy sposób porównać projekty i kulturę organizacyjną przedsiębiorstw, w których będziemy mieli szansę pracować.

Na czym nam zależy?

Przygotowanie listy należałoby zacząć od zapytania samego siebie o nasze priorytety. Jeśli bardzo zależy nam na pracy z daną technologią, powinniśmy na przykład upewnić się, że nie zostaniemy zmuszeni do pracy z czymś innym. Jeśli nie lubimy spotkań, warto zapytać, ile ich jest. Jeżeli nie lubimy projektów utrzymaniowych, zapytajmy o czas trwania projektu, datę jego rozpoczęcia.

Przykładowa lista pytań do potencjalnego pracodawcy

  • z ilu osób składa się projekt?
  • jakie jest seniority programistów w zespole?
  • jak podzieleni są członkowie zespołu (np. ilu front-endowców, ilu back-endowców)?
  • jak długo trwa projekt?
  • jak długo będzie trwał projekt?
  • czy planowane są podróże służbowe i w jakim wymiarze?
  • ile godzin spotkań tygodniowo zespół odbywa?
  • na jakim sprzęcie będę pracował?
  • jakie narzędzia będę miał dostępne (oprogramowanie)?
  • ilu programistów dołączyło do zespołu i kiedy, ilu odeszło i kiedy?
  • jakie technologie używane są w projekcie?
  • czy mogę zmienić projekt i po jakim czasie?
  • jakie technologie używane są w innych projektach?
  • czego dotyczy projekt?
  • kto testuje kod?
  • czy tworzone są testy jednostkowe i jakie jest pokrycie kodu?
  • czy możliwa jest praca zdalna i w jakiej ilości dni tygodniowo?
  • jak zespół dba o jakość kodu (code review, analiza kodu)?
  • jak wygląda architektura rozwiązania (monolit, clean architecture, mikroserwisy, chaos)?
  • jak wygląda proces wdrożenia (manualnie, continuous delivery, gated checkins)?
  • jak często oprogramowanie jest releasowane?
  • jak bardzo „ocenzurowany” jest internet (np. blokada youtube)?
  • czy mogę używać dowolnych bibliotek i pluginów, jeśli nie to jak duża jest baza pluginów i bibliotek zweryfikowanych?
  • czy będę miał podnoszone biurko?
  • na jakim krześle będę siedział?
  • czy biuro ma klimatyzację?
  • gdzie położone jest biuro?
  • czy jest dostępny parking?
  • co w ciągu ostatnich trzech miesięcy zostało zrobione w firmie, by usprawnić pracę programistów?
  • czy jeśli projekt się skończy zostanę przeniesiony do innego?

Oczywiście nie wszystkie pytania trzeba i warto zadać, jest to tylko przykład. Wiele jednak może zaważyć na naszej satysfakcji z pracy oraz przyszłości. Sądzę, że warto wybrać kilka(naście) z nich i upewnić się, że pasujemy do projektu i firmy. Pozwoli to nam zostać dłużej, być zadowolonym oraz produktywnym, co przyniesie korzyść zarówno nam jak i pracodawcy.

bookmark_borderGry do nauki CSS

Nauka zajmuje w programowaniu szczególne miejsce. Rzadko która branża tak szybko ewoluuje i wymaga nieustannej edukacji, jak rozwój oprogramowania. Dlatego każdy sposób na szybszą naukę jest dla programisty na wagę złota.

CSS jest jedną z podstawowych technologii w przyborniku front-end developera. Również full-stack powinien ją dobrze znać. Bywa z tym różnie. Praktyka często jest przyswojona, ale pełne zrozumienie teorii jest zaskakująco rzadkie. Jeśli nie wierzycie, poproście programist(k)ę z zespołu o wymienienie choćby rodzajów pozycjonowania w CSS. „Frameworkowcy” mogą mieć z tym trudności.

CSS w każdym razie znać warto, a im lepiej się go zrozumie tym płynniej będzie nam szła praca.

Codepip games

Z pomocą przychodzi nam zestaw gier edukacyjnych https://codepip.com/.

Większość z nich jest płatna, ale nasłynniejsza bodajże, Flexbox – żabka (https://flexboxfroggy.com/) jest darmowa. Również inna, służąca do nauki grid CSS jest bezpłatna.

O ile przeglądanie dokumentacji może nas zanudzić, to uwierzcie, że ustawianie żabek na jeziorku jest całkiem relaksujące, a przy tym edukujące.

CSS Diner

Inna urocza gra, służąca do nauki CSS, ale już nie fragmentu, a całości, to CSS diner – http://flukeout.github.io/ .

Flexbox Defense

Kolejna, również ucząca flexboxa, to http://www.flexboxdefense.com/ .

Różnych podobnych, interaktywnych pomocy naukowych do nauki CSS znajdziemy w internecie sporo. Warto im się przyjrzeć i urozmaicić sobie naukę.

bookmark_borderPrototyp, głupcze!

Tworzenie oprogramowania jest jednym z najbardziej złożonych przedsięwzięć, jakich podejmuje się nasza cywilizacja. Nie dotyczy to co prawda każdego projektu, istnieją rzeczy proste, trywialne, ale nawet za nimi ciągnie się ogon bibliotek, systemów operacyjnych, procesorów i całej koncepcji programowania, wraz z algorytmami, maszyną turinga i językami formalnymi. Są jednak również projekty same w sobie niezwykle skomplikowane – systemy tradingowe, symulacje fizyczne, oprogramowanie symulujące zwijanie białek…

Rękodzieło

Mimo całej tej złożoności, jest w programowaniu duch rękodzieła.

Pracujemy nieraz nad arcydziełami koronkowej abstrakcyjnej twórczości, rozpiętymi na setki tysięcy linii kodu w sposób jakbyśmy toczyli wazę za czasów dynastii Han.

Poniżej przykładowa waza. Piękna rzecz, ale od czasu panowania dynastii Han, 206 BC–220 AD, trochę czasu minęło…

Co złego w toczeniu wazy? Niby nic. Tyle, że w przypadku wazy można, jak sądzę, nadać jej jakiś początkowy kształt, a potem malować kolejne fragmenty nieco improwizując. Tutaj smok, tam feniks, jakiś ornamencik.

I często wychodzi ładnie.

Gorzej jednak, kiedy przełożymy to na programowanie. Robimy jakieś MVC, tam dwa przyciski, tu jakiś dropdown, pod spodem kontrolerek i repozytorium i jakoś to będzie.

I czasami wychodzi ładnie.

Warto by jednak było, zanim zaczniemy implementować, lepić, klecić i klepać, zastanowić się, co tak w zasadzie system ma robić. Bo co waza ma robić, to wiadomo, a czy będzie miała dwa smoki i i trzy feniksy, czy też pięć ornamentów i jednego smoka, to już detal, o ile się je ładnie namaluje. Trochę też krócej się tworzy taką wazę. Gorzej jednak, jak w trakcie lepienia naszej wazy-MVC przychodzi klient i mówi, że chce czajnik. I jeszcze raz za dwa tygodnie i dodaje, że elektryczny…

Agile w dwójnasób

Wydawać by się mogło, że brak planu na początku projektu może wynikać z dominacji Agile na rynku. Promuje ona tworzenie jak gdyby ad hoc, w krótkich odcinkach czasu. Sądzę jednak, że brak planu to coś naturalnego, amatorskiego. Tak projekty tworzą studenci. Siadają do kompilatora i próbują. Próbują, piszą, nie planują. Miło jest coś zacząć, dać się pochłonąć entuzjazmowi. Mniej sympatycznie jest tworzyć plan, analizować, przewidywać problemy, a potem tego planu się trzymać.

Jest taka słynna grafika w świecie Agile. Ilustruje tworzenie MVP na przykładzie budowania samochodu. Znalazłem swego czasu ciekawszą:

Przez pewien czas sądziłem, że w istocie jedynie dolny rysunek ukazuje właściwą drogę, a tradycyjny przykład z hulajnogą, rowerem, motocyklem i samochodem jest błędny.

Tymczasem oba są poprawne. W zależności jednak od sytuacji.

Wyróżniłbym dwa modele tworzenia produktu:

  • kreatywny
  • konserwatywny

Produkt tworzony kreatywnie może wyewoluować w dowolnym kierunku. Przykładowo – projektujemy pierwszy smartphone. Nie wiemy jak ma wyglądać. Produkt może ewoluować znacząco, a feedback od klienta jest kluczowy i ma prawo kompletnie zmienić produkt.

Produkt tworzony konserwatywnie jest czymś, co już istnieje na rynku i nie planujemy go rewolucjonizować (albo czymś coś wręcz wiemy jak ma wyglądać, bo wynika z regulacji rynku, ustawy itp.). Chcąc zbudować nowy model samochodu nie ma sensu tworzyć hulajnogi. Możemy poeksperymentować z nadwoziem, wyposażeniem, ale nie z samą koncepcją auta.

Prototyp

Wydawać by się mogło, że prototypowanie jest czymś oczywistym. Pisarze tworzą pierwsze szkice, które potem udoskonalają, ubierają w szczegóły, a czasami zupełnie przerabiają. Malarze zwykle zaczynają obraz od zarysowania głównych jego elementów, również tworząc na początku coś w rodzaju prototypu. Projekty samochodów zawsze zaczynają się od produkowanych w jednym, czy kilku egzemplarzach wersji demo. Tymczasem w oprogramowaniu bywa różnie.

Widziałem projekty, gdzie nigdy niczego nie prototypowano. Proces tworzenia oparty był o pełną implementację w każdym sprincie. Zupełnie bezrefleksyjnie marnotrawiono czas, choć można było narysować na kartce propozycje rozwiązań i dojść do konsensusu miesiące szybciej.

Moim zdaniem każda aplikacja, która posiada interfejs graficzny (co stanowi sporą część, jeśli nie większość rynku) MUSI zacząć się od designu, następnie przejść w „klikalny” prototyp, by w końcu zostać w pełni zaimplementowana.

Stworzenie designu ułatwia zrozumienie produktu i zadawanie właściwych pytań. Większość osób jest wzrokowcami i potrzeba im wizualnej reprezentacji tego, nad czym mają podjąć pracę.

Prototyp z kolei pozwala dostarczyć klientowi coś namacalnego w czasie o wiele szybszym od pełnej implementacji. Rozwiązuje to frustrację biznesu związaną z czekaniem na pierwszy rezultat. Nic pewnie nie irytuje bardziej, niż słuchanie przez dwa miesiące technicznych sprawozdań bez możliwości ujrzenia wyniku pracy, jeśli zainwestowało się kilkadziesiąt lub kilaset tysięcy złotych w rozwój produktu.

W wielu firmach specialiści od UI i UX są bagatelizowani lub w ogóle się ich nie zatrudnia. To błąd. To gigantyczne przeoczenie. Ich praca to nie tylko rysowanie okienek – ich wysiłek ułatwia wszystkim zrozumienie produktu oraz pracę nad nim. Projekty zaczynajmy od szkicu, designu, przechodźmy do prototypu, a kończmy na implementacji!