Murphy kanunu, “birşey bozulabilecekse, bozulur der”. Elbette epigramlar üzerinden sistem analizi, mühendislik ya da rasyonel çıkarımlar yapamazsınız ama (bazı kompleks sistemler inanılmaz derecede efektif çalışabilirler) gerçek hayatta bu önermeler genelde gerçeklenirler. Zira hayatın her alanı rasyonel kararlar, mühendislik ya da algoritmalardan ibaret değildir. Hatta birçok mühendislik kararı bile duygular, egolar, zaman ve bütçe sınırlamaları, müşteri kaprisleri ya da projede çalışanların sevgilileri tarafından şekillenir!
Yaklaşık 1 saat önce, daha 1 ay önce başladığım mini projelerimden birini açtım. Açmamla beraber dehşete kapılıp tamamen uçurmam bir oldu. Üzerinde 3 saat bile çalışmadığım bu mini-iş, 8 saatlik bir refactoring ile bile anlaşılabilir hale gelmekten uzaktı. Özellikle yazılım projelerinde önünüzde iki seçenek vardır: ya herşeyi kitabına uygun yaparsınız ve proje aylar sonra bile devam ettirilebilir olur, ya da herşey daha kafanızdayken, hiçbir planlama yapmadan projeyi çok kısa sürede bitirirsiniz. İkinci yöntem, kafa rahatlığı gerektirir. Böyle durumlarda yemek yemeyi bile atladığım olur; çünkü klavyenin başından kalktığım an yaptıklarımın yarısı kafamdan uçar ve geri döndüğümde “ben ne yapıyordum?” diye dehşete düşerim. Bu tip projeler, istisnai olarak başarısız olacaklardır diye bir kural da yoktur. (Seneler önce yazdığım bazı scriptleri, şöyle bir bakınca neye yaradığını anlamadığım halde kullandığım oluyor)
İkinci tip projeler daima “software Peter Principle” denen kuralın kurbanı olurlar. Yazılım giderek karmaşıklaşır, platform ve middleware değiştiremez hale gelirsiniz; ki ikinci problem birsüre sonra birincinin bile önüne geçer. Birkaç ay sonra baktığınızda “bunu kim yazdı?” diyebilirsiniz. O anda, proje ölmüştür ve bir değişiklik yapmanız gerektiğinde, herşeyi çöpe atıp baştan başlamanız gerekir.
Yazılıma web projelerinden bulaşmadım; dolayısıyla ortalama web programcısına göre daha disiplinli, organize ve ileri görüşlüyüm diyebilirim. İster inanın, ister inanmayın, web projelerinin tümü, bugün ya da yarın, öleceklerdir. Bunun nedenleri de oldukça basit:
- Web yazılımları, zaman baskısından dolayı daha plansız, daha açık söyleyeyim, baştan savmadır.
- Yine zaman baskısından (bazen de tembellikten ötürü) çok fazla middleware kullanılır ve bu “zaten kendini ispatlamış ve sağlam araçları kullanarak hata ve güvenlik olasılığını en aza indiriyoruz” diye özetlenir. Gelgelelim, kullandığınız birçok middleware’ın, framework’un, servisin yazarlarının da kafası en az sizin kadar karışıktır!
- Web projelerine herkes burnunu sokabilir. Bir otomobilin enjeksiyon sistemini programlıyorsanız, tasarım departmanı, şasi mühendisleri, pazarlamacılar, bayiler ya da müşteriler işinize karışmayı akıllarının ucundan bile geçirmezler. Arabayı kullanan birinin, “acaba bu sistem ne kadar efektif ve güvenilir” dediği vaki değildir. Çalıştığı sürece kimse umursamaz; ancak çalışmazsa dünya başınıza yıkılır. Web projeleri ise böyle değildir; çünkü daha “sosyal” bir işlevleri vardır. Üstelik, “yarım yamalak” çalışsalar bile kimse buna pek aldırmaz.
- Web projeleri tek elden çıkmazlar (genelde). Tabiki Photoshop ya da Unreal 2 motoru da tek kişi tarafından yazılmamıştır; ama bu tip projelerde proje müdürü kullanacağınız değişkenin maksimum kaç karakter olması gerektiğine bile müdahale eder. Herşey son derece planlıdır; dolayısıyla yoğun standardizasyon sonucu kodu okuduğunuzda, o bölümü A’nın mı, B’nin mi yazdığını anlayamazsınız. (Serbest bıraktığınızda, herkesin bir “stili” vardır) Oysa web projelerinde durum böyle değildir. Ortalama bir ajansta, HTML ve CSS önyüz programcısından, Javascript (tercihen) bu işte uzmanlaşmış birinden, business logic ise bir başkasından çıkar. Bunların doğru dürüst entegre edilmesi bile bir sorundur; çünkü genelde hiçbiri birbirinin “diline” hakim değildir. Daha kötüsü, bu tip projelerde bir proje yöneticisi de olmaz.
Farkındaysanız, daha bri kez olsun “Facebook” kelimesini kullanmadım; başlık hariç!
Şimdi Facebook meselesine dönebiliriz!
Facebook, aslında Linkedin, Foursquare ya da diğer devasa projelerden çok farklı değil. Onu seçmemin nedeni, dünyanın en çok ziyaret edilen sitesi olması, uygulama desteğinin açık ara gelişmiş olması ve diğerlerinden çok daha fazla çalışanı ve ziyaretçisi olması.
Birazcık kaşar bir programcı, geliştirici belgelerine baktığında, durumun nasıl hızla büyük bir çıkmaza gittiğini görebilir.
Facebook, sürekli olarak yeni araçlar ekliyor, eskilerin bazılarını kaldırıyor, bu arada bazı “çalışan şeyler” zaman zaman çalışmamaya başlıyorlar, aradan sıkça bazı belgeler “sırra kadem basıyor”; bunlar olurken, örneğin Facebook uygulamalarında ne yapıp ne yapamayacağınızı belirleyen şirket kuralları da sürekli güncelleniyor. Sorunu farkettiniz mi? Güncellenen kurallara göre, Facebook mutfağında çalışan programcılar, entegratörler, sistem yöneticileri sürekli olarak birşeyleri değiştirmek, güncellemek, iptal etmek ya da askıya almak durumundalar.
Aynı durum, üçüncü parti uygulama geliştiricileri için de geçerli. Bir uygulama geliştiricisi için, Facebook tekinsiz biryer; çünkü yazdığınız şey yarın 3′de çalışmayabilir ve siz hatanın nerede olduğunu anlayamayabilirsiniz. (Uygulama geliştiricileri için, belli zamanlarda hangi API’lerin çalışmadığını gösteren bir sayfa bile var!). Dışardan uygulama geliştirenler için durum böyleyken, içerideki karmaşayı düşünün!
Facebook bu karmaşayı yönetemeyecek kadar aptal mı diye sorabilirsiniz. Elbette değil. Benzer bir soruyu şöyle soralım: Altavista salak mıydı da bayrağı Google’a kaptırdı?
Elbette hayır. Web projelerinin bir ömrü var. Facebook biliyor ki, daha iyi bir fikirle ortaya çıkacak birileri, kendilerini 1 senede alaşağı edebilir. O yüzden de, çılgınca bir hızla sürekli birşeyler eklemeye, kullanıcı deneyimini zenginleştirmeye (iyileştirmeye demiyorum; çünkü burada önemli olan kullanıcının yeni birşeyler bulması, kusursuz, hatta iyi çalışması şart değil!) çalışıyorlar. Hızla değişmek, maddi güce, ekibe ve pazar liderliğine sahipseniz, bu alanda ayakta kalmanın tek yolu (Bu Intel ya da Mercedes için geçerli değil; fiziksel meta sözkonusu olduğunda değişim çok daha yavaş olur)
Kullandıkları sistem birsüre sonra yönetilemez hale gelecek; nitekim bu durumla FBML’de karşılaşmış olmalılar ki, radikal bir şekilde FBML’i bitirdiler. (Eski bir FBML uygulamanız varsa hala çalışıyor; muhtemelen “sandbox” ortamı gibi, izole ve kısıtlı sayıda sunucu üzerinde, birsürü yama çözümle entegre edilmiş olarak) Giderek çok daha basitleşiyorlar. Şu an bir Facebook uygulaması, iframe içinde çalışan herhangi bir uygulamadan çok farklı değil (çoğu doğru dürüst dokümante edilmemiş sürüyle API’yi saymazsak).
Facebook’u nasıl alt edebilirler? Bence sonu mobil uygulamalar yüzünden gelecek; eğer ortaya “Nicebook” gibi bir site çıkar ve çok daha kuvvetli ve basit bir mobil uygulama platformu sunarsa, Facebook 5 sene içinde adını unuttuğumuz Altavista gibi web projeleri arasındaki yerini alabilir. Şu an Facebook’un teknik altyapısı bana göre son derece problemli. Dokümantasyon son derece kötü. Üstünlüğü, teknik bir üstünlükten ziyade, sürdürdüğü pazarlama stratejisinin -akıllıca- simbiyotik doğasından kaynaklanıyor. Bu, uzun vadede, web gibi kaygan bir zeminde tehlikeli bir strateji. İnsanlar Facebook üzerinde “gerçek para” harcıyorlar ve bu yüzden gerek ajansların, gerek müşterilerin, gerekse kullanıcıların gözünde “sağlam” bir platform. Öte yandan, web’de işlerin para harcayanlar tarafından değil, kullanıcılar, hatta yazılım geliştiriciler tarafından yönlendirildiğini unutmamak gerek.
Üstüne üstlük; Facebook, bir yazılım projesi olarak, yazımın en başında değindiğim bazı ciddi marazları (ve çok daha fazlasını) da, doğası gereği, bünyesinde barındırıyor:
- Çok ama çok fazla middleware kullanıyorlar.
- Ekip çok kalabalık.
- Sunucu ve bant genişliği harcamaları akılalmaz düzeylerde.
- Üçüncü parti yazılım geliştiricileri için, en zorlu platform.
- Facebook, Google gibi teknokratlar tarafından yönetilen bir platform değil. Google gibi, yavaş ve sistematik gitmiyorlar. Bu yüzden, kod kalitesi ve kararlılık olarak zaafları olması doğal.
- Google ve Twitter’ın aksine, Facebook’un kurucusu formal bir mühendislik eğitimine sahip değil ve bunun kurum kültürüne yansımasını bir programcı gözünden anlamak hiç de zor değil. Facebook, teknik kusursuzluğa değil, hızlı değişim ve satışa oynuyor. Bunun avantaj mı, dezavantaj mı olduğu tartışılır; belki de Zuckerberg de şirketin devamlılığından şüphe ediyor ve agresif bir şekilde, batana kadar, toplayabileceği tüm parayı toplama derdinde! (Doğrusu, onun yerinde olsam, ben de aynısını yapardım!)
Sonuç olarak, hiçbir Internet şirketinin “asırlık” olamayacağını kabul etmek gerekiyor. Çok istisnai bir alanda oynayan Google bile, 1-2 senede yerle bir olabilir. Şartlar sadece şirketler için değil, programcılar için de nankör. Zork’u, Tetris’i, Emacs’ı, hatta Doom’u yazanlar 100 sene sonra da hatırlanacaklar, muhtelemen 10 sene sonra ise Zuckerberg adı silinmiş olacak.
Bu haklı tepkimize bir kulp takamayan bazı iç ve dış mihraklar, bilgilendirici yasak sayfalarımızla “köhne,demode” diye
dalga geçmeye başlamışlar. İyi ve uyumlu bir vatandaş olarak, sırf bizi zararlı neşriyattan korumak için canını dişine
takıp yorgunluktan mesai başında uyuklayan büyüklerimiz için, web 2.0 trendine uygun bir sayfa hazırladım. Modern
tasarım öğeleriyle retrokıro bir harman gerçekleştirmeye çalıştım. Umarım başarılı olmuşumdur.
Ayrıca naçizane bazı PR çalışmaları da yaptım; örneğin “pembe el” kampanyası gibi. “El koyma” gibi itici gibi görünen
bir kavramı, pembe gibi neşe ve canlılık veren bir renk tonuyla kırmayı hedefledim. Ayrıca ihbar sitelerini de
eski cansıkıcı ve kullanıcı etkileşiminden uzak bir yapıya büründürmeyi hedefledim. Bu önemli sosyal projelerimden
biri gammazr.net. Artık ispiyoncu vatandaşlarımız, ayrıldıkları fraksiyonlara göre arkadaş grubu oluşturabilecek,
birbirlerine yorum yazıp rep verebilecek, parti rozeti takabilecekler. Gururla arz ederim.
Bir süredir özgür yazılımla kanka olduğu izlenimi veren Google Labs, bu sefer Chrome ile nabız yokluyor.
Chrome, Firefox’dan KHTML’e kadar (Apple Safari) birçok “iz barındıran”, Google’ın yeni web tarayıcısı. Açıldığında, Opera ile Internet Explorer 7 karışımı bir browser ile karşılaşıyorsunuz. Açıkçası, hızını ve web sayfalarını doğru render etme özelliğini oldukça kayda değer buldum. Sayfanın görüntülendiği alanın oldukça büyük olması da artılarından biri; zira çoğu kullanıcı gibi bende F11 tuşunu kullanmayı sevmiyorum.
Bunun yanında, “öğeyi denetle” isimli çok hoş bir sağ tuş menüsü var. Bu araç, Mozilla Firefox’da vazgeçemediğim Firebug eklentisini andırıyor. Andırıyor diyorum; zira Firebug ile kıyaslandığında son derece primitif duruyor. Buna rağmen, yine de faydalı bir araç ve ilk çıkan sürümde olması gelecek vadedebileceğinin işaretlerini veriyor.
Sekmeli tarama özelliği elbette mevcut ve Opera’da yıllardır olduğu gibi, açılış sayfasına sık ziyaret ettiğiniz siteleri atabiliyorsunuz.
Oldukça etkileyici render hızı dışında, tarayıcının yüklenme hızı da gerçekten iyi. İlk dikkatimi çeken özelliklerden biri de, mouse’un scroll tuşunu kullandığımızda, sayfanın hızlı ve akıcı bir şekilde kayması oldu. Özellikle bloglar gibi, tuvalet kağıdı uzunluğunda sayfalar için küçük ama kullanımı kolaylaştıran, zekice bir detay.
Genel çalışma mantığı olarak, fena halde Firefox’u andırıyor; özellikle de sağ tuş menüleri.
Yine de, Google Chrome projesinden, bir nedenden ötürü hoşlanmadım: Firefox, kendi istatistiklerime göre, Türkiye genelinde bile %25 sınırını zorlarken, Google Chrome, Firefox’un hızını kesebilir. Bana göre Google’ın Mozilla Foundation’a maddi destek sağlaması, her ikisi açısından da daha olumlu bir adım olurdu.
İlk bakışta eklenti desteği yok gibi görünüyor; ancak Mozilla kodları zaten açık olduğundan, şayet isterlerse bu desteği de sağlamak zor değil. Bana daha çok, eski Intenet Explorer kullanıcılarını “caydırmak” için ortaya çıkmış, kullanımı basit ve temiz bir tarayıcı oluşturma çabası gibi geldi Chrome; belki bu yüzden, ileride çok gelişmiş özelliklere sahip olmasını beklemek yanlış olur.
Talihsiz şekilde neticelenen Blogmani projemden sonra, ikinci kez WordPress ile çalışmaya başladım. Bu projeyi yakında duyuracağız ve bu sefer, Blogmani’den çok daha fazla kodla geliyor.
Blogmani tutmadı çünkü işim bittiğinde sonuçtan memnun kalmadım ve açıkcası, daha fazla geliştirecek takati bulamadım. Tam da bu sırada bazı işler,projeler ortaya çıktı ve Blogmani ölü projeler listemdeki şanlı yerini aldı. Elbette, “fikir ölümü” gerçekleşmedi; Blogmani’yi cilalayıp parlattıktan sonra tekrar canlandırabilirim; ama şimdi değil.
Wordpress inanılmaz esnek bir sistem ve yeni projenin kodlamasının sonlarına doğru, “birgün Internetteki tüm sitelerin en az yarısı WordPress tabanlı olacak” dedim. Bunun olmaması için neden göremiyorum; öyleki, Techcrunch gibi Alexa’nın tepesini parselleyen siteler bile WordPress kullanıyorlar.
WordPress, yeni şeyler yapabilmeniz için eşsiz bir API içeriyor. Üstelik, inanılmaz güçlü ve yeterince hızlı. Tek kusuru, oldukça zayıf dokümantasyon. PHP’de fena olmadığım için, neyin ne işe yaradığını, nereye bağlandığını bularak, birazda fırfır yaparak WordPress’e istediğimi yaptırabiliyorum. Nedense WordPress CMS olarak hala yaygın olarak kullanılmıyor; oysa şimdiye kadar salt web sitesi olarak, WordPress tabanlı birkaç site yaptık. Joomla ve Drupal’den daha esnek, daha hızlı, öğrenilmesi daha kolay ve kesinlikle daha kullanıcı dostu.
Zayıf dokümantasyonun özellikle orta düzey PHP programcılarını yıldırdığını düşünmekteyim. Çok fazla sayıda eklenti olmasına rağmen, inanın o eklentilerin yaptığı işin çoğunu 2-3 satır kodla kendiniz yapabilirsiniz. Çok basit bir örnek; kategoriler listesinde bir kategorinin görünmemesini istiyorsunuz. Bunun da ID’si 2 olsun. Tek yapmanız gereken, sidebar.php içindeki wp_list_categories fonksiyonunu bulup, wp_list_categories(“exclude=2”) şeklinde değiştirmek. Bu işi bir widget yapıyorsa sorun yok; eklentilerden widget’ı bulun, düzenleye tıklayın, bahsettiğim fonksiyon onun içindedir.
Benzer şekilde, otomatik sayfa oluşturma gibi işlemler de, basit bir class ile yapılabiliyor. Tek bilmeniz gereken, bu class’ı nasıl kullanacağınız. Tahmin edeceğiniz üzere, bu da dokümante edilmemiş!
Bu işte bir bit yeniği olduğunu düşünüyorum. Kod çok karmaşık, dağınık, fazla ve birçok ayrı dosyanın içinde toplanmış. Aradığınızı bulmanız çok güç. Ancak iki projeden sonra koda aşina olduğum için, artık aradığımı nispeten kolayca bulabiliyorum. Bence WordPress’ciler dokümantasyonu özellikle pas geçiyor olabilirler; zira birçok Open Source projenin sahibinin destekten önemli paralar kazandığını biliyorum. Bugün Mozilla olsun, Apache olsun, gayet zengin vakıflar kurdular.
Eklentilerle ilgili uyarı: bir işi kodla yapabiliyorsanız, siteniz oturmuş bir siteyse, çok hit alıyorsa ve hız önemliyse, eklentinin yaptığı işi kodla yaptırmaya çalışın. Sırf eklentinin zorunlu olan başlık kısmı bile neredeyse 2kb tutuyor. Üstelik, kullanmadığınız yerlerdeki hook ve filter’lar boşu boşuna çalışarak hem sayfa büyüklüğünü artırıyor, hem de sunucuya yük bindiriyor.
Türkiye’nin yurtdışı Internet çıkışı yerlerde sürünüyor…
Sanırım bazı yerlerde pilot VDSL uygulaması başlandı. 30Mbit hızlardan bahsediyoruz. Ne olacağını söyleyeyim: yurtdışı çıkışı artırılmazsa, birsüre sonra Google’ı bile açamaz hale geliriz. Zaten, gün içinde bile bağlantı hızları vadedilen hızların yarısına düşüyor zaman zaman…
Benim bildiğim Türk Telekom, yurtdışı çıkışını artırmak için kolay kolay parmağını kıpırdatmaz. Keza, İtalya’da da durum böyledir. Peki neden VDSL’i getirdiler derseniz, açıklaması basit: IPTV istiyorlar, Doğan grubu bu işe çuvalla para harcamaya hazır. Yani o yatırım biz Internet’te gezip tozalım diye değil, bir de IP TV’ye para verelim diye yapılıyor. Yayın, yurtiçinde yapılacağı için, yurtdışı çıkışını da artırmaya gerek yok. Tatlı para yani.
Sizce Türkiye’nin toplam yurtdışı bant genişliğinin ne kadarını YouTube kaplıyor? İyimser bir tahminle %40 diyorum. Hatta %60 bile diyebiliriz. “Atıyorsun” diyen varsa, Türk Telekom’da “sağlam” bir tanıdığı olanlara sorsun. %30′un altında bir rakam gelirse, bilgisayarımı filan bir fukaraya verip bu işlerden elimi eteğimi çekeceğim.
Etrafınızdaki insanların ne kadar YouTube kullandıklarına bakın (artık bakamazsınız hoş!). YouTube’un 5-6 dakikası yaklaşık 20MB bant genişliği götürüyor. Harddiskindeki MP3′ü çalmaya üşenip arkada YouTube’dan klibini oynatanları biliyorum.
Kısacası, çoğumuz kan ağlarken (Tahtakale’de bayağı takıldım!) Türk Telekom bayram ediyor…
Umarım Telia Sonera bir şekilde gelir ve bu tantanadan kurtuluruz…