Béton brut

Odwaga

2011-04-25

Odwaga to wiedza o tym, czego się bać trzeba, a czego nie.

Jest trzecia trzydzieści nad ranem. Naprawiam właśnie nienaprawialne. Montuję siódme koło do samochodu bez silnika. Nie dlatego, że ma to jakiś sens, tylko dlatego, że kiedyś komuś zabrakło odwagi. Nie mitycznej odwagi, która pozwala bohaterom stawać do walki z potworami, nie heroizmu, który zakrywa dłońmi oczy wyobraźni i pozwala nam iść z bagnetami na czołgi. Zwykłej, codziennej odwagi żeby powiedzieć “He’s dead, Jim”.

Szybkie życie, szybkie żarcie, szybki seks i rapid development.

Mamy narzędzia, które pozwalają nam zbudować prototyp szybciej, niż potrafimy wymówić “Partia Prawdziwych Programistów Prowadzi Projekt Poprzez Prototypowanie. Pomyśleli: Pieniądze, Perspektywy”. Problem w tym, że prototyp przestaje być prototypem, a zaczyna być produktem. No, nie jest to problem w świecie, gdzie określenia takie jak refaktoryzacja i piwotowanie nie mają żadnych negatywnych konotacji. Przetłumaczę z języku lęgłydż na nasz:

Refaktoryzacja, zwana popularnie refucktoryzacją. Działania mające na celu użycie młotka (z laserowym naprowadzaniem) celem wbijania klocków w kształcie gwiazdy w otwory przeznaczone na koła. Refaktoryzacja jest związana z iteracją, nazywamy to refaktoryzowaniem rafaktoryzacji lub w słowach hydraulika “tu uszczelniłem, a teraz tam cieknie. Dajcie więcej spoiwa.”

Piwotowanie, próba obrócenia tragicznej sytuacji wynikającej z braku rozeznania w zupełnie nową tragedię, która mieści się bardziej w obecnych trendach.

Co z tą odwagą?

Gdybym, będąc dużo młodszym i bardziej włochatym człowiekiem, miał jej więcej, mógłbym powiedzieć, że nie ma już co naprawiać niektórych rzeczy: że czas pozwolić zejść z tego świata tej klasie, tej bibliotece, temu projektowi. Że respiracja, że warzywo. Wystarczało powiedzieć: “Hej, wiecie, nauczyliśmy się tyle reanimując denata, że mamy już wiedzę o całej logice, o wszystkich pułapkach i możemy to zrobić lepiej, a przynajmniej tak żeby dało się tym zarządzać”. Zdarza się, że stoisz wtedy przed zdesperowanym PM-em, który jak w scenie z kiepskiego filmu pada ze łzami w oczach nad trupem i próbuje go cucić, robi mu sztuczne oddychanie i masuje klatkę piersiową ignorując zupełnie fakt, że to prosektorium, a serce pływa razem z mózgiem w słojach obok.

Przykład z życia: miałem za zadanie dopisać do systemu dodatkowy moduł. Wchodzą pieniążki i daty, wchodzą parametry, wychodzą dokumenty. Całość była skomplikowana, jak to zawsze jest, gdy dotyka się pieniędzy, a całą matematykę dyktują jakieś zapisy w prawie. Nie ma za wiele miejsca na stwierdzenie, że “w sumie jest dobrze, myli się tylko o jeden dzień i kilka złotych, ship it”.

Odbyło się spotkanie, potem spotkanie, bo zapomniałem co było na pierwszym (pamiętajcie, 4h spotkania jest równie efektywne co wypicie butelki wina, z tym że picie wina jest zabawne i tańsze – ale jeżeli chodzi o transfer wiedzy wychodzi tak samo), potem dostałem jakieś wydruki z paragrafami i podpunktami, zasiadłem do pracy. Zrobiłem pierwszy z trzech podmodułów i byłem z siebie bardzo dumny. Wszystko działało. Niestety, następne dwa okazały się drogą przez mękę: to ja nie rozumiałem, to mi źle wytłumaczono, to znów czegoś zapomniałem, a to się okazało, że prawo inaczej definiuje dni wolne od pracy niż ja (poniedziałek, wtorek, czwartek i sobota). Po pół roku robiłem wszystko żeby do tego nie zaglądać mimo ponagleń klienta. Doszło do tego że robiłem kilkugodzinne spacery z nagraniami ze spotkania, aby znaleźć gdzieś tę magiczną dźwignię, która pozwoli mi obrócić całość zwisającą z if()ów, magicznych wyjątków i // po dodaniu jeden działa jeśli miesiąc ma 30 dni

Projekt wyrył w moim sercu i umyśle piętno. Czułem się jak Frodo Baggins, niosący ciężar ponad ludzkie wyobrażenie. Rozumieli mnie tylko inni programiści-gollumowie. Ludzie przy wódce mówili o zdradzających żonach, dzieciach, które płaczą, a ja nieustannie “Myślicie, że macie źle? Miesiąc temu nie wiedziałem, że nie zaczynam liczyć jeśli pierwsza płatność wypada w sobotę”.

W grudniu podpaliłem repozytorium. W połowie miesiąca zdobyłem się na odwagę by sięgnąć po papier i narysować kwadraciki i strzałki. 22 grudnia miałem dane, które mogłem wyrzucić printem na terminal. 27 miałem podstawowy dokument. Na początku stycznia dałem system do testów i wrócił z adnotacją, że myli się o złotówkę i coś. Załamany poświęciłem dwa dni na liczenie na kartce. Okazało się, że mój kod liczył dobrze, klient się pomylił. Garbage in, garbage out.

Wszystko, cała ta walka, wynikała z tego, że miałem coś, co troszkę działało. Troszkę, ale mogłem się tego uczepić. Przecież pierwszy krok działał dobrze, to znaczy, że wiem co robię. Tu tylko poprawię, tam zmienię, będzie dobrze. Pierwszy krok jest dobrze i już działa. Jest dobrze. Wiem, że się spóźniam z oddaniem, ale przecież niedawno się dowiedziałem, że nie przewidziałem, ale teraz dopiszę na górze, a potem zmienię w dół.

Trzeba wiedzieć, kiedy przestać naprawiać i zrobić dobrze. I mieć odwagę, dużo odwagi. I cierpliwych klientów. I przyjaciół, którzy będą znosić twoje anegdoty.

No kurekta + wino = nie zwracamy za bilety. EDIT: Shot podesłał patch. Chwała i potęga na wieki.