Web teknolojileri ile ilgili teknik bir blog…

Ruby on Rails’in olayı nedir?

RailsWeb 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 Hanssonagile 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ı:

  1. MVC – Model / View / Controller (JSP kullananlar bilirler)
  2. ORM – Object Relational Mapping veritabanı arabirimi (Rails’de ActiveRecord olarak geçiyor)
  3. REST – REpresentational State Transfer
  4. DRY – Don’t Repeat Yourself
  5. Agile Programming
  6. 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.
  • gerçekten çok güzel kullanımlar mevcut rails ‘de, mesela db transaction başlatmak o kadar kolay ki çalıştığım şirkette kendi framework ‘umuzu yazarken c# ile bu şekilde bir transaction tanımı koyduk. sizinde dediğiniz gibi rails ‘i öğrendikten sonra illa uygulamak gerekmiyor en azından bazı konularda ufkumuzu açabiliyor.

    Saygılar

  • Rubby on rails’in ne olduğunu merak edenler için çok güzel bir yazı. Aynı zamanda yazınız çok açık ve net, okuyanın aklında bir çok şey hemen şekilleniyor.
    Tebrik ederim.

  • Bu güzel paylaşım için Teşekkürler

  • Her ne kadar rails 4 yıl içinde neredeyse evrim geçirdiyse de yinede böyle başarılı bir yazıyla karşılaşmak rails aşkımı tetikledi :)

    Son zamanlarda bayağı yoğun olarak ilgileniyorum, inşallah çok yakında makaleler yazacağım.Sizde uzun zamandır rails hakkında yazı yazmamışsınız umarım pabucunu dama atmadınız =)

    İyi geliştirmeler..

  • Re: Miraç
    Aslında çeşitli nedenlerden dolayı zamanla Zend Framework’ü tercih ettim.

    Her framework gibi Rails’de de standart dışı ihtiyaçlarınız olduğu zaman çözüm bulma sıkıntısı oluyor. 12-13 yıldır php kullanan biri olarak bu tür durumlarda php tabanlı bir framework’e hükmetmek daha kolay benim için, nedenlerden biri bu.

    Diğer bir neden, şu an çok geçerli değil ama bu yazıyı yazdığım zamanlarda Rails ile ilgili komunite yeteri kadar geniş değildi, bu da bir sorunla karşılaştığınız zaman yalnız hissetmenize neden oluyordu.

    Başka bir neden de, belirli bir noktadan sonra projeye programcı eklemek gerektiğinde php programcısı bulmak daha kolay.

    Ama bunlar dışında halen arada bir rails’i kurcalar ve programlama yaklaşımları konusunda fikirler yakalamaya çalışırım…

  • Cevabınız için teşekkür ederim.
    Sizinde kendinize göre haklı sebepleriniz vardır tabi.

    Benim en çok sıkıntı çektiğim konu zaman ve yer sıkıntısı.
    Ruby, Python, ve Java ile ilgileniyorum fakat çevremde bu işi yapan insan sayısı çok çok az.Php ile uzun zaman ilgilendim halen üzerinde kendimi hakim hissettiğim bir dildir.Henüz 17 yaşında olmama karşın piyasa tecrübem var, projelerim mevcut.

    Fakat tek bir dile bağlanıp kalmış değilde ar-ge çalışması yapan yeni dilleri işlerinde kullanabilen bir ekibin içinde bulunmak isterim.

    Sizin bu genç adama tavsiyeleriniz varsa dinlemekten kıvanç duyarım :)

    İyi çalışmalar.

  • 2007′de yazılmış bir yazı. Çok sular seller geçti üzerinden. (Bugün 2012) Ruby dili güncel sürümüyle (1.9.2) artık hız konusunda da php’ye fark atmış durumda. (en yeni ruby sürümü 1.9.3) Ayrıca rails topluluğu hızlı bir şekilde artıyor. şimdi en aktif topluluklardan birisi ruby ve rails topluluğu. (bkz. https://github.com/languages) kaynak bulma problemleri artık kalmadı. 10′larca kitap var her seviyeye hitap eden. ayrıca rails api sayfası da yenilendi. yeteri kadar bilgi mevcut. stackoverflow sayfası 2007′de yeteri kadar soru-cevap barındırmıyordu. şimdi yeteri kadar soru ve yeteri kadar cevap var. ruby ve rails öğrenmek zor mu? emin olun php öğrenmekten çok çok kolay. elbette php’de yıllarını vermiş birisi için geçiş yapmak biraz zor gelebilir. çünkü php’de yazdığınız 10 satırlık kod ruby’de tek satıra karşılık geliyor. ve ayrıca rails geliştiricileri webden anlayan kişiler. ihtiyaca uygun bir çatı üretiyorlar. rails ile ister backbone.js’yi ister node.js’yi kullanın veya ister couch db’yi ister mongodb’yi kullanın. ister web siteniz için başka bir yapı kullanmadan api çıkartın. hangi framework’te bu özellikler vardır bilmiyorum. belki önemlisi de ruby’de kodlama yapmak, geliştirmek çok zevkli. sizi php gibi yormaz. amelelik yaptırmaz. siz ruby’ye ve rails’e zekanızı aktarmakla meşgulsünüzdür. rails ile arama motoru dahi geliştirebilirsiniz.

  • Çok güzel bir yazı olmuş,teşekkürler.
    Benim bir sorum olacaktı.Ruby on Rails ile uygulama yapabilmek için http://localhost:3000 adresine erişemiyorum.Bu konuda yardımcı olabilir misiniz?

Bu yazıya gelen cevapları takip etmek için bu RSS 2.0 linkini kullanabilirsiniz.

Gebze Evden Eve Nakliyat