Ruby on Rails'in Faydaları Nelerdir? Yirmi Yıllık Programlamadan Sonra Rails Kullanıyorum
Yayınlanan: 2022-03-11Bazen, Rails kullanmakta ısrar ettiklerini, çok fazla Kool Aid aldıklarını söyleyen müşterileri hakkında şikayet eden insanlar duyuyorum. İşverenlerse, başka bir Ruby on Rails 'primadona' geliştiricisi bulmak zorunda kaldıkları için neredeyse mideleri bulanıyor. Ardından, amaçlarını kanıtlamak için Git ve PHP arasındaki bu şaşırtıcı derecede cahil karşılaştırmaya benzer bir şey çıkarırlar. “Ne istediklerini bile bilmiyorlar” diyorlar.
Programcılar olarak bizler için bazen gerçekten de müşterilerimizin hiçbir fikri yokmuş gibi görünüyor. Bu gibi durumları abartmayı seviyoruz. Biraz düşündüğünüzde, bana bir şeyler inşa etmem için para veren birinin bir şekilde sınırlı olduğunu ve 'anlamadığını' düşünmek doğru görünmüyor. Aslında, çoğu müşterinin seçeneklerini gayet iyi bildiğine ve yine de Rails ile gitmeye karar verdiğine inanıyorum.
Bence Rails'i çok sayıda proje ve ihtiyaç için ciddi olarak düşünülecek kadar faydalı kılan şeyi açıklamaya çalışacağım.
Ruby'nin Faydaları
Rails olmasaydı, kimsenin Ruby'nin faydalarını bilmemesi bile mümkün. Bazı insanlar “Rails adı verilen parlak zırhlı şövalye” ile “Ruby için çok kolay” ve Rails olmadan “Ruby önemsiz olurdu” diyerek Ruby'yi küçümsemeyi severler. Bunun doğru olup olmadığını kesin olarak söyleyemem ama dünyanın böyle mükemmel bir dili kaçırmasının büyük bir utanç olacağını biliyorum. Gerçek şu ki: Rails'in yazarı Ruby'yi kasten seçti ve 'vahşi' bahsi büyük bir ilgiyle karşılandı. O zaman ne gördüyse, bugün başkaları da görebilir. Ruby bir şekilde programcılara 'yıkanmamış kitlelere' açıklaması çok zor olan özel bir yolla olanak sağlıyor. Peki neden Ruby on Rails kullanalım? Ruby, reklamı yapıldığı gibi programcıları mutlu ediyor.
Çoğu geliştirici Ruby'nin kullanışlı olduğu konusunda hemfikir olsa da, bazıları bunu çok fazla görüyor. Ruby'nin izin verdiği tüm özgürlüklerle, tüm kötüye kullanım potansiyeliyle ne olabileceği konusunda endişeleniyorlar. Biraz maymun yamasıyla göstereyim:
"1".to_i #=> 1 class String def to_i raise 'foobar' end end "1".to_i #=> RuntimeError: foobar
Bu kadar kolay: sadece beş satır kod ile mevcut bir sınıfı aldık ve davranışını geçersiz kıldık. Nohting kutsaldır - bir String bile değil. Bu özel hatayı tespit etmek kolay olurdu, ancak işler çok daha kötüleşebilir:
class String def to_i self.to_f - 1.13 end end "2".to_i #=> 0.8700000000000001
Aynen bunun gibi, String sınıfına, karmaşıklık katmanına sarılabilecek ve katman katman gizlenebilecek bir hata ekledik.
Öyleyse şöyle düşünebilirsiniz: Herkes ve anneleri değerli başvurumu mahvedebilir mi? Bu davranış gerçekten korkutucu görünse de, aslında değil. Ruby'yi kullandığım beş yılda, bu davranışla tam olarak sıfır sorun yaşadım. Sezgisel görünebilir, ancak yine de, yolun ortasında yalnızca ince beyaz bir çizgiyle ayrılan zıt yönlerde 60 MPH'de araba sürmek de öyle. Uygulamada, her ikisi de oldukça iyi çalışır.
Diğer bir faydası da Ruby'nin çok yönlü bir araç olmasıdır. Bu nedenle keskin, bıçak benzeri kenarları vardır. Yetişkinlerin bıçakları gayet iyi idare edebileceğini düşünmeyi seviyorum - çocuklara karşı koruma, çocuklar içindir (Tweet). Ve BT'de bir çocuk gibi muamele görmek sizi Paul Graham'ın Blub paradoksunun kurbanı haline getiriyor: Anlamadığınız veya birinin size çok tehlikeli olduğunu söylediği belirli özellikler olmadan daha iyi durumda olduğunuzu düşünüyorsunuz. Elbette bugün “Neden Ruby on Rails kullanalım” diye soruyoruz; bu nedenle, bu başka bir zaman için bir tartışma. Kuşkusuz, Ruby diğer dillerin sahip olduğu bazı özellikleri kaçırıyor (Lisp hmm, hmm). Hepsi bir arada, Ruby 'dil gücü sürekliliği'nin zirvesine yakındır.
Ruby ile ilk birkaç yılım alçakgönüllüydü. Sadece başkalarının kodunu okuyarak çok şey öğrendim. Bazen şaşırdım; bazen çıldırdım; ama sonunda, bu bilgi bilgisayarımla eskisinden çok daha etkili bir şekilde iletişim kurmamı sağladı. Sırf atlamış olmak için çemberlerin içinden atlamanıza neden olan bazı diğer 'bürokratik' diller için neredeyse üzülüyorum ve tüm bunlar size “Ben sadece sizin için en iyisini yapıyorum, bu sizin iyiliğiniz için!”
pragmatizm
Mümkün olan en düşük seviyede Rails'in DNA'sına örülmüş pragmatizme derin bir saygı vardır. Ruby'nin faydalarıyla birlikte bu pragmatizm, zarif çözümler üretir ve Ruby on Rails geliştirme topluluğunu aynı şeyi yapmaya teşvik eder/esin verir. Pragmatizm genellikle Rails çadırı olarak tanıtılır, bu nedenle bu iddia yeni değil, ancak yakın zamanda bir arkadaşım bana Hazırda Beklet'in gerçekten ne kadar “havalı” olduğunu göstermeye çalıştığında bunun doğru olduğunu hatırlattım. Mücadele ediyordu. İlk etapta çerçeve varsayılanları olması gereken sayısız seçenek ve yapılandırma parametresini ayarlayamadığından acısını hissedebiliyordum.
Yaşla birlikte, yapay karmaşıklığa ilişkin standartlarım giderek yükseldi. Üretim kodu yazmaya 1989'da 11 yaşındayken (Clipper Summer '87'de kapı komşum için bir projeyle başlayarak) başladığımı düşünürsek, gereksiz komplikasyonlara karşı sıfıra yakın toleransım var. Ve Rails bu bölümde gerçekten yüksek puanlar alıyor. Bu sadece 'konfigürasyon üzerindeki konvansiyon'dan daha fazlasıdır; Rails topluluğu içinde son derece değerli olan ve onun aracılığıyla nüfuz eden tüm pragmatik zihniyetten bahsediyorum.
dışavurumculuk
Rails, İngilizce'ye olabildiğince yakındır (COBOL kullanmıyorsanız). Ruby'yi kendi semantiğiyle genişleten dahili bir DSL olarak bilinen şeyi kullanır. Etkili bir şekilde yeni bir dil geliştirdiğiniz için bir DSL oluşturmak her zaman tehlikelidir. Dahili olduğu için harici bir ayrıştırıcı kullanmanıza gerek yoktur, ancak bir anlamda yeni bir dil gibi hissettirir. Rails ekibi, DSL'sini mantıklı olduğu yerde kullanarak ve nadiren aşırıya kaçarak mükemmel bir öz kontrol göstererek iyi bir denge tutturdu. Rails deneyiminden bağımsız olarak herhangi bir programcının (ve hatta bazı programcı olmayanların bile) bunu anlayabileceğini düşünüyorum:

class User < ActiveRecord::Base devise :database_authenticatable, :registerable validates_numericality_of :years_of_experience, :allow_blank => true acts_as_taggable acts_as_taggable_on :certificates, :expertise_kinds validates_presence_of :first_name, :last_name, :email has_many :translations has_attached_file :avatar, :styles => {:small => "240x240>"} has_attached_file :cv ...
Aslında, Ruby'ye aşina değilseniz, bu size tuhaf gelebilir – neredeyse bir programlama dili değilmiş gibi. Bunun sadece parantezsiz yöntem çağrıları olduğunu anladığınızda, gitmeye hazırsınız. Yine de, Rails DSL, aslında sadece akıllı adlandırma ve Ruby'nin mükemmel sözdiziminin doğal kullanımı olduğu zaman, gereksinimleri açıklamak için bu özel dil gibi hissediyor.
Toplum
Rails, en iyi durumda kalmasını sağlayan bir taahhüt ordusuna sahiptir. Birçok proje yaşla birlikte yavaş yavaş söner, ancak Rails ile karar verilmesi gerektiğinde hala kıvılcımlar saçılır. Bakımcılar (hala) gerçekten önemsiyor ve insanların Ruby on Rails'i kullanmasını ve faydalarını anlamasını istiyor gibi görünüyor.
Rails'in altında, bir kiraz gibi, Ruby, müthiş paket yöneticisi RubyGems ile paket sayısı açısından CPAN ile karşılaştırılabilir - ve CPAN'ın yaşı düşünüldüğünde, bu iddia (en hafif söylemek gerekirse) çok etkileyici. Rails, kendi “Rails eklentilerini” yapmaya çalıştığında kısa bir raydan çıktı. Neyse ki, bu tutmadı, bu yüzden RubyGems, çok parlak kişiler tarafından programlanan kod için birleşik, mükemmel kaynak olmaya devam ediyor.
Harika bir dil, pragmatik web çerçevesi ve mükemmel topluluk arasındaki sinerji, Rails'e parçalarının toplamından çok daha iyi bir sonuç verir.
Olgunluk
Raylar bloğun etrafında olmuştur. Yenilikçi bir şekilde, artık o kadar da havalı değil. Bir teknoloji yığını seçmek söz konusu olduğunda bu iyi bir şey: Kanıtlanmış bir şey istiyorsunuz. Ve Rails tam da bu. Yakın zamanda, şu anda mevcut olan çok çeşitli Ruby yorumlayıcıları ve çalışma zamanlarından bahseden bir yazı yazdık.
Pazarlama
Biliyorum biliyorum. Bir BT uzmanı olarak, 'ciddi' şeylere gerçekten değer vermeli ve 'parıltıyı' görmezden gelmeliyim. Sığ görünebilir, ancak kabul edelim:
- Rakipleriyle karşılaştırıldığında, Rails sitesi iyi görünüyor.
- Rails'in o günlerdeki ilk ekran görüntüsü nefes kesiciydi. Bugün o kadar etkileyici görünmeyebilir, ancak hepimizin Java hakkında bilgi sahibi olmamızın tek nedeninin, herkesin tarayıcıda bir Java Uygulaması çalıştırma olasılığı konusunda çok heyecanlanmış olması olduğunu unutmayın. Bunun o kadar da önemli olmadığı ortaya çıktı, ancak yine de bu, Java'yı radara soktu. Benzer şekilde, bu 15 dakikalık blog motoru senaryosu, birçok insanı heyecanlandıran büyük bir başarıydı.
Bu kibirle ilgili bile değil; Bu, değirmene su koymak için mümkün olduğunca çok sayıda akıllı insanı bir araya getirmekle ilgili. Çerçeveler düşünüldüğünde, kalabalığın içinde olmak için en iyi yer. Bu akıllı insanların odaklandığı bir çerçeve seçmek, sizin için çok daha fazla zeminin kapsandığı anlamına gelir. Ve bu beni bir sonraki noktama getiriyor.
(değil) Tekerleği Yeniden Keşfetmek
Küçük çerçeveler için yumuşak bir noktam var. Belirli bir çerçevenin ne yaptığını ve nedenini anlayabildiğimde hoşuma gidiyor. Bu anlamda, Rails biraz şişkin ve hatta zaman zaman bunaltıcı.
Buradaki ikilem: Aynı şeyleri tekrar tekrar kaç kez yazmak istiyorsunuz? Bazıları daha iyi yeniden yazılabilir, eminim ama zaman alır – çok zaman alır. Rails'in sizin için ne kadar çok şey yapmasına izin verirseniz, işlevselliğinizi yeniden yazma veya yeniden uygulama konusunda o kadar az endişelenmeniz gerekir.
Raylar (dedikleri gibi) 'piller dahil'. Seyrekliğe meraklıysanız veya her şeyin nasıl çalıştığına dair kapsamlı bilgiye sahip olmanız gerektiğini düşünüyorsanız, bu iyi bir şey değildir. Pratikte, korkularınızı bırakırsanız işe yarıyor gibi görünüyor. Rails, ihtiyacınız olan hemen hemen her şey için makul varsayılanlara sahiptir ve sizi dar bir noktaya sıkıştırmaktan kaçınmak için yeterince modülerdir.
Çözüm
Kendinize tekrar sorun, neden Ruby on Rails kullanıyorsunuz? Rails, hem Tek Sayfa JavaScript uygulamalarıyla rekabet eden son teknoloji ürünü genel web siteleri hem de genellikle biraz daha 'çirkin' görünen (daha genel, daha düşük kaliteli bir kullanıcı arayüzü ile) karmaşık kurumsal çekirdek sistem uygulamaları için uygundur, ancak bunu telafi eder. bir ton karmaşık iş kuralı ve mantığı ile kusur. Avantajı, çok yönlü olması ve hem şık hem de güçlü olanlarla rekabet edebilmesidir.
Yaygın sorunların çoğu için, Rails'in, sürekli olarak ortalamanın üzerinde olan belgelere sahip, neredeyse anında emrinizde olan bir bileşeni vardır (bir şekilde, Rails çekirdek ekibi, katkıda bulunanları belge yazmanın harika olduğuna ikna etti (hepimiz bilmemize rağmen). değil), iyi yazılmış, özlü ve zaman kazandıran belgelere yol açar).
Tek boynuzlu atları ve Cuma kucaklaşmalarını bir kenara bıraktığınızda, hem gelecekteki oyun değiştiriciniz hem de bir sonraki yolun ortasındaki iş siteniz için kullanabileceğiniz güçlü bir çerçeve elde edersiniz. Ve birinci sınıf mücevher havuzunuzla, bilgisayar programcılığındaki en parlak fikirlerden bazılarını uygulayan bir cephanelik parmaklarınızın ucunda. Yaygara olmadan.