Django vs. PHP
Django vs. PHP
Ben, 10 yılı aşkın bir süredir ağırlıklı olarak web uygulamaları geliştiren bir yazılımcıyım. PHP3 zamanından 1-2 sene öncesine kadar da tercihim hep PHP olmuştu. İstediğim herşeyi yapabiliyordum. Kendi kütüphanelerimi geliştirmiştim. Bir çok açık kaynak kodlu projeden faydalanabiliyordum. Zaten bütün dünyada PHP rüzgarları esiyordu. Ben de o rüzgarla yolumu alıyordum.
Ama bazı rahatsızlıklarım vardı. Tekrar tekrar aynı kod parçalarını yazıyordum. Bunu olabildiğince engellemek için kütüphaneme genel maksatlı çeşitli nesneler ekledim.
URL ‘lerin yapısı hoşuma gitmiyordu. Bunun için server konfigurasyonu ile oynayarak tüm istemci isteklerinin önce bir PHP dosyasına girmesini ve oradan ilgili fonksiyonlara yönlendirilmesini sağlayacak bir yapı kurdum. Böylece “/blog/guncel/” gibi temiz görünümlü URL ‘ler kullanabilmeye başladım.
Bunun gibi bir takım zorlamalarla PHP’yi istediğim çizgiye çekmeye çalışıyordum ki, Django ile tanıştım. Yapmaya çalıştığım şeylerin daha kapsamlı ve tutarlı biçimleriyle zaten Django’da var olduğunu gördüm. İnsana yıllarca tecrübe edindiği bir dili bırakmak zor gelebilir, ama ben yapmaya çalıştıklarımın doğru olduğunu anladım. Başkaları da bu sorunları yaşamış ve konuyu temelden farklı bir yaklaşımla çözmüşlerdi. Kendim bu sorunları bu kalitede çözemiyordum. Django, herşeyden önce, nesne tabanlı yaklaşım doğasının bir parçası olan Python ile yazılmıştı. Ayrıca arkasında web uygulamaları geliştirmenin problemlerini şık bir şekilde çözmeye odaklanmış geniş ve aktif bir grup vardı. Denemeye karar verdim.
Bu kişisel geçmişimi anlatan girişten sonra önemli ördüğüm noktalarda bu iki teknolojiyi karşılaştırmaya çalışacağım.
Benim için Django’nun en büyük artılarından bir tanesi herşeyin yerli yerinde olması. Cefakar PHP geliştiricilerinin alışık olduğu, projenin yönetilebilirliğini son derece düşüren HTML içerisinde SQL ‘e kadar herşeyin her yerde olabildiği kargaşa yok. Bu sayede hem kendi kodlarınızı - ve kafanızı - düzenli tutabiliyorsunuz hem de başkalarının yazdığı kodu anlamanız ve kendi projenize entegre etmeniz birkaç dakika sürüyor.
PHP ‘nin fonksiyon isimlerinde standart olmayışı ve ad alanı (namespace) yokluğu işleri daha da karıştırıyor. Herhalde PHP ekibi yakında yeni fonksiyon ismi bulamayacak.
İtiraf edeyim, Python ‘un söz dizimini ilk başta yadırgamıştım. Ama kodu ne kadar bir bakışta anlaşılır kıldığını gördüğümde benimsedim ve gün geçtikçe de daha çok hoşuma gitti.
PHP de Python/Django da açık kaynak kodlu. Ancak PHP ‘yi yüksek trafikli bir uygulamada kullanmak için ticari bazı yazılımlar ile yapınızı desteklemeniz gerekiyor. Bu da PHP ‘nin açıklığını gölgeliyor. Bunun yanında Django sadece tüm kaynak kodu olarak değil geliştirme süreci olarak da tamamen açık. İstediğiniz kadar Django ‘nun geliştirilmesine de dahil olabilirsiniz.
Uygulama taşınabilirliği açısından PHP ‘yi son derece başarısız. Konfigürasyon programcılar için bir kabusa dönüşmüş durumda. “if(get_magic_quotes_gpc())...” yazmaktan bıkmayan bir PHP kullanıcısı var mı?
Django ile kendi makinenizde MySQL ‘de uygulamanızı geliştirin, veritabanı kaşesi kullanın, uygulama sunucusunda veritabanınız PostgreSQL olsun, kaşeniz ise memcached: Tek değişiklik konfigürasyon dosyasındaki birer satır olacak. PHP’de de benzer bazı soyutlamalar sağlayan ara katmanlar var. Yine bir eksiklik, bir başka yama ile örtülmeye çalışılmış oluyor.
PHP nesne tabanlılık konusunda epey yol almış olsa da hala çeşitli kısıtlamalar var. Zaten PHP ‘ye nesne desteği “PHP’de bu da olsun” olarak, bir eksikliği gidermek için eklenmişken, Python gerçek anlamda tümüyle nesne tabanlı. Örneğin türettiğiniz nesnelerin tüm özelliklerini değiştirebilir, çoklu kalıtım (multiple inheritence) gibi özelliklerden faydalanabilirsiniz.
“PHP bir dil, Django bir çatı; elmalarla elmaları karşılaştıralım” diyebilirsiniz. Ama PHP hiçbir zaman gerçek bir dil olarak tasarlanmadı. Web uygulamalarına yönelik işleri çözmek için geliştirilen, C ‘den Perl ‘e birçok farklı dilde yazılmış kütüphane’yi bir araya getiren bir birleştirici oldu. Herkesin ihtiyaç doğdukça yeni özellikler eklemesiyle bugünkü tutarsız kargaşa yaratılmış oldu.
PHP hata yönetimi bakımından da tutarlılık göstermiyor. Dilin yapısından kaynaklanan birçok bug kaynağı (‘0’ == null gibi) mevcut. Bir forumdan alınan aşağıdaki ekran görüntüsündeki son konuların başlıkları, iki dilin (ve kullanıcılarının) hata yönetimine yaklaşımlarını hoş bir şekilde özetliyor.

PHP, Python/Django ‘ya göre daha yaygın olarak kullanılıyor. PHP ile yazılmış hazır bir blog uygulaması bulmanız daha kolay olacaktır. Ama bir blog yazmak yukarıda gösterdiğim kadar kolayken neden başkasının yazdığını kullanmak isteyesiniz? Üstelik Django’da bulduğunuz bir uygulamayı kendi projenize entegre etmeniz çok daha kolay ve pürüzsüz olacaktır. Zengin ve kaliteli Python kütüphaneleri de her zaman elinizin altında.
PHP ‘nin yaygınlığı ucuz hosting çözümleri bulmakta bir avantaj sağlıyor. Ayda $2 ‘lik bir hosting paketinde genellikle Python/Django bulunmuyor. Bu küçük / kişisel projelerde PHP lehine bir durum yaratıyor.
Performans açısından da, Django, kendisi gibi MVC yapısındaki bir çatı olan Ruby on Rails ‘in sitesinde yayınlanan bir karşılaştırma testinde Rails ‘den ve PHP+Symfony‘den kat kat iyi sonuç vermştir. (http://wiki.rubyonrails.com/rails/pages/Framework+Performance)
Bundan 10 yıl önce, herşeyin Microsoft olduğu bir dünyada, PHP nefes alacak bir alan sağlamıştı. Bir çoğumuz web teknolojilerinin temel prensiplerine onunla hakim olduk, pek çok projeler gerçekleştirdik. Ulaştığı yaygınlık, tıpkı çoktan ölmüş yıldızların ışıklarının hala bize gelmesi gibi, bir süre daha parladığını düşündürtebilir ama bugün bana göre görevini tamamlamıştır.