V čem a proč se učíme programovat

V poslední době se setkávám s tím, že se občas žáci vyslovují k tomu, v jakém jazyce bychom se měli učit programovat. Nebo že snad jazyk C, ve kterém s programováním začínáme, je zastaralý, případně ještě nějaký, že máme zastaralé ŠVP (tam ale jazyk neuvádíme a je to na volbě učitele). Nicméně problém je poněkud složitější, což snad jako učitel programování a programátor s určitou mírou praktických zkušeností z reálné firemní praxe mohu říci.

Položme si otázku, jaký by měl být jazyk, ve kterém se žáci IT oboru začnou učit programovat. Nabízí se odpověď, že takový, který budou potřebovat ve svém pozdějším profesním uplatnění či na vysoké škole. To ale zdaleka není zřejmé.

Používanost jazyka

Dnešní zaměstnavatelé i vysoké školy používají různé programovací jazyky. Zaměstnavatelů jsou hromady, o tom nemá smysl moc mluvit. Co se týče jen hlavních moravských vysokých škol (třemi jsem si nějak prošel), na FIT VUT v Brně (kde jsem dělal Bc.) začínají s jazykem C, na FI MUNI Brno lze na začátku zřejmě volit mezi C nebo Pythonem. Na stránkách FAI UTB ve Zlíně (kde jsem dělal Ing.) není jasná informace o prvním programovacím jazyce, z uvedených informací a vlastní zkušenosti tipuji, že to bude C/C++, Java, případně nějaké webové jazyky. Na PrF UP v Olomouci zjevně též začínají s Céčkem, na PdF UP podle mých informací (z doby doktorského studia) začínají s Visual Basicem, nicméně syntaxe zmiňovaná v odkazovaném sylabu (switch, stdio.h, math.h) spíše ukazuje na jazyk C.

Existují různé žebříčky používanosti programovacích jazyků. Jelikož „používanost“ je velmi těžko hodnotitelná, tyto žebříčky k jejímu změření používají různá kritéria a nejsou tedy nikdy dokonale objektivní. Ale to, že nejsou dokonalé, neznámená, že jejich údaje nejsou relevantní. Nejznámější a asi i nejspolehlivějšími jsou TIOBE Index, ročenka GitHubu a anketa StackOverflow. Žádný z těchto žebříčků nedává nějakému jazyku absolutní dominanci. Např. podle TIOBE Indexu má nejúspěšnější Java pouhých 16 %, jen o desetiny procenta zaostává jazyk C. S velkým odstupem následují Python, C++ a C#. Pro neznalé upozorňuji, že C a C++ jsou různé jazyky (byť 99 % konstrukcí z C jsou i konstrukcemi v C++), C# je úplně odlišný jazyk, byť v C bere mnoho inspirace, stejně jako Java nebo Python. Ano, prvních pět jazyků žebříčku jsou C nebo jeho ideoví potomci. Do této skupiny patří i JavaScript a PHP na sedmém a osmém místě, takže z první osmičky nepatří k ideovým potomkům C jen šestý Visual Basic. Sečteme-li podíl C a jeho ideových potomků (C++, C#, Java, JavaScript, PHP, Python), dostáváme slušných 56 %. A pro ty už se vyplatí učit jazyky z této rodiny! Navíc TIOBE Index i další žebříčky vyvrací i občas kolující mýtus o zastaralosti C. Ano, Céčko už je slušný padesátník, ale jak vidno, dosti žádaný. V programování Linuxu (nejrozšířenější operační systém na silných serverech) má své nezastupitelné místo, stejně tak je obtížně nahraditelný při programování mikrokontrolérů. A syntaxi z C využijete v jeho následnících.

Jednoduchost či složitost jazyka

Mnozí také chtějí, aby se vyučovalo v jednoduchém jazyce. Nechtějí se učit nic těžkého. OK, požadavek dává do určité míry logiku.

Je Céčko jednoduchý jazyk? Za sebe osobně bych řekl, že středně. C má své nectnosti. Znaky jako & nebo * mohou mít několik různých významů. Ty i mně samotnému svého času způsobily třeba i tiky v oku, že jsem v tom měl chaos. Některé věci nejdou tak zjednodušit jako v jiných jazycích. Existují samozřejmě složitější jazyky – assembler, funkcionální a logické jazyky trápí spoustu programátorů. Jednodušší jazyky by se asi taky našly – třeba Pascal má hezkou srozumitelnou syntax (byl také určen jako výukový jazyk), ale zažívá velký ústup ze slávy. Za jednoduchý je považován Python, programátor nemusí řešit spoustu věcí, přesto ne všichni v současném semináři jsou spokojeni – absence cyklu do-while a další podobné nectnosti komplikují život programátora. U Javy a C# snadno nalezneme námitku, že mohou být na začátečníka příliš objektové. I C++ umožňuje napsat některé konstrukce snadněji než v C, zde se ale dostáváme k zásadnímu ale.

Pokud se zeptáte téměř jakéhokoliv řidiče, v jakém autě se učil řídit v autoškole, zjistíme, že 99 % řidičů začínalo v autě s manuální převodovkou. Proč asi? Zřejmě si zodpovědné osoby řekli, že z manuální převodovky se snadno přejde na automat, ale naopak z automatu těžce přejdete na manuální řazení. Na podobný problém bychom asi narazili, kdybychom se začli učit v C++ a poté se někdo musel začít učit C.

Existuje velká spousta rozporuplných názorů, jak se nejlépe začít učit programování. Osobně mi nedělají problém různé jazyky ani styly programování, byť samozřejmě něco znám více, něco méně. Nejen v jakém jazyce, ale i zda začít s programy v příkazové řádce nebo grafickými programy. Nebo také zda začít objektově nebo neobjektově. Argumenty zastánců všech přístupů se snažím sledovat a vyhodnocovat. Zatím mě vedou k názoru, že začít s jazykem C, strukturovaným programováním v příkazové řádce, je asi to nejlepší. Ale třeba mě někdo někdy přesvědčí o opaku.

Většinou se názory na výuku programování shodují na jednom. Bez aktivní snahy se naučí programovat jen málokdo. (Talenti, kterým to jde samo, jsou zcela výjimeční.) A to můžu jen podepsat. I já začínal nechápavým čuměním, jak ten program vlastně funguje. Jen pozdější aktivní snaha programovat (a občasné nakopnutí od někoho zkušenější) mi pomohla něco umět. A o tom to je.

A na závěr trochu lehkého humoru:

Proč bylo vytvořeno tolik programovacích jazyků? (Podle Ala Stevense)
COBOL je proto, aby programu rozuměli i šéfové.
BASIC je pro neprogramátory.
FORTRAN je pro vědce.
ADA prostě pochází od úřední komise.
PILOT je pro učitele.
PASCAL je pro studenty.
LOGO je pro děti.
APL je pro Marťany.
FORTH, LISP a PROLOG jsou pro specialisty.
No a Céčko je pro programátory.