Bir uygulama gördüğümüzde büyüleniyoruz.
Butonlar, animasyonlar, veri akışı, kullanıcı paneli, ödeme sistemleri, bildirimler…
Her şey akıyor.
Ama o dev sistemlerin içinde ne var biliyor musunuz?
Çoğu zaman şuna benzeyen bir satır kod:
if (user == null) {
throw new IllegalStateException("User not found");
}
Basit değil mi?
Ama işte mesele tam da burada başlıyor.
Basit Kod Yoktur, Bağlam Vardır
Programlama dünyasında bir yanılgı var:
“Kod basit görünüyor, demek ki küçük bir şey.”
Hayır.
Kod tek başına bir anlam taşımaz.
Onu değerli yapan bağlamdır.
Bir mobil uygulamada kullanıcı giriş ekranını düşünün.
Eğer user == null kontrolü yapılmazsa:
● Yetkisiz erişim olur.
● Veritabanı çöker.
● Ödeme sistemi yanlış kişiye çalışır.
● Güvenlik açığı oluşur.
Yani küçücük bir if bloğu, aslında koca bir sistemin bekçisidir.
Programlama Aslında Modelleme İşidir
Büyük uygulamalar yazarken yaptığımız şey şudur:
Gerçek dünyayı modellemek.
Bir üniversite sistemi düşünelim:
● Öğrenci
● Ders
● Not
● Kayıt
Bunlar yazılımda birer class olur.
public class Student {
private String name;
private int id;
}
Bu kadar basit mi?
Hayır.
Çünkü o class:
● Veritabanına yazılır.
● API üzerinden taşınır.
● GUI’de gösterilir.
● Test edilir.
● Başka sınıflarla ilişki kurar.
Bir Student sınıfı aslında bir organizasyon modelidir.
Hafıza, Yığın, Referanslar: Görmediğimiz Katman
Kod yazarken çoğu kişi sadece değişkeni görür.
Ama Java’da bir Student s = new Student(); yazdığınızda:
● Stack’te bir referans oluşur.
● Heap’te bir obje yaratılır.
● Garbage Collector onu takip eder.
Bu görünmeyen katmanlar, büyük sistemlerin performansını belirler.
Basit görünen kod, aslında makine seviyesinde karmaşık bir orkestradır.
Collections: Kaosun Düzenlenmesi
Bir uygulama büyüdüğünde tek tek değişkenlerle yaşayamaz.
Liste gerekir.
Set gerekir.
Map gerekir.
List students = new ArrayList<>();
Bu satır bir veri yapısı seçimi demektir.
Yanlış seçim:
● Performans düşürür.
● Bellek tüketimini artırır.
● Ölçeklenebilirliği bozar.
Doğru seçim:
● Sistemi taşıyabilir.
Büyük sistemler doğru soyutlamalar üzerine kurulur.
Test Olmadan Büyük Sistem Kurulmaz
Gerçek profesyonellik kod yazmak değildir.
Kodun çalıştığını kanıtlamaktır.
assertEquals(5, calculator.add(2,3));
Bu satır bir güvenlik ağıdır.
Test yoksa sistem büyüyemez.
Büyüyen sistem test edilmezse çöker.
Generics: Geleceği Düşünmek
Bir yazılımı büyütecek şey tekrar kullanılabilirliktir.
public class Holder {
private T value;
}
Bu basit yapı, onlarca farklı veri tipini taşıyabilir.
Yani yazdığınız kod:
● Sadece bugünü değil
● Yarınki genişlemeyi de düşünmelidir.
GUI: Kullanıcının Gördüğü Yüz
Bir buton tıklanır.
button.setOnAction(event -> doSomething());
Kullanıcı için bu sadece bir tıklamadır.
Ama arkasında:
● Event sistemi
● Thread yönetimi
● Callback mekanizması
● State değişimi vardır.
Küçük bir event handler, aslında sistemin sinir sistemidir.
Büyük Uygulama = Küçük Doğru Parçalar
Devasa uygulamalar sihirle yazılmaz.
● Küçük sınıflar
● Temiz sorumluluklar
● Net arayüzler
● Sağlam testler
● Doğru veri yapıları
Bunlar birleşince “büyük sistem” olur.
Sonuç
Programlama büyüklük meselesi değildir.
Doğru soyutlama meselesidir.
Bir satır kod:
● Güvenlik olabilir.
● Performans olabilir.
● Mimari karar olabilir.
● Ya da sistemin çöküş sebebi olabilir.
Genç yazılımcılara hep şunu söylüyorum:
“Basit kod yazın ama basite almayın.”
Çünkü bir gün yazdığınız küçük bir sınıf,
milyonlarca kullanıcısı olan bir uygulamanın omurgası olabilir.
Ve o gün geldiğinde,
o küçük if bloğu bir imparatorluğu ayakta tutuyor olabilir.
Arda Akgür
Toplumsal analizleri ve özgün bakış açısıyla ajansımızın vizyoner kalemlerinden biri.
Tüm Makaleleri Görüntüle