Wstęp - programowanie dla DevOpsa
Pewnego dnia siedząc przed monitorem, zacząłem zastanawiać się i myśleć, że jestem tym programistą, chcę zostać DevOpsem.
DevOps też musi programować.
Ale w czym?
Pierwsza myśl: Go albo Python. Co wybrać? Który lepszy i bardziej potrzebny? A może oba?
No właśnie. Jeśli masz podobną rozkminę, to dobrze trafiłeś.
Ten wpis będzie krótką, konkretną i DevOpsową analizą języków programowania, bez lania wody, za to z praktyką i życiem.
Python – klasyk automatyzacji
Python to taki ziomek, który zawsze ogarnia. Prosty, elastyczny, czytelny jak dokumentacja z przykładami. Wpisujesz coś w Google – ktoś już to zrobił w Pythonie. A jeśli nie to znaczy że źle zapytałeś, albo źle wymyśliłeś problem
DevOpsi pokochali go za jedno, wszystko da się nim zautomatyzować. Backupy? Proszę. API? Czemu nie. SSH? A jakże. Jenkins? Proszę bardzo. Bierz Pythona i pisz.
Największym atutem są gotowe biblioteki. Nie musisz odkrywać koła na nowo. `boto3` do AWS-a, `paramiko` do SSH, `requests` do wszystkiego innego.
Do tego dochodzi Ansible, czyli de facto Python pod maską. Nawet jak nie programujesz, to i tak z Pythona korzystasz.
No i jeszcze jedno. Python wybacza błędy. Jak coś nie działa, to sypnie stacktrace'em, ale nie zniszczy ci dnia. Dobre na start.
Go – młody który nie wie, że czegoś się nie da
Go to inny klimat. Nie taki kumpel jak Python, raczej ten cichy koleś z kluczem do serwerowni. Niewiele mówi. Przyjdzie, zrobi swoje i wszystko działa szybko, stabilnie i bez marudzenia.
Ma jedną supermoc: kompilujesz i masz jedną binarkę. Bez zależności, bez środowiska, bez „ale u mnie działa”. Po prostu działa – na Raspberry Pi, w Dockerze, w chmurze, nawet na mikrofalówce.
Właśnie dlatego Kubernetes, Docker, Terraform i Prometheus zostały napisane w Go. To język, który nie przeszkadza, robi robotę i schodzi z drogi.
Go nie ma miliona bibliotek jak Python, ale to, co ma, jest solidne. Do tego struktury, interfejsy, goroutines. Jest idealny do tworzenia CLI, agentów i narzędzi DevOpsowych.
Trochę sztywny i wymagający, ale jak już się z nim dogadasz, to będziecie razem deployować jak dzicy.
Przykłady z życia: ten sam problem w Pythonie i Go
Załóżmy prostą sytuację. Masz endpoint i chcesz sprawdzić, czy odpowiada. Niby banał, ale klasyczny case DevOpsowy. Monitoring light edition. Sprawdźmy, jak wygląda to w Pythonie i Go.
Python
import requests
def check_service(url):
try:
r = requests.get(url, timeout=5)
if r.status_code == 200:
print(f"OK: {url}")
else:
print(f"FAIL: {url} - status {r.status_code}")
except Exception as e:
print(f"ERROR: {url} - {e}")
check_service("https://k8s.io")
Prosto, krótko, czytelnie. Jak coś nie działa, rzuca wyjątek. Jak działa, to działa. Typowy Python.
Go
package main
import (
"fmt"
"net/http"
"time"
)
func checkService(url string) {
client := http.Client{
Timeout: 5 * time.Second,
}
resp, err := client.Get(url)
if err != nil {
fmt.Println("ERROR:", err)
return
}
defer resp.Body.Close()
if resp.StatusCode == 200 {
fmt.Println("OK:", url)
} else {
fmt.Printf("FAIL: %s - status %d\n", url, resp.StatusCode)
}
}
func main() {
checkService("https://k8s.io")
}
Trochę więcej pisania, ale za to działa błyskawicznie, nie potrzebuje środowiska i można to wrzucić do Dockera bez żadnych pipów czy zależności.
Python vs Go – konkretne porównanie
Czas na szybkie zestawienie najważniejszych różnic. Co działa lepiej w jakim kontekście? Zobacz:
| Cecha | Python | Go |
|---|---|---|
| Szybkość działania | Wolniejszy, interpretowany | Bardzo szybki, kompilowany |
| Deployment | Wymaga środowiska + zależności | Jedna binarka, bez zależności |
| Łatwość nauki | Przyjazny, elastyczny | Sztywniejszy, ale logiczny |
| Ekosystem | Ogromna liczba bibliotek | Mniejszy, ale stabilny i szybki |
| Społeczność | Masowa, mnóstwo tutoriali | DevOps/SRE, bardziej techniczna |
| Typowe zastosowania | Skrypty, API, automatyzacja | CLI, agenty, narzędzia DevOps |
Python to komfort i szybkość pisania. Go to wydajność i gotowość do działania. Oba mają swoje miejsce w DevOpsowym wszechświecie.
Czy warto znać oba?
Krótko? Tak.
Długo? Python to twoje turbo do codziennych zadań – coś trzeba zeskryptować, zintegrować, przetestować? Wjeżdża Python i robi robotę.
Go to twoja zbroja na produkcję, budujesz coś, co ma działać bez kombinowania. Bez runtime’u, bez zależności. Tak że jak na emeryturze zerkniesz na aplikacje na maszynce to dalej będzie śmigać
W praktyce, możesz używać Pythona do szybkich MVP, automatyzacji, a potem przepisywać krytyczne rzeczy do Go, jeśli będą wymagały większej wydajności, bezpieczeństwa i solidności.
I właśnie to robi wielu DevOpsów. Jednym językiem zaczynają, drugim kończą. Oba języki się uzupełniają, a nie wykluczają.
Podsumowanie – DevOps to nie język, to filozofia
Na końcu dnia nie chodzi o to, czy znasz Pythona czy Go. Chodzi o to, czy potrafisz rozwiązywać problemy. Czy budujesz narzędzia, które działają. Czy rozumiesz infrastrukturę, automatyzację, procesy. A język? To tylko kolejne narzędzie w twojej DevOpsowej skrzynce.
Python – prosty, szybki w pisaniu, idealny do automatyzacji, integracji i pierwszych kroków.
Go – mocny, wydajny, świetny do narzędzi, agentów i wszystkiego, co ma latać na produkcji.
Jeśli zaczynasz, bierz Pythona. Jeśli budujesz coś większego, naucz się Go. A najlepiej? Używaj obu. Zależnie od potrzeby.
Bo DevOps to nie język. To sposób myślenia.