Web teknolojileri konusunda çalışıyor ve sektördeki geliÅŸmeleri takip ediyorsanız muhtemelen Ruby on Rails‘i duydunuz ama fark yaratan özelliÄŸinin ne olduÄŸunu bilmek istiyorsunuz ya da incelediniz ama hala “geçsem mi geçmesem mi” kararsızlığını yaşıyorsunuz. Biraz aklınızı çelmeye çalışayım…
Ben platform olarak PHP’yi tercih eden bir insan olarak “15 dakikada weblog yaratın” screencast’ini izledikten sonra sinir oldum. Tecrübeli bir programcı olarak neredeyse haftamı alacak bir iÅŸin 15 dakikada bitmesi gerçekten de moral bozucu :) Bu kadar zamandır haybeye uÄŸraşıyormuÅŸum diyor insan kendine.
İlk şoku (!) atlattıktan sonra daha önce incelediğim otomatik kod üreteçleri gibi mi acaba diye düşündüm. Bu tür yapıların ortak sorunları
Yeteri kadar kiÅŸiselleÅŸtirilememesi
Kişiselleştirmenin kodu sıfırdan yazmaktan daha çok vakit alması
Çok karmaşık olması nedeniyle güvenlik açığı içermesi ya da bug’lı olması
Performans kaybı
olarak özetlenebilir.
Ama rails ile ortaya konan ürünlere baktığımda etkilenmemek imkansızdı o yüzden derinlemesine araÅŸtırmaya baÅŸladım rails’i.
Öncelikle Ruby on Rails, web uygulamalarını geliÅŸtirmenizi, yayına sokmanızı ve geliÅŸtirmenizi kolaylaÅŸtıran bir framework, “acemiler için kod üreteci” deÄŸil. Dolayısıyla hedef kitlesi profesyoneller. (Bkz. “Bizim yiÄŸen de yapıyor web sitesi“)
Framework, yazılım projelerini geliştirmenizi kolaylaştıran, bunun için size bazı metotlar, şablonlar ve kütüphane sunan, çeşitli komponentlerle esnekliğinizi arttıran sistemlerdir. Programcının navigasyon sistemi nasıl çalışacak, mail nasıl atılacak gibi teknik detaylar yerine doğrudan ihtiyaç ile ilgilenmesine olanak sağlar.
Aslında Ruby on Rails birçok programcı tarafından kullanılan pratik uygulamalar ve programlama paradigmalarını bir araya getirmiÅŸ ve gerçekten detayları bırakıp uygulamaya odaklanmayı saÄŸlayan “rapid application development” (hızlı uygulama geliÅŸtirme) konusunda, bu sistemin dezavantajlarını azaltarak önemli bir aÅŸama kaydetmiÅŸ bir platform. Tabii ki bu aÅŸamalarda ruby betik dilinin obje odaklı, pratik yapısının katkısı büyük.
Ama “hızlı” tek başına birer kriter deÄŸil. Profesyonel geliÅŸtiriciler modern, profesyonel tekniklerle geliÅŸtirilmiÅŸ uygulamalar üretmeyi hedeflerler. RoR bu imkanı saÄŸlıyor bize…
Rails’in fark yaratan özelliÄŸi, web’i gerçekten anlayan geliÅŸtiriciler tarafından yaratılmış olması.
Ruby on Rails’in yaratıcısı David Heinemeier Hansson “agile software development” (çevik yazılım geliÅŸtirme) manifestosunda da imzası olan, DRY (Don’t Repeat Yourself), pragmatik programlama gibi felsefeleri takip eden yaratıcı ve ödüllü bir programcı.
Hansson’un railsde bir araya getirdiÄŸi teknik ve paradigmalardan bazıları:
MVC – Model / View / Controller (JSP kullananlar bilirler)
ORM – Object Relational Mapping veritabanı arabirimi (Rails’de ActiveRecord olarak geçiyor)
REST – REpresentational State Transfer
DRY – Don’t Repeat Yourself
Agile Programming
Pragmatic Programming
Profesyonel programcılar yazılımları için test programları yazarlar, böylece kodda bir deÄŸiÅŸiklik yaparken baÅŸka bir yeri bozup bozmadıkları otomatik olarak test edilir. PHP’de uygulamasına pek rastlamadığım bu yaklaşımın altyapısı RoR’da mevcut.
Ek olarak Ruby on Rails’in test, development ve production versiyonlarını bir arada tutabilmesi ve aralarında kolayca geçiÅŸ yapabilmesi çok baÅŸarılı bir özellik.
RoR’un sayfasına giderseniz, kitaplar kısmında “Agile Web Development with Rails” isimde bir kitap göreceksiniz. KiÅŸisel tavsiyem paraya kıyın ve RoR’u ister kullanın ister kullanmayın bu dokümanı baÅŸtan sona okuyun. Sadece Ruby on Rails’i tanımayacak, çalışma sistematiÄŸi de göreceksiniz adım adım.
Ben bu kitabı okuduktan sonra FotoKritik’in php kodlarını yeniden düzenleyerek v3′ü yayına soktum. Railse geçiÅŸ yapmadım ama bana gerçekten de büyük bir esneklik ve scalability (Türkçesini bilmiyorum) saÄŸladı.
Performans
Grafik tasarımcı bir arkadaÅŸa yine ballandıra ballandıra railsi anlatırken “iyi de yavaÅŸmış be abi” diye bir yorum aldım. Evet belki PHP’den yavaÅŸ ama unutmamak lazım ki PHP de C’den yavaÅŸ, hatta C de assembly’den yavaÅŸ. Assembly mi kullanalım yani?
Aslında genel kural olarak iÅŸinizi kolaylaÅŸtıran her ek kod bir performans kaybı demek. Dolayısıyla yıllarca örneÄŸin bir database wrapper kullanmayı reddettim, zorunda kalıncaya dek…
Bu konuda kendimi eleştirdim yıllar önce, konuya bir de şu açıdan yaklaşmak lazım. Her zaman en büyük maliyet işçiliktir. Kullandığınız sunucu bilgisayarın kaç brüt maaşınız ettiğini bir hesaplayın. Yanına aynı sunucudan bir tane daha koyun ama daha az performanslı bir framework sayesinde programlama hızınızın 4 katına çıktığını hesaplayın. Birkaç ayda yeni sunucunuzu amorti edeceksiniz.
Tabii bu demek değil ki performans optimizasyonu yapılmasına gerek yoktur, sıkıştıkça ekleyin bir sunucu. Performans optimizasyonu çok kritiktir ve bir noktadan sonra istediğiniz kadar donanıma yüklenin verim alamayacağınız gibi maliyet katlanarak artmaya başlar.
Ancak RoR da o kadar yavaş değil, içerisinde caching mekanizması mevcut ve hiç de küçük sayılmayacak projelerde başarıyla kullanılıyor.
Sonuç: Kullanmalı mıyım?
Ruby on Rails, screencastlerindeki çalışma hızıyla inanılmaz bir ilgi topladı. Birçok ödül aldı, Web2.0 ile özdeÅŸleÅŸen bir teknoloji oldu, teknolojinin yaratıcısı dergilere kapak oldu, kitabı ödüller aldı. Ruby’den baÅŸka platformlarda da birçok kopyası çıktı. Hatta Zend bile RoR’dan sonra Zend Framework‘e hız verdi. Bunca ilginin bir nedeni olmalı…
Rails gerçekten de öğrenmesi zor bir framework, asıl faydasını ise gerçekten öğrendikten sonra görebileceğiniz bir platform. Aslında tüm frameworkleri öğrenmek biraz vakit alır o açıdan gözünüz korkmasın, aslında demek istediğim şuydu:
PHP’ye hakimim, kendime göre bir sistem oturtmuÅŸum, muhtelif yerlerde muhtelif ÅŸekillerde sakladığım hazır kodlarım var ve bunları kopyalayarak yeni projelerde kullanabiliyorum ve yavaÅŸ sayılmayacak bir hızda proje geliÅŸtirebiliyorken tam hakim olmadığım, iki de bir “ÅŸu nasıl yapılıyor” diye araÅŸtırmam gereken bir framework’e geçmekte zorluk çekiyorum, üşeniyorum diyebilirim.
Ama birşeyi çok iyi biliyorum, bu platforma geçersem bana faydası büyük olacak. Neden mi:
Oturmuş bir ORM yapısı. ORM ile sql cümleleriyle boğuşma derdinden büyük ölçüde kurtulabilirim
Railsin konfigürasyon dosyaları “varsayılan” ayarların deÄŸiÅŸtirilmesi temeline dayanır. Dolayısıyla javadaki kocaman xml dosyaları yerine pratik bir konfigürasyon yapısı vardır.
RESTless url’lerim olması için parametreleri, rewrite kurallarını ve url’yi nasıl parse edeceÄŸimi düşünmeme gerek yok
Scaffolding ile CRUD operasyonları ile ilgili kodlamanın %90′lık kısmını birkaç saniyede üretebilirim
Var olan versiyon çalışırken ve aynı zamanda yeni bir versiyonu geliÅŸtirirken, var olan versiyon üzerine bir ek yapmak istediÄŸim zaman pratik bir ÅŸekilde “test” versiyonunda çalışabilir, stabil olduÄŸundan emin olunca var olan versiyona bunu aktarabilir ve “developer” versiyonunda geliÅŸtirmeye devam edebilirim. Bunu yaparken test sunucumdaki konfigürasyon dosyasındaki küçük bir deÄŸiÅŸiklik yeterli olacaktır.
script.aculo.us kütüphanesi varsayılan olarak var, dolayısıyla şık DHTML etkileri ve AJAX implementasyonu çok pratik
Oturmuş bir MVC yapısı, helper fonksiyonları, kısmı şablon (partial template) gibi kolaylıklar
Şablonlar (templates) ve hatta otomatik üretilen kodları kişiselleştirebilirim.
Webrick sağolsun, sunucu tanımlamakla uğraşmama gerek yok. Özellikle RadRails üzerinden kontrol edebilmek çok pratik.
Uygulamamı otomatik test edecek test uygulaması yazabilirim.
Uygulama, geliştirme ve test versiyonları için farklı hata kayıt kuralları tanımlayabilirim. Versiyonlar arası geçişin çok pratik olduğunu hatırlatırım.
Basit ve kısa kodlar ile daha hızlı kod yazabilirim. Mesela: “function () {” yerine “def” yazmam yeterli.
Peki hiç mi dezavantajı yok railsin? Var tabii ki:
Framework öğrenmek her zaman zahmetli bir iştir. Railse geçmek biraz vakit ayırmayı gerektiriyor
API dokümantasyonundan railsi öğrenmek neredeyse mümkün değil. Öğrenmek için rails sayfasından erişebileceğiniz kitapları satın almanız gerek. En azından ben bu yazıyı yazarken durum böyle.
Yeni sayılabilecek bir yapı olduğu için halen yeterli kaynak bulmak zor oluyor.
Stabil bir IDE’si yok. RadRails çok iddialı geliyor ancak daha vakti var.
Hosting konusunda nispeten sınırlı kaynak var.
Genel olarak çok kısa kodlar yazarak projenizi geliştirebiliyorsunuz ama MVC yapısı, helper dosyaları, yönlendirmeler derken özellikle yeni öğrenirken hangi kod neredeydi kafa karışabiliyor o yüzden frameworkün nasıl çalıştığını gerçekten iyi anlamak gerekli.
Alıntıdır : http://www.huysuzadam.com/2007/02/09/ruby-on-railsin-olayi-nedir/
0 Yorumlar
Merhaba,