Prieš kokius dvejus metus (dabar tai atrodo taip seniai) juokiausi iš tų, kurie informatikos pamokose kalė Paskalį ir džiaugiausi, jog mokyklose pereinama prie C++. „Pagaliau moksleiviai bus mokomi naudingos, pritaikomos daugelyje sričių kalbos“ skambėjo mano galvoje ir nekantriai laukiau tos akimirkos, kai sėdėdamas informatikos prieš savo akis pamatysiu krūvą riestinių skliaustų.
Lol nope
Trumpai mano priekaištus galima apibendrinti taip: nesimokydamas papildomai, mokykloje C++ nesuprasi. Taip, galbūt tu iškalsi kažkurias sritis (kiek baitų tikriausiai ant mokyklos kompailerio užims int ar float tipas), galbūt išmoksi mintinai, kaip rašyti programą, sprendžiančią kvadratinę lygtį, tačiau vis tiek suprasi ne visą savo rašomą kodą ir kodėl jį turi rašyti.
Kokiais kriterijais mokymui apskritai buvo pasirinkta C++ – man mįslė. Ar mokiniui labai svarbu, kad jo programa įsivykdytų per vieną tūkstantąją sekundės, bet neduokdie ne per dvi tūkstantąsias? C++ yra labai gera kalba dėdėms su unix barzdomis, bet ne dešimtokui, abejojančiam, kas yra bitas, o kas – baitas...
Estija pradeda mokyti programavimo pirmokus. Mes – atvirkščiai – dešimtokus bandome atbaidyti tokiais siaubais kaip C++ ir vietoj to, kad sudomintume juos programavimu, IT pamoką paverčiame nemėgstamiausia iš visų.
Baltosios dėmės
Pirmą kartą atradęs šį straipsnį tiesiog įsimylėjau tą terminą. Pabandykim panagrinėti pirmąją programą, su kuria supažindinamas kiekvienas žalias mokinukas, pasirinkęs programavimą.
Nagrinėti kiekvieną kodo eilutę kurse paprasčiausiai neskirta laiko, todėl skatinama visą boilerplate tiesiog ignoruoti. Nesvarbu, kas tas int main, svarbu, kad jis yra ir turi būti. Kitaip nieko nesigaus. O štai čia – analogiško kodo pavyzdžiai Python, Ruby ir netgi Perl kalbomis:
Šiek tiek skiriasi nuo C++, tiesa? Ką lengviau įsiminsite, suprasite, kaip veikia kiekviena eilutė? Būtent taip turėtų būti mokoma programavimo – be jokių bereikalingų, blaškančių dėmesį užrašiukų. Jei kažkas kartojasi kiekvienoje programoje, tą tikrai galima pašalinti iš programuotojo akių. DRY.
Mokykite programuoti, o ne C++
Būtent tai turėtų būti programavimo mokymo mokyklose uždavinys. Tu mokomas ne tam, kad sėdėdamas mokykliniame suole sukurtum Windows 9, o tam, kad minimaliai susipažintum su tuo, kaip yra programuojama. Taip, jei pasirinksi informatikos mokslus tęsti toliau, universitete programuosi kita kalba, darbe – galbūt ir dar kita. Tačiau ne kiekvienas bus programuotoju, o didžiąją dalį informatikos egzamino vis tiek sudaro būtent programavimas.
Tai kokia kalba tada tiktų geriausiai? Ogi tokia, su kuria galėtum tiesiog imti ir dirbti, o ne mokytis kalbos įnorių ir keistenybių. Netgi ta, gal šeštoje klasėje mylėta, Komenskio LOGO vietomis yra daug aiškesnė už C++.
Šis kodas – LOGO ciklo kartok palyginimas su C++ ciklu for. Taip, aš puikiai suprantu, kad for galingesnis (žr. sakinį apie unix barzdas) – tačiau dažnu atveju mokantis tas skaitikliukas i – visiškai nereikalingas, o veiksmus tereikia pakartoti – todėl ir kartok.
C++ nėra vien blogų sprendimų krūva. cin >> a >> b; yra daug smagiau negu C variantas scanf("%d %d", &a, &b);. Pastarasis verstų mokytis dar du dalykus – scanf/printf formato kalbą ("%d %d") ir kas per velnias yra tie &. Čia nusileidžia net mano mylimas Python, neturintis funkcijos „skaityk failą iki tarpo ir paversk duomenis į tokį tipą, kokio noriu“.
Tačiau čia C++ smagumas ir baigiasi. Toliau eina tik segfault'ai, astronominiai skaičiai dėl to, kad kažkur neparašei x = 0, sėdėjimas ir žiūrėjimas bukomis akimis į monitorių kiekvienąkart, kai kodas nesikompiliuoja.
Tai ką siūlai, gudruoli?
Kol kas nieko. Idealios kalbos nėra, tačiau yra keletas sprendimo variantų:
- Imame kurią nors iš dinaminių kalbų (Python, Ruby, ...) ir vietoj vienų quirk'ų taikomės su kitais.
- Imame kurios nors iš dinaminių kalbų minimalią implementaciją ir modifikuojame pagal savo poreikius. Netikiu, kad Lietuvoje nerastume nei vieno tą sugebančio programuotojo.
- Kuriame savą programavimo kalbą nuo nulio. Nežinau, kam galėtų to reikėti, kai yra antras variantas.
Aišku, yra ir dar vienas variantas – mokinius palikti prie C++. Deja, šis - prasčiausias, nes įstatymai smurtą prieš vaikus griežtai draudžia...

