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,