Warsztat, papier toaletowy i pęd ku doskonałości

geekyprimitives.com 4 lat temu

Jeśli przekleństwa i czyjeś opinie są dla Ciebie nie do przyjęcia, nie czytaj!

Na innym blogu pewnie ktoś Cię poklepie po plecach i się z Tobą zgodzi.

Regularne pisanie bloga jest jak rzucanie palenia.Dobrze wiem o czym mówię. Wymaga motywacji, wytrwałości i … wytrwałości.
Jak widać, brakuje mi albo motywacji albo wytrwałości, lub też tego co pomogło mi rzucić palenie, nagrody.
Ale ja nie o tym. Zaczynanie każdego wpisu o tym, iż dawno nie było wpisu, mogłoby sugerować budzące się we mnie poczucie winy. Ja przecież, nic, nikomu nie obiecywałem. Przynajmniej nie przypominam sobie.
O czym będzie tym razem? O COVID.
Jak już mamy COVID, co niewątpliwie podbije klikalność, obudzi uśpiony współczynnik CTR, możemy porozmawiać o czymś poważnym.


O higienie.

Jakiś czas temu, naszła mnie taka refleksja. Jak bardzo technologia, język, framework, paradygmat, stanowią o sukcesie projektu? Facebook zaczynał w PHP, Twitter w Ruby, Linux w C. Powiedzmy sobie szczerze, łamiąc wszystkie zasady bycia poprawnym i NVC, te języki nie mają najlepszej reputacji. Czy to zasadne czy nie, nie mnie osądzać.Czy gdybyś zamiast MySQL, użył MongoDB, zamiast React Angulara, zastąpił Java C#, a PHP Haskellem. Czy to by coś zmieniło. Ja wiem, iż proszę was o niemożliwe. By przyznać się przed sobą, iż to w co zainwestowaliście tyle czasu, być może choćby nadszarpnęli przyjaźnie, zapłacili zdrowiem, za co bylibyście gotowi oddać biurko z widokiem na park, iż to nie ma znaczenia.Bo gdyby miało? To czy wszystkie projekty nie powinny powstać w LISP 😉
Na potrzeby tej chwili, załóżmy, iż technologia nie ma znaczenia. Wdech, wydech, wdech, wydech.
To co za chwilę napiszę będzie perspektywą “dziada borowego”, takiego co to łazi z reklamówką z Lidla, brzydko pachnie i mamrocze pod nosem, do siebie, iż za Gierka to było lepiej. Takiego co to w niejednej noclegowni już był. Takiego co to z wszystkim innymi dziadami wódkę już pił i niejeden wspólny projekt spieprzył.
Skoro technologia nie jest ważna, to co jest ważne w naszej pracy? Na czym powinniśmy się skupić po pierwszych 5 latach łykania wszystkich technologii? Przejść na technologiczną dietę?
Co stanowi o tym iż jedni programiści są bardziej produktywni, kod mają czysty jak pierwsze krople samogonu z drugiej destylacji, architektura nieskalana jak Taj Mahal, testy …. testy po prostu są 😉
To coś co na potrzeby tych rozważań, nazwiemy “higieną”. Inni nazywają “ekonomią”, ale do tego dojdziemy na końcu.
Co mam na myśli?
Każdy z nas ma tyle samo czasu w ciągu dnia (no chyba iż nie masz dzieci, ale wtedy i tak nie masz czasu, bo melanż wzywa). Sekret kryje się w optymalnym wykorzystaniu tego czasu. O tym by nie zaśmiecać (stąd skojarzenie z higieną) swojego czasu zbędnymi rzeczami. By nie zagracać swojego dnia porozrzucanymi skrawkami byle jakich chwil.
Dbanie o higienę w pracy, odbywa się na 3 poziomach, głowy, rąk i serca. Zapachniało coachingiem, słabym jak przemówienia w sejmie. To tylko po to by nadać temu tekstowi pewną strukturę. Nie bójcie się, daleko mi do bełkotu, który wydobywa się z ust niektórych. Potrzebuję struktury, by było łatwiej o tym pisać i by nie był to nieskładny zrzut myśli.


Głowa.

Wszystko co robimy, rodzi się w głowie ( i StackOverflow). jeżeli masz w głowie bajzel, to co masz w kodzie?

A skąd bierze się bajzel w głowie?

email, slack, messenger, YouTube, Facebook, Twitter, Redit.

Wyłącz to gówno, nie musisz być tu i teraz na każde ding dong, na każde tłit tłit. Mam za sobą wiele a może i więcej godzin szkoleniowych. Nie uwierzycie ile raz walczyłem by ludzie skupili się na szkoleniu. Ile razy byłem w firmach gdzie prawdziwym szefem był Slack i email. Gdzie nieodpisanie na wiadomość w określonym SLA była uważane za działanie na szkodę naszej wielkiej korporacyjnej rodziny. Spotkałem ludzi którzy na stanowisku programisty żyli w Outlook i lepiej znali skróty klawiszowe w kliencie poczty niż swoim IDE. Którzy szczycili się tym, iż odpisywali na każdego maila. Za to powinno się ludziom wszywać esperal. Niszczysz swoją uwagę, zaśmiecasz swój czas. Powoli zaczynasz tracić umiejętność skupienia się, tak niezbędną do programowania. Po co? Po to tylko żeby zostać menadżerem 😉 (Mmmmmm, ależ wybitny suchar milordzie)


Polecam proste ćwiczenie. Za każdym razem kiedy coś przyciągnie Twoją uwagę, zastanów się, co sie stanie, jak nie odpiszesz? I nie daj się wciągnąć w naiwną grę “tylko sprawdzę, może do mnie, może ważne”. To nie działa, odpiszesz, ćpunie.

To co zrobić? To ty kontrolujesz swój czas. Wyłącz notyfikacje. I sprawdzaj wiadomości wtedy kiedy masz na to chwilę, kiedy odrywasz się od kodu. Bo się kompiluje, a może testy idą, a może idziesz rozprostować nogi, zrobić kawę. Albo tak jak ja pracujesz w 30-40 minutowych cyklach. Co jest ważne, wychodzisz z kodu. Ale to ty wiesz kiedy jest ten dobry moment. I dajesz sobie 10-15 minut. Może się okazać, iż ktoś Cię odciągnie na dłużej, nie walcz z tym. Ważne jest to, by nie mieszać kontekstów, nie bądź jak Linux z słabym zarządcą zadań.Druga technika, która działa to założenie stałego rozkładu kiedy sprawdzasz notyfikacje. Może o pełnych godzinach. Albo co druga godzina? Cokolwiek co będzie dla Ciebie wygodne.
Już słyszę głosy. Że zespół na tym traci. Co jest takiego pilnego, iż nie może poczekać 30 minut? Żyjemy w dziwnych czasach gdzie niepodzielnie rządzi nami poczucie pilności. Wszystko jest pilne, na już. I im więcej masz pilnych rzeczy, tym bardziej istotny jesteś. Iluzja. W naszej pracy ważna jest uważność.

Mój mały, prywatny backlog.

Oczywiście wcześniej czy później, ktoś lub coś Cię odciągnie od kodu. Żona wróciła z zakupami ( wszyscy wiem jak to jest na tzw. “remote” ), kurier zadzwoni do drzwi, dziecko nie może znaleźć filmu na Netflix, rodzicielka zadzwoni z ostatnimi plotkami, iż wujek Krzysiek z ciotką Krystyną, które koniecznie musisz usłyszeć. Potem wracasz do kodu i … już nie wiesz co robiłeś, gdzie byłeś. To co pomaga to mały osobisty backlog. Zanim zabierzesz się za zadanie, spisz sobie wszystkie kroki, pomyśl o tym co chcesz napisać, zbierz wszystkie narzędzia w zasięgu ręki ( o tym później ). I co ważne wszystkie linki, posty, dokumentacje, które gromadzisz jak chomik podczas pisania kodu, trzymaj w tym backlogu. W twoim prywatnym “decission record”. Przerażają mnie ludzie, którzy badają granicę przeglądarek w ilości otwartych zakładek. Ja osobiście uwielbiam taskline, moje osobiste Trello w konsoli. Trzymam tam moje zadania rozbite na poszczególne kroki, wszystkie alternatywne ścieżki gdy założenia okażą się błędne i wszystkie linki do StackOverflow, które zgromadziłem pracują nad zadaniem.
Po co? By zaoszczędzić czas ne bezsensowne szukanie po raz 15 tej samej odpowiedzi na SO, by nie wynajdywać koła od nowa, by gwałtownie wrócić do pracy. By odtworzyć kontekst.


Te wszystkie małe, drobne chwile, które zaoszczędzisz będąc panem swojego czasu i mając plan, wrócą do Ciebie.


Mamy za dużo faktów, które musimy uchwycić. Zbyt wiele szczegółów, które musimy pamiętać. Po co jeszcze obciążać naszą głowę notyfikacjami czy też zmuszać ją do odtwarzania kontekstu za każdym razem gdy przyjdzie przerwanie.

A skoro mówimy o zbyt dużej ilości faktów.

Kod.

Nie będę się tu rozpisywał, temat jest znany, opisany, a dalej jest jak jest. Prosty kod. I żadne SOLID, GRASP, DDD Ci w tym nie pomogą. Czasami zbyt nabożny stosunek do tych technik prowadzi do nadmiernej złożoności w imię źle pojętej czytelności, modularności i kompozycji. Spróbuj przeczytać swój kod jak zdanie w języku naturalnym.Brzmi nieźle? To dobrze. Brzmi jak spowiedź robota? Źle.

I oczywiście przegląd kodu. Który zbyt często jest sposobem na zamianę swoich kolegów i koleżanek na automaty do sprawdzenia składni. jeżeli na przeglądzie kodu sprawdzasz to co może zrobić linter, checkstyle, spotbugs, marnujesz swój czas. Kod ma być czytelny dla drugiego człowieka. Kropka. Oczywiście są języki, które bardziej lub mniej temu sprzyjają. I czasami nie mamy wpływu na wybór języka.Ale ciągle warto próbować.

Ah! Byłbym zapomniał, miłość do swojego kodu zachowaj dla ludzi. Kod nie jest, powtarzam, nie jest żadną wartością, z wyjątkiem Twojego PM i szefa. Ten sam kod może napisać następnych 1000 osób czekających na Twoje miejsce pracy. JSON wypluty z Java tak samo się błyszczy jak JSON wypluty z PHP, nie jest JSONem gorszego sortu. Im szybciej się nauczysz usuwać swój kod, tym lepiej dla Ciebie. Refactoring? Fajnie. Szanuję. Praktykuje. Tak samo często jak lokalny “start clean”, pod warunkiem, iż nie naruszam zastanych kontraktów. Trzymanie się sztywno tego co powstało 5 lat temu i szpachlowanie tego refactoringiem? Mam na to niewybredne porównania, ale wiecie, poprawność polityczna. Wyrzucaj śmieci. jeżeli IDE mówi, iż metoda nie używana, usuń. jeżeli coś jest “deprecated”, nie używaj. jeżeli biblioteka nie jest potrzebna, won z pom.xml.

Ręce.


Ten element, wydaje się najprostszy do wdrożenia. A bierze się z dwóch obserwacji.
Jako niedoszły gitarzysta, ciągle wieczorami wpatruję się jak moi bohaterowie zamieniają walkę z materią strun w muzykę. Co wyróżnia najlepszych? Ekonomia ruchów. Palce blisko strun, “zero” zbędnej ekwilibrystki. Bo czas podczas grania na instrumencie jest kluczowy. Odsuniesz za bardzo paluchy od podstrunnicy i już nie trafisz na czas w miejsce na gryfie.
Po czym poznać najlepszych rzemieślników? Po tym, iż znają swoje narzędzia i mają porządek na stanowisku pracy. Nie szukają co chwili młotka, potem śrubokręta. Bo wiedzą, co będzie im potrzebne w tym momencie by wykonać zadanie. I mają te narzędzia pod ręką. Ekonomia.

Co z tej obserwacji dla nas wynika?


Znaj swoje narzędzia i ciągle je ostrz, doskonal. Znaj swoje IDE, narzędzia do budowania, system kontroli wersji, konsolę, język, tak język, bibliotekę.
Hej Jarek, pisałeś iż technologia nie ma znaczenia? Więc o co chodzi?
Technologia nie ma znaczenia, ale Twoja znajomość technologii ma przełożenie na sukces. Im głębiej wejdziesz, tym więcej abstrakcji będziesz potrafił zastosować, tym mniej kodu wykujesz, mnie kodu wykujesz, neurony będą Ci wdzięczne. Bądź świadom ograniczeń swojej technologii.Unikaj hacków w kodzie, magicznych sztuczek. Są jak psie odchody na osiedlu. Ktoś w to wdepnie i rozniesie na podeszwach na placu zabaw, po cały repozytorium. Myślisz, iż jesteś twardy, bo posadziłeś kloca na środku kodu? Bądź tak uprzejmy i zapakuj go w osobny moduł, zawiń w komentarz, jak w foliowy woreczek, pisząc dlaczego, daj link do błędu w bibliotece. Higiena, Panie i Panowie.


Konsola to Twoje centrum dowodzenia. Chodzenie po systemie w plików w “explorer”, myszką. By znaleźć plik. Pozostawię to bez komentarza. Programistogodziny zmarnowane prze zastępy ludzi, by znaleźć run.sh. Brzmi to non-inclusive?Nie. Bo każdy może się tego nauczyć. Naucz się grep, find, awk, sed, podstaw shell’a. Nie chcesz shella? To samo zrobisz w Python, Go. Miej w swoim przyborniku jakiś język skryptowy, który dobrze rozumie Twój system operacyjny.
Ludzie potrafią spędzić godziny by znaleźć kawałek kodu do “copy paste”, ale ani sekundy by wyekstrahować metodę. Potrafią godzinami szukać biblioteki, która robi to co klasy i metody w SDK. Nasze projekty są pełne “copypasty” i zbędnych bibliotek. Higiena, Panie i Panowie.

Pomyślcie iż wasze środowisko pracy, wasz kod, to wasz dom. Chcecie tam zamieszkać?

Instalowanie pakietów z nieoficjalnych paczek w głównej strukturze systemu plików? A potem szukanie skąd ten skubany Python ciągnie zależności? Petagodziny złożone na ołtarzu bezproduktywności. Dlaczego? Bo twoje narzędzia nie są odpowiednio naostrzone. Przełączanie Javy przez zmianę JAVA_HOME z każdym razem gdy wchodzisz do projektu. A może direnv i sdkman?
Ile razy kompilowałeś projekt, szukałeś błędu, potem na Slack ktoś Ci pisał “skompilowałeś ze złą wersją JDK”. I dwie bezcenne godziny życia zamieniły się dwie zmarnowane godziny życia.
Higiena. Zero zbędnych ruchów. Obserwuj swój dzień pracy, a gdy znajdziesz zadania, które się powtarzają, pozostaje Ci tylko jedno…

Automatyzacja.

Pozwól komputerowi robić to co robi najlepiej. Powtarzalne zadania. Co po części wiąże się z minimalizacją zmiany kontekstów. To tak jak z procesorem. Metody powinny być na tyle krótkie by wykonały się w jednym cyklu zarządcy procesów. Inaczej zapłacicie cenę zimnej pamięci podręcznej i zmiany kontekstu. Przechodzisz na stronę GitHub by wyklikać “pull request”, może tak GitHub CLI?
Jak wiele czasu marnujemy przez brak automatyzacji (i nie mówię jako firmy)? Jak wiele czasu marnujemy przez brak znajomości narzędzi? Jak wiele czasu marnujemy na zmiany kontekstu?

Otocz się skryptami, jak dobrą kawą i kocykiem w ponury jesienny dzień. Trzymaj na GitHub swoją konfigurację i magiczne skrypty. Przesada? Ile razy skopałeś konfigurację i nie było drogi odwrotu? Co by było gdybyś mógł zrobić git revert na swoim środowisku?

Sprzęt.

Warto zainwestować w sprzęt, biurko, monitor, laptop. Ciosanie kodu szpatułką do mieszania sałatki to nie jest coś co chcecie robić. Dostałeś 4 CPU 8GB RAMU i masz na tym postawić IDE, dockery i jeszcze Outlook. Nie śmiejcie się. Firmy lubią ścinać na kosztach. jeżeli kompilacja trwa 30-40 minut, ile zmian jesteś w stanie zrobić w ciągu dnia? To jest tak oczywiste, iż aż fizycznie boli jak piszę. jeżeli ktoś nie jest w stanie tego zrozumieć, niech zajmie się sprzedażą papieru toaletowego.

Serce.

A teraz wchodzimy na grząski obszar kompetencji miękkich, uczuć i wszystkiego tego czego nie można zamknąć w kodzie i formułach matematycznych.


Sen.

Twój stan psychiczny ma największe przełożenie na jakość twojej pracy. Truizm. Oczywiście, jak masz 25 lat, regenerujesz się jak ogon salamandry. Pamiętaj jednak iż deprawacji snu nie da się tak łatwo naprawić. Złe nawyki bolą całe życie. Sen to punkt wyjścia. Baza. Wszystko bierze w łeb jak jesteś niewyspany. Wszystko Cię drażni, idziesz na zderzenie czołowe z każdym członkiem zespołu, proste rozwiązania Ci umykają. Komplikujesz ponad miarę. A potem organizm zaczyna wysyłać sygnały, żebyś się w końcu k…a wyspał.
Nie jestem ekspertem, mam swoje własne lifehacki, które wypracowałem czytając rożne artykuły, trochę eksperymentowałem na sobie. Nie ma jednego rozwiązania. Nie ma cudownego leku. Potrzeba wiele pracy i skupienia na sobie. I nie można tego zbywać i ignorować (tak do 35 roku życia uchodzi Ci to na sucho, potem jest tylko gorzej). I nie piszę, bo przeczytałem. Piszę ku przestrodze. Wszyscy wiemy jak działa służba zdrowia, jeżeli nie jesteś umierający. Polopiryna i rutinoscorbin i wapno, koniecznie wapno.


Runmageddon dla mózgu.

Mózg się męczy. prawdopodobnie obecni tu specjaliści od neurobiologi zaraz zasypią mnie tonami linków. Bez czytania tych linków, wiem, iż mózg się męczy. Ciągłe drążenie problemu, szukanie wyjścia z labiryntu, nie przybliża Cię do jego rozwiązania. Nauczy się odpuszczać. Poddać się. Głośno powiedz, nie wiem (ja wolę opcję bardziej ekstremalną). Odpuść.


Czasami pomaga zmiana. Tak jak w ćwiczeniach, przestajesz męczyć mięsień dwugłowy i zabierasz się za biceps 😉 Spróbuj rozwiązać ten problem w Pythonie, a może w LISP (oh ten LISP), albo poza swoim ukochanym frameworkiem. Zmiana narzędzia pozwoli Ci wyłuskać esencje problemu. Często okazuje się, iż walczyłeś z technologia i jej ograniczeniami a nie z problemem.


Przegadaj to. Weź człowieka, który nie ma pojęcia o czym mówisz i spróbuj mu to wytłumaczyć. Ja wiem, iż to trudne, bo musisz komuś powiedzieć, iż nie wiesz, iż nie rozumiesz. Porażka. Czy aby na pewno?

Zaakceptuj iż nic nie wiesz i naucz się tym cieszyć. Delektuj się ogromem swojej ignorancji i niewiedzy. To pozwoli Ci pozostać ciekawym świata. I pokornym. A pokora to cnota w naszym zawodzie ( i kto to pisze 😉 ).


Ostatnia deska ratunku, którą ostatnio nadużywam, to spacer. Ruch. Oczywiście, jest to możliwe pod warunkiem, iż masz szefa, który nie wychodzi z założenia, iż jak Cie nie ma na Slacku i przed kamerką to znaczy, iż się obijasz. Zmień pracę. Nie warto. Nie zmienisz jego przekonań. Polska szkoła zarządzania tak ma, to jest wpisane w jej etos, zapier… jest wartością samą w sobie.


Toksyczni ludzie.

Ludzie są wampirami. Jedni mniej, drudzy bardziej. Czasami odbierają Ci chęć i motywację do działania. Mają na każdy temat wyrobione zdanie, lub zacięcie bronią wypracowanego status quo. Nie słuchają, ale za to kochają mówić. I o mój Boże, mają uczucia, lęki, obawy o których często nie potrafią mówić, więc atakują. Z mojej perspektywy to zabija produktywność i kreatywność. Z czasem sam stajesz się obrońcą status quo, mr. know-it-all.

To jakimi ludźmi się otaczasz, nie tylko w pracy, ma wpływ na jakość Twojego kodu i produktywność. Usuń zbędne interakcje z tymi ludźmi. Tak jak zbędne, powtarzalne zadania. Ciężko jest usunąć ludzi. Do tego nie namawiam. Ale warto poświęcić czas by oprócz pensji, benefitów i projektów, dowiedzieć się z kim będziesz pracować.


Kończ już waść…


Czy to już wszystko? Nie wiem. Każdy z nas ma pewnie inną historie. Myślę, iż to nie jest ważne które z tych elementów wpływa na waszą produktywność i jakość tego co wytwarzamy. To nie jest ważne, czy się ze mną zgadzacie. To moja lista, rzeczy które mają wpływ na moją produktywność.

Ważne jest to, by potrafić zrobić retro z samym sobą. Zrobić krok do tyłu. Zasępić się na chwilę nad tym jak pracujemy, co nam przeszkadza, co irytuje, co wyrzucić ze swojego dnia i rytuałów. Posprzątać w swojej głowie, na biurku i w sercu.
Szczególnie gdy budzi się w was to okropne uczucie, iż utknęliście. Pojawia się to pytania, czy już do końca życia będę pisał CRUDy, przecież nie mam czasu nauczyć się tej cholernej współbieżności, machine learning czy co tam mi w duszy gra. Coś co pozwoli mi wejść na następny poziom. Dnia nie wydłużysz, czasu nie kupisz, dzieci się nie pozbędziesz, spać musisz. Po prostu więcej higieny w tym co i jak robimy.

I znajdź sobie pasję, która będzie Cię trzymać z dala od komputera.

Idź do oryginalnego materiału