Blogity blog blog


Serialas: mokykla. Antroji serija.

2008-07-31, rtfb

Pirmoji šio serialo serija čia.

Gal verta mokykloje naudoti sudėtingesnę kalbą, "kad atsisijotų idiotai"?

Į šitą klausimą lengva atsakyti. Toks požiūris prieštarauja mano apibrėžtam pirmajam apribojimui -- neišgąsdinti. Tolimesnė diskusija šia tema iškrenta už šio serialo ribų.

Ne, neverta ir negalima.

Ar apskritai yra skirtumas nuo kurios kalbos pradėti?

Šia tema jau esu išsamiai pasisakęs.

Taip, yra!

Kompiliatorius ar interpretatorius?

Kad atsakyti į šį klausimą, reikia suprasti ar yra skirtumas ir jeigu yra, koks. Pradėsiu nuo to, kad mano nuomone, mokiniui nereikia suprasti kuo skiriasi šitie dalykai. Jeigu abu (t.y. dvi konkrečiai paimtos ir lyginamos realizacijos) vienodai patogūs pasiekti aukščiau aprašytiems tikslams ir nepažeidžia apribojimų, tai tinka vienodai. Kadangi kol kas kalbam abstrakčiai ir “turim” menamas geras realizacijas, skirtumo lyg ir nėra.

Bet kita vertus, kol kas nekalbėjom apie IDE. O kol nekalbėjom, į kompiliatorių privalom žiūrėti kaip į neinteraktyvią programą, kuria reikia išmokti naudotis vien tam, kad pasigaminti savo pirmąją programą. Maža to, nesuvokiant transliavimo stadijoje vykstančių procesų, gaunasi praraja mentaliniame modelyje: aš parašiau programą, tada vyksta kažkokie keisti dalykai, o tada programa paleidžiama ir (gerai jeigu) veikia.

Interpretatorius tokios spragos neturi. Tekstas rašomas tiesiai į interaktyvų interpretavimo ciklą. Kai norima parašyti didesnę už kelias eilutes programą, ji rašoma mėgstamame redaktoriuje, kas yra intuityvu: “kad patogiau būtų”. Pabaigta programa sumaitinama interpretatoriui, ir ji iškart pradeda veikti (arba, vėlgi, neveikti :-)).

Kitas svarbus aspektas, prigimtinis interpretatoriaus “dialogiškumas”. Richard’as Wareham’as yra parašęs straipsnį su savo pastebėjimais apie komandinės eilutės interfeiso privalumus prieš grafinius. Pradinukų kontekste! Jo pastebėjimai beveik vienareikšmiškai tinka svarstant kompiliatoriaus-ar-interpretatoriaus klausimą mokykloje.

Panašu, kad all else being equal, interpretatorius.

Kas svarbiau -- IDE, ar interpretatorius?

OK, tad kas gi stipresnis -- Arnoldas Švarcnegeris, ar Silvestras Stalonė? Kas, jeigu kompiliatorių apginkluosim IDE, gal jis tada nugalės interpretatorių? O jeigu abu -- gal pastiprės vienodai?

Visų pirma, svarstant IDE naudojimo mokykloje galimybę, reikia atkreipti dėmesį į komerciškumą. Netinka Visual This-and-that iš Microsoft. Netinka Borlando žaislai. Tinka Eclipse. Netinka Dev-C++ (tik dėl kitų priežasčių).

Toliau. Jeigu naudojam IDE, ką jis mums duoda? Duoda gerą programos kodo redagavimo įrankį (jeigu pasisekė!). Bet jų ir taip pilna, tik imk ir naudok. Duoda integraciją su kompiliatoriumi: nereikia mokytis dirbti su komandine eilute. Bet tokia integracija yra built-in interpretatoriuje. Duoda integraciją su debugeriu. Čia privalumas. Bet apie tai žemiau.

Panašu, kad IDE sulygina kompiliatorių su interpretatoriumi. Tad jeigu nekreipsime dėmesio į Okamo skustuvo principą, galime tarti, kad skirtumo nėra.

Ar IDE išvis reikalingas?

Ką dar duoda IDE?

  • Integraciją su įrankiais,
  • Produktyvumą didinančius įrankius: efektyvią paiešką per kodo bazę, valdymo personalizavimą, adaptaciją prie asmeninių ir kompanijos kodo standartų ir pan.,
  • Kai kurių sudėtingesnių ar nuobodesnių aspektų paslėpimą. Read: kodo generavimio wizardai ir pan.

Ir ką gi visa tai duoda vidurinėje mokykloje? Ogi nieko!

Apie integraciją su įrankiais jau buvo šiek tiek kalbos. Ir bus dar. Kas liečia porą klavišų paspaudimų bekainuojantį kompiliatoriaus pakvietimą, čia būtų grįžimas prie kompiliatoriaus-interpretatoriaus klausimo. Kalbant apie GUI redagavimo įrankius, vėl, gaunam mokyklinio kurso smūgį į kaktą -- O KAM?!

Atitinkamai “o kam?” reikia paieškos per kodo bazę, kai jos nėra? Valdymo personalizavimo? Adaptacijos standartams?

Atrodytų, kad sudėtingumus paslepiantys kodo generatoriai tai jau tikrai pliusas… Tikriausiai taip. Profesionalui. Ir tai dar diskutuotina. O kam moksleiviui generuotis MFC event mapus, handlerius, stdafx ir ką jie ten dar moka generuot?

Peršasi išvada, kad IDE nereikalingas.

Tęsinys rytoj.

 

Serialas: mokykla. Pirmoji serija.

2008-07-31, rtfb

Metų pradžioje susidūriau su blogerių diskusijomis apie tai, kuria kalba geriau būtų dėstyti programavimą mokykloje.

pro-Ruby: http://emptydot.com/vidmantas/2007-12-29/ruby-kalba-mokykloms/ pro-Python: http://blog.sandbox.lt/lt/Paskalis+mokyklose pro-Pascal: http://www.arvydas.net/bevertes-programavimo-kalbos

Nuomonės, dideliam mano nustebimui, smarkiai varijavo. Ne, aš nesu naivuolis. Nemanau, kad tokiame “religiškame” klausime kaip vaikų mokymas gali būti lengvai randama bendra nuomonė. Tačiau kad taip diverguotų atskirais, lengvai išaiškinamais klausimais…

Kadangi mane ši tema gana smarkiai domina (pradedančiųjų programuoti mokymas: ar tai būtų savamoksliai, ar moksleiviai, ar pirmakursiai), pabandysiu čia surašyti kelias mintis, kurias sukėlė fleimai bloguose.

Kalbant apie mokymą (be sangrąžinės dalelytės!), pirmiausia reikia apsibrėžti tikslus ir priemones, be šito nėra prasmės toliau kažką nagrinėti.

Taigi, šio serialo kontekste, mokydami spuoguotus nebrendylas programuoti, mes siekiame:

  1. Parodyti žmogui, kaip, kokiu būdu yra valdomas kompiuteris. Ne kaip juo naudojamasi, o kaip jis valdomas.
  2. Išvengti situacijos, kai vidurinį išsilavinimą turintis žmogus nenutuokia kas yra programavimas ir išgirdęs, kad jo naujasis pažįstamas yra programuotojas, džiugiai klausia “o! Pas mane Vindousai flash rakto neskaito! Tu profas, sakyk ką daryt?”.

To mes norime pasiekti, sutilpdami į tokius apribojimus:

  1. Neišgąsdinti žmogaus. Išvengti situacijos “dalykas šūdas, mokytojas gaidys, man gyvenime to neprireiks, švietimo sistema čiulpia”.
  2. Sudominti žmogų.
  3. Neapkrauti žmogaus tuo, ko jam (bent jau kol kas) nereikia.

Žmonės minėjo tokias kalbas: Pascal, C, C++, C#, Java, Python, Ruby, PHP, BASIC, ECMA Script, Perl, Lua.

Kad nebūtų per maža, galėčiau pridurti dar kandidačių: Common Lisp, Haskell, Logo, OCaml, Ada.

Bet čia nebus propaguojama nė viena iš jų.

Trumpa serialo apžvalga. Žmonės iškėlė ir apifleimino va šiiitiek temų ir aspektų:

  • Kompiliatorius ar interpretatorius?
  • Kas svarbiau -- IDE, ar interpretatorius?
  • Ar IDE išvis reikalingas?
  • Ar svarbu turėti debugerį? Kokiomis aplinkybėmis?
  • Kalbos lituanizavimas.
  • Dinaminis ar statinis tipizavimas?
  • (Ne)Prisirišimas prie OS.
  • Ar apskritai yra skirtumas nuo kurios kalbos pradėti?
  • Gal verta mokykloje naudoti sudėtingesnę kalbą, "kad atsisijotų idiotai"?

Apie visa tai turiu ką pasakyti. Na, ar bent jau žibalo į ugnį įlieti :-). Bet pirmoje serijoje nuo savęs pridedu dar porą aspektų:

  • Kalbos komerciškumas.
  • Kalbos sukūrimo tikslas, tikslinė niša.

Čia pat juos ir aptarkim.

Kalbos komerciškumas.

Visų pirma, čia aš nekalbu apie kalbos autorystę. Tegul tą Java sukūrė viena korporacija, o C# kita. Tiek jau to. Tarkim, kad jos nuo to komerciškomis nepasidaro.

Kalbėdamas apie komerčiškumą, aš turiu omenyje kalbos realizacijos komerciškumą. Arba, kalbant paprasčiau, galutinio produkto, leidžiančio dirbti ta kalba, kainą. Jos nebuvimą. Galimybę bet kuriam moksleiviui bet kur ir bet kada ja naudotis. Mokykloje, namie, pas draugą, pas tėvą darbe, bet kur!

Neturint nemokamos kalbos realizacijos, pažeidžiami iškart du apribojimai:

  1. Slopinamas žmogaus susidomėjimas (per pamoką susidomėjo, grįžo namo, paaiškėjo, kad negalima, nusispjovė, žiūri teliką).
  2. Žmogus apkraunamas. Net jeigu pinigai kaipo tokie ir būtų visiškai eliminuoti iš šitos istorijos (pvz., bet kur ir bet kada moksleivis galėtų pasiekti realizaciją, pasinaudodamas savo moksleivio pažymėjimo numeriu), tai nekeistų fakto, kad žmogus apkraunamas absoliučiai bereikalingu šlamštu.

Žinoma, šiais laikais praktiškai visos kalbos turi nemokamas realizacijas. Tačiau nereikia pamiršti, kad kai kurios nemokamos realizacijos nusileidžia komerciniams ekvivalentams. Kai kurios kokybe, kai kurios naudojimosi patogumu, kai kurios paplitimu (pvz., gera realizacija Unix sistemoms, bet prasta Windows).

Kalba privalo turėti gerą nemokamą realizaciją.

Kalbos sukūrimo tikslas, tikslinė niša.

Viena iš kalbos meta-savybių yra jos sukūrimo tikslas; uždavinių ir problemų klasės, kurioms spręsti ji yra skirta. Tai neprivalo ką nors reikšti, bet praktika rodo, kad neretai reiškia.

Moksliniams tyrimams sukurta kalba dažnai turi tam tikrų savybių, kurios geriausiai perprantamos jau išklausius aukštosios matematikos bei transliavimo metodų kursus (pvz., Haskell, Lisp). Tad tokių kalbų dėstymas mokykloje būtų mažų mažiausiai keistas.

Atitinkamai keista būtų dėstyti mokykloje kalbas, kurios yra skirtos industrijai. C, C++, Java, C# ir daugelis kitų kalbų turi savybių, kurių privalumai išryškėja vien tik industrinėje aplinkoje. Tuo tarpu savybės giliai “įsiūtos” į kalbą ir išmokti ja programuoti neperkandus į industriją orientuotų savybių, sunku; arba, mažų mažiausiai, pažeidžia trečiąjį apribojimą: apkrauna nereikalingais dalykais.

Tad svarstant mokyklai skirtas kalbas, pravartu prieš viską pažiūrėti į kalbos tikslinę nišą. Toks pažiūrėjimas gali padėti greičiau identifikuoti tam tikras “no-no” savybes. Ir tik tokių neradus, verta žiūrėti toliau.

Tęsinys rytoj.