Od Node.js do płacenia podatków zewnętrznych: wywiad z odnoszącym sukcesy programistą
Opublikowany: 2022-03-11W Toptal zawsze szukamy najlepszych freelancerów. Ale co sprawia, że freelancer jest naprawdę świetny? Luis Martinho, jeden z naszych najlepszych programistów, jest uwielbiany przez swoich klientów — usiedliśmy więc z nim, aby porozmawiać o freelancingu, technologiach takich jak freelancer Node.js i HTML5 oraz płaceniu podatków.
Więc na początek, jak zacząłeś pracować jako freelancer? Czy kiedykolwiek pracowałeś na pełen etat?
„Pracowałem na kilku pełnoetatowych stanowiskach: niektóre z nich były stosunkowo korporacyjne, ale ostatnia miała miejsce w środowisku startupowym, szczególnie w korporacyjnej przestrzeni SaaS, budując atrakcyjne oprogramowanie do zarządzania w chmurze. Mieliśmy bardzo utalentowany zespół i bardzo ambitną wizję. Po czterech latach rozwoju mieliśmy ekscytujący produkt w ekscytującej przestrzeni, co było świetne, ale nie byłem zbyt szczęśliwy. Potrzebowałem zmiany stylu życia. Kiedy zaczynaliśmy, osobiście nie rozumiałem, jak trudno było „rozpocząć”. Nie chodzi tylko o godziny, ponieważ pracujesz długie godziny w różnych środowiskach i projektach; to stres, odpowiedzialność i ból związany z tworzeniem czegoś nowego. To nie wszystkie kwiaty i tęcze. W końcu zdecydowałem, że nie jestem współzałożycielem materiału (przynajmniej nie w tym czasie). Ale doświadczenie dało mi znacznie głębsze zrozumienie rodzaju presji, z jaką mają do czynienia założyciele startupów i wiem, że dzięki temu stałem się lepszym niezależnym programistą.
Freelancing coraz bardziej przypominał życie, jakiego pragnęłam: dawał możliwość znalezienia ciekawych klientów i projektów, będąc jednocześnie nagradzanym za dobrą pracę.
Zacząłem szukać stałej pracy: najpierw w moim rodzinnym mieście, potem w pozostałej części kraju, a potem w pozostałej części Europy. Udało mi się znaleźć kilka ciekawych projektów, kilka interesujących pakietów wynagrodzeń i kilka ciekawych lokalizacji; ale wierzyłem, że mogę mieć to wszystko. Więc zacząłem szukać freelancera. A w miarę jak szukałem, freelancer coraz bardziej przypominał życie, którego pragnąłem: dawało to możliwość znalezienia interesujących klientów i projektów, a jednocześnie było nagradzane za dobrą pracę.”
Jakie było najtrudniejsze wyzwanie, które pojawiło się podczas przechodzenia do niezależnej pracy programistycznej?
„Początkowo wyobrażałem sobie, że ogromną zmianą będzie stabilność dochodów, której oczekujesz od pracy na pełen etat, w której masz pewną ilość pieniędzy, którą zawsze dostajesz do końca miesiąca – i dostajesz ją, cokolwiek się stanie. Spodziewałem się, że będzie to poważny problem, ponieważ wiedziałem, że bycie freelancerem oznacza, że nie zawsze będę miał klientów. Ale tak naprawdę się nie stało — trochę zaskakujące, że w Toptal zawsze udawało mi się mieć stały napływ klientów bez konieczności polowania na nich. Tak więc, szczerze mówiąc, głównym wyzwaniem było zorganizowanie mojego harmonogramu. Naprawdę nie mam ustalonych godzin pracy. Zasadniczo układam swój własny harmonogram, więc muszę być bardziej zdyscyplinowany niż wcześniej. Staram się pracować mniej więcej w normalnych godzinach: budzę się rano, zaczynam pracę, jem obiad o tej porze, kiedy wszyscy inni jedzą, po południu pracuję, a potem jem obiad. Staram się pracować według normalnego harmonogramu, nie ciągnąć całonocnych nocy, codziennie spalając olej o północy. Ta dyscyplina była na początku dużym wyzwaniem.”
Jednak większość ludzi postrzega wolne godziny jako zaletę niezależnej inżynierii oprogramowania. Jakie jest twoje zdanie na ten temat?
Odkryłem, że opłaca się być zdyscyplinowanym, ponieważ jestem o wiele bardziej produktywny, jeśli mam zestaw rutyn.
„Oczywiście jest to korzyść. To fajnie w tym sensie, że jeśli napotkasz jakieś problemy, jeśli musisz pomóc komuś z rodziny lub masz świetną okazję na jakiś rodzaj spędzania wolnego czasu, możesz iść za tym i możesz cieszyć się tą szansą. Ale z drugiej strony odkryłem, że opłaca się być zdyscyplinowanym, ponieważ jestem o wiele bardziej produktywny, jeśli mam zestaw procedur, ponieważ te procedury w zasadzie mnie kierują: mogę przejść do sedna i zrobić więcej w tym czasie. Dobrze jest mieć tę wolność, ale myślę, że trzeba z niej korzystać odpowiedzialnie”.
Twoi klienci cię kochają. Jaki jest Twój sekret?
„Jako niezależny programista, prawdopodobnie dobrą cechą jest być nieco leniwym, jeśli chodzi o szukanie najłatwiejszego i najtańszego sposobu, aby coś zrobić; być bardzo zirytowanym wykonywaniem powtarzalnej pracy, a tym samym stale ulepszać swój łańcuch narzędzi. Na przykład spędzasz dużo czasu w terminalu: powinieneś poważnie rozważyć utworzenie skrótów, aliasów, wszystkiego, co pozwoli Ci zaoszczędzić czas i pisać. W końcu wiele zadań, które wykonujesz, nie jest tak naprawdę nauką rakietową; po prostu przechodzą przez kilka pętli, aby coś zrobić. Jeśli zoptymalizujesz te rzeczy i usuniesz powtarzalną pracę z drogi, będziesz miał więcej czasu na wykonanie rzeczywistej nauki o rakietach.
Jeśli usuniesz powtarzalną pracę z drogi, masz więcej czasu na wykonanie rzeczywistej nauki o rakietach.
Musisz też mieć kogoś innego, kto zajmie się wypłatą godzinową i rozliczeniami, pozyskiwaniem pieniędzy od klientów, a nawet pozyskiwaniem nowych klientów, abyś mógł skupić się na świetnej pracy. A to jest absolutnie ważne. Kiedy jesteś niezależnym programistą, pracujesz nad dostawą, ale także nad marketingiem i sprzedażą. A to, co chcesz zrobić — i czego chcą od Ciebie Twoi klienci — to poświęcić tyle czasu na dostawę, a jak najmniej na marketing, sprzedaż, a nawet finanse. Zawsze będziesz musiał spędzać czas na szukaniu nowych niezależnych klientów programistycznych, gdy pracujesz dla starych, a to nie jest coś, czego chcą starsi — i nie jest to coś, czego chcesz. Po prostu chcesz się skupić na dobrym wykonywaniu swojej pracy. Więc jeśli ktoś inny zajmuje się rozliczeniami i pozyskiwaniem nowych klientów, powinieneś być bardzo zadowolony i masz szczęście, jeśli to znajdziesz.
Nie zapomnij też: płacić podatki dla freelancerów”.
Jak utrzymujesz motywację na co dzień?
Czują, że jesteś z nimi połączony w sposób, że nie wysyłasz tylko płatnych godzin.
„W mojej motywacji ogromną rolę odgrywa jakość klientów. Jeśli to możliwe, staram się być wybredna. To znaczy, staram się akceptować koncerty, które motywują mnie do wyzwań technologicznych, czy to rozwiązywanie trudnego problemu, czy praca w ciekawej przestrzeni. I to po prostu z tego wynika. Zawsze pracuję z klientem myśląc, że dążę do wspólnego celu: staram się widzieć szerszy obraz i widzieć siebie jako część zespołu. Nigdy tak naprawdę nie jesteś częścią wewnętrznego lub lokalnego zespołu programistycznego w pełni emocjonalny sposób, zwłaszcza gdy jesteś poza biurem, ale nadal możesz czuć się częścią zespołu pod względem całego projektu i jakości Praca. I myślę, że ludzie po drugiej stronie (klient i zespół klienta) to czują — czują, że jesteś z nimi związany w sposób, że nie tylko wysyłasz płatne godziny rozwoju, ale naprawdę martwisz się, czy odniosą sukces lub jeśli jakość pracy będzie wystarczająco dobra.”
Czego szukasz w potencjalnym niezależnym oprogramowaniu lub kliencie do tworzenia stron internetowych?
„Ogólnie rzecz biorąc, wolę nowsze technologie niż starsze, a także nowe rzeczy — niekoniecznie powiedziałbym, że pojawiają się nowe, ponieważ niektóre z tych rzeczy są aktualne, ale wolę pracować z kimś, kto tworzy jednostronicowe aplikacje i używa Backbone.js i Node.js z Express lub jakimś frameworkiem MVC niż ktoś, kto używałby stylu Java Enterprise Edition.
Jestem freelancerem, wolałbym mieć klienta, który ma jakieś rozwiązanie do komunikacji asynchronicznej. Jeśli pracujesz zdalnie, znacznie łatwiej jest dostać się do zespołu, który korzysta z czegoś tak prostego, jak lista mailingowa, ma pokoje rozmów w Campfire lub używa GitHub jako narzędzia do współpracy (to ostatnie działa wyjątkowo dobrze). W sumie, jeśli klient nie przechwytuje w jakiś sposób rozmowy o dystrybutorze wody, ryzykujesz utratę wielu informacji i gadania, które mogą wpłynąć na twoją pracę”.
To interesujący punkt. Jakieś inne wskazówki dotyczące telepracy?
Trudniej zapamiętać faceta, którego nigdy nie ma w budynku.
„Musisz znaleźć sposób na zrekompensowanie sobie nieobecności w biurze. Rozwiązanie, które znalazłem, to bycie proaktywnym. Na przykład: analizuj dzienniki zatwierdzenia. Kiedy pracujesz na odległość, powinieneś poświęcić trochę czasu na przejrzenie i zorientowanie się, nad czym pracują inni ludzie. Jeśli jesteś świadomy tego, co dzieje się w codziennych standupach, powiadamianych za pośrednictwem jakiegoś rozwiązania do zarządzania projektami, dobrą praktyką jest znalezienie wskazówek na temat tego, nad czym pracuje zespół. Wtedy łatwiej się integrujesz. To oczywiście dodatkowy wysiłek z twojej strony — możesz być w stanie się od tego odpuścić, jeśli mają naprawdę dobry proces komunikacji, ale może to być dobra wskazówka i może zaoszczędzić trochę problemów. Trudniej jest zapamiętać niezależnego dewelopera, którego nigdy nie ma w budynku”.

Jaka jest najważniejsza cecha freelancera?
„Musisz być kimś, kto potrafi utrzymać płynną równowagę między życiem osobistym a pracą. Jako freelancer ważne jest, aby być responsywnym. Ale bycie responsywnym ma duży wpływ na twoje życie osobiste. Nie musisz cały czas sprawdzać swojej poczty — możesz po prostu otrzymywać powiadomienia, filtrować, czy jest to ważne, czy nie, a potem możesz po prostu wrócić do spędzania czasu z rodziną lub cokolwiek innego. Musisz być dobrym zmieniaczem kontekstu. Przełączanie kontekstu jest zwykle drogie, ale trzeba je tanie i szybkie, aby zapewnić bardzo wysoki standard usług, bardzo szybko reagując na sytuacje awaryjne, ale jednocześnie ciesząc się towarzystwem przyjaciół i rodziny.
Musisz być dobrym zmieniaczem kontekstu. Przełączanie kontekstu jest zwykle drogie, ale musisz zrobić to tanie i szybkie.
W przypadku zwykłej umowy o rozwój jako freelancer musisz wiedzieć, jak konserwatywnie zarządzać swoimi finansami. Co zaskakujące, tak naprawdę nie zdarzyło się to Toptalowi, ale zwykle bardzo łatwo jest przejść od uczty do głodu, jeśli chodzi o płacę za oprogramowanie lub programistę internetową, nawet co godzinę. Miesiąc zarabiasz mnóstwo pieniędzy i nagle nie masz klientów i nie masz już pracy. Musisz więc być zdyscyplinowany: potrzebujesz pojęcia o średniej płacy i musisz wydać tę kwotę; cały nadmiar musi być pewnego rodzaju poduszką, która pomoże ci przepłynąć przez niepewność wykonywania tego rodzaju pracy. To naprawdę nie jest prawdą w przypadku Toptal, ponieważ strumień klientów jest naprawdę stały, ale nadal jest to dobra praktyka”.
Jako freelancer podejmujesz się w swojej karierze wielu różnych projektów związanych z tworzeniem oprogramowania. Więc co robisz po raz pierwszy, gdy otrzymujesz dostęp do nowej bazy kodu? Powiedzmy, że to miliard linii kodu.
„Spróbowałbym być zdyscyplinowany w podejściu odgórnym. Oznacza to wyczucie ogólnej struktury kodu. Wydaje się to dość oczywiste, ale gdy zaczniesz próbować zrozumieć kod, dojdziesz do tego, nad czym pracujesz w danym momencie i do konkretnego zadania, które masz pod ręką. To przesunie twoją uwagę z podejścia odgórnego i postawi cię na dole, próbując iść w górę, składając fragmenty z określonych części kodu, na który patrzysz. To może być lepsze na krótką metę, aby naprawić ten konkretny błąd lub dodać tę konkretną funkcjonalność, ale w średnim okresie będziesz żałować, że nie zachowałeś podejścia odgórnego. Dzięki temu będziesz mieć znacznie lepszy widok na system i sposób interakcji poszczególnych elementów”.
Wykonałeś dużo pracy front-end i back-end. Czy uważasz, że dla niezależnych programistów ważne jest posiadanie obu tych umiejętności?
"Nie. Będę bardzo szczery: myślę, że możesz wiele zyskać dzięki specjalizacji, na przykład jeśli jesteś śmiesznie dobry z śmiesznie małym zestawem technologii; ale to tylko osobisty wybór. Jestem ciekawy, więc pracuję z wieloma różnymi technologiami. I dlatego w końcu wykonuję zarówno front-end, jak i back-end jako freelancer.
Technologie się zmienią — to, co dziś jest gorące, jutro będzie nudne, a przynajmniej za 6-12 miesięcy.
To powiedziawszy, uważam, że dla programisty, przez całe swoje zawodowe życie, jest próba poznania jak największej liczby technologii i paradygmatów. Technologie ulegną zmianie — to, co jest aktualne dzisiaj, będzie nudne prawdopodobnie jutro lub przynajmniej za 6-12 miesięcy — a jednym z kluczowych umiejętności niezależnego programisty jest szybkie poznanie nowej technologii lub nowego projektu. W tym celu naprawdę pomaga, jeśli masz systematyczne podejście do uczenia się nowych rzeczy i ćwiczysz je, ucząc się co najmniej jednego nowego języka, struktury lub paradygmatu każdego roku”.
Wykonałeś mnóstwo pracy jako freelancer z Rails, Django, a ostatnio z Node.js. Jak twoje doświadczenia różniły się między tymi trzema?
– Och, wdamy się tutaj w wojnę religijną. Powiedziałbym, że Node jest zupełnie inny niż dwa pozostałe. Kiedy po raz pierwszy zetkniesz się z przykładami Node.js, możesz mieć problemy z wejściem w paradygmat oparty na zdarzeniach. To coś, co może nie być w 100% naturalne dla kogoś, kto cały czas pracuje z Railsami. Z drugiej strony, jeśli pracujesz z JavaScriptem, prawdopodobnie tworzysz program dla przeglądarki, więc znasz już paradygmat oparty na zdarzeniach. Osobiście, w moim niezależnym doświadczeniu z Node, używałem frameworka MVC, więc nie rozwijałem podstawowej technologii dla Node; Właśnie byłem standardowym użytkownikiem zastrzeżonego frameworka specyficznego dla klienta (porównywalnego do Express).”
Jakie są twoje ulubione narzędzia, z których korzysta zbyt niewielu programistów?
„Z czubka głowy, WebStorm od JetBrains. Jest to IDE JavaScript, które naprawdę warto sprawdzić. Nowe studio Androida wydane na Google I/O jest obsługiwane przez oprogramowanie JetBrains, a nie Eclipse lub cokolwiek innego. Lubię Eclipse, ale z WebStormem świetnie się bawię. Wciąż uczę się wielu skrótów — i to jest praktyka, którą również powinien stosować dobry niezależny programista: dowiaduję się więcej o swoich narzędziach. Nadal dowiaduję się więcej o moim IDE. WebStorm ma wiele sprytnych skrótów, dobry standardowy układ, a także posiada kilka fajnych właściwości ZenCoding, które pozwalają pisać HTML tak szybko, jak zawsze. Podsumowując, to dobre narzędzie”.
Gdyby niezależny klient chciał, żebyś zrobił projekt w Rust lub Go, albo w jakimś nowym języku, z którym nigdy nie pracowałeś, co byś powiedział?
Bez względu na to, jak dobry jesteś, zawsze będzie czas na konfigurację, a to może być kosztowne dla klienta.
„Zazwyczaj staram się nawiązać pierwszy kontakt z językami poza pracą z klientem, a nie w czasie klienta — bez względu na to, jak dobry jesteś, zawsze będzie czas na konfigurację, a to może być kosztowne dla klienta. Biorąc to pod uwagę, gdyby klient powiedział mi: „Ok, czujemy się komfortowo, nawet jeśli nic o tym nie wiesz”, postrzegałbym to jako świetną okazję do nauczenia się czegoś nowego. Z drugiej strony, jeśli klient miał napięty harmonogram, radzę mu zatrudnić kogoś innego lub używać języka, w którym czułem się komfortowo, abym wiedział, że mogę być produktywny od samego początku”.
Jakie jest największe wyzwanie techniczne, które musiałeś rozwiązać, będąc freelancerem?
„Przychodzi mi do głowy niezależny projekt HTML5. Zagłębianie się w interfejs API HTML5 Canvas, aby wykonać zaawansowane funkcje edytora graficznego, takie jak zaznaczanie lassem i zaznaczanie dowolnej formy, w których przycinasz część obrazu, ale pomijasz resztę, obliczenia z zestawami pikseli i tym podobne. To było trochę jak MS Paint używający HTML5 Canvas i implementujący takie rzeczy jak pędzel: można by pomyśleć, że pędzel byłby czymś prostym — to znaczy, gdybyś po prostu narysował linię, ale w tym przypadku chcesz imitować pociągnięcie pędzla, więc Musiałem użyć wzoru matematycznego, aby zasymulować, w jaki sposób pędzel styka się z płótnem i pozostawia rozmycie atramentem”.
Twoja ulubiona nowa technologia, z którą ostatnio pracowałeś?
„To, co słyszałem o Meteorze, jest interesujące, jeśli chodzi o to, jak oferują kompletne ramy głowy i ramion do tworzenia aplikacji jednostronicowych. Obsługuje zarówno back-end, jak i front-end. Nie pracowałem z tym, ale jestem ciekawy i swędzenie, żeby go wypróbować.