Skupmy się na kilku najbardziej popularnych.
Data engineer musi być bardzo dobry w backendzie, musi znać przynajmniej jeden z języków: Python, Java, C++, SQL, ale dobrze by znał co najmniej 2 z nich. Dość często frontendy i backendy są napisane w Pythonie, ale pewne kawałki kodu trzeba zoptymalizować w Javie czy C++. Dodatkowo z dużym prawdopodobieństwem będziesz potrzebować SQL-a, bo dane trzeba pobrać i wrzucić. Również potrzebna będzie znajomość takich narzędzi jak Hadoop, EML, Spark, Kafka, związanych z big data.
Jak pokazuje doświadczenie, przydałaby się znajomość frontendu – nie musisz być ekspertem, ale potrzebna bywa podstawowa znajomość, żeby czasem coś zmienić, dodać przycisk, szczególnie jeśli chodzi o JavaScript. Zacząłem pracować z JavaScriptem ponad 10 lat i to co się działo wtedy, a to co się dzieje teraz, to są zupełnie różne światy. Teraz ten JavaScript trochę wariuje, jeżeli chodzi o ilość bibliotek, którą musisz wciągnąć, żeby zrobić Hello World, a z drugiej strony podają pełne wyjaśnienia dlaczego akurat tak się dzieje i warto być z tym na bieżąco.
Data engineer jest odpowiedzialny za to, żeby zbudowany model dostarczyć na produkcję i żeby on był dostępny, skalowalny. Jest również odpowiedzialny za to, żeby reagować na pojawiające się błędy. Jeżeli chodzi o obszary, które warto znać, ale niekoniecznie trzeba być w nich ekspertem, to z pewnością jest to uczenie maszynowe. Prawdopodobnie przydałoby się mu, żeby kojarzył, co to jest ML, być może fajnie by było, żeby zbudował chociażby jeden czy dwa modele i wtedy ta wiedza będzie lepiej zintegrowana.
Zwykle data engineerami zostają ludzie, którzy programują i później przechodzą na ML, bo to jest większe wyzwanie niż robienie stron www. Gdy pracujesz 5-10 lat, to w pewnym momencie zaczyna Cię to nudzić, bo nic nowego się nie pojawia i wiesz, co trzeba robić. Ja starałem się wtedy na przykład słuchać jakąś książkę, by mój umysł był bardziej pochłonięty nową wiedzą, z ta żmudna praca działa się jakby automatycznie. I to jest dobry moment, by przejść do roli data engineera, bo jest bardziej ambitna.
Kolejną rolą, którą omówię jest
ML engineer. Od tej osoby spodziewamy się, że będzie dość mocno ukierunkowana na to, w jaki sposób rozwiąże problem czy dostarczy rozwiązania. Również bardzo ważna jest komunikacja na odpowiednim poziomie. Komunikacja w ogóle jest bardzo trudnym aspektem dla osób technicznych i na tym osobiście wiele razy się potknąłem i później pracowałem nad tym, by nauczyć się lepiej wyjaśniać różne tematy. Warto zainteresować się storytellingiem. Komunikacja to sprawa kluczowa, bo może się okazać, że zbudujesz bardzo fajny model, bardzo fajnie będzie to wyglądało na liczbach i będziesz w stanie to zinterpretować, ale nikt poza tobą nie będzie w stanie tego odczytać, a ostateczna decyzja jest podejmowana przez ludzi z biznesu. Jeżeli nie jesteś im w stanie wyjaśnić, to już przegrałeś na starcie. Druga rzecz to uczenie maszynowe, przy czym tutaj nie chodzi o to, że musisz tworzyć własne algorytmy – Twoim zadaniem jako inżyniera jest wziąć wiedzę, który jest dostępna, umieć ją w odpowiedni sposób zastosować, połączyć to wszystko, żeby działało i mniej więcej tyle. Musisz wiedzieć, jakie są modele, w jaki sposób można je zwalidować, sprawdzić, czy działają poprawnie. Jeżeli chodzi o
stack techniczny to Python albo R, to są takie dwa wiodące języki. Ja skupiam się na Pythonie, bo wydaje mi się, że to jest takie bardzo pragmatyczne podejście. Mówiąc o Pythonie, wymienię kilka dodatkowych bibliotek: Jupyter, NumPy, Pandas, Scikit-Learn, ewentualnie Matplotlib. Mając taką wiedzę, można powiedzieć, że możesz już pracować jako ML engineer. Tu wymagania są różne niż dla data engineera.
Jeżeli chodzi o wiedzę, która byłaby przydatna, ale niekoniecznie musisz być w niej ekspertem, to warto wiedzieć, w jaki sposób zarządzać kodem, jak działa backend, bo rolą ML engineera jest właśnie dostarczanie, budowa prototypów, weryfikacja pomysłów, hipotez. I zwykle taka osoba nie wdraża modelu na produkcję, robi to data engineer, ale dobrze byłoby, aby osoby na obu tych stanowiskach rozumiały te dwa światy – by ML engineer rozumiał, o co chodzi na backendzie i pomagał we wdrożeniu, a data engineer rozumiał, o co chodzi w ML.
Trzecią rolą, która dość mocno się różni od poprzednich, nazwałem
ML researcher, może się również nazywać trochę inaczej. Tutaj bardzo ważna jest przede wszystkim twarda wiedza teoretyczna na temat uczenia maszynowego, statystyki, matematyki, fachowa umiejętność czytania i pisania publikacji. Taka osoba musi pochłaniać te publikacje „na śniadanie". Jego celem jest kombinowanie, co by jeszcze można było zrobić, żeby te model działały jeszcze lepiej. Ta osoba niekoniecznie buduje prototypy, ale dość często skupia się na tworzeniu syntetycznych zbiorów danych i na nich pracuje. Ta rola jest dość często spotykana w środowisku akademickim, chociaż w nim jest za bardzo teoretyczna. W DeepMind, Facebooku czy Google Brain próbują łączyć to również z biznesem – nadal jest nacisk na
research, badania, ale z drugiej strony te badania ostatecznie będą rozwiązywać problemy biznesowe.
Jaka wiedza przydałaby się takiej osobie? Generalnie takie osoby zwykle nie są zbyt mocne w programowaniu, a przydałoby się, żeby umiały trochę kodować czy hardkodować. Jeśli taka osoba potrafi tylko pisać publikacje językiem matematycznym, to już traci, bo w uczeniu maszynowym, przynajmniej w obecnej fazie, jest wyprzedzany przez matematyków i są konkretne rzeczy, które działają, dlatego że ktoś inny sprawdził, że taka kombinacja faktycznie działa. Dlatego uważam, że taka osoba jednak musi kodować, to może być taki hardkoding, że ciężko go będzie odczytać, nie będzie tam dobrych praktyk, ale na tym poziomie to nie jest aż takie kluczowe.
Wymieniłem trzy role, ale nie jestem w stanie się wypowiedzieć o wszystkich rolach, zwłaszcza o ML research, bo nigdy się tym nie zajmowałem. Jeżeli chodzi o pracę w DeepMind, to nagrałem
odcinek Biznes Myśli z Mateuszem, więc jak ktoś rozważa na poważnie, by iść w tym kierunku, to bardzo polecam go posłuchać – bo w nim były bardzo praktyczne porady, między innymi taka, że koniecznie musisz się zaangażować na jednej z dobrych uczelni, najlepiej zagranicznej, chociaż w Polsce czasem trafiają się naprawdę fajni mentorzy, ale to niestety jest rzadkością. Taki mentor musi faktycznie być na tyle zaawansowany, żeby pomóc Ci rozwinąć swój talent, mało tego, musi mieć również odpowiednie kontakty, żebyś nie tylko siedział w tym lokalnym środowisku, ale również miał możliwość wyjechać chociaż na krótkie staże, na przykład do Stanford czy Oxfordu i dzięki temu się rozwinąć.
Więc na temat ML research nie będę teraz mówić za wiele, bardziej skupię się na ML engineer. To jest ten obszar, na którym najbardziej się skupię, jeżeli chodzi o uczenie maszynowe, wspomnę też o data engineer.