V minulém pokračování jsme si pověděli o tom, čeho bychom si měli všímat na vývojových prostředích jazyků, pomocí nichž se chystáme postoupit ve výuce programování. V tomto díle budeme v rozboru požadovaných vlastností pokračovat.
V minulém pokračování jsme si pověděli o tom, čeho bychom si měli všímat na vývojových prostředích jazyků, pomocí nichž se chystáme postoupit ve výuce programování. V tomto díle se podíváme na to, jaké vlastnosti bychom měli požadovat od zvoleného programovacího jazyka.
Jednoduchost syntaxe
Programovací jazyk, jehož prostřednictvím budou žáci pronikat do tajů programování, by měl mít co nejjednodušší syntaxi bez jakýchkoliv zákrut a výjimek. Při výuce se potřebujeme soustředit na principiální řešení daných tříd problémů, ne na zvláštnosti syntaxe použitého jazyka, a už vůbec ne na možná úskalí, která na programátory čekají ve chvíli, kdy něco zapomenou napsat nebo to napíší špatně.
Z tohoto důvodu nebývají optimální volbou jazyky, které ve snaze o maximální dokonalost zavádějí řadu speciálních konstrukcí, které většinou dokonale neznají ani profesionálové programující v daném jazyku. Jak jistě odhadnete, mezi takové jazyky patří C++. Jak ale řada z vás asi neví, musíme mezi ně zařadit i Visual Basic.
Typová kontrola
Jazyk používaný pro vstup do světa programování by měl programátora maximálně hlídat a pokud možno převádět všechny jeho logické chyby na chyby syntaktické. O typové kontrole a její užitečnosti v jazycích určených pro programátorské nováčky se toho již napsalo mnoho. Nebudu tedy nosit dříví do lesa a pouze konstatuji, že z hlediska výuky je velice užitečné, když použitý programovací jazyk provádí přísnou typovou kontrolu.
Z tohoto hlediska se nám „nehodí do krámu“ nejrůznější skriptovací jazyky, které si často zakládají na svém velmi volném přístupu k typové kontrole – z těch nejznámějších bych jmenoval VBScript a JavaScript.
Definice vlastních datových typů
Složitost řešitelných úloh těsně souvisí s mírou použitelné abstrakce. Budu-li se muset omezit na strojové instrukce použitého procesoru, bude mi i relativně jednoduchý program trvat velice dlouho a velikost programů, které pro mne již budou prakticky neřešitelné, nebude příliš vysoká.
Možnost definice vlastních datových typů umožní zapouzdřit podružné implementační detaily do definice datového typu a v dalším programu pracovat s proměnnými a konstantami daného typu a nezabývat se již detaily jeho implementace. Tím se sníží tzv. granularita projektu, tj. počet jednotlivých entit (granulí), z nichž se skládá řešení problému. Program se tak zjednoduší a stane se snáze pochopitelným. Zároveň se tím zvýší složitost problémů, které budeme stále ještě schopni řešit.
Toto hledisko opět znevýhodňuje některé skriptovací jazyky, které většinou podobné možnosti nenabízí.Nicméně je třeba přiznat, že skriptovací jazyky, které se rozšiřují v poslední době, již lecjakou lahůdku nabízejí.
Objektová orientovanost
Objektová orientovanost, tj. schopnost definovat třídy a jejich instance, je dalším krokem na cestě ke zvýšení hladiny abstrakce, a s tím spojené složitosti řešitelných úloh (se základy objektové orientovanosti a její důležitostí v jednotlivých fázích návrhu programu vás seznámí kniha „Základy objektově orientovaného návrhu v UML“ vydaná nakladatelstvím Grada).
Poznámka: objektové versus strukturované programování
Zde bych si dovolil ještě zareagovat na poznámku jistého učitele, který upozorňoval na to, že nyní všichni hovoří a objektovém programování a přitom zapomínají na strukturované programování, jehož zásady byly neméně užitečné. Obávám se totiž, že jeho omyl je mezi programátory starší školy značně rozšířen.
Objektově orientované programování není alternativou ke strukturovanému programování. Pokud se někdo nenaučil programovat strukturovaně, neměl by se o objektově orientované programování vůbec pokoušet (teoreticky to jde, ale nedoporučuji to). Programátora, který se rozhodne programovat objektově, aniž by přijal za své zásady strukturovaného programování, bych přirovnal k řidiči, který se přihlásí do školy smyku a ještě se nenaučil jezdit za krásného počasí na prázdné vozovce.
Přiznejme si, že objektově orientované programování ještě mezi našimi učiteli zcela nezdomácnělo. Abychom si nejprve ujasnili pojmy, připomenu, že z hlediska jejich objektových schopností můžeme programovací jazyky rozdělit do tří skupin:
- Jazyky, které práci s objekty vůbec neznají. Sem patří např. jazyk C a starší verze jazyka Pascal.
- Jazyky pracující s objekty, tj. jazyky, které dokáží vytvářet instance předdefinovaných tříd a pracovat s nimi. Nejsou však schopné definovat nové třídy. Knihovní moduly obsahující definice používaných tříd proto musí být vytvořeny v jiném programovacím jazyce. Mezi takové jazyky patří např. jazyk Java Script a starší verze jazyka VBScript.
- Jazyky schopné definovat třídy, avšak neumožňující definovat potomky těchto tříd. Takovýmto jazykem je např. Visual Basic do verze 6. Možnost definovat vlastní třídy umožňuje dokonce i jeho skriptová verze VB Script.
- Jazyky objektově orientované, které podporují všechny rysy objektově orientovaného programování včetně dědičnosti a polymorfismu. Objektově orientované jazyky se navíc dělí do dvou skupin:Jazyky, které jsou čistě objektové a nelze v nich proto napsat neobjektový program. Sem patří např. jazyky Smalltalk, Java nebo připravovaný jazyk C#. Druhou skupinou jsou jazyky, které takové nejsou a lze v nich napsat i program, který nebude využívat vůbec žádnou z vymožeností OOP. Mezi ně bychom zařadili např. jazyk C++ a připravovanou verzi jazyka Visual Basic.
Možnost vytvářet komponenty
Současné programování pomalu přechází z objektově orientované etapy do další etapy, kterou bychom mohli nazvat komponentově orientovanou. Až budou naši žáci vstupovat do praktického programátorského života, bude komponentově orientované programování takovou samozřejmostí, jakou je dnes programování objektově orientované.
Současní programátoři již nevytvářejí programy, ale komponenty, z nichž se výsledný program skládá. Tyto komponenty je možné využít nejen v daném programu, ale i v jakémkoli jiném programu pracujícím v dané komponentové platformě.
Orientace na komponenty je jedním ze základních stavebních kamenů jazyků a vývojových prostředí určených pro platformu .NET. Práce s komponentami proto bude běžná i u všech jazyků podporujících tuto platformu.
Univerzálnost jazyka
Zvolený jazyk by měl být dostatečně univerzální. Mělo by v něm být možno napsat jakýkoliv druh aplikace. Proto dopředu odmítám všechny speciální jazyky typu PHP, které řada účastníků diskuse na Živě k výuce programování doporučovala.
Rozšířenost jazyka
Nemá smysl používat jazyky, které skoro nikdo nezná a u nichž ani v nejbližší budoucnosti nehrozí, že by doznaly většího rozšíření. S rozšířeností jazyka prudce roste možnost vyměňování si programátorských zkušeností s kolegy z celého světa, která je dnes stále běžnější i u žáků středních a občas i základních škol.
Množství dostupných knihoven a komponent
Při výběru jazyka pro výuku programování bychom neměli zapomínat na to, že nejlepším programem je ten, který nemusím psát, protože je již hotový, a stačí si jej stáhnout a použít. V případě komponentového programování pak stačí poskládat celý program z dostupných komponent a dopsat již pouze ty části, které se mi nepodařilo nikde získat.
V tomto směru nabízí velké možnosti připravovaná platforma .NET, protože bude umožňovat používat komponenty napsaném v libovolném programovacím jazyku podporujícím tuto platformu. Druhou otázkou však je, kolik z těchto komponent bude k dispozici zdarma.
Možnost konzultovat nejasnosti
Programování je obor, v němž se neustále objevují nové a nové technologie a možnosti. Učitelé programování se musí smířit s tím, že je jejich žáci zanedlouho profesionálně přerostou a začnou řešit úlohy, na které oni již nestačí. Neměli bychom jim proto dávat všechny informace naservírované na talíři, ale měli bychom je již při výuce učit, jak získávat odpovědi na svoje otázky v různých diskusních forech či na specializovaných webových stránkách.
Tolik tedy zásady. V příštím, závěrečném dílu zkusím stručně shrnout nejrozšířenější programovací jazyky z hlediska jejich vhodnosti pro výuku.
Rudolf Pecinovský
0 komentářů:
Okomentovat