Ders 18 / 18
Bir Dil Seçmek
Dilleri ayrıştıran tasarım eksenleri, ilk dil seçimi ölçütleri ve aktarılabilir bilgi.
İçindekiler
Bu kurs, kavramları belirli bir dile bağlı kalmadan kurdu; örnekler tek bir dilde yazılsa da anlatılanların hiçbiri o dile özgü değildi. Kursu kapatan soru şudur: diller birbirinden neyle ayrılır ve hangisiyle başlanmalıdır?
Sorunun “en iyi dil hangisidir” biçiminde bir yanıtı yoktur. Diller farklı ödünleşimleri seçmiş tasarımlardır; bir eksende kazandıkları, başka bir eksende ödedikleriyle gelir.
Diller Neden Ayrışır
Her dil, belirli bir sorun kümesini kolaylaştırmak için tasarlanır ve bu tercih, başka bir şeyi zorlaştırır. Donanıma yakın denetim isteyen bir dil, bellek yönetimini programcıya bırakır; güvenliği önceleyen bir dil, aynı denetimi kısıtlar. Hızlı yazım sunan bir dil, hataların bir bölümünü çalışma anına erteler.
Bu nedenle diller karşılaştırılırken sorulacak soru “hangisi daha iyi” değil, “hangi ödünleşimi seçmiş” olmalıdır.
Ayırt Edici Eksenler
Kurs boyunca değinilen ayrımlar, dilleri konumlandıran eksenlerdir:
| Eksen | Uçlar | Kursta geçtiği yer |
|---|---|---|
| Tip denetimi zamanı | Statik ↔ dinamik | Temel veri tipleri |
| Tip katılığı | Örtük dönüşüme kapalı ↔ açık | Tip dönüşümü |
| Bellek yönetimi | Elle ↔ otomatik toplama | Bellek düzeni (önceki kurs) |
| Yürütme modeli | Derleme ↔ yorumlama ↔ sanal makine | Derleme zinciri (önceki kurs) |
| Değişkenlik | Değiştirilemez varsayılan ↔ değiştirilebilir varsayılan | Fonksiyonel yaklaşım |
| Paradigma ağırlığı | Nesne merkezli ↔ fonksiyon merkezli ↔ çok paradigmalı | Bu konu |
| Eşzamanlılık modeli | İş parçacığı ↔ olay döngüsü ↔ mesajlaşma | İşletim sistemi kavramları |
Bir dili öğrenmek, bu eksenlerdeki konumunu öğrenmektir. Sözdizim birkaç günde alışılır; asıl öğrenilen, dilin hangi hataları önlediği ve hangilerini programcıya bıraktığıdır.
Sekizinci bir eksen teknik değildir ama belirleyicidir: ekosistem. Bir dilin kütüphaneleri, araçları ve topluluk birikimi, o dille çözülebilecek problemlerin sınırını çizer. Dil tasarımı iyi olsa da hedef alan için kütüphane yoksa, iş dil seçiminden önce başlar.
İlk Dil Seçimi
Öğrenmeye başlarken seçim, dilin gücünden çok öğrenme deneyimine bakılarak yapılır. Dört ölçüt işe yarar:
Geri bildirim hızı. Yazılan kodun sonucunun kısa sürede görülmesi, öğrenmeyi hızlandırır. Uzun derleme ve kurulum adımları, başlangıç için ek yüktür.
Hata iletilerinin niteliği. İyi bir ileti sorunun ne olduğunu, nerede olduğunu ve ne beklendiğini söyler. Başlangıç düzeyinde bu, öğreticiden daha çok şey öğretir.
Kavramların görünürlüğü. Bazı diller bu kursun kavramlarını açıkça gösterir: tip bildirimi, kapsam kuralları, bellek davranışı. Bazıları bunları gizler; kolaylık sağlar ama kavram öğrenmeyi geciktirir.
Uygulanabilirlik. Öğrenilen dille kısa sürede işe yarar bir şey üretilebilmesi, sürekliliği korur.
Bu ölçütler tek bir dile işaret etmez ve etmemelidir. Önemli olan, seçilen dille yeterince uzun kalıp kavramları oturtmaktır; sık dil değiştirmek, her seferinde sözdizim öğrenip kavramlara hiç ulaşmamakla sonuçlanır.
Aktarılabilen ve Aktarılamayan
Yeni bir dile geçerken bilginin ne kadarının taşındığı, ne öğrenildiğine bağlıdır.
Aktarılabilenler: Bu kursun tamamı. Değişken ve bağlama, tip kavramı, denetim akışı, döngü değişmezi, fonksiyon sözleşmesi, kapsam kuralları, özyineleme, argüman aktarım modelleri, paradigmaların ayırt edici fikirleri. Bunlar dile değil, programlamaya aittir.
Aktarılamayanlar: Sözdizim ayrıntıları, standart kütüphane adları, araç zinciri komutları, dile özgü deyimler. Bunlar her dilde yeniden öğrenilir ve öğrenilmesi kısa sürer.
Oran, deneyimle birlikte değişir: ilk dilde neredeyse her şey yeni görünür; üçüncü dilde öğrenilecek olan yalnızca eksenlerdeki konum ve sözdizimdir. Bu nedenle ilk dilde harcanan zaman, sonraki dillerin tamamına yayılan bir yatırımdır.
İkinci dili seçerken yararlı bir ölçüt, birinciden bir eksende belirgin biçimde ayrılmasıdır. Dinamik tipli bir dilden sonra statik tipli bir dil öğrenmek, tip kavramını iki taraftan birden görmeyi sağlar; otomatik bellek yönetimli bir dilden sonra elle yönetilen bir dil, bellek modelini görünür kılar.
Problem Alanı Seçimi Daraltır
Bir proje için dil seçimi ise farklı bir sorudur ve genellikle daha az serbestlik içerir. Belirleyiciler şunlardır: hedef platformun desteklediği diller, alanın gerektirdiği kütüphaneler, ekibin var olan bilgisi, ve sürdürülebilirlik.
Son madde çoğu zaman en ağır basanıdır. Kod, yazıldığından çok daha uzun süre okunur ve bakımı yapılır; ekibin okuyabildiği bir dil, teknik olarak üstün ama kimsenin bilmediği bir dilden daha iyi bir seçimdir.
Diller Değişir
Bir dil, seçildiği anda sabitlenmiş bir araç değildir; sürümlerle evrilir. Yeni yapılar eklenir, hatalı kararlar düzeltilir, bazı özellikler kullanımdan kaldırılır.
Bu evrim, dilleri ayıran bir eksen daha üretir: geriye dönük uyumluluk politikası. Kimi diller eski kodun çalışmayı sürdürmesini öncelikli sayar ve bu yüzden hatalı kararlarla birlikte yaşar. Kimileri temiz tasarım için kırıcı değişikliği göze alır ve büyük kod tabanlarına geçiş maliyeti yükler.
Pratik sonucu, öğrenilen bilginin bir bölümünün sürüme bağlı olmasıdır. Kavramlar kalıcıdır; bir yapının hangi sürümde kullanılabilir olduğu ise değişkendir. Bu nedenle kaynaklarda ve belgelerde hangi sürümün anlatıldığı, kodun hangi sürümü hedeflediği açıkça belirtilir.
Aynı ilke bağımlılıklar için de geçerlidir: kütüphaneler de sürümlenir ve uyumluluk kuralları aynı biçimde işler. Sürüm yönetimi, yazılım geliştirme pratiği müfredatının konusudur.
Bu Kursun Toparlanması
Kurs, program kavramından başlayıp üç düzenleme yaklaşımına ulaştı. Sırayla: bir program girdi–işlem–çıktı dönüşümüdür; değerler adlara bağlanır ve tipleri, üzerlerinde hangi işlemlerin tanımlı olduğunu söyler; akış koşullar ve döngülerle yönlendirilir ve her döngünün bir sonlanma gerekçesi ile bir değişmezi vardır; fonksiyonlar işi adlandırıp sözleşmeye bağlar, kapsamı yalıtır ve özyinelemeyi mümkün kılar; paradigmalar ise bu parçaların hangi birimlerde toplanacağını belirler.
Aynı problem — bir ölçüm dizisinin özeti — kurs boyunca dört kez çözüldü: elle döngüyle, yordamlara bölünmüş biçimde, nesne üzerinden ve saf fonksiyonlarla. Dördü de doğru çalıştı. Aralarındaki fark hızda değil, değişikliğe nasıl karşılık verdiklerindedir — ve bu, program büyüdükçe belirleyici olan ölçüttür.
Özet
- Diller, farklı ödünleşimleri seçmiş tasarımlardır; karşılaştırma “hangisi daha iyi” değil “hangi ödünleşimi seçmiş” sorusuyla yapılır.
- Tip denetimi zamanı, tip katılığı, bellek yönetimi, yürütme modeli, değişkenlik, paradigma ağırlığı ve eşzamanlılık modeli başlıca ayırt edici eksenlerdir; ekosistem ise teknik olmayan ama belirleyici bir etkendir.
- İlk dil seçiminde geri bildirim hızı, hata iletilerinin niteliği, kavramların görünürlüğü ve uygulanabilirlik ölçüt alınır.
- Kavramlar dilden dile aktarılır; sözdizim, kütüphane adları ve araç komutları aktarılmaz.
- İkinci dil, birinciden bir eksende belirgin ayrılan bir dil olduğunda o ekseni görünür kılar.
- Proje için dil seçiminde platform, kütüphane, ekip bilgisi ve sürdürülebilirlik belirleyicidir.
Sonraki Adım
Bu kursta veriler hep hazır koleksiyonlarda tutuldu: liste verildi, üzerinde gezildi. Peki bir koleksiyon nasıl saklanır, arama neden bazı yapılarda hızlı bazılarında yavaştır ve hangi yapı hangi işlem için uygundur? Bundan sonraki kurs — Veri Yapıları — bu soruları ele alacak ve önceki kurstaki bellek modeliyle bu kurstaki soyutlama araçlarını bir araya getirecek.
İlerlemeni kaydetmek ve not almak için Giriş yap
Notlarım
Not almak için giriş yapmalısın.