Bir zamanlar bilgisayar programlarının boyutu megabaytlarla ölçülürdü.
Hatta bazı programlar birkaç yüz kilobayt yer kaplardı.
Programı kurardınız, açardınız ve işinizi yapardınız.
Bugün ise birkaç basit işlem için yüzlerce megabaytlık yazılım indiriyoruz.
Sonra program açılırken bekliyoruz.
RAM tüketimini izliyoruz.
Güncelleme indiriyoruz.
Eklentiler kuruluyor.
Arka planda servisler çalışıyor.
Ve sonunda programın yaptığı şey hâlâ aynı:
Bir dosya açmak, birkaç metin yazmak veya iki düğmeye basmak.
Donanım inanılmaz derecede güçlendi.
Depolama alanları terabaytlara ulaştı.
RAM miktarları onlarca gigabayta çıktı.
İnternet hızlandı.
Ama yazılımlar nedense bu gelişmeyi “daha fazla kaynak tüketme fırsatı” olarak yorumladı.
Eskiden program yapıyorlardı, şimdi ekosistem kuruyorlar
Eski programların önemli bir özelliği vardı:
Programın bir amacı vardı.
Metin editörüyseniz metin düzenlerdiniz.
Resim görüntüleyiciyseniz resim açardınız.
Arşiv programıysanız arşiv açardınız.
Programın yaptığı iş belliydi.
Bugün ise bir uygulamanın yanında adeta küçük bir şirket geliyor.
Oturum açma sistemi.
Bulut senkronizasyonu.
Otomatik güncelleme.
Bildirim sistemi.
Telemetri.
Reklam veya öneriler.
Hesap yönetimi.
Çevrim içi servisler.
Eklenti sistemleri.
Analitik araçları.
Ve bütün bunların yanında asıl program.
Sonra 500 MB’lık kurulum dosyasına bakıp bunun neden bu kadar büyük olduğunu soruyoruz.
Çünkü program artık sadece program değil.
Bir ekosistem.
Bilgisayarlar güçlendi, yazılımlar da şişti
Eskiden bilgisayarın kaynakları sınırlıydı.
RAM pahalıydı.
Disk alanı sınırlıydı.
İşlemci gücü düşüktü.
Bu nedenle geliştiriciler kaynak kullanımına dikkat etmek zorundaydı.
Bugün ise geliştiricinin önünde çok daha güçlü bilgisayarlar var.
Sonuç?
Daha az kaynak kullanmak için uğraşmak yerine daha fazla kaynak kullanabileceklerini varsaymak.
Bu yaklaşımın sonucu özellikle masaüstü uygulamalarda açıkça görülüyor.
Bir program birkaç yüz megabayt RAM kullanıyor.
Neden?
Çünkü bilgisayarınızda yeterince RAM var.
Biraz daha tüketebilir.
Sonra bir başka program aynı şeyi yapıyor.
Bir diğeri de.
Sonra işletim sistemi bütün bu yazılımları ayakta tutmak için sürekli bellek yönetiyor.
Ve kullanıcı görev yöneticisini açıp bilgisayarının neden boşta bu kadar RAM kullandığını anlamaya çalışıyor.
“Bilgisayarlar artık güçlü” bahanesi
Bu konuda en sevilen savunma belli:
“Artık bilgisayarlar güçlü.”
Evet.
Tam da bu yüzden daha kötü yazılım yazmak için bahane bulmak daha kolay.
Fakat donanımın güçlenmesi yazılımın verimsizleşmesini haklı çıkarmaz.
Bir bilgisayarın 32 GB RAM’i olması, basit bir aracın 4 GB RAM tüketmesinin iyi bir tasarım olduğu anlamına gelmez.
Otomobilinizin motoru güçlendi diye frene taş bağlamıyorsunuz.
Ama yazılım dünyasında benzer bir yaklaşım normalleşti.
“Donanım kaldırıyor.”
Bu cümle optimizasyonun mezar taşına yazılabilecek kadar sık kullanılıyor.
Electron ve web teknolojileri masaüstüne taşındı
Modern masaüstü yazılımlarının şişmesinin önemli nedenlerinden biri web teknolojilerinin masaüstü uygulamalara taşınması.
HTML.
CSS.
JavaScript.
Tarayıcı motoru.
Framework.
Kütüphaneler.
Uygulamanın kendisi.
Bütün bunlar bir araya geliyor.
Sonuçta masaüstünde çalışan bir uygulama için küçük bir program değil, adeta yanında tarayıcı taşıyan bir paket ortaya çıkıyor.
Basit bir uygulamayı açıyorsunuz.
Arka planda neler çalıştığını düşünmek bile istemiyorsunuz.
Ama uygulama açıldıktan sonra yüzlerce megabayt bellek kullanıyor.
Çünkü siz aslında sadece uygulamayı değil, uygulamanın çalışabilmesi için gereken bütün teknolojik ortamı da taşıyorsunuz.
Programın boyutu büyüyor, yaptığı iş aynı kalıyor
Asıl komik olan burada.
Programın boyutu katlanıyor.
Ama yaptığı iş katlanmıyor.
Eski bir hesap makinesi uygulaması ile yeni bir hesap makinesi uygulamasını düşünün.
Temel iş aynı.
Sayıları gir.
İşlemi yap.
Sonucu göster.
Fakat modern uygulamaya hesap makinesinin yanında tema sistemi, hesap senkronizasyonu, kullanıcı hesabı, bulut desteği, animasyonlar ve başka bir sürü özellik eklenebiliyor.
Sonra hesap makinesi 300 MB oluyor.
İnsan ister istemez soruyor:
Bu hesap makinesi hesap mı yapıyor, yoksa kripto para mı madenciliği yapıyor?
Güncellemeler de şişmeye devam ediyor
Bir zamanlar yazılım güncellemesi dediğimiz şey birkaç megabayt olabilirdi.
Şimdi bazen programın tamamına yakınını yeniden indiriyoruz.
Çünkü modern yazılımın parçaları birbirine o kadar bağımlı hale gelmiş durumda ki küçük bir değişiklik bile büyük bir paketleme sürecini tetikleyebiliyor.
Kullanıcı açısından sonuç basit:
“Güncelleme var.”
İndir.
Bekle.
Kur.
Yeniden başlat.
Sonra ne değiştiğini anlamaya çalış.
Ve çoğu zaman cevap:
Yeni simgeler.
Biraz farklı menüler.
Birkaç hata düzeltmesi.
Arka planda ise yüzlerce megabaytlık yeni dosya.
Eskiden geliştirici kaynak kısıtlamasıyla boğuşuyordu
Kaynak kısıtlamaları bazen geliştiriciyi daha yaratıcı olmaya zorlar.
Disk küçükse programı küçültmek gerekir.
RAM azsa belleği dikkatli kullanmak gerekir.
İşlemci yavaşsa gereksiz hesaplamalardan kaçınmak gerekir.
Bu sınırlamalar ortadan kalktığında ise başka bir alışkanlık ortaya çıkabiliyor:
“Nasıl olsa çalışıyor.”
Kod biraz daha büyür.
Bir kütüphane daha eklenir.
Bir framework daha kullanılır.
Bir servis daha çalıştırılır.
Birkaç yüz megabayt daha gider.
Sonra bilgisayarların güçlü olması bütün bunları görünmez hale getirir.
Ta ki kullanıcı eski bilgisayarını açana kadar.
Yazılımın kilo problemi var
Bir zamanlar yazılım mühendisliği biraz da kaynakları verimli kullanma sanatına benziyordu.
Şimdi bazı projelerde yaklaşım daha çok şuna dönüşmüş durumda:
“Diskte yer var mı?”
Var.
“RAM var mı?”
Var.
“İşlemci hızlı mı?”
Hızlı.
“İnternet iyi mi?”
İyi.
O zaman sorun yok.
Bu mantıkla hareket edildiğinde yazılımın şişmesi kaçınılmaz.
Çünkü her yeni özellik bir maliyet olarak değil, kullanılabilir kaynak olarak görülüyor.
Ve kaynakların sınırı olmadığı sanılıyor.
Küçük yazılımlar neden daha huzurluydu?
Küçük programların en büyük avantajı sadece küçük olmaları değildi.
Genellikle daha anlaşılırdılar.
Daha az bağımlılıkları vardı.
Daha az servis çalıştırıyorlardı.
Daha az güncelleme gerektiriyorlardı.
Daha az şey yapmaya çalışıyorlardı.
Ve en önemlisi, bilgisayarın sahibi hâlâ biraz daha fazla kontrol sahibiydi.
Programı açıyordunuz.
İşinizi yapıyordunuz.
Kapatıyordunuz.
Programın arka planda ne yaptığı konusunda bir konferans düzenlemenize gerek kalmıyordu.
Donanımın gücü yazılımın tembelliğini gizliyor
Bugün 500 MB’lık bir programın bilgisayarınızda çalışması büyük bir olay değil.
Asıl mesele bu değil zaten.
Mesele, bunun neden normal hale geldiği.
Donanım geliştikçe yazılımın daha da büyümesi kaçınılmaz bir fizik kuralı değil.
Bu bir tercih.
Geliştirme kolaylığı.
Framework kullanımı.
Hazır kütüphaneler.
Kısa geliştirme süreleri.
Cross-platform çözümler.
Web teknolojileri.
Ve bazen düpedüz umursamazlık.
Bunların hepsi bir araya geldiğinde ortaya şu garip tablo çıkıyor:
Bilgisayarlarımız tarihte hiç olmadığı kadar güçlü.
Ama bazı programlar hâlâ yaptıkları iş için gereğinden fazla kaynak tüketiyor.
500 KB’lık programların verdiği ders
Eski yazılımların hepsi mükemmel değildi.
Ama küçük olmaları önemli bir şeyi hatırlatıyor:
Bir yazılımın iyi olması için devasa olması gerekmiyor.
Hatta bazen tam tersi.
Yazılım ne kadar az şey yapıyorsa, onu anlamak, taşımak, çalıştırmak ve bakımını yapmak o kadar kolay olabilir.
Bugün ise basitlik yerine özellik sayısını büyütmeye, optimizasyon yerine donanıma güvenmeye ve küçük araçlar yerine devasa platformlar üretmeye alıştık.
Sonra da bilgisayarımızda 16 veya 32 GB RAM varken basit bir programın neden yüzlerce megabayt tükettiğini sorguluyoruz.
Belki de sorun bilgisayarların yetersiz olması değildir.
Belki sorun, yazılımların artık yeterince küçük olmaya ihtiyaç duymamasıdır.
500 KB’lık programların yaptığı işi 500 MB’lık yazılımların yapamaması teknik olarak mümkün değil.
Sadece artık kimsenin 500 MB olmasının ayıp olduğunu düşündüğü bir dönemden geçiyoruz.