Jak zostać blockchain developerem? Wywiad
Czym jest blockchain? W jakich produktach ta technologia się sprawdza, a w jakich nie jest najlepszym rozwiązaniem? Jaki jest próg wejścia do świata blockchain developmentu i jak rozwijać swoje umiejętności w blockchain będąc już doświadczonym programistą? Z pewnością blockchain od kilku lat rewolucjonizuje sposób funkcjonowania biznesu w branży FinTech i coraz więcej programistów rozważa przygodę z tą technologią. W poniższym wywiadzie o swoich doświadczeniach opowiadają Wojciech Harzowski i Maciej Grychowski, Blockchain Developerzy w Pragmatic Coders.
Ewa: skąd taki hype na blockchain i kryptowaluty w ostatnich latach?
Wojciech: Hype na blockchain? Myślę, że właśnie dzięki kryptowalutom. Hype na kryptowaluty? W dużej mierze to chęć zysku. Oczywiście teraz trochę generalizuję – wielu dostrzega w blockchainie nowoczesną technologię na miarę XXI wieku, która będzie fundamentem dla Internetu w wersji 3.0.
Maciej: Blockchain to wciąż stosunkowo nowa, dynamicznie rozwijająca się technologia, dla której właściwie z każdym rokiem znajdowane są nowe zastosowania i odkrywane nowe możliwości. Sztandarowym i najbardziej znanym przykładem użycia blockchaina jest Bitcoin, którego cykliczne zmniejszanie podaży do tej pory korelowało ze wzrostem wartości, co nie pozostawało niezauważone.
Gdybyś miał opowiedzieć w 2-3 zdaniach – czym jest ten blockchain?
Wojciech: Taka najprostsza definicja byłaby taka: blockchain to rozproszony rejestr lub inaczej baza danych, do której możemy jedynie dopisywać kolejne dane. Nie jest ona zarządzana przez pojedynczą jednostkę, lecz jest zdecentralizowana pomiędzy użytkowników. Dodawane do rejestru dane posiadają znacznik czasu i są grupowane w bloki, więc każdy może w każdej chwili zweryfikować “kolejność” zdarzeń.
Maciej: Niezmienny, rozproszony i weryfikowalny rejestr, tworzony przez kolejne kryptograficznie powiązane ze sobą bloki zawierające transakcje.
W związku z dużym hypem na tę technologię, dzisiaj wszyscy chcą robić ICO i “przerzucać swoje produkty na blockchain”. Czy każdy pomysł na produkt można i warto realizować na blockchainie? Kiedy nie ma sensu używać blockchaina?
Wojciech: Tak, obserwujemy prawdziwy wysyp projektów chcących oprzeć się na technologii blockchain. Słowo “blockchain” nierzadko pozwala zbierać miliony dolarów od inwestorów. Niestety blockchain nie jest lekarstwem na wszelkie problemy. Dla przykładu nie znajdzie on zastosowania:
- w systemach, które nie wymagają persystencji danych/stanu;
- w systemach, w których dane nie są dodawane przez użytkowników systemu;
- dla przetrzymywania dużych jednostek danych, jak na przykład plików muzycznych, obrazów lub innych, nie będących prostymi tekstami;
- w systemach, które z definicji nie są rozproszone.
Byłoby również idealnie, gdyby system nie był zarządzany przez pojedynczą jednostkę. Blockchain powinien wykluczać konieczność “zaufania” trzeciej stronie.
Maciej: Wykorzystanie technologii blockchain przynosi największą wartość, gdy mamy do czynienia z koniecznością użycia wspólnej bazy danych w systemie z wieloma uczestnikami o sprzecznych interesach. Możliwość decentralizacji oznacza wyeliminowanie pojedynczej instytucji stanowiącej punkt odniesienia dla “stanu świata” i zastąpienie jej konsensusem uczestników. Niestety – aby coś zyskać trzeba coś oddać – w tym przypadku wydajność, obniżaną przez narzut komunikacji, duplikacji danych i uzgadniania nowych bloków. Nie dla każdego rozwiązywanego problemu ponoszenie takich kosztów ma uzasadnienie i nierzadko lepszym rozwiązaniem jest zastosowanie zwykłej instancji bazy danych.
Jak zaczęła się Twoja przygoda z blockchain developmentem?
Wojciech: Nie wiem, czy nie przesadzę, jeśli powiem, że przypadkiem. Podczas rekrutacji do Pragmatic Coders na stanowisko Python Developera dostałem propozycję pracy jako Junior Blockchain Developer. Wcześniej wiedziałem co nieco o kryptowalutach i Bitcoinie, ale nie myślałem o takim stanowisku. To dla mnie był strzał w dziesiątkę. Trafiłem pod “skrzydła” bardziej doświadczonych kolegów, którzy wprowadzili “team juniorów” w świat Ethereum i blockchaina, ale od zaplecza.
Maciej: Pierwszy kontakt z kodem kryptowaluty Bitcoin miałem w 2014 roku na studiach o specjalizacji Kryptologia na Wojskowej Akademii Technicznej. Mimo że w późniejszym czasie zdobywałem doświadczenie zawodowe jako programista w innej branży, to można powiedzieć, że “grawitacja zadziałała” i po kolejnej zmianie zatrudnienia znalazłem się w firmie budującej infrastrukturę służącą do obrotu kryptowalutami.
Co robi Blockchain Developer? Czy koduje nowe blockchainy, czy pracuje nad innymi narzędziami i serwisami wokół blockchainów?
Wojciech: Robi wszystko to, co wymieniłeś, ale przede wszystkim ciągle się uczy. Blockchain rozwija się w niesamowitym tempie. Nie sposób wręcz ogarnąć wszystkich projektów, propozycji technologicznych, protokołów i koncepcji. W czasie, kiedy uczysz się czegoś nowego, nowe blockchainy rosną jak grzyby po deszczu, a “stare” wprowadzają ulepszenia. Poza nauką jest oczywiście development, który w dużym stopniu zależy od projektu. Dla jednego będzie to rozwój core kryptowaluty, dla innego będzie to core w prywatnym blockchainie, dla jeszcze innego rozwój smart contractów aż w końcu dochodzimy do całego ekosystemu blockchaina, czyli wszystkich aplikacji, które z niego korzystają, zapisują i odczytują dane, tj. portfele kryptowalut, explorery, mining poole, zdecentralizowane aplikacje, wewnętrzne aplikacje finansowe i wiele, wiele innych.
Maciej: Tak naprawdę nie ma jednego zestawu zadań i umiejętności, który charakteryzowałby stanowisko Blockchain Dev’a. Spektrum rozwiązań związanych z blockchainem rozciąga się od aplikacji niskopoziomowych, jak np. portfele sprzętowe, gdzie dosłownie operuje się na pojedynczych bitach danych, poprzez węzły kryptowalut, smart contracty, wallety, integracje walut i tokenów z istniejącymi systemami, aż po front-end aplikacji rozproszonych (dApps) pisany na popularne przeglądarki internetowe. Nie można pominąć również przeprowadzania nierzadko niezbędnego researchu produktów istniejących na rynku pod kątem problemów, które chce się rozwiązywać.
Wcześniej mówiliście o kryptowalutach. Jakie są jeszcze inne zastosowania technologii blockchain?
Wojciech: Generalnie blockchain można rozpatrywać w kilku aspektach: kryptografia -> cyfrowa tożsamość, niezmienność (immutability), tokenizacja, rozproszenie (distribution) oraz decentralizacja. Każdy z nich daje nam inne zastosowanie technologii. Dla przykładu: Bazując na cyfrowej tożsamości można stworzyć coś na kształt naszego rodzimego Profilu Zaufanego lub wirtualnego notariusza wykluczając uczestnictwo systemu rządowego lub prawdziwego notariusza – przejmujemy kontrolę. Innymi przykładami są np. łańcuchy dostaw, gdzie możemy przejrzeć historię każdego produktu spożywczego od powiedzmy winnicy i zbiorów aż na półkę sklepową. Tokenizacja to nie kryptowaluty i handel nimi, ale też podział dóbr na swojego rodzaju “udziały”.
Maciej: Blockchain znajduje zastosowanie wszędzie tam, gdzie można odnieść korzyść z dostępu do wspólnych, trwałych i niepodrabialny danych. Poza oczywistym wykorzystaniem dla finansów technologie oparte na blockchainie mogą znajdować zastosowanie w administracji (urzędy), potwierdzaniu praw własności, autorskich, potwierdzeniach wykonania usług – przykładowo wynajmu pojazdów lub nieruchomości.
Gdyby dzisiaj ktoś zapytał Was, jak zacząć przygodę z blockchain developmentem, to wskazali byście inne drogi niż Wasze? Jak dzisiaj zostać blockchain developerem?
Wojciech: Cóż, jeżeli już ktoś wie jak programować, to najlepiej zacząć od teorii, a materiałów na ten temat jest wiele, oraz od smart contractów na blockchainie Ethereum. Gdy już to opanuje, to w zasadzie rynek się przed nimi otwiera – może zacząć szukać pracy jako Blockchain Developer. Nic tak dobrze nie uczy i nie motywuje jak praktyka i realne wyzwania.
Maciej: Poza standardowymi umiejętnościami koniecznymi do tworzenia oprogramowania, blockchain wymaga także zaplecza teoretycznego. W internecie znaleźć już można bogaty wybór artykułów, kursów (w tym interaktywnych na platformach e-learningowych) i innych źródeł wiedzy. Po opanowaniu podstaw początkiem może być na przykład własny projekt open-source z użyciem dobrze poznanego języka programowania lub kontrybucje do już istniejącego.
Jaki jest próg wejścia do świata Blockchain Developmentu? Co kandydaci muszą umieć na start, by zacząć rozwijać się w kierunku blockchain development?
Wojciech: Przyznam, że najłatwiej to zrobić będąc już programistą. Warto znać podstawy kryptografii oraz sieci peer to peer. Użyteczne będzie doświadczenie z językami takimi jak C, C++, Python, Golang i JavaScript.
Maciej: Proces tworzenia oprogramowania wykonywany jest nie tylko przez programistów, ale biorą w nim udział także np. testerzy, PM’owie. Wydaje się, że wspólną cechą jest doświadczenie w korzystaniu z rozwiązań podobnych do tych, które się tworzy, zrozumienie ich kontekstu biznesowego i znaczenia dla użytkownika końcowego.
Może moglibyście polecić jakieś źródła wiedzy, materiały na temat blockchain developmentu na początek?
Wojciech: Niezmiennie polecam na start książki Mastering Bitcoin oraz Mastering Ethereum. Są to dosyć techniczne pozycje ale skok na głęboką wodę jest tutaj potrzebny. Dodatkowo strona learnmeabitcoin.com jest super źródłem wiedzy (i interaktywnym) zarówno dla początkujących, jak i bardziej zaawansowanych.
Maciej: Kursy na platformie Coursera: “Bitcoin and Cryptocurrency Technologies”, “Blockchain Specialization”, w dalszej kolejności dokumentacja techniczna np. języka Solidity i projektu Bitcoin Core. Nie do przecenienia jest także praktyka z aplikacjami węzłów i portfeli kryptowalut.
//Chcesz się rozwijać w blockchain? Zobacz naszą bazę wiedzy ->> https://www.pragmaticcoders.com/blog/blockchain-dev-learning-resources
Co to są i jakie możliwości dają smart contracts?
Wojciech: Z technicznego punktu widzenia jest to zbiór metod / instrukcji, które wykonują się w sieci blockchain. Co za tym idzie, instrukcje te i logika w nich zawarta są niezmienialne i transparentne dla użytkowników contractów. Jest to też swoistego rodzaju umowa, w oparciu o którą strony przeprowadzają między sobą jakieś transakcje.
Maciej: Smart contracts to kod wykonywany na maszynie wirtualnej na każdym węźle sieci walidującym jej stan. Umożliwia to osiąganie konsensusu dotyczącego nie tylko alokacji środków, ale także stanu w jakim aktualnie taki smart contract się znajduje, tworząc z sieci tak naprawdę jeden rozproszony komputer. Możliwości ograniczone są właściwie tylko przez język programowania. Na smart contractach zbudowano już niezliczoną liczbę tokenów (“kryptowaluta w kryptowalucie”), a nawet zdecentralizowane giełdy i usługi finansowe (DeFi).
Załóżmy, że postawiłem swoje pierwsze kroki w blockchain developmencie. Napisałem kilka smart contracts i odróżniam Ethereum od Bitcoina. Jak dalej rozwijać moje umiejętności?
Wojciech: Praca i nauka, nauka i praca. Najlepiej załapać się do jakiegoś projektu, który to umożliwi. Ciężko być na bieżąco też ze wszystkim, co się dzieje, ale subskrybowanie jakichś kanałów i mediów typu Blockfolio lub Bithub będzie pomocne.
Maciej: Dobrym sposobem na poszerzanie horyzontów (nie tylko w działce blockchainowej) jest uczestniczenie w tematycznych meetupach, zarówno lokalnych jak i tych w innych miastach. Rozwijać można się przez poznawanie bardziej istotnych nowych projektów, śledzenie releasów tych znanych, naukę języków, w których te projekty są pisane, oraz czytanie for branżowych. Wybór możliwości, jak widać, jest tutaj spory.
Co muszę umieć, by z sukcesem zaaplikować na stanowisko Blockchain Developera w takie firmie jak Pragmatic Coders? Jak rekrutujecie blockchain developerów? Na co zwracacie uwagę?
Wojciech: Przede wszystkim sprawdzam podstawy i zrozumienie blockchaina na bazie Bitcoina. Od razu, gdy się zaczyna z kimś rozmawiać, można poznać, czy kandydat rzeczywiście jest zainteresowany technologią i poświęcił trochę czasu nauce, czy też na szybko przed rozmową przeczytał jakieś streszczenie.
Ponadto sprawdzamy tradycyjnie praktyki programistyczne i wiedzę z zakresu języka, w którym kandydat zadeklarował specjalizację.
Dodatkowo bardzo ważne dla mnie jest, aby kandydat był gotowy na zmianę technologii/języka w każdym momencie – niestety (albo stety) z tym wiąże się praca Blockchain Developera w software housie.
Maciej: W pracy developera poza biegłością w samym języku programowania standardem jest znajomość dobrych praktyk programistycznych, takich jak np. clean code, testowanie i wzorce projektowe. W oparciu o takie podstawy można mówić o tworzeniu aplikacji blockchainowych, w których istotna jest bardziej teoretyczna znajomość kryptografii. Nie bez znaczenia jest także podejście do rozwiązywania niestandardowych problemów i przynajmniej podstawowa biegłość w utrzymywaniu infrastruktury.
Czy są jakieś preferowane języki programowania, które pomagają bardziej niż inne w poruszaniu się w środowisku blockchainowym? W jakich językach programowania technologiach programujecie najczęściej? Czy muszę być wymiataczem w nich wszystkich?
Wojciech: Do core blockchain developmentu zdecydowanie użyteczne będą języki takie jak C++, Golang lub też coraz częściej Rust. Jeżeli chodzi o smart contracty to javacript, typescript, a w niektórych blockchainach również Golang lub Rust. Ponadto znajomość Pythona nie zaszkodzi. Wiele aplikacji okołoblockchainowych opartych jest o Pythona.
Maciej: Ewolucja języków programowania uwidacznia się także w projektach blockchain. Wyłączając oprogramowanie hardware’u, starsze języki takie jak np. C i C++ są wypierane przez nowsze – Go i Rust. Spora część narzędzi w ekosystemie Ethereum pisana jest z użyciem JavaScript, natomiast w przypadku Bitcoina pomocny będzie również Python (zarówno do testów wprowadzanych modyfikacji aplikacji węzła, jak i np. modyfikacji portfela Electrum). Najpopularniejszym językiem do tworzenia smart contractów jest natomiast Solidity. Trudno o biegłość we wszystkich powyższych technologiach, stąd powoli można zauważać dalsze specjalizowanie się developerów.
Opowiedzcie może też o największych wyzwaniach w blockchain developmencie, przed jakimi mieliście okazję stanąć w przeszłości, albo może stajecie z zespołami właśnie teraz?
Wojciech: Największe – Core development – programowanie nowej kryptowaluty, jej nowych funkcjonalności, algorytmy konsensusu.
Najbardziej stresujące – Forki sieci spowodowane jakimiś błędami oraz przelewanie środków rzędu milionów dolarów.
Maciej: Gdy transakcja w kryptowalucie znajdzie się w bloku to można powiedzieć, że jest już praktycznie nieodwracalna, dlatego konsekwencje błędów zarówno w oprogramowaniu, jak i po stronie użytkownika lub operatora mogą być bardzo duże. Trzeba mieć to zawsze z tyłu głowy, niezależnie od wielkości i złożoności kodu. Gdybym miał wybrać jeden rodzaj zadań, który jest największym wyzwaniem, powiedziałbym że wprowadzanie modyfikacji i nowych funkcjonalności do już istniejących rozbudowanych projektów.
Jakie inne problemy rozwiązujecie w swojej codziennej pracy?
Wojciech: Blockchain development to nie tylko programowanie. To również praca koncepcyjna, konsultacje i research. Zazwyczaj jest też tak, że użytkownicy, ale też programiści systemów opartych o blockchain nie rozumieją samej technologii. Wtedy posiłkują się naszą wiedzą. W software housie są to też bardzo częste rozmowy z biznesem na temat możliwości technologii i pomysłów nowych projektów.
Maciej: Kryptowaluty poza właściwym kodem aplikacji węzłów potrzebują także infrastruktury dookoła – giełd, portfeli, przetwarzania i prezentowania danych z łańcucha itd., co jak najbardziej leży w zakresie działania Blockchain Developera.