Sahada sistem kurarak başlayan bir kariyerin yazılım mimarlığına evrilişi; sistem tarafının koda bakışıma kattıkları ve yıllar içinde damıtılan birkaç sade ilke.
Gece üçte çalan telefon
Kariyerime yazılımcı olarak değil, sahada sistem kurarak başladım. Telsiz-röle sistemlerinden Active Directory mimarilerine, sunucu kurulumlarından kurumsal bilgi sistemlerine uzanan bir yol oldu. Bu süre boyunca aynı anda hem kabloyu çeken hem kodu yazan biri oldum.
Sistem tarafının bana öğrettiği ilk şey şuydu: bir şeyin çalışması ile güvenilir çalışması arasında dağlar kadar fark var. Bunu ders kitabından değil, gece üçte çalan telefondan öğrenirsiniz. Sunucu çöktüğünde açıklama yapacak kişi sizsinizdir ve o an “ama benim makinemde çalışıyordu” diyebileceğiniz kimse yoktur.
Bu sorumluluk duygusu, sonradan yazılım mimarisine bakışımı kökten değiştirdi.
Sistemciler koda nasıl bakar?
Sistem tarafından gelen biri, koda çalışıp çalışmadığından çok bozulduğunda ne olacağından bakar. Bir geliştirici “bu servis cevap veriyor” der; sistemci “cevap vermezse ne olur, kaç saniye bekler, sonra ne yapar” diye sorar.
Aradaki farkı en net gördüğüm yer zaman aşımı ayarlarıdır. Kodda hiçbir zaman aşımı tanımlanmamış bir dış çağrı, kâğıt üzerinde son derece temiz görünür. Sahada ise şu olur: karşı taraf yavaşlar, istekler birikir, havuzdaki bağlantılar tükenir ve tek bir yavaş servis, tüm uygulamayı durdurur.
Bunu bir kez yaşadıktan sonra her dış çağrıya bakışınız değişiyor.
Yazılım tarafının bana öğrettikleri
Geçişin tersi de doğru. Yazılım tarafı bana sistemcilikte hiç öğrenmediğim bir şeyi öğretti: tekrarlanabilirlik.
Sistem dünyasında bir sunucuyu elle kurarsınız, çalışır ve o kurulumun nasıl yapıldığı çoğu zaman kimsenin aklında kalmaz. Yazılımda ise her şey bir kaynağa yazılıdır; aynı sonucu yeniden üretebilirsiniz. Sürüm kontrolüne alışmak, sistem tarafında yıllarca yaptığım işin ne kadar kırılgan olduğunu bana geriye dönük gösterdi.
İkinci öğrendiğim şey test etmekti. Sistemcilikte doğrulama genellikle “bir de sen dene” cümlesidir. Yazılımda ise doğrulamayı yazıp otomatikleştirebiliyorsunuz — ve bu, gece üçte çalan telefonu azaltan en somut şey.
On beş yılda damıtılan üç ilke
| İlke | Nereden geliyor |
|---|---|
| Basit olan kazanır | Karmaşık kurulumların gece üçte anlaşılmaz olması |
| Geri dönüş planı olmayan değişiklik yapılmaz | Geri alınamayan bir güncellemenin bedelini bir kez ödemek |
| Görünmeyen sistem yönetilemez | Kayıt tutmayan bir sistemde arıza aramanın imkânsızlığı |
Bu üçü bugün kod yazarken de aynen geçerli. Karmaşık bir soyutlama yazdığımda kendime soruyorum: bunu altı ay sonra, sorun çıktığı gece anlayabilecek miyim? Cevap net değilse sadeleştiriyorum.
Şimdi ne yapıyorum?
Bugün ağırlıklı olarak yazılım tarafındayım; ama sistemciliği bırakmış değilim, çünkü ikisi aynı işin iki yüzü. Yazdığım her uygulamanın bir yerde çalışması, bir yerde yedeklenmesi, bir gün de bozulması gerekiyor.
Bapati’de anlattığım konuların iki başlıkta toplanmasının nedeni de bu: bir tarafta Active Directory, Exchange ve sistem yönetimi; diğer tarafta .NET, mimari ve kod. İkisini ayrı ayrı öğrenmek mümkün, ama birlikte öğrenildiğinde çok daha anlamlı hâle geliyorlar.
On beş yılda öğrendiğim en kısa ders şu: sistemler kod kadar, kod da sistemler kadar iyidir.
Bu iki tarafı bir arada taşımanın bir maliyeti de var: hiçbir tarafta “tam uzman” sayılmıyorsunuz. Yazılımcıların çoğu sistem tarafını bilmiyor, sistemcilerin çoğu kod yazmıyor ve siz ikisinin arasında bir yerde duruyorsunuz. Uzun süre bunu bir eksiklik gibi gördüm.
Zamanla tersinin doğru olduğunu anladım. Bir uygulamanın neden yavaş olduğunu tartışırken masada oturan tek kişi olabiliyorsunuz — çünkü hem sorgunun nasıl çalıştığını hem de o sorgunun gittiği sunucunun diskinin ne yaptığını biliyorsunuz. Bu, kimsenin özel olarak öğretmediği ama sahada en çok işe yarayan beceri.
Bugün genç birine tavsiyem şu olurdu: hangi taraftan başlarsanız başlayın, öbür tarafı da bir miktar öğrenin. Yazılımcıysanız bir sanal makine kurup ağını kendiniz yapılandırın; sistemciyseniz küçük bir betikle başlayıp gerçekten bir program yazın. İki tarafın sınırında geçirilen zaman, tek tarafta geçirilen zamandan daha çok şey öğretiyor.
Bir de şu var: sahada geçen yıllar insanı teknolojiye karşı temkinli yapıyor. Yeni bir araç çıktığında ilk sorum artık “ne yapabiliyor” değil, “bozulduğunda ne oluyor ve kim bakıyor”. Bu temkinlilik bazen yavaşlatıyor, ama bugüne kadar beni birkaç kez ciddi hatadan da korudu.
Aynı temkinlilik yeniliğe kapalı olmak anlamına gelmiyor. Yeni bir teknolojiyi önce kendi ortamımda, bozulduğunda kimseyi etkilemeyecek bir yerde deniyorum. Orada güven verirse işe giriyor. On beş yılda değişmeyen tek alışkanlığım bu oldu.
Daha fazlası: Sistem tarafında anlattıklarımın uygulamalı hâlini Active Directory serisinde bulabilirsiniz.
Videoyu sitemizde izle · YouTube'da aç · Bapati kanalına abone ol

