Kembali ke Python

Kembali ke Python
Photo by Rubaitul Azad / Unsplash

Setelah hampir 2 tahun menulis kode dengan bahasa Go, rasa-rasanya saya perlu menyegarkan kembali kebiasaan menulis kode untuk Python.
Bukan, bukan karena saya sudah tidak suka dengan Go, saya masih menyukainya dan mungkin menjadi bahasa utama di era agentic AI, karena menurut saya Go adalah salah satu bahasa terbaik untuk tools tersebut. Saya perlu menyegarkan kembali ingatan Python saya karena dalam waktu dekat sepertinya saya akan banyak menulis kode dengan Python lagi.

Jadi apa yang perlu disegarkan? Tentu saja bagaimana “gaya” atau aturan dalam menulis Python, karena banyak sekali perbedaan antara Go dan Python. Go cukup straightforward, terkadang hanya ada 1 cara untuk menyelesaikan satu hal. Di Python kadang ada beragam variasi, sederhananya saja saat menulis di satu framework seperti Django ada variasi seperti CBV atau FBV, itu pun masih dipisahkan lagi dengan generic atau bukan.

db, err := s.storage.BeginTx(ctx)
	if err != nil {
		log.Err(err).Str("traceId", input.TraceId).Msg("Failed to begin transaction")
		resp.Message = "Failed to update actual spend"
		return resp
	}
	defer db.Rollback()

	// Update actual spend
	err = db.UpdateActualSpendById(ctx, input.PlanItemId, input.ActualSpend)
	if err != nil {
		log.Err(err).Str("traceId", input.TraceId).Msg("Failed to update actual spend")
		resp.Message = "Failed to update actual spend"
		return resp
	}

	// Commit transaction
	err = db.Commit()
	if err != nil {
		log.Err(err).Str("traceId", input.TraceId).Msg("Failed to commit")
		resp.Message = "Failed to update actual spend"
		return resp
	}

Kode di atas sangat eksplisit, tidak ada kejutan, dan bagi beberapa orang mungkin terlalu verbose dan repetitif, tapi sejujurnya itu yang saya suka.

Sedangkan di Python—atau Django pada khususnya—untuk mencapai yang serupa saya biasa menggunakan context manager.

with transaction.atomic():
    data = Budget.objects.get(id)
    data.actual_spend = actual_spend
    data.save()

Terlihat jelas sekali kan perbedaannya, atau ketika saya menulis Go cenderung as slim as possible, maka jarang sekali saya menggunakan ORM. Berbeda ketika menulis dengan Django, saya cenderung menggunakan apa yang sudah ada di dalamnya termasuk ORM, sehingga bukan hanya sekadar mempelajari mengenai engine database yang digunakan, saya perlu mempelajari pula bagaimana si ORM bekerja (saya lagi nulis perihal transaction di Django sih, tapi nanti deh saya tulis di postingan lainnya).

Akhir kata, mari belajar lagi, dan di era agentic AI ini saya rasa mempelajari hal yang semakin dasar menjadi sangat penting karena setidaknya dalam proyek hobi saya ini, saya cenderung lebih banyak menjadi reviewer daripada penulis.