Golang maceram
Efendim beni bilen bilir, yeni dil ve teknoloji seven birisiyim. Elimden geldiğince de okuyarak, testler yaparak kendimi güncel tutmaya bir din gibi bağlıyım.
Günlük hayatımda, java, php, kotlin gibi dilleri ara sıra kullansam da, sanırım en yoğun mesai arkadaşım JavaScript. Node, express, next, react gibi frameworkler ile fullstack geliştirici olarak uzun yıllardır çalışıyorum.
Rust ve golang dillerini piyasada olup da duymayanımız yok heralde. Bu dillerin beraberinde getirdiği daha düşük kaynak kullanımı, “memory leak” gibi sorunsallardan uzak, güçlü bir type syntaxi zaman içerisinde artarak merakımı cezbetti.
Ön yargılar
C dillerinin yabancısı değilim. Üniversitede başlayan tanışıklığım, c# ile bir kaç oyun yapısında kullandığım kod ile devam etmişti zaman içerisinde.
Bu geçmişse rağmen uzun süre C ile zaman geçirdim diyemem. Bu nedenle de sytanxin kendisine karşı negatif bir bakış açım vardı. Çirkin geliyordu gözüme açıkcası.
Sürekli kullanılan pointerlar, byte arrayler, structlar, typeler, JavaScript dilinde bulduğum estetiği bir türlü vermiyordu.
Karar aşaması
Tüm önyargılarımın basit bir sebebi olduğunu içten içe elbette biliyordum. Dilin yabancısıydım ve bir kod bloğunu ilk bakışta çözemeyen beynim çamura yatıyordu.
Tüm ön yargılarımı ikinci bir emre kadar görmezden gelip Go öğrenmeye karar verdim ve hemen kolları sıvadım.
Yol Haritası
Normalde yeni bir dil öğrenme süreci, senior developer için pek dert değildir. Konseptleri zaten bildiğimiz için, syntax öğrenmemiz yetmekte. Bu sebeple öğrenme süreci bir kaç kısa deneme projesinde yağ gibi akıp gider.
İş Go diline geldiğinde, temel olarak nereye gitmek istediğimi biliyordum;
- Proje yapısı (klasörler, dosyalar, isimlendirme)
- Genel syntax (değişkenler, looplar, conditionlar vs)
- Http server uç noktaları ve requestler
- Temel encoding fonksiyonlar (bcyrpt, jwt, auth)
- Middlewares
- Veritabanı
- Caching
Aklıma ilk aşamada gelen aşamalar bunlar oldu ve test projeleri ilgili hedeflere varmaya başladım
Enteresan bulduklarım
Dil yapısı gereği sana hata kontrolünü dikte ediyor. Öğreneğin javascript frameworkünde doğal olarak atlayabileceğim bir çok hata noktasını, ikinci defa düşünmeye gerek kalmatan go ile otomatik olarak programlıyorum.
Pointerlar hep bir ram ve kaynak yönetimini ön planda tutmanı sağlıyor. Örneğin bir node backendi yaparken, zaman ile yarışıyor oluyorum arka plandaki temel içgüdü olarak. Halbuki golang felsefe olarak bir şekilde beni sürekli kaynak düşünmeye itiyor.
JavaScript ile farkı
Node ortamında, bir NPM çılgınlığı var. Kütüphane sevmeyen birisi olarak, ben de kodlarımda bir çok npm paketi kullanabiliyorum. Bazen zamandan ve bütçeden kazanmak için, aslında biraz ilgi ile yaratılabilecek bir bölümü hızlı bir şekilde npm ile ortaya çıkarabiliyoruz.
Paketlerin sağlıklı sayıda kullanılması elbette zararlı değil, fakat bir çok projenin yapısına baktığımda, “developerın” bir project manager gibi çalıştığını görüyorum. Onlarca geliştiricinin kodunu alıp birleştirmiş ve ortaya bir şey çıkarmış…
Öte yandan go ortamında bu mümkün değil. Bir oauth girişi mi yapacaksın? Unutunuz efendim passport gibi bir altyapısı, nextauth ‘u vs.. O oauth uç noktalarını yazacaksınız, güvenliğinizi sağlayacaksınız…
Sonuç
Önyargılarımı yenerek, kendimi zorlayarak giriştiğim bu yolda, go ile aramda hoş bir bağ kuruldu. Elimden geldikçe fullstack projelerimi go ile programlamaya devam etmeyi planlıyorum.
Go Template ve HTMX sayesinde, react componentsları da aramadım. Şimdilik keyfim yerinde. Sana da tavsiye ederim