Ruby kalba – mokykloms?

Media_httpimg256image_cjidi

Leisdamas Kalėdines dienas su šildomaisiais kompresais pažandy, varčiau įvairius Ruby manualus ir nėtikėtai šovė mintis, kad ši kalba būtų puikus mokymo programuoti instrumentas. Ypač pradedantiems. Prieš rašydami piktą komentarą apie Pascalio “lengvumą”, C greitį ar panašiai, leiskite išdėstyti savo argumentus.Visų pirma, apie tikrus pradedančiuosius. Pamenu, kaip tiek mokykloje, tiek universitete apie pasirinkimą mokyti Pascalio kalbėdavo daugmaž “dėl to, kad lengva mokytis, kad panaši sintaksė…”. Sutinku, kad norint suprasti programavimo logiką yra itin svarbus kalbos natūralumo barjerų nebuvimas. Kiek natūralus ir įskaitomas yra Pascalis, o kiek Ruby, galite spręsti iš pavyzdžio.

{ Pascal }for i := 1 to 10 dobegin  Writeln('Labas');  Writeln('Čia ciklas');end;
# Ruby10.times {  print "Labas"  print "Čia ciklas"}

Trumpai tariant Ruby sintaksė yra bent kelis kartus natūralesnė šnekamajai anglų kalbai, nei apskritai bet kokia kita programavimo kalba. Taigi kodas yra lengvai skaitomas, neretai programos tekstas labiau panašus į istoriją ar tiesiog instrukcijas ką kam reikia daryti, negu į rimtą programą. Taigi besimokantis gali koncentruotis į logiką, į algoritmą, o ne į sintaksės ypatybes.Antra, Ruby kalboje viskas yra objektai. Ir tai tikrai yra pliusas aiškinant apie programavimą pradedantiesiems. Nereikia pasakoti kas jie realiai yra ar kas yra objektinio programavimo paradigma, bet štai suvokti, kad realiame gyvenime “žodis” turi ilgį, jį galima nukirpti, padidinti raides, taigi ir kompiuteryje “žodis” yra objektas, kuriam galima atlikti tuos pačius veiksmus:

# Ruby"žodis".length"žodis".chop!"žodis".capitalize

Nebūtina jau mokykloje dėstyti kaip kurti objektus, bet programavimo kalbos tokia objektinė logika yra artima natūraliam pasaulio suvokimui, kas padeda neatmesti ir įsisavinti programavimo ypatybes.Trečia, kaip privalumą norėčiau išskirti dinaminį kintamųjų tipų nustatymą. (Trumpai tiems, kas nežino kas tai yra. Programavimo kalbose kintamųjų tipai (ar tai sveikas skaičius, ar simbolis, ar žodis ar dar kas) nustatomi keliais būdais: vienos kalbos reikalauja deklaruoti tipą konkrečiam kintamajam (pvz. pascal: var skaicius: integer), taigi jo tipas jau žinomas prieš vykdymą (jei dar tiksliau – iškart sukompiliavus). Tai vadinama statiniu kintamojo tipo priskyrimu. Dinamiškai tą darančios kalbos tipą kintamajam suteikia tik tada, kai jam priskiriama reikšmė, vykdymo metu, t.y. deklaruoti iš anksto tipų nereikia). Nereikia deklaracijų prieš programos vykdymą, nereikia gaišti laiko įsivedant naują kintamąjį ir vėl keliaujant į pradžią apsibrėžti jo tipo (kalbant apie Pascal) ar po kūrybos proceso trinti tą pusę taip ir nepanaudotų kintamųjų. Pascal stiliaus tipų išskyrimas ir ypač pavyzdžiai knygose “priveda” prie stiliaus var a, b, c, d, e, f, g: integer; o to atsikratyti rimčiau neprogramuojantiems labai sunku.Ketvirta, išmokę Pascalio ir baigę mokymo įstaigą mokiniai (studentai) gali sėkmingai kišti savo šios kalbos žinias į stalčių, nes jų daugiau niekada neprireiks. Panašios sintaksės šiandien pramonėje naudojamų kalbų neteko matyti. O Ruby turi labai plačias erdves tolesniam naudojimui ir self.tobulėjimui – galima sukti link taikomųjų programų arba interneto tinklapių kūrimo vandenų. Be to, Ruby daug savybių turi “paveldėjusi” iš Perl ir Python, kurios priklauso pramonėje naudojamų interpretuojamų kalbų vainikui.Penkta, Ruby – atviro kodo kalba, kuri vystoma GNU/Linux, o veikia daugelyje UNIX, Mac OS X, Windows 95/98/Me/NT/2000/XP, DOS, BeOS, OS/2 ir kitose operacinėse sistemose. Kadangi tai interpretuojama kalba, norint ją paleisti įvairiose aplinkose, nieko nereikia perkompiliuoti.Daugiausiai paminėjau Ruby vs. Pascal ypatumus, tad galite paklausti, o kodėl ne kokia kita kalba, jeigu Pascal jau tokia atgyvena? Daugelis kalbų tikrai nėra kartu tokios lanksčios, draugiškos pradedančiajam, tačiau galingos patyrusiems, pakankamai populiarios, taigi turinčios aktyvią bendruomenę. Iliustracijai pateikiu Java vs. Ruby kodą, kuris daro tą patį – nuskaito jūsų įrašytą vardą ir jus pasveikina.

/* Java */import java.io.*;/* ... */InputStreamReader isr = new InputStreamReader(System.in);BufferedReader reader = new BufferedReader(isr);String name = null;try {  if ((name = reader.readLine()) != null) {    System.out.println("Hello, " + name + "n");  }} catch (IOException e) {  System.err.println("Caught: " + e);}
# Rubyname = getsputs "Hello, " + name

Pats toli gražu nesu Ruby guru, o tik pradedantysis, bet dėl minėtų priežasčių esu įsitikinęs, kad mokymas programuoti šia kalba atneštų kur kas daugiau naudos ir sėkmės, negu dabar naudojamom priemonėm. Pasaulyje aplink mus pirmi žingsniai jau žengti – jau yra mokyklų ir universitetų, kurie priėmė teisingą sprendimą. Pavyzdžiui, Harvarde dėstomas “Introduction to Computer Science”, kuriame žvelgiama į C ir Ruby.Manau Ruby 2.0 versija, kuri jau palaikys Unicode, išspręs problemas su greičiu (pasitelkdamas virtualią mašiną) ir gijų (thread) tipais, galėtų būti puikus pagrindas kam nors priimti teisingą sprendimą.Laikas keistis?

29 thoughts on “Ruby kalba – mokykloms?

  1. asterisk

    Svajonės… :) Pas mus pačios mokytojos/ai nieko kito nežino kaip pascal pagrindai, tai ką jau kalbėti apie ruby. Niekas neperrašinės vadovėlių ir nemokys naujų kalbų. Nebent po 15-20m.

    Reply
  2. noTime

    Aš asmeniškai esu už Java. Ant smūgio atsisijotų idiotai (mano buvusi mokytoja nežinojo kas yra kompas), o besimokantiems būtų naudinga.

    Reply
  3. ech0

    Straipsnis paskatino pradėt mokytis Ruby. Senokai galvojau pabandyt, bet vis neprisiruošdavau… Dėkui :)Dėl mokyklų… Konservatyvus požiūris ir tiesiog nenoras stabdo progresą. Mokytojai retai seka programavimo kalbų naujienas ir taip neplečia savo kvalifikacijos, galvodami (ir kolkas būdami teisūs), kad su Pascal žiniom jie saugūs savo darbo vietoje…

    Reply
  4. Vidmantas

    <strong>asterisk</strong>, nuo mokyklos niekas ir neprasidės. Reikėtų, kad kažkas pradėtų dėstyti šią kalba universitete, taip po truputį atsirastų "literatūros" lietuvių kalba, kuri būtų tinkama pradinukų mokymui. Nors apie bet kokią programavimo kalbą rimtos literatūros (ne vertalo) lietuviškai nė nekvepia. <strong>noTime</strong>, ne, Javos geriau nereikia. A. Java palaiko TIK objektinį programavimą. B. Išaiškinti visiškai pradedantisiems paskutinį pavyzdį, kuris atlieka elementarų veiksmą, manau, prireiktų daugmaž metų. Aš po tokio "įvado" bėgčiau kuo toliau :-) <strong>ech0</strong>, na manau mokytojai ir neprivalo sekti visas naujausias tendencijas IT pasaulyje, jų mokymo tikslas ne toks. Pasikeitus situacijai nuo pascalio pereiti prie paprastesnio Ruby sugebėtų, manau, 99%.

    Reply
  5. MekDrop

    Sutinku, kad reiktų pakeisti Pascal’į, bet keisti į Ruby vis dėl to nesiūlyčiau… nors irgi neblogas variantas būtų… kaip ir kokia BASIC kalba… :)Kadangi pasaulyje išesmės dabar dominuoja C sintakse arba jos modifikacija paremtos kalbos, nauja dėstoma programavimo kalba, manau, turėtų ją palaikyti. O paprasčiausias dalykas ateinantis man į galvą – tai JavaScript. Kiek žiūrėjau pagal praitų metų inf. olimpiados uždavinius – nėra tokio uždavinio, kurio su šia programavimo kalba nebūtų galima išspręsti + tai viena iš tų kalbų, kurią galima rasti vos ne kiekviename kompiuteryje :) Nors kita vertus pačius programavimo pagrindus siūlyčiau pradėti mokintis nuo tokių kalbų Logo (dėl natūralios kalbos).

    Reply
  6. Vidmantas

    MekDrop, javascriptas priklausomas nuo naršyklės, kas yra per daug riebus minusas. Taip, C stiliaus sintaksė plačiai paplitusi pramoninėse kalbose, bet praktiškai visos naujos patogios kalbos toli gražu nėra C stiliaus. Ne, nesutikčiau dėl javascript… Dėl daugelio priežasčių. Na, ir lyginti Ruby su BASIC… :-)

    Reply
  7. Blogorama #295 : nežinau.lt

    […] vartotojams siūlo pagyvinti administravimo sąsają vienu iš kelių skirtingų apvalkalų. Vidmantas vietoje Pascal siūlo mokyklose mokyti Ruby. Fogenous IT piktinasi RIAA kabinėjimusi prie vartotojų dėl duomenų kopijavimo iš diskų savo […]

    Reply
  8. MekDrop

    Kadangi nemoku aš Ruby tai sprendžiau apie ją iš tavo pateiktų pavyzdžių… todėl suprantama, kad galiu klysti… :) Šiaip ar taip neskaitant sintaksės kai kurie šiuolaikiniai BASIC atitinka visus išvardintus tavo punktus. Deja, nevisi BASIC dialektai yra tarpusavyje suderinami… todėl čia gali būti didelių sunkumų… :( O dėl C sintaksės: atsiranda tiek pat naujų kalbų, kurios nenaudoja C sintaksės, kiek ir tų kurios naudoja. Išesmės galima sakyti, kad lygiosios. Žinoma, C sintaksė populiaresnė tarp komercinių organizacijų, bet ir šios dažniausiai savo naujoms programavimo kalboms po kurio laiko patvirtina kokiais nors ISO standartais. Visgi mokykla yra svarbus dalykas ir čia kalbos bet kokios neišeina pasirinkti. Prieš sakant, kad vieną kalba yra tinkamiausia reiktų atlikti kokią nors 20-ies kalbų tinkamumo analizę (man atrodo turime išties nemažai kandidatų; berašydamas prisiminiau apie LUA… kuri irgi gal visai nebloga būtų…). Šiaip ar taip manau, kad mokykloj turėtum neišmokti programuoti viena kalba, bet sugebėtum išmokti bet kurios iš jų :)

    Reply
  9. blogeriai.net » Blog Archive » Paskalis mokyklose

    […] mokyklose siūlo naudoti ruby. Sutinku, kad paskalis blogai, bet dėl manęs geriau būtų python’as, o ne ruby. Python’as tai […]

    Reply
  10. Pawka

    Šiaip mokyklose <strike>dėstyti</strike> mokyti Ruby būtų labai pravartu. Daug patogiau ir aiškiau. Tačiau Ruby naudoti kaip pagrindinę kalbą universitetuose – nesutikčiau. Manau daug lengviau būtų savarankiškai perprasti Ruby, mokant C sintaksės kalbą nei atvirkščiai. Manau, kad C (ar Java) suteikia tvirtesnius programavimo pagrindus.

    Reply
  11. Gintaras

    Vidmantai, sutinku su tavo mintimis, tik nebūčiau toks kategoriškas dėl "pramoninio" Pascal naudojimo.. yra Delphi ir jo atmainos, kurios labai smarkiai naudojamos. Dabar mažėja aišku ir web tendencijų ten mažiau, bet visgi.. panaudoti žinias yra kur. umm. Gali pasakyti, kad tai ne visai Pascal, ir … gal būsi teisus kažkiek :)

    Reply
  12. dz0

    o kodėl ne python?jis man atrodo aiškesnis už ruby ir LT turi giliasnes tradicijas..kaip tik kompiuterijai pridaviau straipsniukąhttp://popmokslas.projektas.lt/failai/python/python–programavimas_visiems.odtir dar aptikauhttp://blog.sandbox.lt/page/index/lt/Paskalis+mokyklose

    Reply
  13. kestaz

    Jo, as taip pat sutinku su dz0 .. as taip pat uz PythonPython jau turi gilias saknis .. Ir naudojamas daug kur .. Kad ir tokiam produkte kaip Ubuntu.Taip pat sintakse /mano manymu/ daug aiskense yra Python. Ir daug skaitomesne.Is programvimo patirties galiu pasakyt .. kuo labiau sutrumpinama deklaracija tuo viskas darosi neaiskiau .. o python’e tas ciklas atrodo labai kompatiskaifor i in range(10): print ‘hello word 10th times’pliusas kad gali naudot iteratoriu i. su tuo ruby 10.times net neaisku kaip ciklo kintamaji naudot.. o ant python’o kompaktiskoje istraiskoje viskas aisku .. Sakyciau optimaliausias variantas yra s/Pascal/Python/ Ir visos problemos bus issprestos .. Taip pat Python’as turi Django framework’a .. kuris gali buti labai didelis konkurentas analogiskams web ruby framework’ams

    Reply
  14. Vidmantas

    Pasaulyje Pythono populiarumas blėsta – knygų apie Ruby jau parduota daugiau negu Pythono. Net nebešneku apie Japoniją, iš kurios visos naujovės ankščiau ar vėliau persikelia į Europą ir JAV. Kęstai, dėl sutrumpinimo pažiūrėk kuo gali virsti Perl. Aš savo ruožtu tikiuosi, kad taip su Ruby neatsitiks. Iš kelių pavyzdžių apie Ruby nespręskite, kaip apie iteratorius. Yra ne vienas būdas iteruoti, tai buvo tik paprasčiausias pavyzdys. Daugiau nesurašiau, nes ne pavyzdyje esmė, daugiau jų visada galima rasti internete. Sutinku, kad Python yra senesnė ir publika prie jos pripratus labiau, tačiau jokio skirtumo pradedantiesiems, jeigu bendruomenė aktyvi. Ir pabaigai vienas pastebėjimas: <strong>išlįskite iš savo mėgstamų kalbų kiauto ir pažiūrėkite į viską iš šono.</strong> Suprantu, kad ta kalba, kurią mokate, atrodo jums pati aiškiausia ir pati patogiausia, bet toks įspūdis, kad tai trukdo pažvelgti į kitą sodą.

    Reply
  15. Savaitgalio skaitiniai #47 » Pixel.lt

    […] Tutorial – Part 1 – pirmas pilnas ir tikrai aiškus straipsnis, kaip pradėti dirbti su RoR 2.0. Ruby kalba – mokykloms? – Vidmantas svarsto apie Ruby tinkamumą mokykloms. A Coder’s Guide to Coffee – programeriai be […]

    Reply
  16. Rimantas

    Ghm, ghm, gal autorius norėtų savo Ruby pavyzdį pataisyti? Riestinius skliaustus būtų gerai pakeisti do-end. Be to, jei jau reikia writeln atitikmens, tai geriau naudoti puts, o ne print.Dėl mokymo programuoti – kalba čia visiškai antraeilis dalykas. Mane programuoti išmokinobe kompiuterio (reta mokykla jų tada turėjo) ir kažkokia pseudo kalba. Prisėdus prie KYBT-2 suMSX Basic teliko tik sintaksę susižinoti :). Gal Java nelabai tinka, dėl to, kad labai daug pagalbiniokodo, ir taip pasimeta esmė, o Pascal, Ruby, Python ar ECMA Script — nėra didelio skirtumo.Python vs. Ruby daugiau skonio dalykas, nors kai kurie dalykai Pythone yra užtempti vėliau, o Rubyje į kalbos dizainą jau iš pat pradžių kreipta daug dėmesio. Gal kiek daugiau skirtumai kliūvaįlindus į metaprogramavimą, ten Pythonui ima kišti koją jo kodo formatavimo taisyklės.O JavaScript (ECMA Script) vertas dėmesio. Tai gerokai rimtesnė kalba, nei atrodo (ir neapsiriboja naršyklėmis, pažiūrėkit pvz. Rhino projektą).

    Reply
  17. Vidmantas

    Rimantai, taip tu teisus. Dėl pavyzdžio – sintaksė tai leidžia, nors taip, tipiškiau būtų puts ir do-end konstrukcija. Manau tai taip pat parodo Ruby "cukriuką", kuris nepririša prie reikalaujamos-ir-vienintelės konstrukcijos.

    Reply
  18. Sepa

    Na, aš čia pavėluotai, bet… yra toks posakis: "Jeigu sukursi daiktą, kuriuo galės naudotis ir kvailys, tai tik kvailys juo ir naudosis".Manau, kad mokykloje prie javos arba C geriau pereit. O dar geriau niekur nepereit, nes paskalis tikrai nėra tokia kompleksinė kalba kaip Ruby ar kitos (t.y. gerai, easy-to-write-stuff-in-ruby, bet ten tiek daug visko, ko nereikia mokyklos kursui…)Nežinau, gal aš čia prastas programuotojas, kuriam buvo nesudėtinga perprast C/Java/Python/Perl/PHP, bet vistik Ruby aš neperkandau, pasižaidžiau porą dienų – nieko neišėjo ir mečiau. Kažkur skaičiau, kad sintaksė atseit į pitono šiek tiek panaši. Šiek tiek ir buvo panaši, nepatiko.Beje, man rodos su Ruby gali tą "10.times" irgi pakeist į paprastą old-school-php-java-like for’us? Čia aš įžvelgiu minusą šiai kalbai (žvelgiant per asmeninę prizmę), kad kalbos operatoriai turi krūvas sinonimų. Dabar įsivaizduok yra du programuotojai, vienas naudojasi vienais sinonimais ir programuoja, ateina kitas jo kodą taisyt ir nieko nesupranta, nes jis įpratęs visiškai kitais operatoriais tą patį atlikinėt.Galų gale, padirbėjus abiems tokiems prie vieno projekto gaunasi fignia: kode – bardakas, programa – vabalynas.IMHO Ruby nesilaiko KISS principo. Bet čia tik IMHO.

    Reply
  19. Vidmantas

    Sepa, manau šįkart tu stipriai pro šalį. Dėl kvailio posakio kas liečia Ruby – taip, paprasta įgauti pagreitį mokytis, tačiau patyrusiems suteikiamos visos galimybės. Lambda funkcijos, visada atviros klasės, pilnas OOP modelis ir t.t. Pilna atsiliepimų ir nuomonių internete, kur žmonės po dešimtmečių su C#, Java į Python ar Ruby. Turbūt ne nuo senatvinės negalios? Dėl mokyklos: C ir Java ten tikrai ne vieta, pamąstyk pats ar norėtų programavimo pradinukas išklausyti kursą apie pointerius, pilną kursą apie objektinio programavimo paradigmą, paaiškinti krūvą pagalbinio kodo ir pan. Ko nereikia ką su teikia Ruby – liuks, nenaudokite, bet jeigu yra tai yra pliusas. Dėl kelių būdų parašyti tą patį, tai, Juliau, nesakyk, kad jeigu parašyta "{" ir "}", nesuprasi, kad bloką taip pat gali žymėt "do" ir "end". Arba jeigu parašyta "10.times", nesurpasi "for i in 1..10". Tai išraiškos laisvė, bet net nežinodamas gali lengvai suprasti ką reiškia paprastos konstrukcijos. Negi manai, kad programuotojai tikrai tokie bukagalviai, kad tik vieną išraišką tesugeba suprasti? Neapgaudinėk savęs… Dėl KISS: taip, advanced topikuose Ruby nesilaiko KISS. Bet paprastuose – kaip kitaip ir pavadinti? Taigi iš tavo pirmo ir paskutinio sakinio nesupratau, kas yra geriau – kad būtų KISS ar priešingai?

    Reply
  20. Sepa

    Aš myliu KISS, todėl geriau (mano nuomone) yra KISS variantas. :) Cituoju: "Negi manai, kad programuotojai tikrai tokie bukagalviai, kad tik vieną išraišką tesugeba suprasti?" – pas kiekvieną programuotoją, turėtum žinot, yra programavimo įpročiai ir kai tenka keisti svetimą kodą ir aiškintis kas ten daroma (gerai, jei komentarų yra) ir dar reikia keisti…Mokykla – jo, tavo argumentai įtikino, pointeriai bet ką atmuš nuo informatikos pamokų :) Tačiau vistiek, tai ne priežastis siūlyti Ruby.Va, dabar man įdomu pasidarė ar Ruby GRYNAI OOP kalba ar ten galima ir kažką su "grynom" funkcijom padaryt? :) Kvailas klausimas, bet jeigu grynai OOP (aš kai tyrinėjau, tai mačiau tik klases) – tai Ruby atmetimui nuo mokyklos tinka tas pats tavo argumentas, kaip ir dėl Javos. Jei ne, tai atsiprašau, nusišnekėjau :)Beje, kas neliečia mokyklų, tu programuoji su Ruby savo įdomumui ar kur nors dirbdamas? Kokia firma naudoja Ruby? :)Ir dar, kažkada ir RoR’sus bandžiau pasileisti ant savo apachiaus, tada pavyko. Bet paskui tryniau, vėl įrašiau ruby ir nebeina – kažko visiškai nesivykdo ruby kodas, o kartais pats apachis nulūžta davus užklausą ir puslapį. Maž gal buvai susidūręs su tuo?Pabaigai, tai apsigirsiu, kad pas mane C:Ruby direktorija vis dar užpildyta :) laukiu įkvėpimo tą aukščiau aprašytą bėdą išspręsti, žiūrėsim, galbūt rimčiau įsigilinęs irgi pakeisiu nuomonę, bet pakolkas man PHP gerai.

    Reply
  21. Vidmantas

    Dėl Ruby "like Java": taip, galima tik su paprastom funkcijom. Pvz pilna "Hello, Dolly" programa (gali copy-paste :) : def salute(name) puts "Hello, #{name}"end salute "Dolly"Dėl naudojimo – turiu darbo su Ruby on Rails. O grynai vien Ruby krapštau savo malonumui.Dėl ROR ir apache – jeigu tik sau, kam leisti per Apache? Developinimui yra skirtas Webrick. Susikurk naują RoR projektą, ir toje direktorijoje įvykdyk ruby scriptserver ir naršyklėje nuėjęs http://localhost:3000 rasi veikiančią RoR aplikaciją. Ir pabaigai pridursiu, kad kai tenka padirbti su Ruby, RoR ir reikia vėl persiorientuoti ir grįžti prie PHP, tai jaučiuosi kiek diskomfortiškai, lyg grįžęs 10 metų atgal (nors, įdomi detalė, Ruby pora metų vyresnis negu PHP). Galbūt kada nors irgi panašiai pasakysi? ;-)

    Reply
  22. Edgaras

    Visiškai nesutinku su striaspnio autoriumi. Labai gražius pavyzdžius čia pateikei, o kur kompiliavimo/paleidimo pavizdys? Tu išaiškink humanitarui dešimtokui, kaip paleisti ruby scriptą. Vidurinė mokykla nėra skirta ruošti programuotojams ar dar kam, o vidurinį išsilavinimą turinčius asmenis, programavimas jame vaidina labai nedidelį vaidmenį. Kas norės – tas išmoks. Straipsnis ta tema: http://www.arvydas.net/bevertes-programavimo-kalbos

    Reply
  23. Vidmantas

    Kaip paleisti Ruby skriptą Windows (analogiškai galima sutvarkyti ir kitose OS): 1) Išsaugoti failą .rb plėtiniu2) Dukart paspausti ant jo su pelyte. Nemanau, kad humanitarams tai sukeltų problemų.

    Reply

Leave a Reply

Your email address will not be published. Required fields are marked *