9 stycznia 2021

Data Engineering vs. Software Engineer - co możemy zyskać z praktyk BigData w roli Software Engineer?

Kiedy myślimy o programowaniu, wówczas rola inżyniera oprogramowania (ang. Software Engineer) jest jednym z pierwszych zawodów, które przychodzą nam na myśl. Tak wiele lat mówiło się o tzw. deweloperach, czy też full-stack developers, że mamy na codzień mieszankę różnych ról, która jeśli podsumujmemy sobie dzień pracy, robią identyczne rzeczy tzn. tworzą oprogramowanie.

Świat IT oferuje również wiele specjalizacji, które dotykają poddziedzin i szczególnych tematów wokół różnych aspektów, jakie na codzień robi rola inżyniera oprogramowania. W tym wpisie przyjżymy się porównaniu ról Software Engineer i Data Engineering (Inżynieria Danych). Zastanowimy się, dlaczego warto zainteresować się tą dziedziną skupioną głównie wokół przepływów, gromadzenia i transformacji danych? Jakie korzyści może przynieść Software Engineerowi rozwinięcie pojęć, które są codziennością dla roli Data Engineer?

Software Engineer vs Data Engineer (BigData Engineer)


Software Engineer tworzy oprogramowanie, dba o jego jakość, testuje i wdraża. Głównym celem tej roli jest dostarczenie funkcjonalnego, wydajnego i skalowalnego kodu.

Data Engineer (BigData Engineer) skupia się na projektowaniu, budowie, integracji i zarządzaniu dużymi zbiorami danych. Osoba w tej roli pracuje nad optymalizacją architektury danych, przepływem informacji oraz przetwarzaniem danych w czasie rzeczywistym.

Porównanie narzędzi


Obie role korzystają z narzędzi, które ułatwiają pracę nad kodem i danymi (bardzo ogólna lista - celowo zaweżona, aby wyrobić sobie pogląd): 
  • repozytoria kodu typu: GitHub, GitLab
  • obie role korzystają z systemów kontroli wersji do zarządzania kodem.
  • bazy danych: MySQL, PostgreSQL - podczas gdy Software Engineers skupiają się na integracji, Data Engineers pracują nad optymalizacją i bazy danych SQL oraz noSQL stanowią codzienność.
  • automatyzacja: Jenkins, Travis CI - obie role korzystają z narzędzi CI/CD do automatyzacji procesów.
  • testowanie: JUnit, PyTest - testowanie jest kluczem dla obu ról, ale w kontekście różnych zastosowań.
  • Big Data: Hadoop, Spark - głównie narzędzia Data Engineers, ale Software Engineers powinni je znać i często bywają częścią projektów, w których korzystają z Data Warehouses (magazynów danych) oraz object-storage (systemów przechowywania obiektów np: AWS S3, Google Storage, Azure Blob Storage, itp)

Wysoka jakość kodu i CI/CD


W obu rolach kluczowe jest dbanie o jakość kodu. Narzędzia takie jak linters, code reviews i testy jednostkowe, testy integracyjne, testy rozmyte, testy end to end są niezbędne do codziennej pracy nad jakością rozwiązań. 

Procesy CI/CD są stosowane zarówno przez Software Engineers, jak i Data Engineers, ale w przypadku tych drugich skupiają się one bardziej na przetwarzaniu danych i analizie w czasie rzeczywistym.
Spotkałem się wielokrotnie z przykładami, kiedy inżynier danych nie miał podstaw inżynierii oprogramowania, ale dzięki znajoności metod analitycznych efeky jego pracy były jak najbardziej na oczekiwanym poziomie. Dla roli Data Engineer liczą się gotowe narzędzia i usługi SaaS. Dla roli Data Engineer lub DataOps bardziej liczy się tworzenie dedykowanych narzędzi, czy platform przetwarzania danych.

Nie zawsze Data Engineer musi rozwiązywać swoje zadania poprzez kodowanie w wielu językach programowania. Spotyka się stanowiska DE, gdzie liczy się zaawansowana znajomość dialektu SQL i wiele zadań dotyczących batchingu danych oraz streamingu udaje się dowozić z oczekiwaną skutecznością. Ba, często nie oczekuje się od roli DE, że wytworzy narzędzie, czy framework - firmy są bardziej skłonne kupić gotowe narzędzie lub wdrożyć platformę do przetwarzania danych. Wiadomo, zależy od skali i sytuacji. 

Większość dużych firm posida BigData, co wiąże się z tym, że SaaS i inne gotowe rozwiązania komerycyjne nie dają rady, lub ich koszt utrzymania to 9 zer! Spotkałem się wówczas z pozytywną praktyką reużywania narzędzi z świata Open Source i robieniu własnych zmian, czasami dzieląc się ze społecznością. To jest ciekawsza opcja dla roli DE moim zdaniem i doceniam organizacje za takie ambicje, aby dokładać swoją cegiełkę dla społeczności Open Source.

TOP10 narzędzi dla ról Software Engineer oraz Data Engineer

Poniżej przedstawiam bardzo wąski wycinek narzędzi, aby zwrócić uwagę i nakierować, jakie współczesne narzędzia mogą być pomocne w wymienionych rolach. Warto brać poprawkę na fakt, że z miesiąca na miesiąc zestaw narzędzi zmenia się dość silnie i warto podążać za trendami. 

Dobre praktyki często mówią nam, że jeśli narzędzie jest stare i sprawdzone, to warto go używać. Dzisiaj ilość rozwiązań SaaS oraz ML burzy wyżej wymienioną koncepcję - zachęcam do eksperymentowania z najnowszymi narzędziami, gdyż mogą być oparte o rozwiązania uczenia maszynowego (ang. Machine Learning), przez co wspierają pracę inżynierów IT, wyszukując np. najczęstsze pomysłi i serwując auto-korektę. To wpływa pozytywnie na jakość rozwiązań oraz czas dostarczania.

Tak prezentują się zestawy narzędzi dla ról:

Software Engineer:

  1. GitHub
  2. Docker
  3. Kubernetes
  4. IntelliJ IDEA / Visual Studio Code
  5. Jenkins / Github Actions / GoCD
  6. JIRA - Scrum / Kanban baord
  7. Slack / Discord
  8. Sonarcube / Sonar - code quality checker 
  9. AWS / Google Cloud / Azure
  10. Terraform / Pulumi / CDK
Zasadniczo w roli SF liczą się dość silnie rozwiązania serverless, czyli takie, gdzie inżynier nie musi niczego wiedzieć o sieci, serwowaniu API a zwyczajnie buduje funkcje i wdraża do clouda rozwiązania, które mają od razu podpięty monitoring. Tak, tutaj pewnie zastanawiacie się, o jakim inżynieże myślę - wyjaśniam, takim regularze, który potrafi dowozić rozwiązania na czas i orientuje się, że sprawność nie zawsze oznacza debugowanie własnego serwera www :-)

Oczywiście rola SF jest znacznie szersza i często jest bazą do wszelkich innych ról w IT np: może być wymagana dla Data Engineer w większych firmach. Jest to związane z tym, że niektóre organizacje tworzą i utrzymują swoje frameworki lub/i platformy developerskie. Brak wiedzy o koncepcjach i wzorcach SF zdecydowanie utrudni współpracę.  

Jest wiele miejsca pracy, gdzie od roli SF wymaga się zaawansowaj znajomości konkretnych technologii oraz doświadczenie np: ze specyficznym sprzętem (ang. hardware). Mnogość kombinacji powoduje, że możemy w tej roli odnaleźć wiele ciekawych miejsc pracy oraz wyzwań zawodowych.

Data Engineer:

  1. S3 / Google Storage / Azure Blob storage - object-storage
  2. Spark
  3. Hadoop
  4. Kafka
  5. Airflow
  6. Hive / Presto
  7. Elasticsearch / SOLR / vector databases
  8. Terraform / Pulumi / CDK
  9. Snowflake / Google BigQuery / AWS Redshift
  10. Data governance & data security solutions
Większość narzędzi Open Source, które są używane przez rolę Data Enginner (oraz Machine Learning Engineer) znajdziesz tutaj (ang. LF AI & Data Foundation Interactive Landscape) - to jest lista + interaktywna macierz narzędzi rekomendowych przez Linux Foundation. Są w niej opisy oraz linki do projektów. Jeśli ktoś w roli DE opanuje skutecznie ok. 20% tych narzędzi, to może śmiało nazywać się Seniorem :-) Liczba narzędzi jest zacna i każde narzędzie to dość spory projekt Open Source ze swoją historią, repozytorium i społecznością!

W roli Data Engineer liczy się często rozumienie architektury przepływu danych w całej organizacji, nie tylko w jednym zespole. Taka umiejętność daje moce optymalizacji zarówno zasobów (CPU/RAM/storage) w przetwarzaniu danych (np: przy pomocy tzw. pipelines) jak i pozwala szerzej spojrzeć na potrzeby analityczne. Nie zawsze rola DE ma 

Wymagane kompetencje i cechy dla omawianych ról

Software Engineer:

  • Zrozumienie architektury systemów (obecnie głównie opartych o publiczne cloudy: AWS, GCP, Azure, Oracle, itp)
  • Umiejętność debugowania (wyszukiwania nietrywialnych powodów, dlaczego oprogramowanie, czy system opearacyjny reaguje na nasz kod w specyficzny sposób - szukanie błędów w kodzie i integracjach z innymi usłygami)
  • Znajomość różnych języków programowania
  • Umiejętność pracy w zespole (szczególnie w zwinnych metodach pracy t.j. Scrum, Kanban, XP, itp)
  • Zgłębienie protokołów: HTTP, GraphQL, gRPC, ptotobufitp.
  • Znajomość koncepcji telemetrii i obserwacji pracy usług i aplikacji; koncepcja Service Mesh
  • Orientacja w OWASP TOP 10 i bezpieczeństwie wokół web/mobile oraz integracji API

Data Engineer:
  • Rozumienie przepływu danych
  • Rozumienie koncepcji t.h. batching, streaming, 7V, data lake, delta lake, lakehouse, warehouse, distributed computing, object storage, Data Mesh, Data Quality, Data Governance, ...
  • Umiejętność pracy z dużymi zbiorami danych (np: 100 TB+)
  • Znajomość specjalistycznych narzędzi Big Data (Hadoop, Spark, Snowflake, S3 API, IoT analytics tools)
  • Znajomość matematyki i statystyki (podstawy analityki lub/i Data Science)
  • Znajomość wzorców integracyjnych (np: EIP - Enterprise Integration Patterns)
  • Znajomość koncepcji telemetrii i obserwacji pracy usług BigData. Szczególnie skupienie na kosztach przetwarzania danych oraz monitoringu zdarzeń w procesach przetwarzania danych, alertowanie sytuacji krytycznych do właścieli obszarów danych.
  • Pogłębiona wiedza o wydajnych formatach danych t.j. HDFS, AVRO, parquet, protobuf, IceBerg itp.
  • Umiejętność odnajdywania w katalogach danych relacji pomiędzy tabelami/polami oraz wartości, które mogą potencjalnie zwiększyć wartość - od strony jakości danych - dla wdrażanych rozwiąń 

Podsumowanie


Dla roli Software Engineer, ścieżka Data Engineer jest więcej niż tylko nowym zestawem narzędzi. To rozszerzenie horyzontów, nowe wyzwania i możliwość pracy z przy interesujących zbiorach danych.
Zdecydowanie spojrzenie w stronę chmur publicznych i komponentów z kategorii data, AI, ML i BigData, których są dziaiaj dziesiątki a niebawem pewnie będą setki.

Jeśli jesteś Software Engineerem i myślisz o rozwoju, pomyśl o BigData. Twoje umiejętności programistyczne w połączeniu z wiedzą o danych otworzą przed Tobą drzwi do fascynującego świata Big Data. Nowe narzędzia do integracji i transformacji danych, to ciekawy kawałem inżynierii oprogramowania, który za pewne poszerzy Twoje horyzony i zestaw umiejętności zawodowych.

Jeśli jesteś praktykującym Software Engineerem czy Data Engineerem, podziel się swoimi przemyśleniami i doświadczeniami w komentarzach.

Brak komentarzy: