ImageShackLeisdamas 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 do
begin
  Writeln('Labas');
  Writeln('Čia ciklas');
end;
# Ruby
10.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);
}
# Ruby
name = gets
puts "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?