Polyglot'a ilk adım: neden Go öğrenmeye başladım
On yılı aşkın PHP deneyiminin ardından neden ikinci bir dil öğrenmeye karar verdim? Go'yu seçmemin gerekçesi ve bu süreçten beklentilerim.
2008’den bu yana PHP yazıyorum. On bir yıl. Bu sürede PHP ile ne yapılabileceğinin oldukça geniş bir fotoğrafını çektim: web uygulamaları, API’ler, CLI araçlar, arka plan işleri. Ekosistemi tanıyorum, araçlarını biliyorum, tuzaklarını içselleştirdim. Bu konforu kırmak için bilinçli bir karar almam gerekiyordu — ve aldım.
Neden şimdi? Neden Go?
Tek dilin konforunun farkına varmak
Bir noktada şunu fark ettim: aynı problemi her zaman aynı araçla çözüyordum. Senaryo fark etmeksizin, PHP + Laravel benim varsayılan yanıtım oluyordu. Bu alışkanlık verimlilik sayılabilir, ama zamanla düşünce esnekliğini köreltiyor.
İkinci dil öğrenmek, yalnızca bir araç kazanmak değil. Başka bir dilin yapısına girdiğinizde, ana dilinizi de farklı görmeye başlıyorsunuz. PHP’nin tasarım kararlarını — ya da tasarım borçlarını — dışarıdan değerlendirme fırsatı doğuyor.
Neden Go?
Python, Ruby, Node.js — hepsi seçenek olabilirdi. Bir süre değerlendirdim.
Go’yu seçmemin somut gerekçeleri:
Go, statically typed ve derlenen bir dil. PHP’de tip bildirimleri son yıllarda güçlendi ama dinamik yapı hep orada. Statik tipler, büyük kod tabanlarında derleme anında hata yakalama sağlıyor — bunu deneyimlemek istiyordum.
Go’nun standart kütüphanesi kapsamlı. HTTP sunucusu, JSON işleme, concurrency için ihtiyaç duyduğunuz şeylerin büyük bölümü dilde hazır geliyor. PHP’de her şey için dış paket aradığımı düşününce bu fark ilgimi çekti.
Go’nun sözdizimi kasıtlı olarak sade tutulmuş. Çok az soyutlama, çok az “sihir”. Bir dilin öğrenme sürecinde en kötü şey, sihirli davranışları çözmeye zaman harcamak. Go’da bunu yaşamayacağımı umuyorum.
Son olarak: Go’nun concurrency modeli farklı. Goroutine ve channel kavramları PHP’nin multi-process yaklaşımından temelden ayrılıyor. Bu zihin genişletici bir alan gibi görünüyor.
Ne beklemiyorum?
PHP’yi Go ile değiştirmeyi düşünmüyorum. Web uygulamaları için Laravel ekosisteminin olgunluğuna yaklaşmak yıllar alır. Amacım, belirli problem kategorilerinde — CLI araçlar, veri işleme betikleri, küçük servisler — Go’nun ne zaman daha doğru seçim olduğunu anlamak.
Aynı zamanda “hızlıca uzman olacağım” gibi bir beklentim de yok. On yıllık PHP birikimini Go ile aynı seviyeye taşımak mümkün değil ve gerekli de değil. T-shaped bilgi: derinliğim PHP’de, Go ise genişliği temsil edecek.
Şimdiye kadar ne gördüm?
İlk birkaç hafta go kurulumu, temel sözdizimi, paket yapısı. İlk şaşkınlık: err kontrolü her yerde tekrar ediyor.
package main
import (
"fmt"
"os"
)
func main() {
f, err := os.Open("dosya.txt")
if err != nil {
fmt.Println("Hata:", err)
return
}
defer f.Close()
fmt.Println("Dosya açıldı:", f.Name())
}
PHP’deki exception tabanlı hata yönetiminden gelince bu tekrar garip geliyor. Ama Go’nun tasarımcıları bunun bilinçli bir karar olduğunu açıkça belirtiyor: hata değer (error value) olarak birinci sınıf vatandaş. İlk tepkim negatifti, ama bu yaklaşımın avantajlarını görmek için daha fazla yazmam gerekiyor.
Sonraki aylarda küçük bir CLI aracı yazmayı planlıyorum. Gerçek bir ihtiyacı karşılayan küçük bir şey — dilin nasıl hissettirdiğini en iyi öğreten yol bu.