


Bir yazılımın hızlı, güvenilir ve ölçeklenebilir olması; kullanılan dilin popülerliğinden ya da framework’ün gücünden önce algoritmalar ve veri yapılarıyla ilgilidir.
Arayüz ne kadar şık olursa olsun, arka planda yanlış kurgulanmış bir algoritma varsa sistem er ya da geç tökezler.
Bu yazıda algoritmalar ve veri yapılarını; akademik tanımlar, ezber şemalar ve kopya anlatımlar yerine, yazılımın gerçekten nasıl düşündüğünü anlatan özgün bir bakış açısıyla ele alıyoruz.
Algoritma, bir problemin adım adım çözüm planıdır.
Kod ise bu planın yalnızca yazıya dökülmüş hâlidir.
Yani:
Kod yazmak ≠ algoritma üretmek
Aynı kod, farklı algoritmayla bambaşka sonuçlar doğurabilir
İyi bir algoritma:
Daha az işlem yapar
Daha az kaynak tüketir
Daha öngörülebilir çalışır
Kötü bir algoritma ise:
Sistemi yavaşlatır
Sunucu maliyetini artırır
Kullanıcıyı kaçırır
Algoritma ne yapılacağını,
veri yapısı ise verinin nasıl tutulacağını belirler.
Yanlış veri yapısı seçimi:
En iyi algoritmayı bile etkisiz hâle getirir
Doğru veri yapısı:
Karmaşık işlemleri basitleştirir
Arama ve erişim süresini kısaltır
Kodun okunabilirliğini artırır
Bu yüzden algoritma ve veri yapıları bir bütün olarak düşünülür.
Bir uygulama yavaşladığında genellikle şu suçlanır:
Sunucu
İnternet
Framework
Ama çok sık yaşanan gerçek şudur:
Sorun matemiktir.
Yanlış algoritma:
Gereksiz döngüler üretir
Aynı işi defalarca yapar
Sistem büyüdükçe katlanarak yavaşlar
Bu yavaşlama:
İlk gün fark edilmez
Kullanıcı sayısı arttıkça ortaya çıkar
En pahalı aşamada çözülmeye çalışılır
Algoritma hataları genelde şu cümleyle savunulur:
“Test ortamında sorun yoktu.”
Çünkü:
Test verisi küçüktür
Gerçek hayattaki senaryolar yoktur
Ama algoritmalar:
Veri büyüdükçe
Kullanıcı arttıkça
Trafik yükseldikçe
gerçek yüzünü gösterir.
Bu yüzden algoritma, geleceğe yazılır.
Algoritmik düşünebilen bir geliştirici:
Kodu yazmadan önce düşünür
Sorunu parçalara ayırır
En kısa değil, en doğru yolu arar
Bu kişi:
Framework değişse bile ayakta kalır
Dilden bağımsız üretir
Sistem tasarımında söz sahibi olur
Algoritma bilmek:
“Kod yazmayı bilmek”ten
bir seviye daha yukarıdır.
Veri yapıları şunu belirler:
Veriye ne kadar hızlı ulaşılır
Bellek nasıl kullanılır
Sistem ne kadar ölçeklenebilir
Yanlış yapı:
Karmaşık kod
Okunmayan fonksiyonlar
Sürekli yapılan refactor’lar
doğurur.
Doğru yapı ise:
Basit çözümler
Temiz kod
Daha az hata
anlamına gelir.
Her problemi döngüyle çözmek
Veri yapısını sonradan düşünmek
Performansı “ileride” ele almak
Karmaşıklığı ölçmemek
“Şimdilik böyle” demek
Bu hatalar kısa vadede çalışır,
uzun vadede sistemi yorar.
İş dünyası için algoritmalar:
Teknik detay değil
Rekabet avantajıdır
İyi algoritma:
Daha az sunucu maliyeti
Daha hızlı kullanıcı deneyimi
Daha stabil ürün
demektir.
Bu yüzden büyük şirketler:
Algoritmik düşünceye yatırım yapar
Mülakatlarda bunu ölçer
Sistemin kalbini buraya emanet eder
Teknoloji değişir.
Diller evrilir.
Framework’ler gelir gider.
Ama:
Arama problemi
Sıralama ihtiyacı
Veri yönetimi
hiç değişmez.
Bu yüzden algoritmalar ve veri yapıları:
Eskimez
Modası geçmez
Temel olmaya devam eder
İyi yazılım:
Çok kodla değil
Doğru düşünceyle yazılır
Algoritmalar ve veri yapıları:
Yazılımın matematiği
Sistemin aklı
Performansın kaynağıdır
Eğer bir yazılım:
Hızlıysa
Ölçeklenebiliyorsa
Sorunsuz büyüyorsa
bunun sebebi çoğu zaman doğru algoritmik tercihlerdir.