Jak to jest być przestarzałym programistą?
Jako początkujący programista miałem spore problemy z nauką kodowania. Internet wtedy jeszcze nie wystarczał, a rzeczy oczywiście nie działały tak, jak to opisano w najwspanialszych książkach o programowaniu. Zdarzały mi się bezsenne noce w biurze. Kiedy czułem się mocno wypalony, mój team leader zwykł mawiać:
„Będzie lepiej.”
„To znaczy?”
„Dostaniesz zespół do prowadzenia, tak jak ja. Nie, żeby mi było teraz łatwo, czy coś.”
– przechwalał się.
„Posłuchaj! Za moich czasów pracowałem na hali produkcyjnej. A Twoje życie jest o wiele prostsze. Komputery. Magia! Możesz cały czas bawić się w Boga. My byliśmy tylko robolami.”
Więc koniec końców było tu więcej zazdrości, a mniej empatii.
„Ale ja nie chcę prowadzić zespołów tak jak Ty.”
– chciałem zobaczyć, jak daleko zajdzie ta rozmowa.
„Ale to jest dużo fajniejsze! Ta rzecz, którą nazywasz programowaniem - to jest umiejętność. Opanujesz to w mgnieniu oka! Jeden język, dwa języki, dziesięć języków - wszystkie są takie same!”
„Wow!”
– udawałem podziw.
„Tak naprawdę to przywództwo jest trudne. Tylko nieliczni (w tym ja) potrafią to ogarnąć. Jak zresztą widać.”
„A czym jest przywództwo?”
– rozbawiło mnie to trochę.
„Załatwianiem spraw! To jest trudniejsze niż cokolwiek innego. Umiejętności można nauczyć się i opanować w krótkim czasie, więc poradzisz sobie świetnie! Spójrz na tych miliarderów z branży technologicznej. Kodowali tylko w jednym języku w swoim garażu i zobacz, gdzie skończyli.”
Byłem zdumiony jego wizją mojej kariery. Do tej pory uważałem go za nic więcej niż przechwalającą się małpę wspinającą się po drabinie kariery, która nawet nie wie, jak skakać. Przynajmniej wiedział, co jest szczytem technologicznego sukcesu.
Zostawił mnie z jeszcze większą ilością pracy i jeszcze większym poczuciem nadziei: Jestem Bogiem programistów i pewnego dnia będę mógł rzucać kośćmi.
20 lat później, próbuję go odnaleźć, żeby dać mu znać, że pomimo opanowania 10x więcej, niż mogłem sobie wyobrazić, nie jestem nawet blisko tego geniuszu, o którym mówił, nie mówiąc już o posiadaniu miliardów na koncie.
Zawsze czuję się niekompetentny. Kiedy już wydaje mi się, że coś opanowałem, przychodzą rewolucje (zmiana miejsca, zmiana klientów, wymuszona zmiana pracodawcy i/lub projektu).
Co gorsza, moja praca i umiejętności są ciągle kwestionowane. Kolega z pracy aż rwie się, aby tylko wskazać nieprawidłową zależność w mojej klasie. Albo brakujący przypadek testowy.
Nie, to nie zdarza się każdemu. Ja przynajmniej nie wytykam palcami pracy innych ludzi. I nie, nie zawsze jest to proces.
Nowy dzieciak w firmie mówi mi, że jestem starym facetem od OOP i jestem niewystarczająco funkcyjny.
Nadal wykonuję swoją pracę do końca jak by to ujął mój były szef. Ale zachowuję to na później. Podejmuję ciche postanowienie, że odpowiem mu obiektywnie. Tak, świadomie staram się myśleć obiektywnie.
Nie skupiaj się na tym, kto to mówi. Nawet jeśli są to Twoi młodsi koledzy, jeśli fakt ma sens, po prostu przemyśl to. I jeśli tylko możesz, popraw się.
Ale tu wcale nie chodzi o kolegów. Ani o nowy język programowania lub toolchain, który mnie pokonuje. Mam się całkiem dobrze, dopóki odkrywam nowe sensowne rzeczy, które mogę zastosować w pracy. Poświęcam dodatkowy czas na ich naukę tylko po to, by później czerpać z tego korzyści. Odchodziłem już z pracy z powodu braku możliwości wyboru technologii lub braku sensownej, spójnej pracy. Znajdowałem lepsze oferty.
Jednak we wszystkich kończyłem jako ktoś, kto nie wie, co się wokół niego dzieje. Kiedy patrzę wstecz, czuję, że to była prawda! I ciągle te nowe rzeczy. Jakiś nowy framework X lub nowy sposób Y robienia jakiejś tam rzeczy staje się popularny. A to wszystko jest przecież na bieżąco na Reddit i Stack Overflow - jak mogłem to przegapiać!? A jednak, było to możliwe.
Kiedy przegapiłem rewolucję JavaScript, nawet nie zdawałem sobie z tego sprawy. Jak już się o niej dowiedziałem, trochę tego pożałowałem. No bo kto chciałby pisać strony internetowe przez całe życie? Nie ja. Jestem programistą, a nie malarzem.
Dokładnie w tym samym czasie miała miejsce rewolucja w chmurze, a ja nie zwróciłem na to uwagi. To tylko wymyślny sposób radzenia sobie z wynajętymi serwerami. To nie dla mnie.
Kiedy zdałem sobie sprawę, że jest już za późno, by wsiąść do pociągu chmury, zacząłem się wiercić w mojej codzienności. Wysiadłem na niewłaściwej stacji, zastanawiając się, jak nadrobić zaległości związane z chmurą, czekając na kolejny pociąg, który zawiezie mnie do lepszego celu.
I... zacząłem uczyć się blockchaina. To była rewolucja! Złapałem byka za rogi!
Kiedy szukałem ofert pracy, wyszło ze mnie głośne duh. Oferty nie wyskakiwały jak szalone, tak jak to było w przypadku chmury. A z drugiej strony, kto chciałby zatrudnić faceta, który nauczył się kryptowalut online, z 10-letnim doświadczeniem, które jest tu kompletnie bez znaczenia? Koniec końców, ta gałąź IT ciągle się rozwija i potrzebuje entuzjastów, miłośników! Osób, które kodują, jakby to był ich pierwszy projekt. Upijają się i wrzucają losowe rzeczy na Reddita o drugiej w nocy, po czym obserwują, jak rozpętuje się burza.
Wróćmy do fullstacka. Nie JavaScript, ale TypeScript. To z tego mogłem czerpać maksymalne korzyści przy minimalnym wysiłku. Tylko jeden język!
W ciągu ostatnich trzech rozmów kwalifikacyjnych, po przekonaniu każdego rekrutera, że mój CRUD-owy projekt demo jest w TypeScript i słysząc NIE (dokładnie z tego powodu), zacząłem się ponownie zastanawiać - chmura nie jest jednak takim złym pomysłem. Każdy jej potrzebuje, w tym platformy handlu kryptowalutami. A może by tak dla odmiany zrobić coś dużego?
Tym razem robię to z twistem. Świeżynka towarzystwa to No-code. Za 25 $ miesięcznie. Bubble.io ma niezłe możliwości i jest w dodatku całkiem popularne. Wyruszyłem w poszukiwania innych platform na rynku i po spędzeniu nocy na GitHubie, kręciło mi się mocno w głowie. Pomimo niezakodowania ani jednej linijki kodu, to wciąż była praca ?
Potem ogarnął mnie żal. Powinienem był przynajmniej zbudować jakiś agregator no-code, zanim temat eksplodował! Następnie przeszukałbym fora i Product Hunt, opublikowałbym mój arkusz Excela, nad którym pracowałem przez ostatnie trzy bezsenne noce. Mógłbym tego użyć do stworzenia matrycy usług no-code.
Nawet z całą tą strategią "klient na pierwszym miejscu”, potrzebujesz odrobinę wyrafinowania. Dzieciaki z college'u szybko przylecą na moją stronę. Serwer padnie, a ja z dumą to ogłoszę, zdobywając kolejne wyświetlenia. Crowdfunding pójdzie w ruch. Techcrunch to zauważy.
Inwestor zacznie się przyglądać nadmiernemu ruchowi wokół mojego dzieła. W wiadomości e-mail zostanie przesłany czek in-blanco. Sprawdzę dwa razy, czy nie jest z Nigerii. Nie. To poważne pieniądze płynące w moją stronę.
Koniec snu. Nie, żebym nie chciał sobie tego wyobrazić. Jednak nawet jeśli to wszystko jest możliwe, to nie jest to droga usłana różami. Spójrzcie na te wszystkie wielkie firmy i znajdźcie mi jedną, która nie ma żadnych pozwów sądowych.
Jestem zbyt zmęczony, by myśleć o cierniach. W zasadzie taki był zamysł. Nie myśleć o cierniach. Nie żałować niczego.
No-code jest dobry, ale nie jest to moja bajka. Nieprzespane noce w zamian za kiepskie pieniądze. A nawet jeśli bym się tego podjął, kto zagwarantuje, że ludzie będą do mnie przychodzić? Moje posty na Reddicie rzadko miały jakichkolwiek odwiedzających.
Kto kieruje tą niewidzialną maszyną zwaną budowanie społeczności w sposób organiczny? Gdzieś tam leją się pieniądze, a praca jest wykonywana. Ta magia na mnie nie działa. I wiem dlaczego.
Nie mogę zmusić innych ludzi do jazdy moim pociągiem. Nie potrafię załatwiać spraw, w przeciwieństwie do mojego byłego szefa. Powiedział, że tylko kilka osób na ziemi może to zrobić. Prawdopodobnie był jednym z nich. A może nie? Ale miał rację.
Czasami nie jest to moja praca, ale moja inicjatywa. Próbowałem tego tysiące razy i nie udało mi się. Jak? Pozwólcie mi wyjaśnić.
Jestem minimalistą. Staram się zminimalizować wysiłek i uzyskać maksymalne korzyści. Nie zawsze dla mojego własnego dobra, ale także dla dobra firmy i społeczności, której jestem częścią.
Jeśli coś w kodzie się nie zgadza, staram się to naprawić. Ale inni koderzy mnie wstrzymują. Skoro nikt nie narzeka, to po co to naprawiać?
Innym razem próbuję czegoś, co być może ich mniej rozdrażni. Zamieszczam uwagi i dokumentację. Coś takiego:
// Jay knows what's going on here, but will he remember in a year? Not very likely, this code sucks, but it works so do not change it.
Widzicie? Każdy, kto ma choć najmniejsze pojęcie o tym, co próbuję robić, oprawiłby to w ramkę i powiesił w galerii sław. W rzeczywistości błędy są dokładnie tym, czemu próbują zapobiec. Promuję to przy minimalnym wpływie na kod i ich ego.
Raz ktoś po prostu cofnął mój commit, powołując się na to, że dłuższy kod pogarsza wydajność. Nie chcemy, aby stało się to praktyką! Jakby nagle wszyscy mieli zacząć kopiować to zachowanie w każdym pliku źródłowym, serwer wykrzaczyłby się przy ładowaniu większej ilości komentarzy niż kodu.
Następnym razem poruszam ten temat na spotkaniu zespołu, a wszyscy patrzą na mnie jak na kogoś z równoległego wszechświata (trzy miesiące później, jest to ten sam problem, z którym zmaga się cały zespół, ale cholerni koderzy nigdy nie uznają zdania swoich współpracowników - to najgorsza rzecz w tej branży).
W ostateczności, tworzę stronę Confluence, na której umieszczam „Najlepsze praktyki dla tego i tego rodzaju problemów”. Dodaję wszystkich do listy obserwowanych. Wszyscy zostają powiadomieni. Wszyscy to widzieli. Ale nikt nic z tym nie zrobił. Jestem zbyt nieśmiały, aby powiedzieć o tym menedżerowi. Z resztą on też to widział.
Może to już po prostu czas na zwolnienie miejsca w zespole. Mój były szef powiedział, że brak mi asertywności. Nie byłoby źle, gdybym choć raz spróbował się postawić. Co mam do stracenia?
W końcu dlaczego nie promuje mojej inicjatywy, tak jak robi to wobec innych koderów?
Pinguję go z tym linkiem. Nie odpowiada. Przy kawie opowiadam mu wszystko, bez najmniejszych oznak wzburzenia. Spodziewam się wzruszenia ramionami. Niech da mi przynajmniej to!
Rozciąga się, jakby w ogóle mnie nie słyszał i wraca do swojego biurka.
Przy obiedzie żona pyta:
„Gdzie jesteś?”
„Tam, gdzie zwykle. W bugach.”
– skłamałem.
„Już przegapiłeś kolację. Przynajmniej nie trać snu. Robiłeś to tak często podczas nauki nowego języka.”
Była zapominalska. Takich języków było co najmniej pięć.
„Jakiego języka się uczyłeś, tato?”
– mój syn przerywa, a ja ignoruję jego pytanie.
„Masz dziesięć niedokończonych projektów na swoim komputerze. Tak dużo wiesz. Kodujesz w domu, jakbyśmy nie istnieli. Mimo to, pojawiają się błędy. Powinieneś rozważyć opuszczenie tej branży. Załóżmy razem jakiś interes. Z pewnością wykorzystamy Twoje umiejętności.”
Staram się udawać, że zwracam uwagę. A jednak żona mnie przyłapała. Nie odzywając się ani słowem, kontynuowała jedzenie. Rozmawialiśmy już o tym co najmniej sto razy.
„Jakie błędy teraz naprawiasz, tato?”
– mój syn ćwierknął ponownie.
„Nie zrozumiesz. Dokończ kolację.”
– powiedziałem.
Na co on odparł z krzykiem. „Dlaczego nikt nie odpowiada na moje pytania? Dlaczego nic dla nikogo nie znaczę?”
Byliśmy oszołomieni gniewem w jego głosie. Jednak w dziwny sposób jego gniew jakoś mnie uspokajał. Wszyscy w milczeniu dokończyliśmy kolację. Po obiedzie wyjaśniłem mu, jak działa tworzenie oprogramowania.
Oryginał tekstu w języku angielskim przeczytasz tutaj.