Proč začit programovat v Ruby on Rails?


Když jsem se na začátku roku 2015 rozhodl opustit pozici freelancera v segmentu internetového marketingu a vrhnul se na vývoj aplikací, tak si někteří moji kamarádi klepali na čelo. Skoro 5 let budovaná pozice na trhu, dobré jméno, kvalitně odvedená práce, poptávka větší než jsem byl schopen zvládat a plat, na který budu asi dlouho vzpomínat. Ten příběh mohl pokračovat minimálně ještě několik let.

Už v patnácti letech jsem vykřikoval do světa, že programování je práce budoucnosti. Ne právník, ne lékař, ale programátor. Teď o 10 let zpátky se moje slova jenom potvrzují. Kvalitních vývojářů je málo a nevypadá, že tomu bude v příštích několika letech jinak. Když jsem hledal kvalitního programátora pro svoje vlastní projekty, tak to vždy skončilo neúspěchem, nebo ne úplnou spokojeností. Např. mě nebavilo aplikaci pořád dokola procházet a nahlašovat chyby, které již dávno měly být opravené. Když vám programátor napíše – „je to opravené, zkuste to“. A vy následně zjistíte, že to opravené není a vracíte to zase zpátky. On to opraví a směle vrátí opět s komentářem – „no jo, zapomněl jsem středník, zkuste to teď“. Ta lepší varianta je, že už to opravdu běží. Když se ale stane, že ne, tak už to vytočí i mě – a to jsem hodně velkej kliďas. Platíte si programátora, ale vy jste v roli přičmrdovače, který všechno testuje a kontroluje. Bere vám to čas, který by vám to brát nemělo. Idea, že si děláte svoji práci a během večera zkontrolujete pokrok programátora a aktuální stav s úsměvem, byla hodně vzdálená. Ať to byl ten, nebo onen. Nebo programátoři, s kterýma jsem přišel do styku během své marketingové činnosti. Jo pamatuju si jednoho super, ale ten si odboural záda a nevím, jestli ještě dělá.

Výsledkem bylo, že jsem měl v Trellu spoustu nápadů co chci tvořit a jak to chci tvořit, jenže jsem neměl vývojáře. A když už jsem se do něčeho pustil, šlo to velmi pomalu a musel jsem u toho 100% asistovat, takže jsem neměl čas vydělávat peníze na druhé frontě internetového marketingu, kde jsem měl práce tolik, že jsem nestíhal. Logickým krokem bylo najmutí člověka i na internetový marketing, jenže to mělo spoustu proti – hlavně kompletní zaučení, které by mohlo trvat několik měsíců s rizikem toho, že se na to dotyčný potom vykašle.

Začnu programovat. Ale v čem?

Všechny pro a proti vyústily v jediné – začnu programovat. To totiž bude řešit všechno. Jenže v čem? Dříve jsem programoval v PHP, ale to bylo ještě funkcionálně a 10 let zpátky. Za poslední roky jsem občas něco málo dělal opět v PHP. Zkoušel jsem Codeigniter, Nette a Laravel. Jenže jsem začal hodnotit situaci – PHP je asi nejrozšířenější, ale podle posledních průzkumů nemá tak slibnou budoucnost. Druhou nevýhodu jsem viděl ve velkém množství frameworků, což strašně štěpí trh. I když jednotlivé frameworky vychází z PHP, tak se více či méně liší. Tzn. není to o tom dělat v PHP, ale vybrat si jeden, maximálně dva frameworky v PHP a v nich dělat. PHP se tak dostalo do fáze „když nic lepšího nenajdu, tak u něj zůstanu“, což není zrovna moc přesvědčivý začátek.

Začal jsem tedy hledat. Javascript si pamatuju ještě z dob, kdy to byl čistý javascript. Dneska už jsou frameworky, na kterých můžete postavit celou aplikaci. Jenže mi přijde, že je na trhu JS tak trochu chaos. Vývoj jde hodně dopředu a věci se až moc rychle mění. Backend bych na tom nestavěl už jen z důvodu obav o kompatibilitu v budoucnu.

Chvílema jsem zavadil i o Javu, ale neznám webovky, který běží na Jave. Těžko tedy můžu něco hodnotit, navíc škola mi ji vcelku znechutila.

Pak jsou jazyky jako C, C++, Perl, Visual Basic, o kterých nemám moc přehled. Ale na první pohled to nejsou primárně webové jazyky, a tím pádem mi nevyhovují. Byl by to hodně velký skok do neznáma s nejistým výsledkem.

Pak nám tu všeho všudy zbyl už jen Python a Ruby. Začal sběr materiálů, mnoho a mnoho přečtených článků a porovnávání syntaxe. Ruby nakonec zvítězil, ale kdybych si měl vybrat mezi PHP a Pythonem, volil bych Python. Z mnoha různých důvodů, které v tomto článku rozebírat nebudu, vyšly Python a Ruby lépe než PHP.

Takže jsem se nakonec ustálil u jazyka Ruby, respektive jeho frameworku Ruby on Rails. První kroky vedly na TryRuby.org, kde okamžitě zjistíte, jak moc super jazyk Ruby je. Doporučuju starší Intro do jazyka Ruby na blogu Karla Minaříka. Co musím vyzdvihnout je asi nejlépe napsaná kniha o programování, kterou jsem kdy četl. Jedná se o RailsTutorial.org. Celých 12 kapitol je podrobně rozebraných na konkrétních projektech. Oproti oficiálním Rails Guides je to mnohem detailnější zdroj a řekl bych i více aktualizovaný. Některé problémy bych v současnosti řešil jinak, ale nejde o to programovat podle autora, ale osvojit si Railse, což kniha dokonale splnila. A navíc je v online verzi zdarma.

První kroky s Ruby

Učit se úplně něco nového od píky je vždycky výzva. Já měl výhodu, že jsem s programováním nezačínal. Analytické a logické myšlení, znalost MVC a další věci jsem měl osvojené, takže šlo o to naučit se syntaxi Ruby a koncept Railsů.

Ruby on Rails vychází z jazyka Ruby. A teď zpětně musím konstatovat, že je to opravdu krásný jazyk. Pojďme si dát pár základních příkladů.

'Tohle je můj pes'.include? 'pes'
#=> true

Jak vidíte, Ruby syntaxe funguje více ve větách než v rovnicích. Kód se dá do češtiny přeložit takto – obsahuje řetězec ‚Tohle je můj pes‘ řetězec ‚pes‘? Ano, výsledek true. Další příklad.

['pes­­', 'kocka', 'hus­a', 'krav­a', 'ovce­'].sort.last.upcase.include? "PE"
#=> true

Tento příklad je složitější, ale i laik bez znalosti syntaxe ví, o co jde. Vezmeme pole s pěti zvířaty, seřadíme je podle abecedy (sort), načteme poslední (last), obsah tohoto pole uděláme velkými písmeny (upcase) a zeptáme se – obsahuje toto pole (include?) řetězec „PE“? Ano, obsahuje. Vše se nám krásně vejde na jeden řádek. V praxi většinou máme pole uložené v proměnné, např. zvirata, takže kód pak vypadá takto:

zvirata.sort.last.upcase.include? "PE"
#=> true

Pokud budeme funkci volat vícekrát a s proměnným vstupním polem, pak je lepší vytvořit funkci. Ruby nás navádí k tomu, aby kterýkoli kód, který se opakuje minimálně jednou, byl automatizovaný přes funkci. Ve zkratce je to DRY neboli Don’t Repeat Yourself.

def je_posledni_pes(pole)
  pole.sort.last.include? "pes"
end

domaci_zvirata = ["kocka", "pes", "andulka", "slepice"]
je_posledni_pes(domaci_zvirata)
#=> false

Funkce je_posledni_pes() hledá v posledním chlívku vstupního pole řetězec „pes“. A jelikož máme v daném příkladu slepici, která je po seřazení jako poslední a řetězec „pes“ neobsahuje, je výsledkem false.

Kombinace Ruby a Rails je mnohem silnější

I když je jazyk Ruby kompletně objektový, pořád by nám tvorba běžné aplikace (např. redakčního systému) trvala zbytečně dlouho. Proto byl vyvinut framework Ruby on Rails, který nám usnadňuje práci. Pokud dodržujeme konvence a styl Ruby on Rails, potom nás konfigurace v podstatě nezajímá a vše pojede dle očekávání. Rails ví, co chcete udělat, a jak to chcete udělat. A podle toho vše nastaví. V praxi vám to šetří spoustu času. A největší výhodou je, že lze zakomponovat jakoukoli nestandartní věc. Rails vám to dovolí, jen je potřeba větších znalostí než těch základních.

Vaším hlavním nástrojem při programování v Railsech je OS na bázi linuxu, textový editor (např. Sublime Text) a příkazová řádka. Linux je problém, který hodně lidí odradí. I mě to zpočátku odrazoval a pokoušel jsem se Railse rozchodit na Windowsech. Po asi 14 dnech pokusů jsem to vzdal. Zjistil jsem totiž, že aktuální verze ještě nebyla dostatečně zkompilovaná pro Windows a něco v ní nefungovalo. Takže jsem nainstaloval VirtualBox, Ubuntu 14.04 a šel do neznámého prostředí. S použitím manuálu na GoRails.com jsem zprovoznil vývojové prostředí do 1 hodiny. Nevadí, že jsem nevěděl, co jednotlivé řádky při instalaci znamenají. Proč tam jsou instalační cesty takové, jaké jsou. Pro vás jako programátory je to vlastně jedno, minimálně do začátku. A nakonec, když vývojové prostředí funguje, začnou fungovat i ostatní věci a to hodně rychle. Najednou máte spuštěné Hello World a jste nadšení. Je to jen o něco málo náročnější než instalace balíčku PHP+Apache+Mysql na Windows. Jen než si zvyknete na příkazovou řádku, chvíli to potrvá.

O RoR se toho dá napsat hodně a jednotlivé věci třeba shrnu v dalších článcích, ale pokud jste na začátku a rozhodujete se, jestli se RoR naučit, pak tu pro vás mám můj názor na silné a slabé stránky.

Silné stránky

  1. Jazyk Ruby – je přehledný, šetří kód a nepoužívá středníky, což vede k menší chybovosti.
  2. Nadprůměrně dobrá dokumentace, asi nejlépe napsaná kniha o programování a nadprůměrně dobrá komunita.
  3. Framework Ruby on Rails je vhodný jak pro malé, tak i velké projekty. Dobře navržená aplikace, ke které vás RoR vede, je dobře škálovatelná do budoucna.
  4. Konvence mají přednost před konfigurací – a to je alfa omega všeho. Zvyšuje to produktivitu práce. Při přebírání projektu je velké šance, že předchozí programátor pracoval správně.
  5. Generátory v příkazové řádce – velmi oblíbený nástroj. Jakmile si příkazovou řádku osvojíte, tak nebudete chtít manuálně vytvářet .html a .rb dokumenty v Sublime Textu. Navíc k přístupu do databáze se používá hlavně příkazová řádka. Při spuštění příkazu rails generate scaffold animal type:string legs:integer se nám vytvoří kompletní struktura (databáze s 2 atributy + automatickým id, created_at a updated_at) + model Animal + AnimalController + všechny příslušné soubory Views včetně SCSS + základní operace jako index, show, edit, create a update. Bez jakékoliv znalosti když naroutujeme index, vypíše se nám seznam zvířat.
  6. Gemy – proč znovu vymýšlet ukládání a nahrávání obrázků? Tohle už někdo dávno vyřešil, dokonce mnoha odlišnými způsoby. Stačí jen vybrat ten správný gem, implementovat ho a jedete dál. Jen se snažte aplikaci nezaplnit zbytečnými gemy.

Slabé stránky

  1. Linux – musíte začít pracovat v Linuxu, což je pro neznalé další část, kterou se musí naučit ovládat. Nemusíte být mistři na Linux, ale už jen samotný pohyb v novém prostředí, instalace a otevírání souborů, to vše jsou věci, které dokážou odradit.
  2. Hosting – několik českých hostingů existuje, ale já si vybrat nedokázal (např. railshosting.cz nepodporuje Postgresql databázi).
  3. Deploy produkčního serveru – to navazuje na bod 2. Musíte umět spravovat vlastní server nebo VPS, což znamená umět nastavit produkční server se vším všudy. Opět se dá najít spoustu návodů, ale chce to vysedět.
  4. Málo českých vývojářů – těch, co dělají v RoR, u nás moc není. To znamená, že se bez angličtiny neobejdete.
  5. V Čechách je malý trh pro RoR. To je samozřejmě způsobené popularitou. Možná mnoho lidí uvažuje mít aplikaci postavenou v RoR, ale nenajdou programátora, nebo firmu. Mnohem jednodušší je poptat PHP. Tam najdete někoho hned. A fungovat to bude taky, tak co. Každopádně v zahraničí je poptávka obrovská a RoR programátoři si přijdou na mnohem větší peníze než PHP programátoři.

Finish

Na závěr bych dodal, že Ruby není kouzelný jazyk. To, co uděláte v Ruby, uděláte pravděpodobně v jakémkoli jiném jazyce. Otázkou spíš je, jaká řešení se nabízejí, jak vypadá výsledný kód, jak obtížné bylo kód vymyslet a kolik systémových prostředků kód bere. Např. dle posledních testů rychlosti PHP frameworků můžete vidět, že rozšířené a oblibené frameworky jako Zend, Symfony, Cake a Laravel jsou na tom skoro nejhůř. Ale než aby se vývojáři snažili přesedlat, radši investují více peněz do výkonu serveru (nebo jejich klienti).

Největší boom propagace RoR je dávno pryč. Současně je to stabilizovaný framework, který se stále vylepšuje. Silné a slabé stránky jsem popsal ze svého pohledu. Co vadí mně může naopak jinému vyhovovat. Ale pokud si všimnete, tak na samotném frameworku RoR nevidím nic negativního. Všechny slabé stránky vychází z malé rozšiřitelnosti v Čechách a z Linuxu. Pokud se s tímhle smíříte, potom vám nebrání nic v tom, abyste začali se studiem.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *