Zapraszam na drugą część rozmowy z Maćkiem Bargielem, programistą w Facebooku, który obecnie rozwija Oculus VR. Rozmawialiśmy z nim przy okazji cyklu live-streamów z polskimi programistami z całego świata. Jesienna edycja już na jesień, o której więcej w tym miejscu

To druga, obszerna część (pierwsza tutaj), podczas której Maciej opowiedział o sposobie wdrażania zmian w Facebooku, procesie akceptacji kodu, testach, stacku technologicznym w Facebooku, o tym, jak powstał przycisk „like”. Będzie również o tym, co robi przy Oculusie legenda gaming industry – John Carmack (główny programista przy takich grach jak Wolfenstein 3D, Doom, Quake), z którym Maciek na co dzień pracuje. Oczywiście sporo o samej rzeczywistości rozszerzonej. Na koniec także, co jest wg niego najważniejsze, przy aplikowaniu do takich firm jak Facebook, Palantir, Goldman Sachs czy Google. Serdecznie zapraszam do materiału z pierwszej ręki.

od lewej na zdjęciu: Daniel z Manage IT, Maciek i Piotrek podczas majowej edycji event.justjoin.it

Daniel Jastrzębski: Continuous Delivery i Continuous Deployment w Facebooku. Dlaczego zmiany wdrażane w Facebooku są wdrażane na niektórych kontach i one stopniowo pojawiają się na kolejnych?

Maciek Bargiel: To bardzo dobre pytanie, dość znana technika w branży. Polega to na tym, że wszystkie zmiany najpierw wypuszcza się do części kont, a dopiero później do wszystkich, po to, aby sprawdzić, czy ta część kont nie zostanie zepsuta w międzyczasie.

Daniel: To są losowo wybrane konta spośród wszystkich użytkowników FB, czy jest jakaś pula kont, które są wyznaczone, jako konta testowe właśnie?

Maciek: Bez wdawania się w jakieś szczegóły, z reguły są to losowe konta, bo chcemy zobaczyć, czy statystyczne konto zostanie zepsute, dlatego wybiera się losowe konto. Facebook ma gigantyczną ilość użytkowników, dlatego nawet jak testuje się to na 1% kont, to w dalszym ciągu jest ich ogromna ilość. (dopisek: przy 2 miliardach obecnie, 1% to będzie symboliczne 20 milionów…) Dlatego ma się całkiem dobry feedback, czy to działa,  czy nie. Jesteśmy w stanie to samo zrobić z aplikacjami mobilnymi.

Dokładnie to robiłem na początku swojego stażu w Facebooku. Moje zadanie polegało na tym, aby zobaczyć, jakie techniki pomogą poprawić metryki. Nawet mi się zrymowało. 🙂 Dokładnie coś takiego robiłem. Miałem jakiś pomysł, który potem testowałem na pewnej grupie ludzi. Nie robiliśmy tego po to, aby sprawdzić, czy coś zepsujemy, tylko, aby sprawdzić, czy metryki dla tych ludzi poprawiają się w porównaniu z metrykami dla innych ludzi. Czy rzeczywiście te osoby spędzają więcej czasu na stronach swoich znajomych, czy dodają więcej znajomych.  Generalnie po to się to robi. Szybki eksperyment.

Daniel: Własnie, a propos zepsucia czegoś – jak wygląda proces akceptacji kodu w Facebooku? Czy Ty, jako pojedynczy Developer masz możliwość zepsucia jakieś funkcjonalności, nad którą pracujesz, poprzez świadome lub nieświadome zrobienie kawałka kodu, który po prostu namiesza w systemie.

Maciek: Bez wdawania się w szczegóły – jeśli ktoś będzie chciał coś zepsuć, to wydaje mi się, że w każdym miejscu na świecie będzie w stanie, jeśli wystarczająco długo nad tym pomyśli. Ale tak jak w każdej innej firmie technologicznej, praktycznie wszystko, co tworzymy, musi zostać zaakceptowane przez co najmniej jedną, inną osobę. Nie ma z tym jakiegoś większego problemu, nie jest to uciążliwe, z reguły taką akceptację dostaje się po paru minutach i rzeczywiście to pomaga wyłapać błędy, których człowiek nie wyłapał wcześniej.

Daniel: Jeżeli chodzi o testy tego, co tworzycie. Czy jest jakiś automatyczny system, który za każdym razem, gdy kod przechodzi review, robi testy z kompatybilności wstecznej, itd.

Maciek: Tak, wszystko jest testowane, każda, nawet najmniejsza zmiana. Mamy gigantyczną ilość testów. Za każdym razem, gdy zmieni się chociaż najmniejszą rzecz, wszystko jest bez przerwy testowane, wszystkie testy są odpalane. Przed samym wypuszczeniem zmiany w świat też idzie kolejna seria testów, więc wszystko jest bez przerwy, cały czas testowane.

Daniel: Dwa pytania dotyczące skali Facebooka. Powiedz, jeżeli możesz – ile FB ma serwerowni i gdzie one kontynentami są rozlokowane?

Maciek: Ile dokładnie nie mogę powiedzieć. Natomiast są w zasadzie na całym świecie. Wydaje mi się, że większość kontynentów ma co najmniej kilka serwerowni Facebooka. Jest ich dużo. Nie są to ściśle utajnione sekrety, większość jest w Stanach, ale gdzieś tam w świecie też jest ich wystarczająca ilość.

Daniel: Powiedz parę słów na ten temat, co obecnie już tak konkretniej robisz w Facebooku?

Maciek: W Facebooku robię to (zdjęcie wyżej) – jak ktoś się nie orientuje – Oculus to firma, która tworzy head-sety do rzeczywistości wirtualnej. Wygląda to jak okulary, które zakłada się na głowę. W momencie, w którym tą głową się przesuwa, to obraz przed Twoimi oczami przesuwa się razem z głową. Więc masz wrażenie, jakbyś był w tej rzeczywistości wirtualnej. Zapewne każdy o tym wie, ale wyjaśniam, gdyby ktoś się pierwszy raz spotkał z czymś takim.

Moja rola w Facebooku to jest tworzenie aplikacji na Androida. Mamy dwa head-sety: Oculus Rift, który jest podpinany do peceta kablem. Mamy też head-set Samsung Gear VR, który działa razem z telefonem jako wewnętrzny komputer i jako ekran w momencie wpięcia w head-set. Wygodne, lekkie rozwiązanie bez kabli i baterii.

To jest część nad którą ja pracuje. Większość z tego, co piszę, to piszę w Javie. Ale to się niedługo zmieni, więc uczę się teraz nowej rzeczy. Do tej pory pracowałem nad takim Steamem dla Oculusa, czyli aplikacją, która pozwala Tobie instalować i odinstalować programy na Oculusa. Tworzone jako klasyczna aplikacja 2D na Androida. Teraz zaczynam pracować nad naszą aplikacją, która już tworzy tą rzeczywistość wirtualną, czyli tak jakby Steamem na Oculusa, tylko już w VR. To jest tworzone używając naszego nowego wypuszczonego w świat frameworka ReactVR.

React to seria frameworków Facebooka, która używa JavaScript. Do tworzenia aplikacji webowych, mobilnych i teraz też aplikacji w rzeczywistości wirtualnej w bardzo prosty i przystępny sposób. Bez używana Javy, w zasadzie używając samego JavaScriptu, można stworzyć aplikację, która działa jednocześnie na Androida i na iOS, co jest też dość fajną sprawą. Teraz wypuściliśmy React dla aplikacji VR i tego się teraz uczę.

Daniel: Jakich baz danych używa FB, jeśli to nie jest tajemnica. Czy są to bardziej komercyjne bazy, jak Oracle? 

Maciek: Nie jest to tajemnica, ale nie jestem w stanie na to odpowiedzieć, ponieważ się tym nie interesowałem. FB jest gigantyczną firmą i nie jest się w stanie ogarnąć wszystkiego. Mamy ludzi, którzy zajmują się tym, żeby to działało, ja wiem, jak z tego korzystać. Mogę zagwarantować, że korzystamy praktycznie ze wszystkich technologii, o jakie ludzie pytają. Nie ma na świecie języka programowania, którego Facebook nie używa.

Daniel: to też ciekawostka, bo nie będąc w tej firmie można mieć wrażenie, że się używa jednego standardu, a tu wychodzi na to, że stack technologiczny jest całkiem duży, z tego co mówisz.

Maciek: Też trzeba wziąć pod uwagę, że Facebook to jest też Instagram, WhatsApp, Oculus, Messenger. Facebook to jest cała rodzina aplikacji, każda z tych aplikacji używa nieco innych technologii. Były to firmy, które Facebook po drodze kupował, więc są z nim mniej lub bardziej zintegrowane.

Sam Facebook jako strona korzysta w większości z PHP i JavaScriptu, z tym, że używamy naszej wewnętrznej wersji PHP, która różni się tym od zwykłej wersji, że da się jej używać. Wydaje mi się, że to jest opensource i nazywa się Hack (przypisek, tutaj o języku Hack, de facto wypuszczonym przez FB w 2014.)

Używamy też C, C++, bo tworzymy własny sprzęt. Używamy Scali, oczywiście Javy do Androida, używamy nawet Haskella. W zasadzie wszystkiego, Pythona też oczywiście sporo wykorzystujemy. Wiem, że Pythona i Django używamy bardzo mocno w Instagramie, także jakby ktoś chciał aplikować to właśnie tam.

Daniel: W jaki sposób pracują Developerzy, czy to bardziej Scrum, bardziej Waterfall czy coś pomiędzy, może Kanban? Jeżeli chodzi o samą metodykę pracy

Maciek: Zależy od drużyny. Facebook jest duży, każdy team ustawia się sam, jak chce. W moim teamie początkowo mieliśmy 3 osoby, więc w zasadzie nie używaliśmy niczego. Teraz powoli idziemy w kierunku Scruma, próbujemy poukładać to w sprinty, aby to lepiej zorganizować, ale z tego co się orientuję to niewiele teamów trzyma się w ścisły sposób jakiegoś ścisłego podejścia, np. czystego Scruma ze Scrum Masterem, codziennymi stand-up’ami, to się nie zdarza, trochę za duży overhead, aby po prostu robić rzeczy.

Daniel: czyli bardziej pracujecie zwinnie, ale nie trzymacie się żadnej metodologii. 

Maciek: To mogłoby być motto całego Facebooka. Mieliśmy kiedyś takie motto „move fast and break things”, które przez wiele lat było mottem FB, aczkolwiek uznali, że „break things” to jednak nie jest najlepsze motto. Teraz zmienili to na „move fast i build stable things(?)” jakoś tak. Ja wolę to starsze motto 🙂

Piotr: Czy w takim razie, biorąc pod uwagę to, że wiele musiałeś się uczyć na bieżąco, sporo siedziałeś po godzinach?

Maciek: Faktycznie na stażu było tak, że siedziałem dość długo i wychodziłem z biura czasami po 20:00. Ale to ze względu na to, że musiałem się bardziej postarać, pokazać, że zależy. To było raczej zrozumiałe. Teraz już tyle czasu nie spędzam na pracy w pracy, ewentualnie jak zostaję, to po to czysto for fun, z racji tego, że jest tutaj sporo rozrywek.

Piotr: Czy możesz pracować nad swoimi projektami na boku?

Maciek: Jeśli masz w głowie coś, co uważasz, że może się przydać FB, zawsze możesz porozmawiać o tym ze swoim managerem i nie będzie problemu, abyś zaczął to robić. Natomiast taki oficjalny sposób, w jaki wymyślamy nowe rzeczy, to są hackatony. Bardzo często, średnio raz na miesiąc, mamy hackatony z różnych dziedzin. Programistyczne party, gdzie jest 24h na stworzenie czegoś nowego. Facebook uwielbia hackatony, w zasadzie z każdej dziedziny co jakiś czas jest hackaton. Każdy, kto ma jakiś pomysł, może wziąć w nim udział i podczas hackatonu stworzyć prototyp czy MVP, a następnie go przedstawić, a także zorganizować ludzi, którzy później będą go wspólnie rozwijać.

Dla przykładu przycisk „like” na Facebooku powstał jako projekt zapoczątkowany na hackatonie, prawdopodobnie jednym z pierwszych.

Daniel: Ludzie techniczni, gdy zaczynają zajmować się czymś innym czasami wracają do programowania i dłubią w kodzie gdzieś tam z boku. Jak to jest w przypadku Marka Zuckerberga?

Maciek: Wydaje mi się, że jego czas jest dużo bardziej wartościowy, kiedy go wykorzystuje na zarządzanie ludźmi. Także nie mam takich informacji, ale wątpię.

Jest inna osoba, o której warto wspomnieć. Ci, którzy grali może kiedykolwiek w Dooma lub Quake’a – John Carmack, legenda Gaming industry aktualnie pracuje ze mną przy Oculusie. (przypis: główny programista przy takich grach jak Wolfenstein 3D, Doom, Quake – źródło) Jest CTO Oculusa i notabene projekt, nad którym skończyłem pracować miesiąc temu był zarządzany właśnie przez niego. Co ciekawe, John Carmack nadal aktywnie programuje. Mimo, że jest CTO Oculusa, jest w zasadzie najlepszym programistom Oculusa w tym momencie. On rzeczywiście z dnia na dzień bardziej programuje niż zarządza.

Daniel: Musi być duża przyjemność pracować dla kogoś, kto wie, co tak na prawdę jest do zrobienia. 

Maciek: Tak, to jest niewiarygodne. On jest rzeczywiście na zupełnie innym poziomie. Gdy widziałem kod, który on tworzył. On nie był ciężki do zrozumienia, ale był genialnie napisany. Takie rozwiązania, które on jest w stanie wymyślić, są po prostu niewiarygodne. On jest autorytetem i ma trochę inne zadania. Jest Tech Lead. Nie zarządza częściami biznesowymi, tylko pilnuje, żeby to wszystko się trzymało kupy. Sam się też do tego kodu osobiście dokłada bo właśnie cały czas programuje.

Niedawno ogłosiliśmy i wypuściliśmy w świat nową wersję naszego softu na Oculusa, właśnie pod przewodnictwem Johna Carmacka. Mieliśmy już od kilku lat stworzoną wersję panelu zarządzania do Oculusa w Unity, ale potem John Carmack postanowił stworzyć zupełnie nową wersję od zera.

I od zera, w zupełnie nowej technologii, w React VR zostało to napisane i to w kilka miesięcy. Działa sto razy lepiej niż ta stara wersja. Dużo wyraźniejsza, dużo szybka. Szacunek, za podjęcie tak dużego ryzyka, ponieważ nie wyglądało to na ewolucyjną zmianę, czyli stopniowe przejście z jednego na drugie, ze starej wersji na nową, tylko od razu skok na głęboką wodę, używając technologii, z której nikt wcześniej nie korzystał, to wszystko było prototypowe w tym momencie. I się udało.

Daniel: Co pracownicy Oculusa myślą o Google Cardboards, czyli tym papierowym odpowiedniku, do którego można włożyć smartfona i też pooglądać świat w 3D?

Maciek: Google Cardboard jest świetne! Im więcej osób korzysta w VR, tym lepiej dla nas. Chcemy ludzi przyzwyczajać do tej idei, bo jest to nowa technologia, także coś takiego, jak Google Cardboard, pozwoli ludziom nabrać smaku na VR. To może sobie każdy wydrukować, czy poskładać i wejść w świat VR. Być może jedna na sto osób pomyśli sobie – hej, to jest świetne, chciałbym spróbować czegoś lepszego – może wtedy zaczną szukać i dotrą do Oculusa. Więc wszystko co skłania ludzi do korzystania z VR jest dla nas świetne, ponieważ chcemy, aby jak najwięcej ludzi się z tą technologią zaznajamiało.

Piotr: Jak najdłużej miałeś założonego Oculusa, nie czujesz się zmęczony? 

Maciek: Kilka godzin i nie miałem problemu. To jest świetne do rozmów. Sprawdźcie sobie Facebook Spaces, to aplikacja na Oculus Rift, która pozwala się spotykać znajomym w VR. Mogę stworzyć sobie wirtualnego avatara samego siebie i mogę się spotkać w wirtualnej rzeczywistości, robiąc na przykład witrualnym telefonem, wirtualne selfie. 😉

Piotr: Czyli zamiast umówić się na mieście i spotkać się normalnie, robimy sobie avatara i nie wychodzimy z domu. To chyba nie jest właściwy kierunek… 🙂

Maciek: Pamiętaj, że nie zawsze się da. Moja rodzina, dziewczyna i znajomi są w Europie, więc pod tym względem Oculus może pomóc.

Piotr: Ok, w takich sytuacjach może być to pewnym ułatwieniem. Zastanawiam się po prostu, jak Facebook zaczyna dominować i wchodzić w coraz więcej aspektów naszego życia, czy powoli nie staje się takim drugim Skynetem z Terminatora. Co o tym sądzisz? Czy Facebook to Skynet (więcej) ? 🙂

Maciek: Cóż, idziemy powoli w tym kierunku. Co czwarta osoba ma konto na Facebooku, z którego korzysta co najmniej raz na miesiąc, a sam FB przekroczył 2 miliardy użytkowników.

Piotr: A sam VR? Kiedy według Ciebie stanie się naprawdę popularny?

Maciek: Za parę lat. Pamiętaj, że sprzedaż tego idzie już w miliony sztuk, także nie jest to tylko nowinka technologiczna, miliony osób korzystają z naszych head-set’ów na całym świecie.

Daniel: Jak myślisz, czy jest możliwość, że VR spowoduje, że ludzie przestaną używać zwykłych monitorów, przestaną używać telewizorów, tylko zaczną używać head-set’ów Oculusa do codziennej pracy?

Maciek: Jest to niewykluczone. Aktualnie cała branża VR jest mniej więcej w tym momencie, w którym telefony komórkowe były, gdy miały wielkość walizki, którą trzeba było ze sobą nosić. Mniej więcej tak to aktualnie wygląda. Spójrzmy jak telefony komórkowe rozwinęły się na przestrzeni ostatnich 20-30 lat i wyobraźcie sobie, jak branża VR i AR może się rozwinąć w ciągu następnych 20-30 lat. Całkiem możliwe, że za 10-20 lat head-set’y będą używane wszędzie i powszechnie używane do wszystkiego.

Co raz więcej socjalnych funkcji zaczyna się pojawiać w Wirtualnej Rzeczywistości, co jest świetne, bo to był jeden z głównych problemów, którzy ludzie z VR mieli, czyli właśnie ta samotność. W momencie, gdy zakładam okulary, to jestem sam. Nie ma tam moich znajomych, nie ma tam nikogo, nawet nie widzę tam ludzi, którzy są ze mną w jednym pokoju.  Więc poprzez dodawanie tych socjalnych funkcji do VR, sprawiamy, że ludzie chcą z tego korzystać więcej. Właśnie po to, aby pograć ze znajomymi, porozmawiać z krewnymi, którzy są gdzieś daleko. Właśnie to będzie sprawiać, że VR będzie przenikać coraz więcej sfer naszego życia.

Piotr: Już tak na zakończenie zatem. Powiedz, jakie umiejętności według Ciebie miały największe znaczenie, kiedy rekrutowałeś do FB, jak to oceniasz z biegiem czasu? 

Maciek: Pewność siebie, bycie wygadanym, i doświadczenie, doświadczenie, doświadczenie… Naprawdę, gdy ktoś chce znaleźć sobie jakieś dobre miejsce, aplikujcie, gdzie się da. Po prostu wytrenujcie te swoje umiejętności. Żadne książki do tego Was nie przygotują, po prostu jedźcie tam, umawiajcie się na jak najwięcej rozmów kwalifikacyjnych, online, w 4 oczy, składajcie aplikacje. Tylko w ten sposób wyszkolicie się w tym zagadnieniu. Na samym interview to już pewność siebie – czyli gdy dostajesz pytanie, na które nie umiesz odpowiedzieć, trzeba je przedstawić w inny sposób. Taka umiejętność przebrnięcia przez te części, których się nie zna, do tego, co się zna. Oczywiście umiejętności techniczne też są potrzebne, ale nie jakieś konkretne.

Na Oxfordzie studiowałem Computer Science, nie żadne Software Engeneering. Więc jakby samo programowanie nie było częścią sylabusa. Uczyłem się struktur danych, różnych algorytmów, best practices, ale samego programowania mieliśmy tam bardzo, bardzo niewiele. Także w zasadzie programować się uczyłem na moim pierwszym stażu. Byłem bardzo obcykany teoretycznie, samego programowania jako takiego nie znałem, ale udało mi się dostać do Okado na pierwszy staż (internetowy sklep spożywczy). Tam się uczyłem Javy. Potem, z jej umiejętnością aplikowałem na kolejne staże. Było Red Gate Software, gdzie z kolei programowałem C#. W momencie gdy aplikowałem, C# nie znałem, tak samo jak nie znałem za bardzo Javy i dopiero na tym stażu się tego uczyłem.

Potem, jak aplikowałem do Facebooka, zostałem przydzielony do drużyny zajmującej się aplikacjami na iOS, tylko kiedy zaczynałem, to ja iPhone’a nigdy jeszcze w ręku nie miałem. Więc to też było dość ciekawe doświadczenie, bo nie tylko musiałem się nauczyć Objective C, nie tylko musiałem się nauczyć programowania na iOS, ale musiałem poznać, o co w tym iOS chodzi. Zostałem przydzielony do takiej drużyny, więc – ucz się.

Podsumowując moje luźne myśli – umiejętność szybkiego uczenia się jest bardzo przydatna. Mniej może sama konkretna znajomość poszczególnych języków, bo nie ma się żadnej gwarancji, że firma, do której chce się dostać, właśnie tego języka używa. Ale jeśli ktoś ma dobre podstawy teoretyczne i umie się bardzo szybko uczyć, to znajdzie się wszędzie. Goldman Sachs używa swojego własnego języka programowania, także tutaj nie da się w żaden sposób do tego przygotować.

——————-

Koniec części 2. Mam nadzieję, że materiał okazał się dla Ciebie interesujący. Całość wywiadu możesz posłuchać w poniższym materiale, gdzie jest dużo więcej na temat życia w Dolinie Krzemowej i rekrutacji do wielu firm technologicznych w USA:

Zapraszam Ciebie również na startup, który rozwijam – justjoin.it – to mapa rynku pracy i największy job board z ogłoszeniami dla polskiej branży IT. Tylko w ciągu ostatniego miesiąca, ponad 250 firm dodało ponad pół tysiąca ogłoszeń. Także prawdopodobnie serwis będzie mógł pomóc również Tobie, bo zwyczajnie daje największy wybór w Polsce, jeżeli chodzi o pracę w IT. 🙂

Zapraszam:

Zapraszamy do dyskusji