Co robi główny programista Quake’a w Oculusie? Realia pracy w Facebooku

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

Spis treści

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łaśnie, 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.

ZOBACZ TEŻ:  Polscy programiści na świecie - anegdoty z życia w Singapurze

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.

Zapraszamy do dyskusji

Patronujemy

 
 
More Stories
Do czego w DDD wykorzystać projekty i namespace’y z C#?