• No results found

Challenges in the transition from block-based to text-based programming languages

N/A
N/A
Protected

Academic year: 2021

Share "Challenges in the transition from block-based to text-based programming languages"

Copied!
63
0
0

Loading.... (view fulltext now)

Full text

(1)UNIVERZA V MARIBORU FAKULTETA ZA NARAVOSLOVJE IN MATEMATIKO Oddelek za matematiko in računalništvo. MAGISTRSKO DELO. Tjaša Kos. Maribor, 2020.

(2) UNIVERZA V MARIBORU FAKULTETA ZA NARAVOSLOVJE IN MATEMATIKO Oddelek za matematiko in računalništvo. Magistrsko delo. Izzivi pri prehodu iz blokovnega programiranja v tekstovne programske jezike na študijskem programu 2. stopnje Izobraževalno računalništvo. Mentor:. Kandidatka:. doc. dr. Igor Pesek. Tjaša Kos. Maribor, 2020.

(3) UNIVERZA V MARIBORU FAKULTETA ZA NARAVOSLOVJE IN MATEMATIKO Oddelek za matematiko in računalništvo. IZJAVA O AVTORSTVU Podpisana Tjaša Kos, rojena 14. 8. 1995, študentka Fakultete za naravoslovje in matematiko Univerze v Mariboru, študijskega programa 2. stopnje Izobraževalna matematika in izobraževalno računalništvo, izjavljam, da je magistrsko delo z naslovom Izzivi pri prehodu iz blokovnega programiranja v tekstovne programske jezike pri mentorju doc. dr. Igorju Pesku avtorsko delo. V magistrskem delu so uporabljeni viri in literatura ustrezno navedeni; teksti niso uporabljeni brez navedbe avtorjev..

(4) Zahvala Zahvaljujem se mentorju, doc. dr. Igorju Pesku, za strokovno pomoč, vodenje in nasvete pri izdelavi magistrskega dela. Zahvaljujem se tudi družini in Tomažu, ki so mi v času študija vedno stali ob strani, me podpirali in spodbujali. Zahvaljujem se tudi prijateljem, s katerimi smo preživeli najlepša študentska leta..

(5) Izzivi pri prehodu iz blokovnega programiranja v tekstovne programske jezike Program magistrskega dela. Blokovna programska okolja, npr. Scratch, se uporabljajo kot uvodna orodja za poučevanje programiranja v osnovnih šolah. Blokovna programska okolja so se izkazala za uspešna pri motiviranju učencev in pri prvih korakih v programiranje, a so praksa in več raziskav prepoznale pomanjkljivosti teh orodij predvsem pri prehodu na tekstovna programska okolja. V magistrskem delu preučite in analizirajte razloge za težave pri prehodu in tudi predlagane pristope, ki bi naj ta prehod olajšale. [1] Price T.W., Barnes T., Comparing Textual and Block Interfaces in a Novice Programming Environment, ICER 2015 [2] Kölling M., Brown N.C.C., Altadmri A., Frame-Based Editing: Easing the Transition from Blocks to Text-Based Programming, WIPSCE 2015 [3] Robinson W., From Scratch to Patch: Easing the Blocks-Text Transition, WIPSCE ’16 [4] Moors L., Luxton-Reilly A., Denny P., Transitioning from Block-based to Text-based Programming Languages, International Conference on Learning and Teaching in Computing and Engineering, 2018. doc. dr. Igor Pesek.

(6) KOS, T.: Izzivi pri prehodu iz blokovnega programiranja v tekstovne programske jezike. Magistrsko delo, Univerza v Mariboru, Fakulteta za naravoslovje in matematiko, Oddelek za matematiko in računalništvo, 2020.. POVZETEK V magistrskem delu bomo obravnavali izzive pri prehodu z učenja blokovnega programiranja na tekstovno programiranje v osnovnih šolah. V zgodnjem poučevanju programiranja večina šol uporablja blokovne sisteme za programiranje, ki so se v dosedanjih raziskavah izkazali za uspešne. V nadaljevanju poučevanja sledi prehod na tekstovne programske jezike, ki se močno razlikujejo od blokovnih. Pri prehodu se učenci in učitelji srečujejo s številnimi težavami, v ta namen pa so razvili tudi veliko možnih rešitev, ki lahko prehod olajšajo. Cilj magistrskega dela je ugotoviti, kateri izzivi in težave se pojavljajo ob prehodu ter kakšni predlogi in rešitve že obstajajo z namenom zmanjševanja teh težav.. Ključne besede: blokovno programiranje, tekstovno programiranje, programski jeziki, prehod, poučevanje programiranja.

(7) KOS T.: Challenges in the transition from Block-based to Text-based programming languages. Master Thesis, University of Maribor, Faculty of Natural Sciences and Mathematics, Department of Mathematics and Computer Science, 2020.. ABSTRACT The master's thesis will address the challenges in the transition from Block-based to Text-based programming languages in primary schools. Most primary schools use block-based programming systems in early programming education, which have proven successful in previous research. Later in programming education, there is a transition to text-based programming languages, which are very different from block-based languages. In the transition, students and teachers face many difficulties, and because of that they have developed many possible solutions to ease the transition. The main goal of the thesis is to identify the challenges and problems that can happen during transitioning, and what suggestions and solutions already exist to reduce these problems.. Keywords: Block-based programming, text-based programming, programming languages, transition, teaching programming.

(8) KAZALO VSEBINE. 1. UVOD .................................................................................................................................. 1. 2. BLOKOVNO PROGRAMIRANJE ............................................................................................. 2. 3. 4. 2.1. Scratch ......................................................................................................................... 6. 2.2. Blockly.......................................................................................................................... 9. 2.3. Alice ........................................................................................................................... 12. 2.4. Snap! .......................................................................................................................... 15. TEKSTOVNO PROGRAMIRANJE ......................................................................................... 16 3.1. Python ....................................................................................................................... 19. 3.2. JAVA ........................................................................................................................... 22. 3.3. C jeziki ....................................................................................................................... 24. PREHOD Z BLOKOVNEGA NA TEKSTOVNO PROGRAMIRANJE ........................................... 26 4.1. Primerjava blokovnega in tekstovnega programiranja .............................................. 26. 4.2. Težave, ki se pojavljajo pri prehodu........................................................................... 29. 4.3. Rešitve za zmanjšanje težav pri prehodu ................................................................... 35. 4.4. Uspešnost prehoda .................................................................................................... 42. 5. DISKUSIJA .......................................................................................................................... 47. 6. ZAKLJUČEK ........................................................................................................................ 49. 7. LITERATURA ...................................................................................................................... 50.

(9) KAZALO SLIK Slika 2.1: Primeri programov ustvarjenih v blokovnih programskih sistemih ............................. 2 Slika 2.2: Scratchev uporabniški vmesnik ................................................................................... 6 Slika 2.3: Razširitve, ki jih omogoča Scratch ............................................................................... 8 Slika 2.4: Kategorije blokov v Scratchu in bloki, ki jih vključuje kategorija zvok ......................... 8 Slika 2.5: Uporabniški vmesnik blokovnega programskega okolja Blockly [48] ........................ 10 Slika 2.6: Stopnje izobraževalnih iger Blockly games v slovenskem jeziku [48] ........................ 11 Slika 2.7: Uporabniški vmesnik blokovnega programskega okolja Alice [47] ........................... 12 Slika 2.8: Uporabniški vmesnik Snap! ....................................................................................... 15 Slika 3.1: Primer uporabe programskega jezika R za analizo podatkov [22]............................. 16 Slika 3.2: Primer programa v Javi, ki sešteje prvih 100 naravnih števil [29] ............................. 23 Slika 3.3: Primer programa v jeziku C, ki prebere dve števili in večje [31]................................ 25 Slika 4.1: Primer programa "Hello world!" v blokovnem in tekstovnem programskem jeziku C++ ........................................................................................................................................... 26 Slika 4.2: Uporabniški vmesnik Eclipse ..................................................................................... 28 Slika 4.3: Primer programa v blokovnem programiranju, ki dopušča vzporednost izvajanja ... 30 Slika 4.4: Primer programa rešenega s podrobnim deljenjem nalog........................................ 34 Slika 4.5: Programiranje z okvirji .............................................................................................. 35 Slika 4.6: Delitev težav pri prehodu .......................................................................................... 35 Slika 4.7: Okolji Tiled Grace ...................................................................................................... 37 Slika 4.8: Primer programa v okolju Droplet............................................................................. 37 Slika 4.9: Funkcije, ki jih je definiral uporabnik ......................................................................... 38 Slika 4.10: Podatkovni tipi in pripadajoča barva ....................................................................... 39 Slika 4.11: Primer zanke in obarvanih praznih mest ................................................................. 40 Slika 4.12: Primer programa ..................................................................................................... 40.

(10) 1 UVOD V osnovnih šolah računalništvo postaja pomemben del izobraževalnega procesa, saj je vključeno skoraj v vseh učnih urah in na splošno v življenju učencev. Z razvojem računalniške opreme se vzporedno pojavlja tudi potreba po spoznavanju računalništva in računalniškega razmišljanja med mladimi. Kljub temu, da predmet računalništvo v osnovnih šolah v Sloveniji še ni obvezen za vse učence, se veliko učencev odloča za izbirni predmet, ki vključuje učenje računalniškega programiranja. Pri teh predmetih učenci začnejo spoznavati koncepte računalniškega programiranja preko blokovnih sistemov, kasneje pa nastopi prehod na tekstovne programske jezike. Pri tem prehodu prihaja do številnih težav, s katerimi se soočajo učenci in učitelji pri delu. Zaradi tega so nekateri raziskovalci ustvarili različne načine in rešitve, kako bi prehod učencem olajšali in zmanjšali težave. Magistrsko delo je razdeljeno na dva dela. V prvem delu sta predstavljena blokovno in tekstovno programiranje ter največkrat uporabljeni blokovni sistemi in tekstovni programski jeziki, ki se uporabljajo v šolah. V drugem delu so predstavljene težave, ki se lahko pojavijo pri prehodu z blokovnega na tekstovno programiranje. Prav tako so opisane rešitve oz. predlogi, kako bi lahko težave pri prehodu zmanjšali, ter uspešnost učencev pri prehodu z blokovnih na tekstovne sisteme.. 1.

(11) 2 BLOKOVNO PROGRAMIRANJE Blokovno programiranje je programiranje z bloki, ki vsebujejo vnaprej pripravljene ukaze in kode. Temelji na tem, da se koda ustvarja s sestavljanjem blokov in poteka tako, da uporabnik blok povleče v delovno območje ter ga kot sestavljanko pripne k že obstoječemu programu. Programska okolja, ki podpirajo takšno programiranje, so namenjena predvsem mlajšim učencem, saj v veliki meri preprečijo možnost pojava sintaktičnih napak in poenostavijo programski jezik. Bloki kode vsebujejo rezervirane besede, funkcije, metode, ki jih pri tekstovnem programiranju uporabniki pišejo sami. To učencem omogoča, da se osredotočijo na razumevanje osnovnih konceptov računalniške logike in strukture programov. Vsak blok uporabniku ponuja vizualne napotke o tem, kako in kje se lahko uporablja, in sicer skozi obliko bloka, njegovo barvo (kar je povezano s kategorijami podobnih blokov) in uporabo naravnega jezika na bloku, ki sporoča njegovo funkcijo.. Slika 2.1: Primeri programov ustvarjenih v blokovnih programskih sistemih. Okolja, ki temeljijo na blokovnem programiranju, imajo številne skupne značilnosti in uporabnikom omogočajo ustvarjanje različnih programov kot npr. animacije, igre, zgodbe itd. Številna okolja omogočajo ustvarjanje lastnih blokov in ukazov, kar spodbuja raziskovanje in ustvarjalnost. Vsako izmed okolij ima številne prednosti, ki spodbujajo zanimanje za programiranje pri otrocih ter omogočajo hitrejše učenje in razumevanje računalniških konceptov. Moors v [4] navaja štiri najpomembnejše pozitivne lastnosti, ki se pojavijo v vseh programskih okoljih, ki podpirajo blokovno programiranje:. 2.

(12) - Sintaksa Pri blokovnem programiranju so rezervirane besede, metode in funkcije zapisane na blokih. Ena izmed večjih težav, ki se pojavijo pri začetnikih programiranja, je sintaksa in črkovanje. Blokovni sistemi omogočajo, da se novi programerji osredotočijo na temeljne koncepte v računalniški znanosti, kot so potek programa, pogoji in zanke, ne da bi pri tem razmišljali, ali je program sintaktično pravilen. Odstranjevanje sintakse je zato koristno pri programiranju za začetnike, a drugi raziskovalci ugotavljajo, da ta pristop ne rešuje problemov pri sintaksi, vendar jih zgolj odloži. - Struktura blokov Če dveh blokov ni mogoče združiti, da tvorita veljaven sintaktični stavek, jima okolje preprečuje, da bi se sestavila skupaj. S tem okolje prepreči napake v sintaksi. Prav tako nakazuje in pomaga učencem pri sestavljanju blokov v program. - Oblika in barva blokov Blokovna okolja pogosto vsebujejo bloke različnih oblik za razlikovanje pojmov in pomena le teh. Tako ponujajo tudi napotke, kateri izmed blokov se lahko povežejo, da je program sintaktično pravilen. V Scratchu so bloki, ki sprejemajo vrednosti »bool«, šestkotne oblike. Bloki, ki sprejemajo vrednosti števil, so ovalne oblike. Prav tako so vrednosti »bool« in števil temu ustrezno oblikovane. Začetniki, različne oblike blokov, poudarjajo kot ključno lastnost, ki omogoča enostavnejše programiranje. Barve blokov pripomorejo pri razlikovanju med različnimi podatkovnimi tipi in rezerviranimi besedami. Barva blokov sporoča tudi kategorijo blokov. Vse to vpliva na uporabo in iskanje med bloki in kategorijami, vendar ni nujno, da je razlikovanje barv in oblik koristno pri sledenju daljšim programom [16]. Weintrop in Wilensky navajata, da začetniki morda ne bodo takoj prepoznali pomena oblik in barv pri blokih, saj še ne poznajo sintakse tako dobro, da bi lahko razumeli pomen različnih barv in oblik [6]. - Poenostavljen jezik Z uporabo naravnega jezika blokovna okolja olajšajo razumevanje in povečajo povezavo med začetnikovim znanjem in problemi, ki nastanejo pri programiranju. V nekaterih študijah. 3.

(13) začetniki razumevanje jezika blokov navajajo kot najbolj koristno značilnost začetnega učenja programiranja [16]. Weintrop in Wilensky poleg zgoraj omenjenih prednosti poudarjata tudi, da bloki služijo kot pomoč pri pomnjenju, saj se lahko bloke poišče znotraj programskega okolja in si jih zato učenci ne rabijo zapomniti. Prav tako so pri večini blokovnih okolij bloki kategorizirani glede na vlogo v programu in jih je še enostavneje poiskati [6]. Schanzer idr. v [17] poudarjajo, da bloki poleg zmanjšanja sintaktičnih napak omogočajo začetnikom tudi hitrejše delo, saj ukazov ne tipkajo, ampak jih le premikajo po polju. Večina mlajših učencev še ni veščih hitrega tipkanja in vseh možnosti, ki jih ponuja tipkovnica, zato se z uporabo blokov občutno zmanjša poraba časa pri začetnem učenju programiranja in učenju osnovnih računalniških konceptov. Mönig in sodelavci v [18] navajajo dve pomembni slabosti, ki se pojavita pri veliki večini blokovnih sistemov. Prva slabost je hitra zasedenost prostora na zaslonu. Programski jeziki, ki temeljijo na blokih, besedilo nadomestijo z grafičnimi predmeti, ki predstavljajo elemente programskega jezika, kot so stavki, izrazi in nadzorne strukture. Ti grafični programski bloki imajo navadno obrobe ali so označeni z zarezami in vdolbinami, da nakazujejo, kako se bloki prilegajo skupaj. Bloki vsebujejo vgrajene nalepke, ikone, urejena besedilna polja in interaktivne pripomočke, kot so spustni meniji in izbirniki barv. Blok, ki predstavlja en stavek, kot rezultat po navadi zasede več prostora kot njegov besedilni primer. Dejanska količina dodatnega prostora je odvisna od vizualne zasnove blokov, strojne platforme in ciljne publike. Programi sestavljeni iz kratkih blokov so enostavno berljivi. Majhno povečanje velikosti stavkov se pomnoži s številom blokov v programu in številom blokov v oknu. Ta razširitev poveča blokovno kodo, ki zasede večje območje na zaslonu kot njen tekstovni program, kar otežuje pregled nad kodo na prvi pogled in poveča breme drsenja in navigacije. Poleg tega lahko barve, obrobe in grafični elementi blokov vizualno motijo, kar otežuje pregledovanje besedila na blokih, ki nosijo večino pomena. Naslednja slabost pa je iskanje blokov znotraj kategorij, ki jo mnogi predstavljajo kot pozitivno lastnost za začetnike. Paleta blokov pomaga začetnikom hitro odkriti, kateri ukazi so na voljo. Nekateri sistemi blokov, kot je Scratch, omogočajo preizkušanje blokov v paleti, kar še dodatno olajša odkrivanje in razumevanje. Vendar se izkušeni programerji, ki uporabljajo blokovne sisteme, pogosto pritožujejo, da je, ko vedo, kateri ukazi so na voljo, sestavljanje programa z iskanjem blokov iz palete okorno in traja veliko dlje časa, 4.

(14) kot bi ga porabili za vnos kode. Iskanje bloka v paleti vključuje iskanje ene ali več kategorij, vizualno skeniranje blokov v vsaki kategoriji in po možnosti pomikanje, da bi našli želeni blok. Ta postopek poleg tega, da vzame čas, prekine tok misli o kodi. Težava pri vnosu se še poslabša, ko se število blokov v paleti poveča. Okolja, ki temeljijo na blokih, so se začela razvijati zaradi programskega jezika Logo, prva okolja so omogočala programiranje kvadrov Lego, ki so predhodniki današnjih kompletov Lego Mindstorms. Sčasoma se je razvilo vse večje število programskih okolij in knjižnic, ki vključujejo vizualne tehnike programiranja na osnovi blokov. Nedavni pregled programskih okolij za poučevanje je vključevalo 19 okolij med 24 okolji za učence, mlajše od osmih let, in 28 okolij za blokovno programiranje od vseh 47 pregledanih okolij [8]. Priljubljenost orodij za programiranje na osnovi blokov je pripeljala do njihovih vključitev v formalne izobraževalne ustanove. Veliko izobraževalnih ustanov kot primarni način poučevanja programiranja uporablja programsko okolje, ki temelji na blokih. Obstaja veliko tako imenovanih jezikov za izobraževalno programiranje, ki so bili razviti za izobraževalne namene. Primeri teh vključujejo Scratch, Blockly, Alice in Lego Mindstorms NXT-G. Niso samo preprosti, ampak omogočajo tudi bogate vizualne rezultate. Takšni programski sistemi so zelo priljubljeni pri učenju programiranja mlajših učencev, kot so osnovnošolci in srednješolci, saj ti ne potrebujejo znanja programske sintakse, programi pa zagotavljajo okolje, v katerem napake med sestavljanjem ne obstajajo. V osnovni šoli so pri učencih, starih od 10 do 14 let, orodja, ki temeljijo na blokih, učinkovit način, kako narediti programske koncepte dostopne mlajšim učencem, če jim nudijo razvojno ustrezen učni načrt. Potem, ko je učence v osnovni šoli starosti nad 13 let poučeval računalništvo, je Grover s sodelavci v [46] ugotovil, da je programiranje na podlagi blokov produktiven način za uvajanje učencev v temeljne računalniške koncepte in razvoj pomembnih veščin računalniškega razmišljanja, kot je algoritmično razmišljanje. Primerjalne študije med blokovnim in besedilnim okoljem s študenti v tej starostni skupini so pokazale, da učenci v pogojih, ki temeljijo na bloku, dosežejo primerljive ali boljše rezultate in hitreje izpolnjujejo naloge. Blokovna programska okolja, ki se trenutno najbolj uporabljajo v formalnih izobraževalnih ustanovah, so Scratch, Blockly, Alice in AppInventor. Tri, ki se uporabljajo v največji meri, bomo opisali v naslednjih podpoglavjih.. 5.

(15) 2.1 Scratch Scratch je programski jezik, ki je bil razvit leta 2007 na inštitutu Media Lab. Ustvarjen je bil z namenom, da učencem približa programiranje in s tem povezano ustvarjanje interaktivnih zgodb, animacij in iger. Ideja za razvoj novega programskega jezika je izvirala iz že obstoječih programskih jezikov Logo in Etoys. Poleg ustvarjanja animacij in iger omogoča tudi uvažanje različnih slik, figur in zvokov iz računalnika.. Slika 2.2: Scratchev uporabniški vmesnik. Scratchev uporabniški vmesnik ima eno okno, ki je razdeljeno na tri dele. Prvi del vsebuje vse ukaze in kategorije ukazov. Na sredini je drugi del, ki predstavlja delovno območje, kamor povlečemo bloke za ustvarjanje programa. Na tretjem delu se grafično prikazujejo rezultati in izvedba programa, ki ga sestavimo z bloki. Scratch omogoča uporabnikom shranjevanje svojih programov s prijavo v sistem z uporabniškim računom. Podpira tudi sodelovanje med uporabniki, saj lahko projekte delijo in komentirajo ali pa nadgrajujejo že obstoječe projekte. Scratchev vmesnik prav tako omogoča shranjevanje projektov ter možnost deljenja le teh znotraj določene skupine, kot so razredne skupnosti, krožki programiranja in podobne delavnice, kjer se ukvarjajo z razvijanjem programov ter poučevanjem programiranja. Ukazi, funkcije in metode so v Scratchu zapisane v blokih, s katerimi uporabniki sestavljajo program. Bloki so razporejeni v posebne kategorije, da jih uporabniki lažje najdejo. Skupaj jih 6.

(16) je 125, ki so organizirani v kategorije in se prikažejo šele, ko jih uporabnik potrebuje. Scratch vključuje naslednje kategorije blokov: - Gibanje: V tej kategoriji se nahajajo ukazi premikanja, obračanja ter ukazi za določanje podatkov o smeri premikanja in trenutni lokaciji. - Videzi: V tej kategoriji najdemo ukaze za prikaz govora figur, ukaze za prikazovanje in skrivanje figur, za menjevanje ozadja ter videza figur. Vključuje tudi bloke za spreminjanje barv ter velikosti figur. - Zvok: V kategoriji z zvoki najdemo ukaze za predvajanje zvoka, spreminjanje glasnosti in hitrosti zvoka. Bloki nudijo tudi možnost izbire melodije ter posameznih not. Ta kategorija vključuje tudi spremenljivki za hitrost in glasnost zvoka. - Dogodki: Kategorija vsebuje bloke za sproženje dogodkov in zagon izvajanja kode. V dogodkih se nahajata tudi ukaza za objavljanje sporočil in možnost poimenovanja le teh. - Krmiljenje: V kategoriji krmiljenje najdemo bloke za pogojne stavke in zanke. Kategorija vključuje tudi ukaze za kloniranje figur, ustavljanje programa ter ukaze za čakanje. - Zaznavanje: Ta kategorija vključuje ukaze za postavljanje vprašanja in shranjevanje odgovora. V kategoriji se nahajajo tudi ukazi za zaznavanje pritiska tipk na tipkovnici in miški. Prav tako vključuje ukaze v zvezi z dotikanjem določene barve ali figure. Kategorija zaznavanje nudi tudi uporabo štoparice ter določanje časa izvajanja. - Operatorji: Kategorija operatorji vključuje bloke za matematične operacije, kot so seštevanje, odštevanje, množenje, deljenje, korenjenje ter logične operatorje, kot so večje, manjše, je enako. Vključeni so tudi ukazi za zaokroževanje, računanje ostanka pri deljenju ter generiranje naključnega števila. - Spremenljivke: Ta kategorija vključuje bloke, ki nudijo ustvarjanje nove spremenljivke ali seznama. Kategorija spremenljivke vsebuje tudi bloke za spreminjanje imena, inicializacijo in prikaz spremenljivk na grafičnem prikazu. Ukazi za seznam omogočajo spreminjanje samo določenih elementov, pridobitev dolžine seznama ter preverjanje ali seznam vsebuje določen element. - Moji bloki: V tej kategoriji lahko uporabnik ustvari svoje bloke.. 7.

(17) Slika 2.4: Kategorije blokov v Scratchu in bloki, ki jih vključuje kategorija zvok. Scratch omogoča tudi dodatne razširitve, in sicer razširitev svinčnik, video zaznavanje, povezovanje z mikrobiti, Lego Mindstorms, Lego WeDo in Lego BOOST. Vse razširitve, ki jih omogoča Scratch, so prikazane na sliki 2.4 .. Slika 2.3: Razširitve, ki jih omogoča Scratch. Scratch omogoča sočasnost, saj lahko bloke postavimo na različna območja zaslona in jih izvajamo vzporedno. Spodbuja tudi personalizacijo, kjer lahko uporabniki upravljajo s svojimi slikami, glasbo in zvočnimi posnetki. Poleg tega Scratch spodbuja uporabnike k družabnosti, saj uporabnikom omogoča, da svoje projekte delijo s skupnostjo in gradijo na projektih drugih. Uporabniki lahko pridobijo povratne informacije o svojem delu tudi od drugih programerjev.. 8.

(18) 2.2 Blockly Blockly je jezik, ki spada med sisteme blokovnega programiranja. Uporabnikom omogoča ustvarjanje kod s sestavljanjem blokov. Ti bloki se uporabljajo za ustvarjanje kode programa, ki jih je mogoče kasneje prevesti v tekstovno kodo. Običajno deluje v spletnem brskalniku in vizualno spominja na jezik Scratch. Razvil ga je Google, v razvoju pa je od poletja 2011. Končni izdelek je bil predstavljen maja 2012 na Maker Faire v San Mateu v Kaliforniji. Ustvarjen je bil za poučevanje začetnikov programiranja. Bloki kode se povezujejo kot se sestavljanke ali lego, kar olajša pisanje kode. Ko je pisanje kode lažje, je tudi učenje programiranja enostavneje. Kodo, ki jo ustvarimo v jeziku Blockly, je mogoče izvoziti. Omogoča tudi, da kode blokov programa prevedemo v tekstovne programske jezike, kot so JavaScript, Python, PHP, Lua in Dart. Na voljo je v več kot 40 jezikih in je odprtokoden, kar pomeni, da lahko kdorkoli kodo manipulira, pregleda, spremeni ali izboljša. Blockly je eden izmed naprednejših blokovnih jezikov, saj ga je mogoče uporabiti tudi za kodiranje kompleksnih matematičnih enačb in zapletenih nalog. Privzeti grafični uporabniški vmesnik urejevalnika Blockly, ki ga prikazuje slika 2.5, je sestavljen iz orodnega polja, v katerem so na voljo bloki in kjer lahko uporabnik izbere bloke, ter delovnega prostora, kjer lahko uporabnik vleče, spušča in preureja bloke. Delovni prostor vključuje tudi privzete ikone za povečavo in koš za brisanje blokov. Urejevalnik lahko enostavno spremenimo, da prilagodimo in omejimo razpoložljive funkcije urejanja in bloke. Blockly vključuje niz vizualnih blokov za običajne operacije. Privzeti bloki so razdeljeni na osem kategorij, ki se med seboj razlikujejo tudi po barvi. Blockly vključuje naslednje kategorije blokov: - logične operatorje,. - sezname,. - zanke,. - barvne bloke,. - matematične operacije,. - spremenljivke,. - besedilne bloke,. - funkcije.. Bloke za običajne operacije lahko prilagodimo z dodajanjem več novih blokov. Novi bloki zahtevajo definicijo bloka in generator. Definicija opisuje videz bloka, generator pa opisuje prevod bloka v izvršljivo kodo. Definicije in generatorji se lahko zapišejo v JavaScript ali z uporabo vizualnih nizov blokov.. 9.

(19) Slika 2.5: Uporabniški vmesnik blokovnega programskega okolja Blockly [48]. Poleg uporabe v šoli se Blockly uporablja tudi v več pomembnih projektih, vključno z: - MIT-ovim App Inventor-jem za ustvarjanje aplikacij za Android. - Code.org, da bi uvodno programiranje naučili milijone učencev v programu Hour of Code. - RoboBlockly, spletno robotsko simulacijsko okolje za učenje kodiranja in matematike. -. Wonder Workshop za nadzor nad njihovimi izobraževalnimi roboti Dot in Dash.. - Blockly games, ki so namenjene učencem v izobraževanju in so podrobneje predstavljene v nadaljevanju. Blockly Games je serija izobraževalnih iger, ki učijo programiranja. Zasnovan je za učence, ki prej niso imeli izkušenj z računalniškim programiranjem. Do konca teh iger so igralci pripravljeni uporabljati običajne jezike, ki temeljijo na besedilu. Kot prikazuje Slika 2.6, Blockly Games vključuje stopnje učenja programiranja. Vsaka stopnja začetnike seznani z enim konceptom računalniškega programiranja. Na prvi stopnji, Sestavljanka, je hiter uvod v Blocklyjeve oblike in kako se koščki sestavljajo skupaj, da se učenci spoznajo z načinom blokovnega programiranja. V nadaljevanju spoznajo zanke in pogojne stavke. Začne se z enostavnejšimi projekti in nalogami, v vsaki naslednji stopnji pa se težavnost nalog stopnjuje. Vsaka naslednja stopnja učence seznani z računalniškim konceptom, ki je nadgradnja prejšnjih ali pa vključuje nove koncepte, ki so za začetnike zahtevnejši. Stopnja Film je uvod v matematične enačbe. Za animiranje filma začetniki uporabijo matematiko. S funkcijami ustvarjajo glasbo, zadnji dve 10.

(20) stopnji pa začetnikom omogočata tudi spoznavanje tekstovnih programskih jezikov. Na prvi gre za preklapljanje med bloki in dejanskim JavaScriptom v urejevalniku besedil, na drugi pa lahko začetniki uporabljajo samo tekstovni programski jezik JavaScript.. Slika 2.6: Stopnje izobraževalnih iger Blockly games v slovenskem jeziku [48]. 11.

(21) 2.3 Alice Alice je 3D interaktivno grafično programsko okolje, namenjeno učencem, ki podpira podmnožico objektno usmerjene programske koncepte. Največja prednost Alice je njena podpora grafičnim programom, ki manipulirajo s 3D predmeti v 3D virtualnem svetu. Ta funkcija programerjem omogoča enostavno ustvarjanje animiranih filmov, iger in drugih grafičnih programov. Predmeti v svetu so izbrani iz obsežne knjižnice 3D predmetov in z njimi je mogoče neposredno manipulirati, da ustvarimo začetno konfiguracijo sveta. S pisanjem preprostih programov lahko uporabniki nadzorujejo videz in vedenje predmetov. Alice je ustvarila raziskovalna skupina na univerzi Carnegie Mellon pod vodstvom Randyja Pauscha. Cilj projekta Alice je začetnikom olajšati razvoj zanimivega 3D okolja in raziskovanje novega medija interaktivne 3D grafike. Tridimenzionalni modeli predmetov (npr. živali in vozila) poseljujejo navidezni svet v Alice. Med izvajanjem kode se predmeti odzivajo na uporabnikov vnos preko miške in tipkovnice. Vsako dejanje se v določenem času animira. Alice je zgrajena na programskem jeziku Python in uporablja njegove številne funkcije.. Slika 2.7: Uporabniški vmesnik blokovnega programskega okolja Alice [47]. Alice je objektno orientiran izobraževalni programski jezik z integriranim razvojnim okoljem. Učenje pravil sintakse je lahko težavno, zato okolje Alice zagotavlja grafični programski vmesnik za način programiranja blokov povleci in spusti, ki začetnikom omogoča, da se osredotočijo na pomembnejše komponente strukturnega programiranja. 12.

(22) Ta vmesnik nudi grafične podobe za organiziranje predmetov, delov predmeta in metod. Preproste zgodbe lahko uresničimo tako, da izberemo predmet na svetu, kot je drsalec, in pokličemo eno od njegovih metod, na primer skate(). Začetniki lahko takoj vidijo izvedbo njihovih animiranih programov. Vizualne povratne informacije omogočajo začetnikom, da program povežejo z dejanjem animacije. To vodi k razumevanju dejanskega delovanja različnih konstrukcij programskega jezika. Alice začetnike prisili, da ustvarijo kodo, ki jo je vedno mogoče izvesti. Ko študent na primer v programsko kodo povleče izraz if, Alice prisili študenta, da izbere ustrezno logično vrednost za pogoj. Struktura torej ne dopušča sintaktičnih napak, le napake v logiki. Alice je bila razvita za reševanje glavnih problemov v izobraževalnem programiranju: - Alice je zasnovana izključno za poučevanje teorije programiranja brez zapletene semantike tekstovnih jezikov, kot je na primer C++. Uporabniki lahko predmete iz galerije Alice namestijo v virtualni svet, ki so si ga zamislili, nato pa jih lahko programirajo z vlečenjem in spuščanjem objektov, ki predstavljajo logične strukture. Poleg tega lahko uporabnik manipulira z Aliceovo kamero in osvetlitvijo za nadaljnje izboljšave. Alice je mogoče uporabiti tudi za 3D uporabniške vmesnike. - Alice ne temelji na sintaksi, ki bi si jo lahko zapomnili, ampak podpira celostno objektno programiranje, ki je model programiranja, ki temelji na dogodkih. - Alice je zasnovana tako, da spodbuja učenje programiranja pri manjših skupinah, ki običajno niso izpostavljene računalniškemu programiranju, na primer dijakom srednjih šol, s spodbujanjem pripovedovanja zgodb. Alice se uporablja tudi na številnih univerzah in pri tečajih uvodnega programiranja. Vključuje mnoga področja programiranja, ki so: - Dejanja: Alice ponuja več vgrajenih ukazov za izvedbo dejanja. Na splošno lahko dejanja razdelimo v dve kategoriji: tista, ki predmetu rečejo, da izvede gibanje, in tista, ki spreminjajo fizično naravo predmeta. - Poimenovanje instrukcij: Mogoče je poimenovati zaporedje navodil. Koncept poimenovanja navodil je podoben konceptu postopka v mnogih drugih programskih jezikih.. 13.

(23) - Funkcije: Funkcije v Alice so podprte z osnovnim jezikom Python. V Alice se funkcije uporabljajo predvsem pri izvajanju zank in za izvajanje interakcij preko dogodkov. - Pogojni stavki: Tako kot pri funkcijah so tudi pogojni stavki podprti s pomočjo jezika Python. - Zanke. - Dogodki: Alice nudi podporo pri ravnanju z dogodki in za ustvarjanje grafičnih vmesnikov z nadzornimi ploščami, polji s seznami, potrditvenimi polji in drsniki. Dogodki omogočajo uporabniku interakcijo z animiranim svetom. Moskal in sodelavci [19] so Alice uporabili pri uvodnem tečaju programiranja in ugotovili, da je tečaj z Alice znatno izboljšal ocene sodelujočih. Ti trendi so se zdeli bolj očitni pri tistih, ki so imeli manj znanja iz matematike in niso imeli izkušenj s programiranjem. Podobna študija Cooperja in drugih [20] podpira te napovedi, ki kažejo, da je učni načrt, ki temelji na Alice, pomagal pri izboljševanju ocen in višanju zanimanja za programiranje. Kelleher in sod. [21] so ugotovili, da bi bilo Alice mogoče še dodatno prilagoditi mladim študentkam z dodajanjem funkcij za olajšanje programov pripovedovanja zgodb, kot so lažje animacije in bolj zasnovane metode. Caitlin Kelleher je za svojo disertacijo ustvarila različico programskega orodja Alice, imenovano Storytelling Alice, od katere se razlikuje v treh značilnostih: - Vključuje animacije na visoki ravni, ki uporabnikom omogočajo programiranje socialnih interakcij med liki. - Vključuje vadnico, ki temelji na zgodbah. Uporabnike seznanja s programiranjem s pomočjo gradnje zgodbe. - Vključuje galerijo 3D likov in kulis z animacijami po meri, zasnovanimi za vzbujanje idej za zgodbe. V študiji, opravljeni na dekletih v srednjih šolah v Združenih državah Amerike, se je z uporabo Storytelling Alice njihovo zanimanje povečalo za 42 % v primerjavi z Alice. Za toliko se je povečal tudi čas njihovega programiranja, študenti pa so trikrat hitreje opravili dodatno delo na svojih projektih, brez zmanjšanja naučenih osnovnih programskih konceptov.. 14.

(24) 2.4 Snap! Snap! je brezplačen izobraževalni blokovni programski jezik, ki je namenjen učencem, da raziskujejo in ustvarjajo interaktivne animacije, igre, zgodbe in drugo, hkrati pa se učijo o matematičnih in računalniških konceptih. Snap!-ovi urejevalnik in programi, ustvarjeni v njem, so spletne aplikacije, ki se izvajajo v brskalniku, ne da bi jih bilo treba namestiti. Uporabniški vmesnik Snap! je na sliki 2.8.. Slika 2.8: Uporabniški vmesnik Snap!. Uporabniški vmesnik je ločen na tri stolpce, ki vključujejo pet delov: menu za izbiro blokov, paleto blokov, glavno območje, območje, kjer se prikazujejo rezultati ter območje za figure in izbiro le teh. Posamezne bloke lahko povlečemo iz palete blokov na območje za sestavljanje blokov, ki je povezano z izbrano figuro. Bloki Snap!-a so porazdeljeni v osem skupin, ki so naštete in opisane v tabeli 1. Vsaki kategoriji je določena tudi barva. Premikanje Videz. Premikanje figur in spreminjanje kotov. Nadzor videza in izhodnih podatkov.. Nadzor. Pogojni stavki, dogodki in zanke.. Zaznavanje. Ukazi ob dotiku figure in odziv. Matematični in logični operatorji.. Zvok. Predvaja avdio datoteke.. Operacije. Pisalo. Vključuje želvjo grafiko.. Spremenljivke Spremenljivke in seznami.. Tabela 1: Kategorije blokov v Snap!-u. 15.

(25) 3 TEKSTOVNO PROGRAMIRANJE Tekstovno programiranje je način programiranja, pri katerem izvorno kodo tipkamo in nato shranimo v tekstovno datoteko. Datoteko nato računalnik med izvajanjem pretvori v enakovreden program v strojnem jeziku, saj je to edini jezik, ki ga razume računalnik. Obstajata dva načina pretvorbe programskih jezikov v strojni jezik. Če se pretvorba v celoti izvrši pred izvajanjem, govorimo o prevajanju. To pomeni, da prevajalnik prevede naš program v enakovreden program v strojnem jeziku. Drugi način je tolmačenje. Pri tem program po imenu tolmač bere program ukaz za ukazom in računalniku sproti podaja enakovredne ukaze v strojnem jeziku. Tolmačenje je počasnejše od izvajanja prevedenih programov, vendar pa so jeziki, ki se tolmačijo, praviloma enostavnejši od tistih, ki se prevajajo. Nekateri programski jeziki, med njimi tudi Python, uporabljajo kombinacijo obeh pristopov, pri čemer se program najprej v celoti prevede v nekakšen vmesni jezik, dobljeni prevod pa se nato tolmači. Razlika med njima je v hitrosti izvajanja programa, tolmač je zaradi sprotnega prevajanja počasnejši. Pri tekstovnem programiranju so na voljo številni programski jeziki. Programski jeziki, ki se trenutno najbolj uporabljajo, so Python, Java, C/C++, JavaScript, R, Swift, PHP, C# in Mathlab. Vsak izmed omenjenih programskih jezikov ima svoje prednosti in slabosti, prav tako vsakega izmed njih uporabljamo za različna področja programiranja. Programska jezika C# in PHP se uporabljata za »back-end« programiranje, ustvarjanje iger, mobilnih aplikacij in spletnih aplikacij, medtem ko je R programski jezik namenjen predvsem za analiziranje podatkov in strojno učenje.. Slika 3.1: Primer uporabe programskega jezika R za analizo podatkov [22]. Obstaja veliko programskih jezikov, ki so bili razviti z namenom poučevanja programiranja, vendar je velika večina teh blokovnih programskih jezikov. Za uspešno poučevanje tekstovnega programiranja se najbolj pogosto omenja programski jezik Python, ki je v primerjavi z ostalimi 16.

(26) tekstovnimi programskimi jeziki novejši. Grandell in sodelavci so po raziskavi, pri kateri je sodelovalo 42 oseb, ugotovili, da je Python enostaven programski jezik, saj je 85 % učencev opravilo preizkus s povprečno oceno 77 %. V primerjavi s srednjo šolo, kjer so učence programiranja učili s pomočjo programskega jezika Java, so ugotovili, da je Python enostavnejši programski jezik, rezultati pa so bili slabši [23]. Tudi v primerjavi z drugimi programskimi jeziki, kot sta C in Delphi, so ugotovili, da je Python enostavnejši. Leping [24] je razred razdelil na dve skupini, pri kateri je ena uporabljala Javo, druga pa Python. Tista skupina, ki je uporabljala Python, je jezik opredelila kot eleganten, enostaven in praktičen, z enostavno oblikovano in berljivo sintakso. Hunt [25] se z avtorji ne strinja, saj je po enoletni uporabi Pythona namesto Jave, ponovno prešel na poučevanje programiranja z Javo. Kot glavna vzroka ponovne zamenjave navaja, da je pri Pythonu pomanjkljiva uporaba seznamov ter nezmožnost osredotočenosti na objekte. Po navedbah TIOBE [50] je programski jezik Java najpogosteje uporabljen programski jezik na svetu. Ravno zaradi tega je tudi največkrat uporabljen jezik pri začetnem poučevanju programiranja. V Javi morajo učenci za ustvarjanje že zelo preprostega programa, »Pozdravljen svet«, poznati veliko sintakse, začetne in končne oklepaje, razliko med velikimi in malimi črkami, podpičja, ter tudi črkovanje. Tudi pri manj zahtevnih tekstovnih programskih jezikih je nujno, da poznajo osnovna pravila sintakse ter črkovanje. Vse to pa je za začetnike obremenjujoče. Slika 3.2 prikazuje kodo preprostega programa, »Pozdravljen svet«, v različnih tekstovnih programskih jezikih, ki so na sliki označeni s črkami. S črko a je označen program, zapisan v programskem jeziku JavaScript, s črko b je označen program,zapisan v C#, črka c predstavlja program zapisan v Javi, črka d program, zapisan v C++ in črka e program, zapisan v Pythonu. Opazimo lahko, da se sintaksa močno razlikuje, zato lahko sklepamo, da so nekateri tekstovni programski jeziki zahtevnejši. Nekateri poleg ukazov zahtevajo tudi vključevanje raznih knjižnic, katerih uporabo je začetnikom v osnovnih šolah težje pojasniti. Zaradi vseh naštetih lastnosti sklepamo, da je za prvi tekstovni programski jezik najbolj primerno izbrati čimbolj enostavnega, ki ne zahteva učenja in poznavanja naprednih programskih konceptov.. 17.

(27) Slika 3.2: Primer programa "Hello world" v petih različnih tekstovnih programskih jezikih. 18.

(28) 3.1 Python Python je programski jezik, ki ga je ustvaril Guido van Rossum leta 1991. Python podpira funkcionalno, proceduralno, strukturirano in objektno orientirano računalniško programiranje. Je visokonivojski programski jezik, ki združuje funkcijski in ukazni pristop. Sodi med programske jezike, ki se jih interpretira, ampak je pri Pythonu to prepleteno s prevajanjem v strojni jezik [26]. Uporablja kombinacijo obeh načinov, najprej se v celoti prevede v vmesni jezik, ki se nato tolmači. Njegova slabost je hitrost izvajanja, ki se znatno zmanjša zaradi neopaznega prevajanja ukaza za ukazom v kodo za navidezni stroj.. Slika 3.3: Logo tekstovnega programskega jezika Python. Zaradi dinamičnih podatkovnih tipov je podoben jezikom Perl, Ruby, Scheme in Smalltalk. Python se v glavnem uporablja za ustvarjanje spletnih aplikacij, poleg programske opreme tudi za ustvarjanje delovnih tokov. Python se lahko poveže s sistemi baz podatkov, ki jih lahko bere in spreminja. Uporablja se tudi za obdelavo obsežnih podatkov in izvajanje kompleksne matematike ter za hitro izdelavo prototipov ali za razvoj programske opreme, pripravljene za proizvodnjo. Python je zelo uporaben in priljubljen programski jezik, saj deluje na različnih platformah kot so Windows, Mac, Linux in Raspberry Pi. Ima preprosto sintakso, zato je enostavnejši za začetnike, saj se lahko osredotočijo na razumevanje osnovnih računalniških konceptov. Prav tako enostavna sintaksa razvijalcem omogoča pisanje programov z manj vrsticami kot nekateri drugi programski jeziki. Python je bil zasnovan za berljivost in ima nekaj podobnosti z angleškim jezikom z vplivom matematike. Za dokončanje ukaza, v nasprotju z drugimi programskimi jeziki, ki pogosto uporabljajo podpičje ali oklepaje, uporablja nove vrstice. Začetnikom takšna sintaksa olajša delo, saj se ne srečajo z najpogostejšimi sintaktičnimi napakami zaradi zaključevanja vrstic. Obseg funkcij, pogojnih stavkov, zank in razredov določamo s pomočjo zamika, medtem ko drugi programski jeziki v ta namen pogosto uporabljajo zavite oklepaje [27]. Za začetnike bi lahko to predstavljal velik problem, vendar se lahko iz tega naučijo tudi lepega programiranja in natančnega in jasnega oblikovanja izvorne kode. Koda je zaradi uporabe presledkov in 19.

(29) tabulatorjev pregledna in ni treba uporabljati raznih oklepajev ter drugih znakov za omejevanje blokov. Python je programski jezik, ki je primeren tudi za prvi tekstovni jezik za učenje programiranja. Strnad [26] je v svoji raziskavi pridobila večinoma pozitivne odzive na Python s strani študentov. Python je lahko berljiv jezik, zato je med učenci zelo priljubljen. Jezik ni občutljiv na napake, ne zahteva določanja tipa spremenljivk, pa tudi javljanje sintaktičnih napak je zelo jasno. Jezik je tudi modernejši in vizualno privlačnejši.. Slika 3.4: Primer programa, ki poišče in izpiše vse delitelje števila in rezultat [24]. Knjižnica Turtle Želvja grafika je eden izmed načinov programiranja. Ustvarili so jo skupaj s programskim jezikom Logo, ki sta ga leta 1966 razvila Wally Feurzig in Seymour Papert. Želvja grafika omogoča premikanje želve po ekranu, hkrati pa figura želve pušča sledi in riše razne oblike, glede na ukaze programa. Želva lahko riše zapletene oblike s pomočjo programov, ki ponavljajo preproste poteze. Danes standardna knjižnica programskega jezika Python vključuje želvjo grafiko. Tako kot njegov Logo predhodnik, tudi Pythonova želva programerjem omogoča upravljanje ene ali več želv v dvodimenzionalnem prostoru. Ker je poleg modula želve mogoče uporabiti standardno sintakso Python in podatkovne strukture, je želva postala priljubljen način, da se programerji naučijo programskega jezika Python, in se seznanijo z osnovami. Novejša različica želvje grafike poskuša ohraniti prednosti starega modula želve in biti skoraj 100-odstotno združljiva z njim. To predvsem pomeni, da učitelju omogoči, da pri uporabi modula znotraj integriranega 20.

(30) razvojnega okolja Python uspešno uporablja vse ukaze, razrede in metode. Prav tako želvja grafika omogoča ustvarjanje programov tako na objektno orientiran kot tudi na proceduralno orientiran način. Knjižnica Turtle v Pythonu deluje kot risalna plošča, ki omogoča programiranje želve, ki ob premikanju pušča sledi – riše. Vključuje veliko funkcij in ukazov. Za uporabo knjižnice Turtle jo moramo najprej vključiti, nato pa je treba ustvariti objekt želve. V programu Thonny se ob tvorbi objekta odpre novo okno Python želvja grafika, kjer se prikazujejo rešitve programov, kot je prikazano na spodnji sliki.. Slika 3.5: Primer risanja zvezde z želvjo grafiko v programu Thonny. 21.

(31) 3.2 JAVA Java je eden najbolj priljubljenih in pogosto uporabljanih programskih jezikov. Je objektno usmerjen programski jezik tretje generacije. Razvilo ga je podjetje Sun Microsystems. Je splošno namenski programski jezik, uporaben za vse vrste aplikacij. Poleg tega so prednosti jezika Java tudi, da je neodvisen od platforme ter primeren jezik za razvoj spletnih aplikacij. Programska koda v Javi se ne prevaja v strojno, ampak v vmesno kodo. Na običajnih procesorjih je ta koda neuporabna za izvajanje, ker potrebuje tolmača, vendar pa z ustreznim tolmačem lahko to kodo izvajamo na poljubni napravi. Javino izvajalno okolje, ki se imenuje tudi Javanski stroj (Java virtual machine), je izvajalno okolje, ki poleg funkcije tolmača vmesne kode za izvajanje na več strojnih podlagah, ponuja tudi nadzorovano izvajalno okolje, ki skrbi za nekatere temeljne storitve, poleg tega pa ponuja tudi visoko stopnjo varnosti. Programski jezik Java so razvili iz jezikov C in C++. Kljub svoji podobnosti programskemu jeziku C nima problematičnih elementov, kar omogoča razvoj zanesljivih vsestranskih programov. To omogoča velika programska knjižnica, ki je že sestavni del jezika. V Javi ni kazalcev, ročnega sproščanja pomnilnika, večkratnega dedovanja, struktur, ki pa jih nadomeščajo razredi. Neodvisnost Jave se kaže v možnosti izbire izvajalnega okolja, razvojnih orodij, dodatnih knjižnic. Ker je Java neodvisna od platforme, je nekoliko posebna tudi pri razvojnem okolju. Če hoče programer napisati program na standardni različici platforme J2SE, potrebuje razvojni komplet (JDK, Java Development Kit) in preprost urejevalnik besedila. Java se uporablja v vseh vrstah aplikacij, kot so mobilne aplikacije (Android temelji na Javi), namiznih aplikacijah, spletnih aplikacijah, odjemalskih strežniških aplikacijah, podjetniških aplikacijah in mnogih drugih. Ker je Java namenjena uporabi v različnih sistemih, je varnost zelo pomembna. Najpomembnejšo vlogo pri tem prevzame javanski izvajalni sistem, ki za varnost skrbi skozi ves potek nalaganja in izvajanja kode.. 22.

(32) Slika 3.2: Primer programa v Javi, ki sešteje prvih 100 naravnih števil [29]. V primerjavi s Pythonom se Java nekako nahaja med jezikoma C++ in Python. Programi, napisani v Javi, običajno delujejo hitreje kot ustrezni programi v Pythonu in počasneje kot C++. Rezultati raziskav kažejo, da uspešnost učencev ni odvisna od programskega jezika. V literaturi je pogosto omenjena uporaba Jave pri začetnem poučevanju programiranja, nikjer pa ni podrobneje opisano zakaj. Prav tako ni narejenih raziskav, ki bi preizkušale učinkovitost poučevanja Jave kot prvega programskega jezika [10].. 23.

(33) 3.3 C jeziki Programski jezik C Programski jezik C so ustvarili v AT&T Bell Laboratories z namenom univerzalne uporabnosti. Jezik sta razvila Dennis Ritchie in Brian Kernighan. Ritchie in Ken Thompson sta najprej razvila prevajalnik za operacijski sistem Unix, ki je bil v osnovi napisan v zbirnem jeziku. Kasneje se je C pojavil tudi na drugih operacijskih sistemih. Programski jezik C danes najpogosteje uporabljamo za razvoj programske opreme vdelanih sistemov. C je relativno preprost programski jezik. Eden izmed ciljev razvoja programskega jezika je bil, da bi bil jezik prevedljiv s prevajalnikom, ki bi kodo preveril le enkrat. Tako bilo potrebno le skromno število strojnih ukazov za vsakega izmed jezikovih glavnih elementov in brez povečanega izvajalnega časa. Prevajalnik, ki kodo preveri le enkrat, je takšen, ki lahko prevede izvorni program brez potrebe, da išče nazaj po izvorni kodi. To je razlog, zakaj je treba napisati prototip funkcije, katere klic se pojavi pred njeno definicijo. Programski jezik C vključuje ukaze, ki so namenjeni strukturiranemu in preglednemu pisanju programov. Vključuje tudi podatkovne strukture in ukaze, ki se uporabljajo za programiranje na nivoju spominskih lokacij oziroma za nizkonivojsko programiranje. V jeziku C so napisani operacijski sistem UNIX ter programski orodji Mathematica in MATLAB. Iz jezika C so razvili objektno orientirane jezike objektni C, C#, C++ in Java. Jezik C se zaradi premišljene strukture ukazov pogosto uporablja za pisanje obsežnih programov. Prav tako se uporablja za pisanje samostojnih programov, pisanje operacijskih sistemov ter za programiranje strojne opreme, saj C podpira delo s kazalci. Poleg tega C podpira veliko večino ostalih konceptov programiranja. Pri razvoju C-ja je bilo pomembno, da prevajalnik generira čim bolj učinkovito strojno kodo, saj tako omogoča direkten dostop do pomnilnika oziroma do naslovov pomnilniških lokacij. Pomembna lastnost je tudi, da za delovanje potrebuje čim manj podpornih knjižnic. C-jeva zasnova posledično omogoča pisanje programske opreme za področja, za katera so prej potrebovali zbirnik. Programe, ustvarjene s C programskim jezikom, lahko zaženemo na mnogo platformah z minimalnimi prilagoditvami.. 24.

(34) Slika 3.3: Primer programa v jeziku C, ki prebere dve števili in večje [31]. Programski jezik C++ C++ je splošno namenski računalniški programski jezik, ki ga je razvil danski računalnikar Bjarne Stroustrup v Bellovih laboratorijih. C++ omogoča različne programerske pristope, in sicer proceduralno, objektno usmerjeno, generično in funkcionalno programiranje. C++ je nadgradnja programskega jezika C. Uporablja se za večje ter bolj zahtevne aplikacije. Z njim izdelujejo računalniške igre, operacijske sisteme ter spletne iskalnike. Z C++ lahko uredite programe tako, da bodo delovali hitro in gladko brez prekinitev ter problemov. C++ se prevede v strojni jezik, kar mu omogoča, da enak program izvaja bistveno hitreje od jezikov, ki se interpretirajo ali pa se prevedejo v vmesni jezik kot na primer Java, C#, Python, javascript, PHP ... . Poleg tega, da za isto opravilo program porabi manj časa, porabi tudi manj energije, kar je pomembno za naprave z baterijskim napajanjem.. 25.

(35) 4 PREHOD Z BLOKOVNEGA NA TEKSTOVNO PROGRAMIRANJE 4.1 Primerjava blokovnega in tekstovnega programiranja Večina programskih jezikov je tekstovnih, obstaja pa tudi veliko programskih jezikov za blokovno programiranje. Blokovno programiranje temelji na premikanju blokov v smislu povleci in spusti, medtem ko tekstovno programiranje temelji na tipkanju ukazov in ukaznih vrstic. To je ena izmed največjih razlik blokovnega in tekstovnega programiranja. Slika 4.1 prikazuje primer programa, ki je ustvarjen v blokovnem in tekstovnem programiranju.. Slika 4.1: Primer programa "Hello world!" v blokovnem in tekstovnem programskem jeziku C++. Opazimo, da je program v blokovnem programiranju enostavnejši, saj je treba uporabiti dva bloka, ki ju sestavimo in vpišemo besedilo. Medtem ko je pri programu, zapisanim s programskim jezikom C++, treba zapisati nekaj dodatnih ukazov, da se program izvede pravilno. Dodatne vrstice kode predstavljajo težavo predvsem pri začetnikih, saj jim je težko pojasniti, zakaj so potrebni še ostali ukazi, ki jih je nujno treba vključiti v program. Ravno zaradi dodatnih ukazov, vrstic kode ter neznanih besed, ki predstavljajo ukaze, so za začetnike tekstovni programi veliko težje berljivi. Pri blokovnem programiranju vsebujejo bloki znane besede in jezik, ki ga začetniki bolje razumejo, zato je tudi program lažje berljiv. Naslednja prednost blokovnega programiranja je enostavna uporaba blokov, ki s svojo obliko in barvo nakazujejo sovpadanje. Pri tekstovnem programiranju pa je treba vsak ukaz zapisati in pri tem upoštevati sintakso ter pravilno črkovanje. Začetnikom predstavlja to velik izziv poleg učenja osnovnih konceptov in logike programiranja. Začetniki se lahko s pomočjo blokovnega programiranja osredotočijo na učenje in razumevanje konceptov programiranja in računalništva. Pri tem pa se ne soočajo s težavami pri sintaksi, črkovanju ali drugimi napakami, ki se lahko pojavijo pri tekstovnem programiranju.. 26.

(36) V blokovnih sistemih lahko uporabniki ustvarijo različne projekte, vendar so po večini omejeni na bloke, ki jih ponuja dotični blokovni sistem. Bloki prav tako zavzamejo veliko prostora na zaslonu in lahko hitro pride do težav z berljivostjo programa. Te slabosti se ne pojavljajo pri tekstovnem programiranju. Pri tekstovnem programiranju ni omejitev, ko uporabnik razume sintakso programskega jezika, lahko ustvari, kar želi. Večina programskih jezikov omogoča vključevanje knjižnic, ki še razširijo spekter ukazov, ki so na voljo. Tako lahko programerji ustvarijo najrazličnejše programe, socialna omrežja, spletne strani, programske opreme itd., kar pri blokovnih sistemih ni mogoče. Blokovne in tekstovne sisteme so med svojo raziskavo [32] primerjali tudi Maloney in sodelavci. Trdijo, da so spremenljivke pri tekstovnem programiranju nevidne, abstraktne in jih je težko razumeti. Medtem ko so pri blokovnem programiranju le te konkretni predmeti, uporabnik pa jih lahko vidi, uporablja in z njimi manipulira. Trdijo tudi, da se pri pisanju programov lahko hitro pojavijo napake v črkovanju ali sintaksi, sploh pri začetnikih. Do takšnih napak pa ne pride pri blokovnem programiranju. Zaradi teh pozitivnih lastnosti predlagajo, da je pri začetnikih bolje uporabiti blokovno programiranje. Omenjajo tudi slabost blokovnih sistemov, to je nezmožnost povečanja števila ukaznih blokov zaradi omejenega prostora na ekranu. Pri tekstovnem programiranju tega ni. Sengupta in sodelavci so v [33] za začetno učenje programiranja uporabili pot od blokovnega k tekstovnem programiranju. Ugotovili so, da blokovni sistemi povečajo zanimanje za nadaljnje učenje programiranja, vendar začetniki kasneje ugotovijo, da je blokovno programiranje neprimerno za nadaljevalno učenje in razvoj kariere na področju računalniškega programiranja. Predlagajo, da se lahko uspešen prehod zagotovi s programiranjem ukaznih blokov s tekstovnimi programskimi jeziki. Poleg že vseh omenjenih razlik, prednosti in slabosti je pri začetnikih pomembna tudi vizualna podpora programov in uporabniških vmesnikov. Večina blokovnih sistemov ima prijazen in vizualno dovršen uporabniški vmesnik. Tudi rezultati programov, ustvarjenih z bloki, so neposredno vidni in interaktivno predstavljeni. Vključeni so konkretni objekti, s katerimi se začetniki lažje poistovetijo. Pri tekstovnem programiranju se ukazi večinoma zapisujejo v beležnico ali v polje vmesnika, namenjenega besedilu. Večina uporabniških vmesnikov ne vsebuje barvnih elementov, kot tudi takojšnjih interaktivnih rezultatov programov. Če pa želimo programu in rezultatu dodati interaktivno vsebino, moramo uporabiti dodatne knjižnice 27.

(37) in napredne funkcije, ki so za začetnike še težje razumljive in obremenjujoče. Slika 4.2 prikazuje uporabniški vmesnik Eclipse, ki je integrirano razvojno okolje, ki se uporablja v računalniškem programiranju. Vsebuje osnovni delovni prostor in razširljiv sistem vtičnikov za prilagajanje okolju. Njegova osnovna uporaba je za razvoj aplikacij v programskem jeziku Java, uporablja pa se tudi za razvoj aplikacij v drugih programskih jezikih na primer Python, C, C++, PHP, JavaScript. Na sliki 4.2 je razvidno, da je uporabniški vmesnik precej monoton brez interaktivne podpore, rezultat pa se prikaže v polju na dnu uporabniškega vmesnika. V primerjavi z blokovnimi sistemi je začetnikom, predvsem mlajšim, pomembnejša vizualna podoba vmesnika in rezultatov, kot tudi barve in oblika blokov, s katerimi sestavljajo program. Takšno okolje deluje bolj spodbudno in začetniki radi ustvarjajo v njem.. Slika 4.2: Uporabniški vmesnik Eclipse. Blokovni sistemi so lahko pri začetnem učenju programiranja zelo učinkoviti in dobra odskočna deska za učenje tekstovnega programiranja, ki pa v nadaljevanju omogoča ustvarjanje in učenje računalniškega programiranja brez omejitev. Ob prehodu z blokovnega na tekstovno programiranje se hitro lahko pojavijo težave, ki jih predstavljamo v naslednjem poglavju. 28.

(38) 4.2 Težave, ki se pojavljajo pri prehodu Blokovno programiranje je v veliki meri pripomoglo k povečanju zanimanja za programiranje pri mlajših generacijah. Veliko učencev se odloča za učenje programiranja v nižjih razredih osnovne šole in jih takšni sistemi veliko bolj pritegnejo kot tekstovno programiranje, ki temelji le na pisanju ukazov. Cilj, da se mlajšim generacijam približa programiranje, je bil tako v veliki meri dosežen, vendar pa številne študije dokazujejo, da ima blokovno programiranje poleg pozitivnih tudi negativne posledice pri prehodu na tekstovno programiranje. Veliko raziskav je temeljilo na tem, da so začetne uporabnike najprej učili blokovnega programiranja, nato pa prešli na poučevanje enega izmed tekstovnih programskih jezikov. Pri večini raziskav se je pojavil problem izgube samozavesti, saj so učenci pri prehodu naleteli na težave pri sintaksi in črkovanju, zaradi česar so hitreje obupali. Podvomili so o svojih programerskih sposobnostih in razumevanju, hkrati pa ugotovili, da blokovno programiranje ni »pravo« programiranje [4]. Poleg Moorsa tudi Wilensky in Weintrop navajata nekatere težave pri prehodu. Ena izmed njih je tudi ustvarjanje napačne predstave o programiranju. Nekateri začetniki so dejali, da pri blokovnem programiranju vse spada na svoje mesto in da obstaja le ena različica kombinacij ukazov, da bo program pravilen. Takšna predstava je napačna, saj tako kot pri blokovnem tudi pri tekstovnem programiranju obstaja nešteto načinov, kako ustvarjati programe [6]. Nekateri začetniki, predvsem v programskem okolju Scratch, ustvarjajo programe tako, da v polje prenesejo ukaze in jih nato glede na obliko in barvo poskušajo sestaviti v smiseln program, to pomeni, da takšen način ne podpira reševanja problema z oblikovanjem algoritma. Naslednja slaba navada, ki so jo opazili raziskovalci, je deljenje programa na številne manjše programe in vzporedno delovanje le teh. To v Scratchu omogoči izogibanje kontrolnim strukturam, pogojnim stavkom in končnim zankam, vendar programi kljub temu delujejo. Pri prehodu na tekstovno programiranje pa to povzroča velike težave, saj takšnega načina programiranja ne podpira [34].. 29.

(39) Slika 4.3: Primer programa v blokovnem programiranju, ki dopušča vzporednost izvajanja. Kölling, Brown in Altadmri so predstavili naslednje težave, ki se pojavljajo pri prehodu iz blokovnega na tekstovno programiranje: - Berljivost Sintaksa blokovnega programiranja je enostavneje berljiva za začetnike programiranja kot sintaksa pri tekstovnem programiranju. Pri blokovnem programiranju se uporabljajo ključne besede in kratice namesto pik, podpičij in drugih simbolov, ki se uporabljajo pri programskih jezikih. Ključne besede, ki so vključene v blokovno programiranje začetniki že poznajo, saj so del njihovega vsakdanjega besedišča. Začetniki zato programe lažje sestavijo ter razumejo. Za blokovno programiranje značilen grafični prikaz, je lažje razumeti in pojasnjevati kot tradicionalni zapis besedila. - Memorizacija ukazov Pri blokovnih programskih sistemih so vsi ukazi vizualno predstavljeni na ekranu in pri večini sistemov obstajajo seznami, ki prikazujejo vse ukaze, ki jih je mogoče uporabiti. Novi uporabniki lahko brskajo po vseh razpoložljivih ukazih, se spominjajo nejasno zapomnjenih konceptov ali pridobijo navdih za odkrivanje novih. Vidnost konstruktov, združenih z običajno bolj humanim 30.

(40) poimenovanjem, ki bolj spominja na naravni jezik kot na številne programske jezike, ki temeljijo na besedilu, omogoča prepoznavanje prek priklica, s čimer pomagajo začetnikom pri uporabi orodja in spodbujajo eksperimentiranje. V besedilno zasnovanih sistemih programiranja se morajo uporabniki konstruktov spomniti, njihov način reprezentacije pa je treba priklicati iz spomina. - Memorizacija sintakse Poleg tega, da se spominjajo obstoja in funkcije programskega konstrukta v tekstovno zasnovanih sistemih, si morajo uporabniki zapomniti tudi njegovo natančno sintakso. Ni dovolj vedeti, da for-zanka obstaja in za kaj se uporablja, programer mora poznati tudi natančno sintakso in kam točno vstaviti vejice, podpičje ali oklepaje. Za začetnike je to dodaten kognitivni izziv poleg priklica na sam ukaz. Dodaten izziv predstavlja govorcem, ki ne govorijo angleško, v mnogih primerih spomin na ključno besedo v tujem jeziku, saj tekstovni programski jeziki najpogosteje uporabljajo ključne besede v angleškem jeziku. Mnogi učenci teh ključnih besed ne razumejo in izgubijo prednost pomoči pri uporabi v programih. V takšnih primerih ključne besede postanejo za učence nesmiselne, vendar si jih morajo kljub nerazumevanju zapomniti. Nekateri sistemi, ki temeljijo na blokih, so na voljo v jeziku, ki ga učenci razumejo in tako odstranjujejo jezikovno oviro. Kljub temu pa se lahko pojavi problem nerazumevanja ukazov zaradi pomanjkanja jezikovnega znanja učencev. - Tipkanje/črkovanje Poleg tega, da poznajo sintakso, morajo uporabniki program tudi ustvariti oz. zapisati. Tipkanje besedila programa, ki je popolnoma mehansko dejanje, lahko predstavlja dodatno oviro. Za mlade učence je to lahko pomembno tako v kognitivnem kot tudi v motoričnem smislu. Medtem ko se na primer Scratch zelo uspešno uporablja pri desetletnikih, ta ciljna skupina pogosto nima ustreznih veščin tipkanja, da bi lahko v ustreznem času izdelala besedilne konstrukte potrebne dolžine. Tudi pri starejših učencih, ki imajo možnost tipkanja, je nujnost tega dodatna obremenitev in kognitivne motnje, ko je treba napake tipkanja popraviti. - Število ukazov V programih, ki temeljijo na tekstovnem programiranju, vsi ukazi niso hkrati vidni. V vsakem programskem jeziku je prav tako veliko ukazov, do katerih programerji dostopajo s pomočjo dokumentacije in knjižnic. Novi uporabniki se morajo naučiti raziskovati in razumeti obširno 31.

(41) dokumentacijo. Z vključevanjem knjižnic pa se število možnih ukazov še poveča. Pri blokovnih sistemih so vsi ukazi vidni in jih uporabniki lažje uporabijo. Tako ne izgubljajo časa z branjem dokumentacije in raziskovanjem novih ukazov in knjižnic. - Prototip proti definiciji Oblika klicev razpoložljivih metod, navedenih v blokovnih jezikih, je prototip za klic teh metod. Ko uporabnik povleče ukaz v program, ima sintaktično pravilen klic, pri čemer mora vstaviti ali prilagoditi le možne parametre. Po drugi strani je seznam razpoložljivih metod pri tekstovnem programiranju običajno na voljo v obliki opredelitev metod. Ti se razlikujejo od sinhronizacije od izziva metode. Programerji morajo sami sestaviti sintakso za klic metode, pri čemer izhajajo podrobnosti iz definicij metode. Za novince v teh jezikih to ni trivialen korak in zahteva razumevanje številnih netrivialnih konceptov vključno s povratnimi vrednostmi, parametri in vrstami. - Ujemanje identifikatorjev Posebna podskupina težav s črkovanjem se pojavi pri obravnavi uporabniško opredeljenih identifikatorjih, kot so spremenljivke. Večina blokovnih sistemov pri sklicevanju na spremenljivke ponuja izbirne komponente, kot so spustni meniji, ki vključujejo vse obstoječe identifikatorje. Medtem ko je pri tekstovnem programiranju zelo pomembno črkovanje, nekateri sistemi razlikujejo tudi med veliko začetnico. Pri prehodu z blokovnega na tekstovno programiranje zato uporabniki težje razumejo pomembnost črkovanja in velike začetnice. - Pisanje izrazov Pisanje izrazov, kot so aritmetični izrazi z več operaterji, je bistveno težje pri tekstovnem programiranju. Pri blokovnem programiranju bloki predstavljajo izraze, jasno kažejo število in položaj parametrov, v mnogih sistemih pa tudi njihov tip. - Razumevanje tipov V mnogih sistemih, ki temeljijo na blokih, se uporablja le malo podatkovnih tipov, ki se razlikujejo po vrednosti, in uporabniki uspešno ustvarijo programe, ne da bi usvojili smiselno razumevanje koncepta podatkovnih tipov. Pri tekstovnem programiranju je razumevanje koncepta podatkovnih tipov nujno potrebno že za izdelavo zelo preprostih programov.. 32.

(42) - Razumevanje sporočil z napakami Številnim sistemom na osnovi blokov se uspe izogniti skoraj vsem napakam v sintaksi. V sistemih, kjer pride do napak v sintaksi, so le te tipično ozko lokalizirane in sporočilo je prikazano točno glede na izvor napake v izvorni kodi. Po drugi strani pri tekstovnem programiranju struktura programa izhaja iz tipkane predstavitve in so sporočila o napakah nejasna, napačna je lahko njihova vzročna lokacija ali pa se pojavijo napake v črkovanju besedila programa. Tolmačenje teh sporočil o napakah je netrivialna veščina, za razumevanje katere začetniki potrebujejo veliko časa. V nadaljevanju predstavljamo še težave, s katerimi so se poleg zgoraj naštetih težav srečali nekateri drugi raziskovalci. Wilensky in Weintrop kot rezultat raziskave navajata podobne težave pri prehodu. Omenita pa tudi pomen vizualnih rezultatov pri posameznem načinu programiranja. Učenci navajajo, da je pri tekstovnem programiranju možno predstaviti le tekstovne rezultate, medtem ko gre pri blokovnem načinu bolj za premikanje figur znotraj okolij [6]. Kölling in sodelavci poudarjajo, da ni nujno, da se pri prehodu pojavijo vse izmed zgoraj opisanih težav. Menijo tudi, da je velik problem v tem, da so omenjene težave med seboj povezane in skupaj začetnikom predstavljajo še večji izziv. Zaradi tega so ustvarili tudi nov sistem, ki bi vplival na zmanjšanje težav ob prehodu, imenovan programiranje z okvirji [2]. Kljub težavam, ki se pojavljajo, obstaja veliko raziskav, ki govorijo v korist uporabe blokovnega programiranja pred tekstovnim programiranjem. Wagner [35] je pri prehodu učencev z blokovnega na tekstovno programiranje ugotovil, da so učenci uspešno povezovali ukaze v Javi in bloke iz MIT App Inventor sistema. Podobno testiranje kot Wagner je z Javo izvedel Dann [36], ki je učence najprej seznanil s programom Alice, nato pa so prešli na tekstovno programiranje. Rezultati učencev so pokazali, da so tisti, ki so najprej programirali v Alice in nato v Javi, dosegli vsaj eno oceno višje kot tisti, ki so od vsega začetka programirali samo v Javi. Prehod z blokovnega na tekstovno programiranje so preizkušali tudi Powers, Ecott in Hirshfield [37]. Pri poučevanju programiranja so najprej uporabili blokovni sistem Alice, nato pa prešli na visokonivojska programska jezika C++ in Java. Tudi oni so ugotovili izgubo zaupanja in 33.

(43) samozavesti pri začetnikih ob prehodu na tekstovno programiranje. Številni učenci so se srečevali predvsem z dvema težavama: - Učencem se je zmanjšalo zanimanje za programiranje, ko se zaradi napak pri tekstovnem programiranju, program ni prevedel. Dejali so, da niso pravi programerji, čeprav so se nekaj konceptov programiranja že naučili v programu Alice. - Učenci so v tekstovnem programiranju zelo malo pozornosti namenili sintaksi, pogosto so mislili, da bo program pravilen, četudi se ni prevedel. Prav tako učenci niso bili natančni pri pisanju ukazov ter črkovanju, ki sta pomembna vidika programiranja, kar je privedlo še do dodatnih napak v programih. Moors v [4] omeni še dve težavi, ki se lahko pojavita pri prehodu z blokovnega na tekstovno programiranje. Blokovne sisteme lahko začetniki razumejo le kot sestavljanje blokov. Tako učenci zaporedoma v polje povlečejo več blokov kode in jih nato sestavljajo skupaj glede na obliko. Ta vrsta vedenja pa je v nasprotju s prakso v računalništvu, ki programerje spodbuja k začetku programiranja z načrtovanjem algoritmov za reševanje problemov. Naslednja težava je uporaba ekstremno podrobnega deljenja nalog na podnaloge (fine-grained programming). Učenci naloge razčlenijo na manjše podnaloge, ki pa postanejo neskladne. Pogost primer tega vedenja je bil ugotovljen, ko je rešitev naloge zahtevala končno zanko – naloga se je ponavljala, dokler ni bil dosežen določen pogoj. Učenci so z ekstremno fino zrnatim programiranjem ta koncept razdelili na več podnalog: prva je bila neskončna zanka, ki je izvajala ponavljanje, in druga, ki je preverjala, ali je pogoj izpolnjen, tretja pa je ob izpolnjenih pogojih zaustavila program. Oba omenjena načina rešitve naloge prikazuje slika 4.4.. Slika 4.4: Primer programa rešenega s podrobnim deljenjem nalog. Poleg omenjenih avtorjih so tudi številni drugi ustvarili sisteme in predlagali načine, kako ublažiti težave ob prehodu z blokovnega na tekstovno programiranje. Te predloge in možne rešitve bomo predstavili v naslednjem poglavju. 34.

(44) 4.3 Rešitve za zmanjšanje težav pri prehodu PROGRAMIRANJE Z OKVIRJI (FRAME-BASED EDITING) Urejanje na podlagi okvirjev je namenjeno združevanju mnogih koristnih vidikov sistemov, ki temeljijo na blokih in besedilu, v en vmesnik. Cilj je doseči boljšo bralno sposobnost kode, izogibanje napakam in zmanjševanje pomena odkrivanja blokov, obenem pa ohraniti eksplicitnost, učinkovitost manipulacije, nadzor tipkovnice pri tekstovnem programiranju. Takšen sistem je vgrajen v programu Greenfoot, ki vključuje programski jezik Stride, ki je podoben programskemu jeziku Java. Vse izjave v Strideu so predstavljene z okvirji. To velja za sestavljene stavke, katerih okvirji so naslikani z izrazito barvo ozadja in vidno obrobo, pa tudi za enostavnejše enoredne stavke, ki so prikazani v privzeti barvi in brez vidne obrobe. Okvirji lahko vsebujejo prostore za nadaljnji vnos kode in se razlikujejo med besedilnimi prostori in prostori za ugnezdene okvirje, kar prikazuje slika 4.5. Na sliki 4.5 je vidno tudi, da se v prostorih za besedilo pojavijo tudi pomožne besede, ki nakazujejo, kaj je treba zapisati v prazen prostor.. Slika 4.5: Programiranje z okvirji. Ko uvajamo sistem z okvirji kot vmesni korak, učenci napredujejo skozi dva prehoda namesto enega. Najprej gre za prehod z blokovnega programiranja na programiranje z okvirji in nato za prehod s programiranja z okvirji na tekstovno programiranje. Pri obeh prehodih se lahko pojavijo težave, ki so naštete v okvirjih na sliki 4.6. Berljivost simbolov, število ukazov, prototip proti definiciji, pisanje izrazov, razumevanje tipov, sporočila o napakah, pomnjenje ukazov, pomnjenje sintakse, tipkanje in črkovanje, grupiranje.. Berljivost simbolov, število ukazov, prototip proti definiciji, pisanje izrazov, razumevanje tipov, sporočila o napakah.. Pomnjenje ukazov, pomnjenje sintakse, tipkanje in črkovanje, grupiranje.. Slika 4.6: Delitev težav pri prehodu. 35.

(45) Kölling in sodelavci [2] navajajo predvsem dva pozitivna vidika takšnega načina programiranja: - Zmanjšanje števila težav, ki jih je treba obvladati na vsakem koraku, čeprav skupno število težav na obeh prehodih ostane enako. - Zasnova urejevalnika okvirjev vključuje številne vidike, ki znatno zmanjšajo težave pri številnih posameznih težavah s prehodom. Tako zadeve na vsakem koraku niso le manjše, temveč jih je tudi lažje obvladati. Kljub temu, da takšen sistem avtorji zagovarjajo, še ni preizkušen in podprt s strani uporabe in uveljavljanja v šolah in opozarjajo, da se ob vključitvi vmesnega sistema za lažji prehod lahko pojavijo dodatne težave, saj bi učenci namesto enega prehoda morali opraviti dva. TILED GRACE Tiled Grace je kombinirani blokovni in tekstovni urejevalnik za programski jezik Grace, ki uporablja prevajalnik Minigrace kot nadomestni računalnik. Blokovni urejevalnik je podoben Scratchu, vendar lahko uporabnik s pritiskom na gumb preklopi na besedilno kodo, ki jo je mogoče urejati, in se nato lahko preklopi nazaj. S pomočjo Tiled Gracea se programerji lahko brez težav premikajo med vizualizacijo svojih programov kot blokov ali izvorne kode, urejanje programov preko blokov ali besedila in nadaljujejo v tradicionalnih besedilnih okoljih, vse v istem programskem jeziku. Homer in Nobel sta izvedla uporabniški eksperiment s Tiled Graceom in rezultati kažejo, da se uporabnikom zdijo dvojni pogledi uporabni [12]. Tiled Grace sta nadgradila tako, da je še bolj podoben blokovnim sistemom, dodala sta barvo blokom glede na funkcionalnost, spremenila sta tudi obliko blokov, da uporabnik točno ve, kateri spadajo skupaj. Z namenom, da se približata tudi tekstovnemu programiranju sta sistem nadgradila tudi glede sporočilnosti napak. Sistem napako obarva, zraven pa se izpiše tudi dodatno navodilo. Ustvarili so dve različici okolja Tiled Grace, ena je služila kot vmesnik za blokovno programiranje, druga pa za tekstovno programiranje. Z ustvarjanjem Tiled Gracea so želeli doseči, da se besedilo v blokih popolnoma ujema z ukazi pri tekstovnem programiranju. Tako so se izognili trditvi, da blokovno programiranje ni pravo programiranje [11].. 36.

References

Related documents

included homework averages for chapter four: polynomial functions, and chapter five: rational exponents and radical functions from last year, as well as the chapter four test, and

Cumming and Johan (2009) illustrate this situation in a scenario of bankruptcy, where a project can move the company from a state A to a state B, both of which are in

Endangered and Threatened Wildlife and Plants: Review of Plant and Animal Taxa That are Candidates for Listing as Endangered or Threatened Species; Notice of Review.. Goodrich,

a) three-level HLM of cognitive and non-cognitive effects - introducing science achievement as a control variable b) understanding cultural profiles in math teaching..

Make  changes  to  section  on  agreements  to   reflect  emphasis  of  agreements  in  new

Getting Students More Learning Time - Online Distance Education in Support of Expanded Learning Time in K-12 Schools Cathy Cavanaugh (May 2009). The Center for American

innovative approach to high school credit recovery. The program provides an alternative school that combines online curriculum and instruction with a classroom/computer lab

Mullins and others state the shift in higher education from access only to one that supports student success for all students may require a rebalancing of the