26 Eylül 2014 Cuma

"Geriye" Doğru Uyum

Bir uçak düşünün, 120,000 metre irtifa ve toplam yaklaşık 200 kilometre mesafeden bir havaalanına indirmeniz isteniyor. Uçağı indirmek için size verilen süre 1 saat. Ayrıca bir koşul daha var, ana motorlarınız çalışmıyor. Uçağı indirmek için harekete geçtiğiniz andan itibaren pas geçme hakkınız da yok.

Bunun neredeyse mümkün olmadığını düşünüyorsunuz öyle değil mi? Hatta uçaktan korkan biri için çok kötü bir şaka gibi de gelebilir. Ama yanılıyorsunuz. Yakın geçmişin teknolojisi ile geliştirilen uzay mekiklerinin mürettebatları bunu her uzay yolculuğunda yaptı. Mekiğin dünyaya dönüşünde ana motorların hiçbiri çalışmıyor. Dönüş yolculuğu başladığı andan itibaren pas geçme hakkı bulunmuyor ve mevcut irtifa ve mesafeden pisti tam tutturmaları gerekiyor. Zaten bu nedenle eskiden bir kullanımlık olan uzay araçlarından farklı olarak bunlara mekik adı verilmiş.

Uzay mekiğinin uçuş manevraları birbirine benzer 5 bilgisayar tarafından kontrol edilir. Bunların 4’ü yazılım ve donanım olarak birbirinin tamamen eşdeğeri olarak üretilmiştir. 5. bilgisayar ise farklı tasarıma sahip olmasına rağmen aynı işlemleri yapar. Aktif çalışan 4 bilgisayar elde ettikleri sonuçları birbirleriyle karşılaştırırlar. Eğer içlerinden biri çoğunluğun elde ettiği sonuçtan farklı bir sonuca ulaşırsa, çoğunluk tarafından devre dışı bırakılır. Kalan 3 bilgisayar aktif olarak çalışmaya ve sonuçları karşılaştırmaya devam eder. İşlemler böylece sürer gider. Eşitlik durumunda, örneğin 4 bilgisayardan ilk ikisi bir sonuca, diğer ikisi de birbirinin aynı başka bir sonuca ulaşmışsa kura çekilir. Kazananlar devam eder, diğerleri devre dışı kalır. 4 aktif bilgisayarda da hata olursa, farklı yazılım ve donanımla aynı işi yapan 5. bilgisayar devreye girer. Tüm bunlara rağmen bilgisayarların tamamı devre dışı kalırsa mürettebat iniş işlemini manuel yürütür. Bu esnada da şimdiki modern uçaklarda kullanılan "fly-by-wire" teknolojisi kullanılır. Yani mürettebatın manevra için yaptığı kontroller doğrudan hidrolik sistemlere gitmez, kablolar aracılığıyla küçük servo-motorlara iletilir. Servo-motorlar da gerçek uçuş birimlerini kontrol eder.

İniş esnasında mekik doğru süzülme açısı ile yerküreye ilerler. Bilgisayarlar, dünyanın dönüş hızını dikkate alır, yerküreye yaklaşırken havada dairesel hızın yeryüzündeki doğrusal hıza dönüşüm hesaplarını yapar ve izdüşümü mesafesini bulur. Bulunan sonuca göre de pozisyonda düzeltmeler yapılır. Yörüngeden ayrılıp teker koyana dek iniş boyunca mekiğin hızı saatte 30.000 km’den 350 km’ye düşürülür. Bunun için mekik atmosfere ters takla atarak girer, sonra da bir düz takla atarak doğrulur. Sonrasında da bir dizi "S" biçimli dönüş yapar. Süzülme esnasında saniyede 50 metre gibi bir değerle irtifa kaybeder. Bu esnada olabilecek hava olaylarını hiç anlatmayayım. Doğrusu her düşündüğümde büyülenirim ve insanların teknolojide ulaştıkları noktaya tekrar tekrar şaşırırım.

Gelelim yazılım dünyasında "geriye doğru uyumluluk" konusuna. Yeni geliştirilen bir ürün, eski sürümler veya teknolojiler tarafından da kullanılabiliyorsa "geriye doğru uyumlu" olarak nitelenir. Geriye doğru uyumluluk konusu eğer abartılırsa yaratıcılığı önler ve gelişimi durdurur. Kullanıcılar çoğunlukla geriye doğru uyumluluk ister, yazılım geliştiriciler ise yeni kabiliyetleri kullanmak için bundan vazgeçmek etmek ister. Amacım burada kimin haklı, kimin haksız olduğunu tartışmak değil. Fakat konuyu uzay teknolojisine benzeştirirsek geriye doğru uyumluluk, uzay mekiğinin Roma İmparatorluğu dönemindeki ilk atlı arabalar ile uyumlu üretilmesine benzer. Evet, kulağa komik geliyor, ama teknoloji harikası uzay mekiği ile Roma İmparatorluğu dönemindeki atlı arabalar arasında bir tür uyumluluk var. Şaşırdınız mı?

Romalılar ilk atlı arabaları tasarlarken, dengeli ve rahat bir sürüş için arabayı koştukları at ile tam olarak paralel olmasına dikkat ettiler. Daha yüksek performans içinse iki atı yan yana arabaya koştular. Hatta ikiden fazla at kullandıklarında da atları ikili sıra halinde yan yana koştular. Dengeli sürüşün koşulu paralellik idi ve bunu iki at için uyguladıklarında arabanın eni, yan yana duran iki atın her birinin ortasından geçen kesitler arasındaki mesafe kadar olmalıydı. Mükemmel arabanın genişliğini bu şekilde hesapladılar. 1800’lü yıllarda Amerika Birleşik Devletleri’nin ilk demiryolları tasarlandığında, geriye doğru uyumluluk kaygısı ile vagonların genişliği eski atlı arabalar ile aynı yapıldı. Böylece tren rayları arasındaki mesafe, 4 feet ve 8.5 inch, yani yaklaşık 142 cm olarak belirlendi. Bu hesaba göre raylar döşendi, tüneller açıldı ve trenler geliştirildi.

1981 yılında ilk görevine gönderilen uzay mekiği Columbia’nın tasarımında ilk kalkış için sağda ve solda olmak üzere iki katı yakıt tankı kullanıldı. Yakıt tankları Florida’da kalkış rampasının olduğu üsse Utah’tan trenle getirildi. Tren yolculuğunu ve tünellerin genişliğini hesaplayan mühendisler yakıt tanklarını buna uygun genişlikte tasarladılar. Geriye doğru uyumlulukta ısrarcılık bir kez daha tasarımcıları sınırlandırdı ve belki de geliştirilebilecek daha iyi çözümleri engelledi.

Roma İmparatorluğu’nun atlıları uzay mekiğini hiç göremedi ama onun teknolojisine bir şekilde etki etti. 1986 yılında yakıt tankındaki çatlakta oluşan sızıntı nedeniyle kalkıştan kısa bir süre sonra infilak eden Challenger’ın sonunu geriye doğru uyumluluk mu getirdi bilemeyiz. Ama benim düşünceme göre her şeyi silip sıfırdan başlamak size her zaman yeni ufuklar açar. Değilse kendinizi bir anda "atların gerisine" kadar uyumlu bulursunuz.

9 Eylül 2014 Salı

Basitin Güzelliği

Bundan uzun yıllar önce bilgisayara aynı anda birden fazla iş yaptırmak büyük bir hayaldi. "Çoklu görev" (multi-tasking) olarak bilinen bu hayal için bilişim dünyasının önde gelen isimlerinin neredeyse tamamı yarışıyordu. Aynı anda birden fazla iş yapmak üzere işlerin yönetimini devralacak bir nevi orkestra şefine ihtiyaç vardı. O dönemde zaten kısıtlı işlem gücünü bölüştürme sorunu bir yana, orkestra şefinin de var olan işlem gücünden tüketmesi ayrı bir sorundu. Herkes mükemmel algoritmaların peşinde idi.

1964 yılında geliştirilen işletim sisteminin mottosu adına da yansımış, birden fazla işi yapan anlamında "Multics" adını almıştı. 1970 yılında Brian Kernighan ve Dennis Ritchie ise, geliştirdikleri işletim sistemini hem çoklu görev için tasarlamış, hem de "Multics"e nazire yaparak adını "Unics", ya da daha sonra popüler hale gelen adıyla "Unix" olarak vermişlerdi. Geliştirdikleri işletim sistemi basit temellere dayanıyordu. İşletim sistemi ile beraber programlama dünyası için de büyük bir adım sayılan C programlama dilini de geliştirdiler. Nesneye dayalı programlamanın (Object Oriented Programming) temellerini atan ikili, üst sınıf, alt sınıf, kalıtım, arkadaşlık gibi birçok sosyal kavramın da bilişim dünyasındaki karşılıklarını tanımlamış oldu.

Basitliğin güzelliğini yalnızca işletim sisteminde değil, Kernighan ile Ritchie’nin "The C Programming Language" adlı kitabında da görürüz. C programlama dünyasına ilk adım attığımda bana bu kitabın C ile iligli her detayı tartışmaya yer vermeyecek düzeyde içerdiği anlatılmıştı. Bunu ilk duyduğumda anılan kitabın kalın ve hatta birkaç ciltten oluştuğunu düşündüm. Kitap elime geçtiğinde ise hem şaşırdım, hem de Kernighan-Ritchie ikilisine olan hayranlığım bir kat daha arttı. 272 sayfadan oluşan kitap tek ciltti, ve gerçekten de tartışmaya yer vermeyecek kadar basit ama detaylı kurallar içeriyordu. Hatta elimdeki kitap ikinci basımdı ve ilk baskıda sayfa sayısının daha da az olduğunu öğrendim. Kitapta anlatılan hali ile programlama dili, "Standart C" anlamında "ANSI C" (American National Standards Institute) olarak adlandırıldı. Kernighan-Ritchie ikilisi kitabın önsözünde şöyle der:

"C dili büyük bir dil değildir, ve büyük bir kitap da ona hizmet etmez."

Kitabın içinde yalnızca anlatım değil, konuyu iyice pekiştiren özgün örnekler de vardı. Örneklerin tamamı çalıştırılabilen kodlardı ve aralarında en ünlüsü, görüntü çıktı birimine "hello, world" yazısını yazdıran program idi. Bu örnek gelenekselleşerek tüm programlama dilleri için eğitimlerde ilk uygulanan örnek haline geldi.

Unix işletim sistemi ve C programlama dili zamanla evrimleşip farklı kurumlar ve topluluklar tarafından yeniden yorumlandı. Hatta Linus Torvalds’ın geliştirdiği "Linux" işletim sisteminin de atası oldu. Unix ilk zamanlar performans gerektiren ve son kullanıcıların doğrudan etkileşim kurmadığı uygulamalar için kullanıldı. Bugün dünyada halen kullanılan süper bilgisayarların %99,6’sı Unix ve türevi işletim sistemi kullanılıyor. Son kullanıcıya, yani bizlere hizmet eden Unix türevleri ise son yıllarda akıllı telefonlar ve tabletler ile yaygınlaştı. Akıllı telefon ve tabletlerde halen %79,3 oranında Unix ve türevi kullanılıyor. Bunu ne yazık ki pek kimse bilmiyor.

5 Ekim 2011 günü beni oldukça üzen Steve Jobs kaybının hemen ardından, 12 Ekim 2011 günü de Dennis Ritchie’yi kaybettik. İki ölüm haberinin ardından dünyanın verdiği tepki, bilişim dünyasının doğasına uygundu. Son kullanıcılar, yani dünyanın neredeyse tamamı Steve Jobs için yas tutarken, yalnızca ofis ardındaki bilişimciler ve programcılar Dennis Ritchie’nin kaybını duymuş ve üzülmüştü. Benim içinse her ikisinin de değeri aynı ve tartışılamaz. Fakat şunu söylemeliyim ki, Kernighan ile Ritchie’nin C dünyası olmasaydı, Steve Jobs’un Objective C dünyası olmazdı.