Valinnan paikka: Python & Django vs. Ruby on Rails
Olen käyttänyt viime aikoina paljon energiaa sen pohtimiseen, kumpi on parempi alusta kehittää web-sovelluksia: Python-pohjainen Django vai Ruby on Rails.
Ruby on Rails
Kypsä ja elegantti, mutta kärsii suorituskyvyn rajallisuudesta. Ruby on Railsilla on vaivatonta tehdä siistejä sovelluksia, joissa kaikilla komponenteilla on vakioitu paikkansa. Toisen kehittäjän tai alihankkijan on helppo omaksua projektin rakenne. Rubyssä jopa koodin sisennys on vakioitu aina 2 spaceen.
Python & Django
"Hakkerihenkinen", helposti muokattava, erittäin suorituskykyinen. Ongelmana jokaisen projektin erilaisuus, kun sovellusten komponentteja toteutetaan eri tavoilla ja sijoitellaan sinne tänne. Ei esimerkiksi vakioitua paikkaa layout-tason templateille, omille apukirjastoille, cronjob-skripteille ja vastaaville osioille. Yrityksen pitää itse määritellä policyt näille.
Kumpi tärkeämpää, eleganttius vai suorituskyky?
Tähän se valinta kilpistyy. Pythonilla on isoja valtteja reaalimaailmassa, kuten esimerkiksi Googlen App Engine -tuki sekä hiljattain ilmestynyt FriendFeedin/Facebookin Tornado-webbipalvelin. Ruby on Rails puolestaan tuntuu olevan vähän pienempien pelurien alusta, mutta toisaalta kuitenkin Twitter käyttää sitä.Kumman sinä valitsisit?
11 Comments
Pythonilla on takanaan paljon isompi ja aktiivisempi kehittäjäyhteisö, joten sille löytyy helposti valmista koodia ja kirjastoja, joita voi käyttää suoraan djangoprojekteissa.
Ison integraattorin käytävillä ainakin kuulee enemmän kiihkoilua Ruby On Railsista. Suorituskykyhaasteita on kuulemma ratkaistu ennenkin ja Ruby On Rails tuntuu tarjoavan jotain ihan uudenlaista. Tosin Pythonista kyllä kiihkoillaan edelleen, mutta sitä on tehty aiemminkin... :)
Suorituskyvyn voi aina ratkaista laittamalla tuplasti (tai nelinkertaisesti) rautaa palvelemaan, mutta Pythonissa houkuttelisi juuri ettei sitä tarvitse niin paljon..
Eikös Ruby on Rails (2004) muuten ole vanhempi tuote kuin Django (2005)? Käsittääkseni käytännössä kaikki web-MVC-frameworkit pohjautuvat Ruby on Railsin alkuperäiseen ideaan...
Pylons on myös kokeilemisen arvoinen framework. Pythonilla kirjoitettu sekin.
http://pylonshq.com/
Kummallakin on tullut devattua, ja koodarin näkökulmasta tykkään enemmän rubystä tällä hetkellä. Mielenterveyden kannalta ainoa vaihtoehto on kuitenkin django.
Suorituskykyongelmiin on kuitenkin tullut törmättyä jo niin pienissä kokonaisuuksissa, että en ihan nopeasti uskaltaisi tuolla mitään sen suurempaa rakentaa. On kokeiltu ajaa sellaisenaan, passengerilla ja mongrel clustereilla. Millään ei pysy perässä edes alle 20 hengen kokonaisuuksissa verrattuna kilpailijoihinsa.
Enemmän kuitenkin syö jatkuvat muutokset. Jos jotain palikkaa erehtyy päivittämään, kohta ei toimi mikään. Myös tapauksissa, joissa mitään järjellistä syytä syntaksin muuttamiseen ei ole. Tai ehkä olen vaan liian tyhmä tajuamaan syyn. Tämä tuottaa ongelmia myös ratkaisuja eri tilanteisiin etsiessä: 90% eri puolilta löytyneistä koodinpätkistä ei ole toiminut koska ne on tehty 0.0.1 versiota vanhemmalle tai uudemmalle railsille tai jollekin muulle kikkareelle, ja ongelman etsimiseen ja korjaamiseen menisi enemmän aikaa kuin pyörän keksimiseen uudestaan. Lisätään tähän vielä tilanteet, joissa Rails valittaa ettei tätä ja tuota palikkaa voi käyttää, koska se vaatii vähintään version 2.2.3 ja sinulla nyt sattuu olemaan 2.2.4 joka ei Railsin matematiikalla ole näemmä tuoreempi. Kiva, kiitti, hei.
Sinällään harmi, railsia oli kiva koodata. Kerrankin tuntui (aluksi ennen näitä ongelmia), että nyt on menty niin kuin pitääkin. Ei tunnu enää.
Minäkin päädyin loppujen lopuksi Djangoon ja Pythoniin, vaikka Ruby kielenä miellyttää enemmän. Vaakakupissa painoi aika paljon se, että Pythonille on olemassa jos jonkinlaista kirjastoa Django- ja web-maailman ulkopuolellakin, joita voi sitten hyödyntää webissä. Ts. Pythonilla on yleisessä Unixin ja muiden ympäristöjen ohjelmoinnissa paljon laajempi tausta kuin Rubylla, vaikka web-puolella Rails-liike ehkä onkin vielä Djangoa suurempi.
Django on ihan passeli. Rajallinen (varsinkin ORMi), paikoitellen liian maaginen, mutta saa sillä nopeasti tietynlaista saittia aikaan.
Mikäs Djangon ORMissa? Minusta se on ollut hyvinkin taipuisa, hoitanut kaikki mahdolliset joinit ja kustomoitavissa eri tarpeisiin.
Ei tule heti mieleen millaista saittia en lähtisi Djangolla tekemään, paitsi ehkä jotain ihan perus-CMS:ää joka hoituu Drupalilla tms. ORMikaan ei ole mitenkään pakollinen Djangossa, vaan yhtä hyvin voi käyttää esim. NoSQL-kantoja suoraan ja hyödyntää sitä vain templateihin ja näkymiin.
Olen koodaillut nyt molemmilla, ja railssin kanssa tuntuu tulevan enemmän mielipahaa. Lähinnä se voi tietty johtua siitä, että railssilla tuntuu jo nyt olevan liikkeellä paljon legacy-koodia, jonka tunkkaaminen on välillä tuskaa. Paljon magiaa ja outoja/huonosti selvitettäviä käytäntöjä. Eli vähän samoilla linjoilla kuin ArZka.
Kennu: djangon ORM:ssä on tullut esim. joinien kanssa ongelmia aikaisemmissa versioissa, nykyinen (1.2) ORM alkaa olla jo varsin muikea.
Minulle Djangosta on tullut tuon blogikirjoituksen jälkeen rutiininomainen työkalu toteuttaa oikeastaan kaikki mahdolliset uudet webbisaitit. En ole oikein muita frameworkkeja enää käyttänytkään.
Tosin nyt kesällä olen tutustunut vähän lähemmin Node.js:ään ja sen erilaisiin MVC-frameworkkeihin. Nodessa kiinnostaa sen äärimmäinen keveys ja tehokkuus, ja toisaalta se sopii hyvin yhteen modernien NoSQL-tietokantojen kanssa.
You can use Markdown to format your comment:
Separate paragraphs in your text with two newlines