Care sunt beneficiile Ruby on Rails? După două decenii de programare, folosesc șine
Publicat: 2022-03-11Uneori aud oameni plângându-se de clienții lor, spunând că insistă să folosească Rails, că au avut prea mult Kool Aid. Dacă sunt recrutori, aproape că se simt rău la stomac că trebuie să găsească încă un dezvoltator Ruby on Rails „primadona”. Apoi scot ceva similar cu această comparație uimitor de ignorantă dintre Git și PHP pentru a-și dovedi punctul de vedere. „Ei nici măcar nu știu ce cer”, spun ei.
Pentru noi, ca programatori, uneori, într-adevăr, se pare că clienții noștri nu au habar. Ne place să exagerăm astfel de cazuri. Când te gândești puțin la asta, nu pare corect să crezi că o persoană care îmi dă bani pentru a construi lucruri este cumva limitată și „pur și simplu nu înțelege”. De fapt, cred că majoritatea clienților își cunosc foarte bine opțiunile și totuși decid să opteze pentru Rails.
Voi încerca să explic ceea ce, în opinia mea, face Rails suficient de benefic pentru a fi luat în considerare serios pentru o multitudine de proiecte și nevoi.
Beneficiile Ruby
Este posibil ca nimeni să nu știe măcar despre beneficiile Ruby dacă nu ar fi Rails în sine. Unii oameni le place să-l disprețuiască pe Ruby spunând că este „atât de ușor pentru Ruby” cu „cavalerul său în armură strălucitoare numită Rails” și că fără Rails, „Ruby ar fi irelevant”. Nu pot spune cu siguranță dacă este sau nu adevărat, dar știu că ar fi o mare rușine dacă lumea ar rata o limbă atât de superbă. Adevărul este că autorul cărții Rails a ales-o pe Ruby în mod deliberat, iar pariul său „sălbatic” a fost răsplătit cu un interes enorm. Ceea ce a văzut atunci, mulți alții pot vedea astăzi. Ruby le permite programatorilor într-un fel special, care este atât de greu de explicat „maselor nespălate”. Deci, de ce să folosiți Ruby on Rails? Ruby îi face pe programatori fericiți, așa cum se anunță.
În timp ce majoritatea dezvoltatorilor sunt de acord că Ruby este la îndemână, unii îl consideră prea mult . Ei își fac griji cu privire la ceea ce s-ar putea întâmpla cu toate libertățile pe care le permite Ruby, tot potențialul de utilizare greșită. Permiteți-mi să ilustrez cu niște petice de maimuță:
"1".to_i #=> 1 class String def to_i raise 'foobar' end end "1".to_i #=> RuntimeError: foobar
Este atât de ușor: cu doar cinci linii de cod, am luat o clasă existentă și am suprascris comportamentul acesteia. Nimic nu este sacru – nici măcar un șir. Această eroare specială ar fi ușor de detectat, dar lucrurile pot deveni mult mai sinistre:
class String def to_i self.to_f - 1.13 end end "2".to_i #=> 0.8700000000000001
La fel, am introdus o eroare în clasa String care ar putea fi înglobată și ascunsă de strat după strat de complexitate.
Așadar, s-ar putea să vă gândiți: pot toți și mama lor să încurce cererea mea prețioasă? Deși acest comportament pare într-adevăr înfricoșător, chiar nu este. În cinci ani de utilizare a lui Ruby, nu am avut nicio problemă cu acest comportament. Poate părea contraintuitiv, dar, din nou, la fel și conducerea mașinilor la 60 MPH în direcții opuse separate doar de o linie subțire albă în mijlocul drumului. În practică, ambele funcționează remarcabil de bine.
Un alt avantaj este că Ruby este un instrument versatil. Ca atare, are margini ascuțite, asemănătoare cuțitului. Îmi place să cred că adulții se pot descurca foarte bine cuțitele – protejarea copiilor este pentru, ei bine, copii (Tweet). Și a fi tratat ca un copil în IT te lasă victima paradoxului Blub al lui Paul Graham: crezi că ești mai bine fără anumite trăsături pe care nu le înțelegi sau despre care cineva a spus că ești prea periculos. Desigur, astăzi ne întrebăm „de ce să folosiți Ruby on Rails”; astfel, aceasta este o dezbatere pentru altă dată. Desigur, Ruby ratează unele caracteristici pe care le au alte limbi (Lisp hmm, hmm). În total, Ruby este aproape de vârful „continuumului de putere lingvistică”.
Primii mei ani cu Ruby au fost umilitori. Am învățat atât de multe doar citind codul altora. Uneori, eram uimit; uneori, eram nebun; dar în cele din urmă, aceste cunoștințe mi-au permis să comunic cu computerul meu mult mai eficient decât înainte. Aproape că îmi pare rău pentru alte limbi „birocratice” care te fac să sari printre cercuri doar de dragul de a sări printre ele, totul în timp ce îți spun „Fac ceea ce este mai bine pentru tine, este pentru binele tău!”
Pragmatism
Există un respect profund pentru pragmatism împletit în ADN-ul Rails la cel mai de jos nivel posibil. În combinație cu beneficiile Ruby, acest pragmatism produce soluții elegante și încurajează/inspira comunitatea de dezvoltare Ruby on Rails să facă același lucru. Pragmatismul este adesea promovat ca un cort de șine, așa că această afirmație nu este nouă, dar mi s-a amintit de veridicitatea sa destul de recent, când un prieten de-al meu a încercat să-mi arate cât de „mișto” este cu adevărat Hibernate. Se zbătea. I-am putut simți durerea, deoarece nu a reușit să seteze o mulțime de opțiuni și parametri de configurare care ar fi trebuit să fie implicite ale cadrului în primul rând.
Odată cu vârsta, standardele mele pentru complexitatea artificială au crescut din ce în ce mai mult. Având în vedere că am început să scriu cod de producție încă din 1989, la vârsta de 11 ani (începând cu un proiect pentru vecinul meu din Clipper Summer '87), am toleranță aproape zero pentru complicații inutile. Și Rails are scoruri foarte mari în acel departament. Este mai mult decât „convenție peste configurare”; Vorbesc despre întreaga mentalitate pragmatică care este foarte apreciată în interiorul comunității Rails și care pătrunde prin aceasta.
Expresivitate
Rails este cât de aproape de engleză (cu excepția cazului în care utilizați COBOL). Utilizează ceea ce este cunoscut ca un DSL intern, extinzând Ruby cu propria sa semantică. Construirea unui DSL este întotdeauna periculoasă, deoarece dezvoltați în mod eficient o nouă limbă. Deoarece este intern, nu trebuie să utilizați un parser extern, dar într-un fel se simte ca un limbaj nou. Echipa Rails a găsit un echilibru bun cu DSL-ul său, folosindu-l acolo unde are sens și exagerând doar rareori, demonstrând un autocontrol excelent. Cred că orice programator, indiferent de experiența Rails, (și chiar unii non-programatori) ar putea înțelege acest lucru:

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 ...
De fapt, dacă nu sunteți familiarizat cu Ruby, acest lucru ar putea părea ciudat – este aproape ca și cum nu ar fi un limbaj de programare. Odată ce realizezi că sunt doar apeluri de metodă fără paranteze, ești gata. Cu toate acestea, Rails DSL pare că este acest limbaj special pentru descrierea cerințelor, când de fapt este doar o denumire inteligentă și o utilizare inerentă a excelentei sintaxei Ruby.
Comunitate
Rails are o armată de committers care se asigură că rămâne în stare de vârf. Multe proiecte scad odată cu vârsta, dar cu Rails, scântei încă zboară atunci când trebuie luate decizii. Se pare că întreținerii (încă) le pasă cu adevărat și doresc ca oamenii să folosească Ruby on Rails și să înțeleagă beneficiile acestuia.
Underneath Rails în sine, ca o cireșă pe deasupra, se află Ruby cu managerul său formidabil de pachete, RubyGems, comparabil cu CPAN în ceea ce privește numărul de pachete – și având în vedere vârsta CPAN, această afirmație este (pentru a spune ușor) foarte impresionantă. Rails a avut o scurtă deraiere când a încercat să-și creeze propriile „pluginuri Rails”. Din fericire, acest lucru nu s-a lipit, așa că RubyGems rămâne sursa unificată și superbă pentru codul programat de persoane foarte strălucitoare.
Sinergia dintre un limbaj cool, un cadru web pragmatic și o comunitate superbă oferă Rails un rezultat mult mai bun decât suma părților sale.
Maturitate
Rails a fost în jurul blocului. Într-un fel hipster, nici măcar nu mai e așa de cool. Acesta este un lucru bun când vine vorba de alegerea unei stive de tehnologie: vrei ceva dovedit. Și Rails este doar asta. Am scris recent un articol în care se vorbește despre marea varietate de interpreți și runtime Ruby care sunt acum disponibile.
Marketing
Știu, știu. Ca profesionist IT, ar trebui să prețuiesc lucrurile „serioase” și să ignor „sclipiciul” . Poate părea superficial, dar să recunoaștem:
- În comparație cu concurența, site-ul Rails arată bine .
- Prima distribuție pe ecran a lui Rails, pe vremuri, a fost pur și simplu taie respirația. S-ar putea să nu arate atât de impresionant astăzi, dar amintiți-vă că singurul motiv pentru care știm cu toții despre Java este că toată lumea era atât de încântată de posibilitatea de a rula un Applet Java în browser. Acest lucru s-a dovedit a nu fi atât de important până la urmă, dar totuși, acest lucru a pus Java pe radar. În mod similar, acest screencast de 15 minute a motorului de blog a fost un succes uriaș care a entuziasmat mulți oameni.
Aici nici măcar nu este vorba de vanitate; este vorba de a angaja cât mai mulți oameni deștepți pentru a pune apă în moară. Când sunt luate în considerare cadrele, cel mai bun loc pentru a fi este în mulțime. Alegerea unui cadru pe care acești oameni inteligenți se concentrează înseamnă pur și simplu că este deja acoperit mult mai mult teren pentru tine. Și asta mă duce la următorul punct.
(Nu) Reinventarea roții
Am un punct slab pentru cadrele mici. Îmi place când înțeleg ce face un anumit cadru și de ce. În acest sens, Rails este oarecum umflat și chiar copleșitor uneori.
Dilema aici: de câte ori vrei să scrii aceleași lucruri iar și iar? Sunt sigur că unele dintre ele pot fi rescrise mai bine, dar este nevoie de timp – mult timp. Cu cât îi permiteți lui Rails să facă mai mult pentru dvs., cu atât mai puțin trebuie să vă faceți griji cu privire la rescrierea sau reimplementarea funcționalității dvs.
Rails este (cum se spune) „baterii incluse”. Acest lucru nu este un lucru bun dacă sunteți pasionat de raritate sau dacă simțiți nevoia să aveți cunoștințe extinse despre cum funcționează totul. În practică, dacă renunți la temerile tale, se pare că funcționează. Rails are valori implicite rezonabile pentru aproape tot ceea ce ai nevoie și este suficient de modulară pentru a evita să te încorporezi într-un loc îngust.
Concluzie
Întrebați-vă din nou, de ce să folosiți Ruby on Rails? Rails este potrivit atât pentru site-urile web publice de ultimă generație, care concurează cu aplicațiile JavaScript de o singură pagină, cât și pentru aplicațiile complexe ale sistemului de bază pentru întreprinderi, care de obicei arată puțin „mai urâte” (cu o interfață de utilizare mai generică, cu fidelitate mai scăzută), dar compensează acest lucru pată cu o mulțime de reguli de afaceri complicate și logică. Avantajul său este că este versatil și capabil să concureze atât cu cel elegant, cât și cu cel puternic.
Pentru majoritatea problemelor obișnuite, Rails are la dispoziție o componentă aproape imediată, cu o documentație care este constant peste medie (cumva, echipa de bază Rails a convins contribuitorii că scrierea documentației este grozavă (chiar dacă știm cu toții că este nu), conducând la documente bine scrise, concise și care economisesc timp).
Când lași deoparte unicornii și îmbrățișările de vineri, ajungi cu un cadru puternic pe care îl poți folosi atât pentru viitorul tău schimbător de jocuri, cât și pentru următorul tău site de afaceri la mijlocul drumului. Și cu pachetul tău de pietre prețioase de top, ai la îndemână un arsenal care implementează unele dintre cele mai strălucitoare idei în programarea computerelor. Fără tam-tam.