Trino i jak powstało, • 18 lekcji z 2 lat pracy w projekcie: • czego dowiedziałem się o sobie wracając do programowania, • jak wygląda praca w środowisku open-source, • jak programuje się w projekcie czysto technologicznym • Czy było warto i co dalej? • Q&A 3
dosyć: • powtarzalności problemów, • hype’u na technologie, • odkrywania koła na nowo, • procesów zamiast działającego oprogramowania, • nadmiaru komunikacji i polityki, • braku zauważalnych efektów swojej pracy. • Szukałem: • frajdy i satysfakcji z tworzenia, • rozwiązywania nietrywialnych problemów, • poczucia, że mam na coś wpływ, • merytoryki a nie retoryki. 4
wsparcie Presto 2017 Założenie Starburst Data 2018 Powstaje PrestoSQL 2019 Powstaje Presto Software Foundation 2020 Facebook zastrzega Presto 2021 Rebranding na Trino
projekt ma inną specyfikę, • Różne segmenty IT wymagają innych umiejętności i wiedzy, • Teoria a praktyka to dwa różne światy. Rozwiązanie: być cierpliwym i otwartym na zweryfikowanie przyzwyczajeń, przekonań i doświadczeń. 11
sposób rozwiązywania problemów, • nazewnictwo, konwencje, niepisane reguły, • sposób i styl review maintainer-ów, • kierunek rozwoju projektu, • kto za co odpowiada. Pro hint: czytając cudzy kod nie musimy w całości rozumieć szczegółów implementacyjnych.
i poziomy znajomości języka, • Wiele stref czasowych —> mniejsza dostępność, dłuższe code review, • Dłuższy onboarding —> poznanie projektu zajmuje więcej czasu, Dlatego: • Więcej cierpliwości i zrozumienia dla siebie i innych, • Warto pracować nad kilkoma zagadnieniami równocześnie, • Jasne komunikowanie oczekiwań podczas Code Review, np. w Trino: • nit (nitpicking): czepiam się, ale zrób jak uważasz, • change requested: uważam, że to powinno być zmienione, • AC (awaiting comments): zaadresowałem komentarze, czekam na kolejne.
z których korzystamy zawierają błędy, • Dokumentacja nie opisuje faktycznego działania kodu, • Istnieje sfera “niezdefiniowanych zachowań” o której dokumentacja milczy. Jak sobie z tym radzić: • Debuggowanie, • Techniki reverse engineeringu, • Weryfikowanie u źródła w kodzie bibliotek, • Duża doza sceptycyzmu (sprawdzam!).
nie wymaga doświadczenia. • README dla programisty zawierające: • wymagania, np. wersja Javy czy Dockera, • jak uruchomić aplikację i testy, • konwencje i zasady dla kontrybucji, • znane problemy i workaroundy dla nich, • Self-contained zależności i tooling (gradlew, mvnw), • Bezproblemowy import do IDE, • Szybka i powtarzalna kompilacja, • Raportowanie w CI
rezultat. Chcę: • Uruchomić projekt z IDE, • Testować i debuggować zmieniany kod, • Zmieniać konfigurację uruchomieniową, • Wchodzić w interakcję z systemem poprzez klienta/UI, • Móc zrobić “prawdziwe” demo, • Otrzymać feedback na code review, • Mieć satysfakcję z tego co zrobiłem :)
skauta, • Syndrom wybitej szyby, • Spłacanie długu technicznego itp, W praktyce: • Sprzątaj kod przy każdej okazji, • Wydzielaj niezależne poprawki do osobnych PR, • Często podbijaj wersje zależności, • Rejestruj dług techniczny (@TODO)
• pozyskanie kontrybutorów, • onboarding i budowanie wiedzy “Enhancement”, “idea”, “bug” • rozwój projektu short-mid-term. • zaangażowanie kontrybutorów, • budowanie wiedzy eksperckiej “Roadmap” • rozwój projektu long-term, • budowanie fundamentów dla innych, • definiowanie wizji projektu Dla każdego, coś miłego :)
rozwiązanie? serio? yeah! Cel: Optymalizujemy pod długoterminowy rozwój, utrzymanie i czytelność kodu. Preferujemy kod sprytny (ang. clever) niż mądry (ang. smart)
kodowe, np. UTF8/16/32, • Obsługa wielu stref czasowych, • Zarządzanie pamięcią i operacje bitowe na danych, • Wektoryzacja i batchowanie operacji, • Kryptografia i szyfrowanie danych, • System typów i typy parametryczne, • Kompresja, indeksowanie i kodowanie danych, • Generowanie i instrumentacja bytecode’u w locie.
bój się myśleć inaczej, • Korzystaj z doświadczenia innych, • Wytyczne i praktyki to nie reguły, • Coś co działało wczoraj, nie musi zadziałać dzisiaj, • Nie (de) optymalizuj przedwcześnie, • Nie przywiązuj się do tego co tworzysz, • Patrz daleko poza horyzont.