---
title: 'Bir Dil Seçmek'
source: 'https://academia.sh/tr/kurslar/programlama-temelleri/bir-dil-secmek'
course: 'Programlama Temelleri'
language: tr
updated: '2026-08-17T18:08:25+00:00'
license: 'CC BY-SA 4.0'
---

# Bir Dil Seçmek

Dilleri ayrıştıran tasarım eksenleri, ilk dil seçimi ölçütleri ve aktarılabilir bilgi.

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.
