İçeriğe geç
Muhammet Şafak
Günlük 3 dk okuma

Polyglot bir geliştirici olmak: dili probleme göre seçmek

Birden çok programlama diline hâkim olmanın bir kimlik meselesi değil, araç seçimi meselesi olduğu üzerine kişisel notlar.


Bir geliştiricinin “hangi dili kullanıyorsun?” sorusuna verdiği yanıt çoğu zaman teknik bir tercihten fazlasını taşır. Kimlik bildirgesi gibi bir şey olur. PHP geliştiricisiyim, Go geliştiricisiyim, Python geliştiricisiyim. Yıllar içinde fark ettim ki bu kimlik çerçevesi, aslında kararı çoktan vermiş olmanın örtüsü: el altında ne varsa onunla çalışmak.

Son birkaç yıldır birden fazla dili aktif olarak kullanıyorum. Bu yazıda o deneyimi paylaşmak istiyorum — “polyglot (çok dilli) geliştirici” olmayı neden bir hedef değil, bir sonuç olarak gördüğümü ve dili probleme göre seçmenin pratikte ne anlama geldiğini.

Dili kimlik olarak benimsemenin maliyeti

PHP ile başladım, uzun süre PHP ile kaldım. Bunun pratik bir gerekçesi vardı: web uygulamaları yapıyordum ve PHP bu iş için iyi bir araçtı. Sorun, “PHP geliştiricisiyim” kimliğinin zamanla başka dilleri değerlendirmeye bile gerek duymama yol açmasıydı. Go çıktığında “sistem dili, bana ne” dedim. Python’a yıllarca mesafeli durdum.

Kimlik, seçimi önceden kapatır. Dili araç olarak gördüğünüzde ise her yeni problem bir soru haline gelir: bu iş için hangi araç daha uygun?

Gerçek projelerden öğrenilen ders

PHP ile yıllar boyunca web uygulamaları ürettim, Laravel ekosistemi içinde kaldım. Sonra bir noktada küçük bir CLI aracı yazmam gerekti — sadece belirli bir klasördeki dosyaları işleyip bir çıktı üretecek, dağıtılabilir tek bir binary olacak. PHP ile yazabilirdim, ama dağıtım karmaşıklaşacaktı. Go’ya baktım: tek binary, hızlı derleme, net eşzamanlılık (concurrency) modeli. O araç o gün Go ile yazıldı ve iki yıldır sorunsuz çalışıyor.

Benzer bir seçim Python için de oldu. Üçüncü taraf bir API’den düzenli aralıklarla veri çekip dönüştürmem gerekiyordu. Python’un veri işleme ekosistemi — birkaç satırla JSON ayrıştırma, csv modülü, ihtiyaç halinde pandas — bu iş için PHP’den çok daha doğal hissettirdi. Script birkaç saatte yazıldı.

Bu iki örnek birbirinden farklı çözümlere işaret etmiyor; aksine aynı ilkeye işaret ediyor: her dilin bir ağırlık merkezi var, ve o ağırlık merkezine yakın iş yapıldığında dilin direnci azalıyor.

Her dilin ağırlık merkezi

Benim için üç dilin ağırlık merkezleri şöyle şekillendi:

PHP: Web uygulamaları, API geliştirme, Laravel ekosistemi. Büyük bir ekosistem, olgun bir framework, sunucu taraflı web için onlarca yılın birikimi. Domain modelleme, form işleme, auth akışları, zamanlanmış görevler — PHP bu alanda hâlâ benim birincil tercihim.

Go: Dağıtılabilir araçlar, küçük servisler, performansın önemli olduğu arka plan işleri. Tek binary derleme, bellek verimliliği, net eşzamanlılık modeli. Öğrenme eğrisi var ama bir kez aşıldığında son derece güvenilir kod üretiliyor.

Python: Otomasyon betikleri, veri dönüşümü, hızlı prototipleme. Okunabilirliği yüksek, standart kütüphanesi geniş, ekosistemi veri işleme için tartışmasız zengin. Bir problemi hızla çözmek istediğimde ilk baktığım dil haline geldi.

Bağlam değiştirmenin gerçek maliyeti

Çok dil kullanmanın bir bedeli var: bağlam değiştirme. Her dilin sözdizimi (syntax), deyimsel (idiomatic) kalıpları, standart kütüphanesi farklı. Go’da hata yönetimi PHP’den farklı çalışıyor. Python’da tip sistemi TypeScript veya Go’ya kıyasla gevşek. Bu geçişlerde zaman kaybı oluyor.

Bununla başa çıkmanın yolu projeyi açık tutmak: hangi dilde yazdığımı net bilmek, diğer dillerin alışkanlıklarını taşımamaya özen göstermek. Go yazarken PHP gibi düşünmemeye çalışmak, Python yazarken Go’nun hata yönetimi felsefesini zorla uygulamaya kalkmamak.

Bir diğer gerçek: dil değiştirildiğinde sıfırdan başlanmıyor. Mantık, algoritmik düşünme, tasarım tercihleri dil bağımsız aktarılıyor. Değişen deyimler, standart kütüphane ve bazı paradigmalar. Bu yük zamanla hafifleniyor.

”Kaç dil öğrenmeliyim?”

Yanlış soru. Doğru soru: hangi problemlerle karşılaşıyorum, ve bu problemler için mevcut araçlarım yeterli mi?

Bir geliştiricinin her dili bilmesine gerek yok. Ama tek bir dili mutlak gerçek gibi benimsemenin getirisi de yok. Bir noktada birinci dilinizde göremediğiniz çözümleri başka bir dilin perspektifinden görmeye başlıyorsunuz. Bu, dilin kendisinden bağımsız, düşünme biçiminin zenginleşmesidir.

Ben şu an üç dille aktif çalışıyorum. Yeni bir dil eklemek için acele etmiyorum; gerektiğinde ekleneceğini biliyorum. Şimdilik elimdeki araçları probleme doğru hizalamak yeterli.

Dili kimlik olarak taşımayı bıraktığınızda araç seçimi hem daha kolay hem de daha net hale geliyor. Bu kadar.

Etiketler: #Go#Python#PHP
Paylaş:

İlgili Yazılar

Sitede Ara

Yazı, proje ve sayfalarda arama yapmak için yazmaya başlayın.

Esc ile kapat Pagefind ile güçlendirildi