RubyOnRails - erdemes megtanulni?

Van egy ismerosom, aki gyakorlatilag nem ert semmilyen programozasi nyelvhez, php-ban kodolgatott csak sajat maga szorakoztatasara, de oop-t nem kezelt meg. Talalkozott egy elvetemult (jo ertelemben vett) RoR-ossal, aki nagyon belelkesitette, hogy milyen jo is az. Cimbi lelkes is, ami szerintem nagyon fontos egy uj ismeret megszerzesekor.

Abszolut webre akar dolgozni, nem erdeklik a standalone alkalmazasok. En jozan esszel ugy gondolom, hogy sokkal jobban jar, ha Java-zni tanul meg, mert olyan tudasu embert mindig keresnek es hiany van beloluk, mig sosem lattam meg RoR-os allashirdetest. Illetve Java talan univerzalisabb nyelv, jobban tudja mashol is kamatoztatni megszerzett tudasat. Ellenben Java irant egy cseppet sem erez elhivatottsagot, lehet hogy haromszor olyan nehezen tanulna' meg.

Roviden: piackepes-e ma egy olyan programozo, aki csak RoR-t ismeri? Tfh hazai palyan szeretne maradni (mert nem tudok rola, hogy el akarna menni .hu-bol).

Mi a velemenyetek?

Hozzászólások

Hibás a döntés több szinten is.

1. Neki egy alapozó nyelv kell (pl. C), ahol érzi a teljes sz**t ráborulni.

2. Soha nem érdemes kizárólag egy nyelvre alapozni. PHP-ben nem tudom mennyire írt jó és használható kódot, de van egy selytésem, mert láttam már ilyet.

Ahogy egy Linux rendszergazdának érteni kell az SQL-hez, az alkalmazásokhoz, esetleg a hálózatokhoz, ha már itt tartunk, akkor a telefonközponthoz meg a fénymásolóhoz is ;), de főleg a Windows-hoz, úgy kell egy programozónak is érteni több programozási nyelvhez.

Neki egy alapozó nyelv kell (pl. C), ahol érzi a teljes sz**t ráborulni.

En ertek hozza legkevesbe, leven helloworldnel sokkal bonyolultabbat meg nem alkottam, de miert fontos ez akkor, ha valaki kizarolag webre szeretne fejleszteni? Miert szopjon a memoria foglalassal, a pointerek kezelesevel, buffer overflowval stb.?

Soha nem érdemes kizárólag egy nyelvre alapozni. PHP-ben nem tudom mennyire írt jó és használható kódot, de van egy selytésem, mert láttam már ilyet.

Jol gondolod, nem volt celja igazabol hasznalhato kodot irnia, mert csak sajat maganak pruntyogott, szerintem nem is kerult ki semmi publicba azok kozul.

Nyilvan ugy lenne az igazi, hogy ha tobb nyelvhez ertene profin, de szerintem itt nem teljesen jo a programmer--gazda parhuzam. Plane ha megkerdezel egy HP-UX admint, szerinted o hol foglalkozik fenymasoloval? :)

azért, hogy tudjon optimális kódot írni webre is, főleg, ha eddig csak magának dolgozott nem hiszem, hogy ez volt az első szempont, ha viszont tisztában van, hogyan is működik maga a nyelv, akkor egyszerű, és jól optimalizált kódokat tud írni. A másik, hogy programozni kell megtanulni, a nyelv már csak egy eszköz, ha beszélni akarsz gondolkodni kell előszőr megtanulni, anélkül hiába ismered a szavakat.

Csatlakozom mhmxs-hez. Ha masert nem, a szemlelet miatt fontos, hogy az alapokkal szivassa egy kicsit magat. Bitenkenti muveletek, mem tulcsordulas stb stb. valszeg nem fog ezekkel talalkozni, de ha biztos alapokkal rendelkezik, a ra varo feladatokat hatekonyabban tudja megoldani abban a nyelvben, amit ismer. Megtanul "programozoul" gondolkodni. A programozok is csak elenyeszo reszet hasznaljak fel annak a par felev analizisnek, amit - ha egyetemen szereztek meg a tudast - az iskolaban tanitottak nekik. Asszem senkinek nem epul be a napi rutinjaba barmi, ami Cauchy nevehez fuzodik, de a szemlelethez ez is kellett.

--------------------------
Debian etch, 2.6.18-3

Fontos megtanulni az alapokat, mert alapok nélkül semmit sem lehet komolyan és minőségesen csinálni. Ezen szerintem nincs mit vitatkozni :)

Persze a C rendben van, de én inkább pl. a Scheme-t ajánlom, ha azt átvészeli :) hehe, akkor mehet tovább, ha nem akkor jobb ha más foglalkozást választ. Persze a Scheme után elengedhetetlen a C, és aztán esetleg jöhet a Java vagy a Ruby.

Kérlek, meséld el a haverodnak, hogy ha a programozás érdekli, akkor tanuljon meg programozni és tanulja meg az alapokat. Nem azért szoktak programozással foglalkozni, mert "keresett a piacon" - ezért jogásznak szoktak menni :) hanem azért mert érdekel, mert szereted. Persze a realitás, hogy valamiből meg is kell élni, ezért a kettő egyformán fontos, de ha nem szereted, nem érdekel akkor csak rossz "programozó" lehetsz, és rossz programozóból már nélküle is vannak éppen elegen :(

Különben a RoR lehetővé teszi, hogy gyorsan egyszerűbben célba érj, de egyáltalán nem könnyebb, az OOP-t igazán ismerni kell, ha valamire való alkalmazást akarsz fejleszteni. Manapság ugyan éppen az a baj, hogy azt hiszik, ha egy nyelv OO akkor automatikusan OO alkalmazásokat írnak benne, közben éppen az a legnagyobb baja az iparnak, hogy a legtöbb kód szóval a legtöbb programozó strukturálisan gondolkodik és olyan a hozzáállása, ezért az OOP előnyei inkább hátránnyá fajulnak.

Ja persze a válasz, a RoR-t érdemes megtanulni, de nem érdemes vele kezdeni. De Java-val sem érdemes kezdeni viszont azt még érdemesebb tanulni, mint a RoR-t, de a legérdemesebb mindkettőt tanulni :)

Szóval tanulni mindég mindent érdemes.

ha a programozás érdekli, akkor tanuljon meg programozni és tanulja meg az alapokat.

Tiszta sor. De mi szamit annak? (Azert kerdezek ilyeneket, mert ehhez sem ertek.) Tudja, hogy melyik regiszter epp mit csinal, milyen statuszban van? Vagy mi tortenik a gepben ket szam osszeadasakor?

a legtöbb kód szóval a legtöbb programozó strukturálisan gondolkodik

Talan ezert lenne szerencsesebb neki, ha nem kezdene el C-t tanulni es szokna meg a struturalt programozast (mert a jelenlegi php tudasaval, bar igaz hogy oop-t nem ismeri, de annyira a php-t sem), hanem mint elso komoly nyelv mar oo-t tanulna egybol.

Szóval tanulni mindég mindent érdemes.

Vilagos, csak munka mellett ez nem egyszeru feladat. :(

Koszi a valaszt.

Az alapokat. Nem gondolok itt olyan dolgokra mint pl. az assembly - bár nem egy webfejlesztőnek - de azért olyan dolgokkal is kell néha foglalkozni, mint pl. a http protokoll, stb. tehát ide legalább alapszinten szükséges ismerni a számítógép működési elvét, a processzor működési elvét stb. Ugyanakkor szinte lehetetlen egy közepes komplexitású algoritmust felfogni ha ezeket az alapokat nem ismerjük. Akkor manapság a fejlesztésben (és főleg webfejlesztésben fontos megérteni az n-tier architektúrát, és a design patterns-eket, ugyanis pl. hogyan fogja fel a haverod (jövendő webfejlesztőként), hogy mi is pl. a Model-View-Controller pattern, vagy az Model-View-Presenter patten és mi a kettő között a különbség? Hogyan fogja pl. Java esetében felfogni a Hibernate framework-ot, ha nem ismeri az OOP-t és a relációs adatbázisokat, hogyan fogja megoldani a Object-Relational mapping-ot, a sor hidd el végtelen.

A strukturális programozás megtanulása nem befolyásolja negatívan az OO programozást. Akkor gondolkodunk strukturálisan OO programozás közben, ha nem tanultuk meg és nem értjük az OOP-t. Ehhez pl. komolyan hozzájárul a Visual Basic (.NET előtti) és pl. az MFC (ha Windows-on dolgozunk) amelyeknek egyszerűen semmi közük az OOP-hez marketing fogáson kívül. Tehát, strukturális programozást ismerni kell, csak nem szabad OOP közben stukturálisan gondolkodni. OOP-nél nagyon sokat kell tervezni, sok egymást követő iterációval, ez a lényeg.

Ami egyszerű azt nem is érdemes :) mármint munka közben... time management is the answer my friend, time management.

OOP-hez Java mindenképpen OK, de nem szabad OOP-vel (és Java-val) kezdeni. De pl. a Ruby is elfogadható vagy a SmallTalk? De mondom, nem szabad a programozást OO-val kezdeni.

A C++ még véletlenül sem jó tanulni az OOP-t, a C++ multi paradigm nyelv és általában hibriden használják, manapság inkább generikus programozásra (generic programming) alkalmazzák mint OOP-re, a C++ nem azért jó mert objektum orientáltan lehet alkalmazni, hanem mert általában korlátlan a hatalma de éppen ezért ha tényleg nem ismered a számítástechnikát igazán alaposan akkor a C++ alkalmazása öngyilkosság. Én alapjában C++ programozó vagyok (igaz jelenleg inkább C#-al és Java-val keresem a kenyeret) és remélem, tudom miről beszélek. A C++ szerintem a programozás csúcsa, és soha nem szoktak valamit a csúcson kezdeni, tehát a C++ meg kell tanulni (ha lehet) de már csak akkor, ha elegendő tudást és tapasztalatot tud az ember maga mögött, mondjuk úgy minimum 2-3 év intenzív programozás után.

PHP-ről nem sokat mondhatok, soha nem tetszett és mindég csak messziről figyeltem :)

Hát, én lényegében C++-szal kezdtem, és nem volt gond maga a nyelv. Ami problémát okozott, hogy nem volt rendes könyvem (2-3 ezer forintért nem lehetett kapni semmmi normálisat '99 környékén), így nehezen szoktam le a C-szerű programozásról, beletellett pár évbe.
Szerintem meg nem szabad a programozást nem OO-val kezdeni, hiszen az implementálás során úgyis a függvényekre bontás, stb. is megjelenik legalábbis a privát függvények tekitetében, a másik csak rossz beidegződést okoz. Sokkal könnyebb elvonatkoztatni az objektumoktól, mint objektumokban (egységbezárás, adatrejtés, stb. stb.) gondolkodni, legalábbis számomra.

Ízlések és pofonok, nincs olyan sajnos, hogy ideális megoldás.
--
hup.user.js

Egyetértek. Lehet C++-szal kezdeni, de nem a legjobb, mint ahogy magad is elmondtad. :)
Ami a programozás OO-val kezdését illeti, szintén egyetértünk, nem szabad azzal kezdeni. Különben elég baj, hogy az egyetemeken manapság általában éppen OOP-vel kezdik.

Csak csönben figyeltem, hogy többen ragaszkodnak a procedurális nyelven történő alapozáshoz és örülök, hogy végra valaki határozottan az OO-s kezdést ajánlja. Én is ezzel értek egyet. (Nem feltétlenül, kell a kőpattitást megtanulni ahhoz, hogy egy mai láncfűrésszel ki tudj vágni egy fát. Tudom a hasonlat dúrva és túlzó, de szemléletes.) Az eljárások, változó típusok, stb.. az OO-ban is megvannak, csak rögtön a helyükön ismerkedik meg vele a tanuó.
Szerintem is az első nyelv legyen OO, de az elején vizuális felesztő eszközök nélkül. Az OO a szemlélet miatt kell, a vizualis könyezet nélkülözése pedig azért, hogy ne fedje el a kódot.
Erre a Ruby is jó lehet. Én (igaz nem első nyelvként, mert nem ma kezdten) most a Pythonnal ismerkedem és nagyon tudom ajánlani akár első nyelvnek is. De a úgy tudom a Ruby is hasonló.
Tehát a Ruby szerintem jó első nyelvnek, de a RoR-t kicsit (néhány 10 tanuló órával) későbbre hagynám.
Az OO szemlélettel én is küzködöm, hiába tudom az elveket, ha procedurálisak a beidegződéseim.

PS: Én azért döntöttem a Python mellet, mert ehhez van magyar irodalom, a Ruby-hoz sajnos nem találtam. Tudom mihamarabb angolul kellene tanulnom!

Lehetetlen OO-val kezdeni úgy, hogy legalább a fele anyag érthető legyen. Egyszerűen túl sok dolgot nem tud az ember igazán megérteni, ha nem ismeri a számítógép működési elvét, az alapokat. És ha tetszik ha nem a számítógép procedurális gép, az OO csak egy módszer. Különben C-ben is lehet (és tudok) OOP kódot írni, mert az OOP az csak egy programozási hozzáállás (lehet, hogy nem a legjobban fogalmazva), és OO nyelvekben jobban lehet OO kódot írni mint nem OO nyelvekben, de lehetséges ha hiszed ha nem még assembly-ben is OO kódot írni, csak persze nagyon fáj :) Számtalan dolog van amit az OO-ban lehetetlen megérteni a procedurális nyelvek és az alapok ismerete nélkül.

Akkor, bár ami ezt illeti, nem értünk egyet. Szerintem a legjobb ha funkcionális - procedurális programnyelvel kezdenek, ezért is említettem a Scheme-t (LISP) - és egy fantasztikus bevezetést a programozásba a Structure and Interpretation of Computer Programs című könyvet, (különben az MIT-en még ma is így tanítják). Ami az OO-t illeti, elengedethetetlen, de csak azután, hogy megtanultad, mi az adatstruktúra, az algoritmusok stb, ezért jöhet Knuth is (kedvenc "technical" könyvem) :)

Persze itt webfejlesztésről volt szó... tehát nem ennyire fontos a dolog, de azért az alapokat kihagyni nem lenne szabad.

És, hogy ne maradjak adós :) én annak idején egy ZX81-el kezdtem Sinclair BASIC-el. :), akkor még se Java de még C++ se létezett. :(

Egy B-fa vagy egy egy kupac, vagy bármi más teljesen jól ábrázolható objektumként, rajta értelmezett lényeges műveletek tagfüggvények, néhány esetleg csak friend C++ esetén... Az adatszerkezet és az OO nem zárja ki egymást. A valóságban úgyis minden objektum, ebből csak a lényeges tulajdonságokat kell meghagyni, és máris megvan az objektom-központú megközelítése az adott problémának. Ráadásul egy-egy bonyolultabb program esetén sokkal könnyebb átlátni a kódot, mert nem az van, hogy az X alprogram vajon hol lehet? "Kedvencem" a Drupal kódja, már majdnem azt hittem, hogy az első alulvonás előtti részből már adódik a függvényt tartalmazó fájl neve, de nem, össze-vissza... Sokkal könnyebb átláthatatlan kódot írni így.

A valódi probléma az, hogy szinte sehol nem tanítják meg a magát a nyelvet. Nálunk is előbb van a stukik átírása C++ kódra, mint magának a nyelvnek a normális elmagyarázása, az eredmény egy rakat borzalmas program (beadandó).
--
hup.user.js

Az OO fantasztikus dolog. Én is OO kódot írok, méghozzá remélem jól :). És nem az a baj, hogy az adatszerkezet és az OO kizárnák egymást, mert egyetértünk, nem zárják ki egymást, hanem az, hogy tiszta OO-val csak halvány tudásra tehetsz szert. A procedurális gondolkodásmód, pedig nem azért van mert procedurális nyelvet tanultál (és most el kellene felejtened), hanem éppen azért mert nem érted az OO filozófiát (konkrétan nem rád gondolok), de van valami részleges procedurális tudásod. Szóval meg kell tanulni a procedurális programozást (de alaposan), aztán az OOP-t (még alaposabban) és aztán nincs semmi gond. :)

Gondolom temérdek olyan kóddal találkoztál amelyben megfulladni lehet a get, set-ekben és ez nem azért van mert valaki jártas a procedurális programozásban (éppen ellenkezőleg) hanem azért mert nem értette meg az OOP-t, csak úgy messziről tudja. Van egy jó szó amivel ezt illusztrálni lehet: "accidental programmer", és ilyen programozók szoktak binary search algoritmust implementálni úgy, hogy az lassabban fut mint a linear search és akkor azt mondják a Java a hibás mert lassú. Nem a Java, a "programozó".

A RoR -al en is most ismerkedem, sok ev C, perl, php, es egy rovid python korszak utan. A ruby mint nyelv szerintem zsenialis es az abban szerzett tapasztalat, szemlelet konnyen felhasznalhato python -ban es erre mar nagyobb kereslet van a cegeknel. Teny, hogy a Java tudas a legjobban eladhato, de ha ot valoban a hatekony webfejlesztes erdekli es sajat projectekkel akar foglalkozni ahol nem kotott a nyelv, akkor a RoR jobb valasztas. A rails egy eleg komplex framework, sokat kell tanulni mire szemleleteben is valodi RoR kodot sikerul osszedobni, de tenyleg egy olyan eszkoz amivel el lehet kerulni az egyebkent "kotelezo koroket" es szinte belekenyszerit abba hogy ne ganyolhass (kotelezo MVC, teljes OO, stb).

"Roviden: piackepes-e ma egy olyan programozo, aki csak RoR-t ismeri?"
Amit nem egeszen ertek, hogy hogy lehet valaki programozo, ha semmilyen programozasi nyelvhez nem ert???
Amig algoritmusokat, adatszerkezeteket, stb tanult nem irt egy arva programot se?

Programozó nem lehet. De algoritmusokat és adatszerkezeteket sem lehet tanulni programnyelv nélkül, főleg nem úgy ha nem írunk programokat amelyekben ezeket az algoritmusokat implementáljuk. Minimum egy MIX vagy MMIX kell ha más nem is. Amikor én suliba jártam (régen volt) akkor pl. Pascal segítségével tanulták - én nem mert én ezt még jóval a suli előtt "elintéztem" :) az algoritmusokat és az alapvető adatstruktúrákat. Klasszikus dolgok, pl. Fibonacci, mátrix aritmetika, rekurzió, searching and sorting, stb. és egy csomó Pascal programot irkáltunk, mondhatom, hogy a többség rendesen meg is tanulta, ezeket a dolgokat, bár azon a szinten, amelyiken a suliban előadták. Később az egyetemen... pl. C fordítót irtunk, azt hiszem ez már elég komoly dolog volt :) az algoritmusokat és az adatstruktúrákat figyelembe véve.

Koszonom mindenkinek a hozzaszolasat es a velemenyet, jo latni, hogy flame nelkul is lehet. (Cimboramnak megadtam az url-t, amit tudtam megtettem, innen az o dolga, hogy mit csinal.)

En azt mondanam, hogy nem piackepes. Mar csak azert sem, mert ilyen hirdetest en meg sose lattam (ami nem zarja ki, hogy nem figyeltem, azt meg foleg, hogy sose lesz). Ami a programnyelvet illeti, en azt mondanam, mindig a feladathoz valasszuk meg. Egy "Hello world!"-re eleg a shell, egy unix kernelre mondjuk c/assembly, egy urlap feldolgozasra mondjuk php.

En jellemzoen C/Perl/PHP-ban kodolok, ha kell valami. Az itt elhangzott dolgok nemelyikerol csak annyit tudok, hogy van olyan. A suliban (nem info szak) Pascalt tanitottak. Aztan ami programozas infora szuksegem volt, annak utana neztem, kiprobaltam, es megtanultam. Utana olvastam konyvekben, megneztem, hogy masok hogyan csinaljak (open source rulez :-)), es voila! Look mom, I'm programming! Mindig, ami eppen kell (es meg hianyzik).

update: a HVG-ben lattam egy senior fejleszto allast, ahol kell a RoR is (meg Java, meg mittomenmimeg)

ASK Me No Questions, I'll Tell You No Lies