<< home >>
Didaktické využitie mini-jazyka Robot Karel na ZŠ
<<- ->>


  • Programovanie

PROGRAMOVANIE

Programovanie je proces a súčasne aj teoretický odbor zaoberajúci sa vytváraním počítačových programov. Jednoducho povedané programovanie je činnosť, ktorá spočíva vo vytvorení programu pre riešenie konkrétnej úlohy.

Začíname programovať

Programovanie je činnosť, ktorú vykonávame od najrannejšieho veku. Program totiž všeobecne nie je nič iné ako špecifikovaný postup vedúci k splneniu zadanej úlohy. Takýto postup navrhuje už batoľa, ktoré sa chce dostať ku hračke, na ktorú bez pomôcky nedočiahne. S postupujúcim vekom sú programy stále zložitejšie a rafinovanejšie. Postupne sa do nich dostávajú procedúry (poprosím tatu, aby mi zaviazal topánky, ktoré si ešte sám zaviazať neviem), funkcie (opýtam sa mamy, čo budem večerať), premenné (musím si zapamätať kadiaľ som vyšiel z lesa, aby som nabudúce nezablúdil), podmienky (ak si uložím hračky, tata ma zoberie do lesa, inak bude kričať), cykly (pokiaľ sa neoblečiem, nemôžem ísť do školy) a ďalšie programátorské prvky.

Keď sa žiak začne učiť programovať, to najdôležitejšie väčšinou už pozná. Potrebuje si len uvedomiť svoje doterajšie znalosti a zručnosti a naučiť sa zapísať svoju predstavu riešenia úlohy pomocou formalizmu a predovšetkým s rešpektom k obmedzeným možnostiam počítača a používaného programovacieho jazyka.

Aby žiaci po ukončení základnej školy mali základné znalosti programovania, musí vyučujúci čo najviac využiť znalosti žiakov, a aby to, čo ich naučí, mohli čo najlepšie využiť vo svojom ďalšom živote. A to nezávisle od toho, či budú tvoriť programy pre počítače alebo riešiť úplne iné úlohy.

Nesmieme si ale pliesť výučbu programovania s výučbou konkrétneho programovacieho jazyka. Pri výučbe programovania by nemalo byť dôležité, ako sa to či ono naprogramuje napr. v programovacom jazyku Basic či Pascal. Vyučujúci by sa mala sústrediť predovšetkým na vysvetlenie základných princípov a postupov a až potom ukázať ich realizáciu v použitom programovacom jazyku.

Etapy programovania

Programovanie je širší proces a neobmedzuje sa len na zápis príkazov v nejakom programovacom jazyku - kódovanie, ale proces programovania môžeme rozdeliť na nasledovné etapy:

1. Definícia problému - zadávateľ úlohy nebýva obyčajne počítačovým odborníkom a nedokáže formulovať problém tak, aby mohol byť podkladom pre návrh programu. 

2. Náznak postupu riešenia - v tejto etape sa tvorí celková stratégia riešenia daného problému, pričom úlohy je často nutné rozdeliť a riešiť ich oddelene ako niekoľko nezávislých programov.

3. Algoritmizácia - najobtiažnejšia etapa programovania, určenie postupnosti operácií a postup, ktorý túto postupnosť určuje sa volá algoritmus. Zápis je možno prevádzať pomocou vývojových diagramov alebo priamo v programovacom jazyku. 

4. Kódovanie - prepis vývojového diagramu do programovacieho jazyka. Zdrojový text sa zapisuje v textovom editore, ktorý je súčasťou prostredia programovacieho jazyka. Výsledkom kódovania je zdrojový súbor programu - vstupný súbor pre prekladač. 

5. Odladenie programu - etapa odstraňovania chýb v navrhnutom programe. Pri ladení sa využíva ladiaci program - debugger - ktorý je tiež súčasťou prostredia prekladača. Pri vývoji programu sa programátor nevyhne chybám. Chyby v programe môžu byť dvojakého druhu:

  • syntaktické - zle zapísaný príkaz, obyčajne preklep, počítač príkazu nerozumie, priebeh programu sa zastaví a objaví sa hlásenie o chybe 

  • logické - program síce funguje, ale neplní požadované úlohy, končí v nekonečnom cykle, nevypočíta výsledok a pod. Chyba sa obvykle rýchle nájde

6. Spracovanie dokumentácie - záverečná etapa programovania, v ktorej sa zostaví návod k použitie - manuál - k programu. V ňom sa používateľ dozvie, čo program dokáže a ako sa ovláda. Súčasťou dokumentácie je tiež programátorská dokumentácia, ktorá je podkladom pre prípadné úpravy a opravy programu autorom.

7. Udržovanie a aktualizácia - často vyžaduje viac úsilia ako samotný vývoj programu. Napríklad pri ekonomických aplikáciách je treba prevádzať pravidelné úpravy programu pri zmenách legislatívy, u antivírových programov ošetriť ochranu pred novými vírmi a podobne. 

Didaktické zásady programovania 

Zasvätiť žiakov do tajomstiev programovania nie je jednoduchá záležitosť. Celý proces sa skladá z dvoch zložiek. Jedna je zameraná na zvládnutie základných algoritmických a programovacích štruktúr a postupov. Druhým problémom a úlohou vyučujúceho je naučiť žiakov ovládať programovací jazyk, jeho syntax, výhody a obmedzenia, orientáciu v prostredí prekladača. A tu sa vyskytuje problém, ktorý vedie veľkú časť vyučujúcich k tomu, že odmietajú programovanie na základnej škole. Pod programovaním sa im totiž vybaví práve tá druhá časť, teda učenie programovacieho jazyka. Často majú v pamäti vlastné neblahé skúsenosti s relatívne komplikovanou štruktúrou a prostredím jazyka Pascal či C. Úlohou základnej školy však nie je naučiť programovací jazyk, ale základy programovania. Pretože kým sa žiaci dostanú do praxe, budú programovacie nástroje zrejme vyzerať úplne inak. Rovnako by nemalo byť cieľom naučiť Word či Excel, ale zručnosť práce s textom, s tabuľkou, informáciami a pod. 

Aby výučba základov programovania bola naozaj efektívna, je potrebné zvoliť nástroj, ktorého zvládnutie bude čo najjednoduchšie a žiakom bude robiť len minimálne problémy. Žiadna zložitá štruktúra zdrojových textov, jednoduché a prehľadné prostredie prekladača, názorný výstup. To všetko i za cenu istých obmedzení jazyka, pretože so žiakmi netreba vytvárať zložité a komplikované programy. Z didaktických zásad programovania je vhodné dodržať nasledovný postup:

  • Čo najskôr umožniť tvorbu programov
    Aby sa žiak mohol naozaj niečo naučiť, nestačí mu keď sa dozvie základné znalosti, ale musí si všetko sám vyskúšať. Pokiaľ vysvetľovanú konštrukciu niekoľko krát sám nepoužije, za chvíľu všetko zabudne (alebo zabudne oveľa rýchlejšie).

  • Nepredbiehať - nepoužívať prvky jazyka, ktoré ešte neboli vysvetlené
    Výklad by mal byť usporiadaný, každý nový prvok jazyka by mal byť vysvetlený až vtedy, keď si ho žiak môže overiť v dostatočnej šírke a hĺbke. 

  • Informácie podávať po malých častiach
    Čím menej nových poznatkov žiakom predložíme na vyučovacej jednotke, tým väčšia je nádej na to, že si ich žiaci zapamätajú a naučia sa ich používať. Diskutabilný je však rozsah spomenutej malej časti. Ak prirovnáme výklad ku schodišťu, tak touto malou časťou nebude jeden schod, ale skupina schodov medzi jednotlivými odpočívadlami. Inými slovami, prebrané bude iba učivo (medzi dvomi zastávkami) slúžiace k dôkladnému precvičovaniu v rôznych typoch úloh.

  • Sprievodné úlohy musia vyžadovať aktívne použitie nových poznatkov
    Žiaci pri riešení úlohy musia aplikovať práve vysvetlené nové konštrukcie a prvky jazyka.

  • Úlohy musia byť zaujímavé
    Najlepšie úlohy sú také, keď žiak vie, ako by problém riešil sám, a toto riešenie potrebuje formalizovať tak, aby riešenie zvládol aj počítač.

  • Riešenia nemajú byť príliš neprehľadné
    Časť programu, ktorá rieši zadanú úlohu a tým aj precvičuje preberanú konštrukciu a prvok jazyka, sa nemá strácať v záplave príkazov vstupu a výstupu a rôznymi pomocnými operáciami.

  • Od začiatku dbať na zásady moderného programovania
    Ak chceme žiakov naučiť riešiť aj zložitejšie problémy, treba od samého začiatku riešiť problémové úlohy rozložením na niekoľko jednoduchších úloh a tieto riešiť samostatne. Ak ale žiaci riešia každú úlohu vytvorením hlavného programu (bez samostatných procedúr alebo funkcií), budú podobným spôsobom pokračovať, ich práca bude s pribúdajúcou náročnosťou úloh čoraz namáhavejšia a v konečnom dôsledku ich to v budúcnosti môže odradiť od programovania vôbec.

  • Žiaci sa musia naučiť programy nielen vytvárať, ale ich aj ladiť
    Pri tvorbe programov sa vždy vyskytnú chyby (syntaktické alebo logické). Proces ladenia je rovnako dôležitý ako proces tvorby. V ňom totiž žiaci odhalia chyby a majú možnosť odstrániť ich.

  • Riešiť netriviálne problémy
    Schopnosť riešiť zložité úlohy je tou najcennejšou zručnosťou, ktorú si žiaci pri výučbe programovania môžu osvojiť. Vyučujúci by sa mal sústrediť na to, aby žiakov učil riešiť zložitejšie úlohy, aby si žiaci osvojili zásady moderného programovania.



PROGRAMOVACIE JAZYKY 

Programovací jazyk je umelý jazyk určený na definovanie inštrukcií, ktoré sú potom spracovávané a vykonávané počítačom. Programovací jazyk je určitým medzistupňom medzi priamymi inštrukciami počítača (strojový kód) a ľudským myslením, či prirodzeným jazykom. Používa veľmi obmedzenú časť slov prevzatých z anglického jazyka a rad matematických a logických výrazov. Má prísnu a jednoznačnú syntax. Programovací jazyk má tiež svoju vetnú skladbu, ktorá je značne obmedzená oproti vetnej skladbe prirodzeného jazyka a jej pravidlá sú veľmi striktné. Programovací jazyk musí byť automaticky, jednoznačne a pomerne jednoducho transformovateľný do strojového kódu.

Programy s ktorými sa stretávame v našich počítačoch, ako je operačný systém, aplikácie alebo hry, musel najskôr niekto vytvoriť - naprogramovať. Program je ucelený súbor inštrukcií, príkazov, pomocou ktorých vykonáva počítač určitú činnosť. Program je tvorený jedným alebo viacerými súbormi, ktoré sú v celku schopné vykonávať predpísanú činnosť. Tvorbou programov sa zaoberajú programátori a to väčšinou v tímoch. Programátor sa môže stáť autorom celého programu, ale na veľkých projektoch pracujú aj stovky programátorov. Ich riešenie je časovo náročné a preto si prácu na projekte rozdelia na časti, ktoré spracovávajú oddelene. Tým sa značne skráti doba riešenia projektu.

Vlastné poznanie programovacieho jazyka ešte nestačí k vytvoreniu funkčného projektu. Potrebné sú rozsiahle znalosti z teórie algoritmov, tvorby používateľských rozhraní, charakteristík hardvérových zariadení atď. Nie je možné nespomenúť znalosti z odboru, v ktorom má aplikácia slúžiť.

Klasické (vyššie) programovacích jazykov

Prvá komunikácia medzi počítačom a človekom sa uskutočňovala v strojovom kóde. Program v strojovom kóde je zostavaný z jednotlivých inštrukcií, ktoré je počítač schopný bezprostredne vykonávať. Pre každý typ počítača existuje iný kód podľa jeho schopností. Programovanie v strojovom kóde je zdĺhavé a náročné. Programátor rozpisuje inštrukcie do dlhých reťazcov núl a jednotiek.

Neskôr boli postupne vyvinuté programovacie jazyky, ktoré uľahčili programovanie. Behom vývoja programovania bol vyvinutý rad programovacích jazykov, ktoré v práci nazývam klasickými (vyššími) programovacími jazykmi. Pre základy výučby programovania na ZŠ ich nepovažujem z didaktického hľadiska za vhodné, u talentovaných žiakov ich naopak odporúčam zaradiť do domácej prípravy.

Stručný prehľad klasických (vyšších) programovacích jazykov

BASIC
Basic (Beginner's All-Purpose Symbolic Instruction Code) vyvinutý v roku 1964 vznikol "rozšírením" kalkulačkových príkazov o príkazy skoku a cyklov, príp. i príkazy pre vstup a výstup. Pre počítače, ako sú PMD-85, Didactik, Commodore, bol BASIC jediným programovacím jazykom a niekedy nahrádzal i operačný systém. Hlavnou oblasťou použitia Basicu sú jednoduché programy s prevažujúcimi numerickými výpočtami.

FORTRAN
Programovací jazyk FORTRAN (Formula Translation) sa radí medi skutočné prvé programovacie jazyky. Bol vyvinutý v roku 1957. Používa sa prevažne pre numerické vedecké výpočty.

COBOL
Jazyk COBOL (Common Businnes Oriented Language) bol vytvorený v roku 1960 pre aplikácie v oblasti administratívy, kde sa stále používa. Bežne sa s ním už nestretneme.

PL/1
V roku 1975 bol vyvinutý programovací jazyk PL/1 (Programming Language 1), ktorý naviazal na jazyk FORTRAN. Jazyk sa však príliš neujal.

ALGOL 60
Na návrhu programovacieho jazyka Algol 60 (Algorothmic Language) sa podieľali predovšetkým matematici. V súvislosti s týmto jazykom sa objavil rad nových významných pojmov (napr. bloková štruktúra programu). Dnes sa jazyk takmer nepoužíva, ale v 60-tych rokoch ovplyvnil na dlhší čas prúd vývoja programovacích jazykov.

PASCAL
Na Algol naviazal programovací jazyk PASCAL, ktorý bol navrhnutý profesorom Nikolausom Wirthom z univerzity v Zurrichu v roku 1971 pre potreby výučby programovania. Dnes má Pascal vo svete nielen dominantné postavenie pri výučbe programovania, ale veľmi sa používa aj pre bežné programovanie. Konečný tvar normy jazyka bol vydaný v 80-tych rokoch pod označením ISO 7105.

MODULA 2
Ďalším dielom profesora N. Wirtha je i programovací jazyk Modula 2, ktorý vychádza z Pascalu a je rozšírený o prostriedky tzv. "modulového" programovania.

JAZYK C
Jazyk C bol vyvinutý programátormi pôvodne ako pomocný prostriedok pre používanie operačného systému UNIX. Je vhodný pre systémové programovanie, kde mal donedávna vedúce postavenie.

JAZYK C++
Objektovo orientovaná verzia jazyka C. Pre snahu jeho autorov o maximálnu dokonalosť a univerzálnosť je dosť komplikovaný.

JAZYK C#
Nový jazyk z produkcie firmy Microsoft, súperiaci s jazykom Java od spoločnosti Sun. Je to vlastne reakcia Microsoftu na prehraný súdny spor o implementácii jazyka Java. Jazyk C# vychádza zo syntaxe C++. Na rozdiel od Javy, kde je odstránené všetko, čo pre jeho funkčnosť nevyhnutne nie je potrebné, autori jazyka C# zvolili opačný postup a ponechali všetky možnosti.

VISUAL BASIC
Jazyk Visual Basic má medzi programovacími jazykmi zvláštne postavenie. Najviac aplikácií pre platformu Windows je napísaných práve v tomto jazyku. K obľube jazyka Visual Basic prispel hlavne jednoduchý syntax, ľahká tvorba užívateľského rozhrania a veľká flexibilita užívateľského rozhrania. Ďalšou výhodou jazyka Visual Basic je, že všade, kde sa pracuje s MS Windovs, je viditeľný. Je použitý ako makrojazyk v kancelárskom balíku MS Office.

JAVA
Prednosťou jazyka Java je snaha o prenechanie čo najväčšieho počtu programátorských úloh na prekladač kódu. Aplikácie napísané v jazyku Java nie sú obmedzené použitým operačným systémom (na rozdiel od Visual Basicu). Vývojové prostredia pre Javu sú zadarmo a dajú sa stiahnuť z Internetu. Problémovým sa zdá používanie operačného systému Windows XP, ktorý v sebe nezahŕňa podporu jazyka Java, avšak táto podpora je na stránke http://java.sun.com/getjava a dá sa doinštalovať do operačného systému Windows XP.

DELPHI
Nepochádza priamo z rodiny jazykov C, C++, C#. Vďaka firme Borland má kvalitné vývojové prostredie (základná verzia je zadarmo). Nevýhodou je malé množstvo dostupných komponentov. Tento stav by sa ale mohol zmeniť v okamihu, kedy by sa Delphi zaradilo do rodiny prekladačov, v ktorých možno vyvíjať aplikácie pre .NET.

Prekladače zdrojového textu

Programátor napíše zdrojový text v programovacom jazyku a do strojového kódu ho preloží program, ktorý sa nazýva prekladač.

Jazyky s interpretovaným zdrojovým kódom
Jazyky s interpretovaným zdrojovým kódom pre preklad do strojového kódu používajú tzv. interpretery. Jedná sa najmä o staršie verzie programovacích jazykov. Zdrojový text je čítaný a prekladaný po jednotlivých riadkoch. Jeho nevýhodou je nízka rýchlosť. Dnes používané jazyky tohoto typu sú napr. LISP, SmallTalk a staršie verzie jazyka BASIC.

Jazyky s kompilovaným zdrojovým kódom
Jazyky s kompilovaným zdrojovým kódom pre preklad programu používajú tzv. kompilátor. Všetky dnes používané programovacie jazyky sú postavené na technológii kompilátorov. Zdrojový text je načítaný celý do operačnej pamäte počítača a potom hromadne kompilovaný. Výsledkom je spustiteľný súbor s koncovkou *.exe. Do tejto skupiny patrí jazyk C a jeho objektovo orientovaná verzia C++, C#, Visual C++, Visual Basic, Java, Perl, Pascal, Fortran, Cobol, Algol a ďalšie.

Nedostatky klasických (vyšších) programovacích jazykov 

V súčasnej dobe, väčšina žiakov, ktorí sa začínajú učiť základy programovania, prichádza do styku s profesionálnymi programovacími jazykmi. Predkladá sa im množina problémov z oblasti spracovania čísel a symbolov. Ja však tvrdím, že efektívnosť klasického prístupu je všeobecne veľmi malá. Dokonca čím mladším žiakom sa predkladá, tým horšie sú jeho výsledky. Hlavné nevýhody profesionálnych programovacích jazykov, ktoré spôsobujú nemalé prekážky pre programátorov - začiatočníkov: 

  • Sú príliš veľké a vyžadujú až nadmiernu presnosť (sú veľmi citlivé). Žiaci si teda osvojujú základy jazyka a súčasne zásady programovania. Spolu je to pre nich obrovské množstvo nových informácií. Namiesto zdôraznenia zásad programovania, programovací jazyk nabáda žiakov pochopiť špecifiká daného jazyka a jeho implementácie. 

  • Nie sú vizuálne orientované. Väčšinou sa programy vykonávajú "skryto", čím sa u žiaka prehlbuje myslenie orientované na vstupy a výstupy. Toto je prekážkou pre zvládnutie sémantiky jazyka. 

  • Keďže sú orientované na spracovanie čísel a symbolov, prvé problémy, ktoré môžeme pri vyučovaní použiť, sú vzdialené každodenným skúsenostiam žiakov. Teda sú neatraktívne. 

  • Pri vytváraní poučnej a zaujímavej aplikácie sa žiak musí naučiť pomerne veľkú podmnožinu príkazov a štruktúr jazyka, nehovoriac o zvládnutí programovacieho prostredia. Taktiež sa to odzrkadlí na dĺžke samotného programu. Toto predstavuje ďalší rušivý moment.


<<- ->>