🎯 Definicja
Imperatywność to styl programowania (lub zarządzania infrastrukturą), w którym mówisz komputerowi JAK ma coś zrobić (“Idź prosto, skręć w lewo, otwórz drzwi”). Deklaratywność to styl, w którym mówisz CO chcesz osiągnąć (“Chcę być w pokoju za drzwiami”), a system sam decyduje, jak to zrobić.
🔑 Kluczowe punkty
- Imperatywny (How): Python, Bash, Java, Airflow (klasyczny). Pełna kontrola, ale więcej kodu i błędów.
- Deklaratywny (What): SQL, HTML, Terraform, Kubernetes, dbt. Mniej kodu, system zajmuje się “brudną robotą”.
📚 Szczegółowe wyjaśnienie
Przykład techniczny: Chcemy 3 serwery. Podejście Imperatywne (Skrypt Bash):
- Sprawdź, czy jest serwer 1. Jeśli nie, utwórz.
- Sprawdź, czy jest serwer 2. Jeśli nie, utwórz.
- Sprawdź, czy jest serwer 3…
Podejście Deklaratywne (Terraform):
count = 3Silnik Terraforma sam sprawdzi stan obecny (np. jest 1 serwer) i dołoży brakujące 2.
W Inżynierii Danych przechodzimy z imperatywnego kodowania (Python scripts w Airflow) na deklaratywne modele (dbt, SQL), bo są łatwiejsze w utrzymaniu.
💡 Przykład zastosowania
SQL jest idealnym językiem deklaratywnym.
Piszesz: SELECT * FROM Users WHERE age > 18.
Nie piszesz: “Otwórz plik, przejdź do wiersza 1, sprawdź wiek, jeśli > 18 to dodaj do listy, przejdź do wiersza 2…“. Baza danych sama wybiera optymalny algorytm (Index Scan vs Full Scan).
📌 Źródła
- “Fundamentals of Software Architecture”.
👽 Brudnopis
- Imperatywność daje kontrolę (możesz zoptymalizować każdy krok), deklaratywność daje szybkość developmentu i czytelność.
- Nowoczesny Data Stack dąży do deklaratywności (dbt, K8s).