Literate Programming obecně je způsob zápisu programu, kde se do jednoho zdrojového souboru zapisuje program a dokumentace k němu. Dále je tento soubor rozdělen do číslovaných sekcí, přičemž každá sekce se skládá právě z dokumentace a části kódu, která tvoří relativně samostatný celek programu. Z jiného úhlu pohledu můžeme také říci, že Literate Programming je způsob programování a jeho současné dokumentování.
Tento příspěvek zazněl na konferenci Počítač ve škole 2006 v Novém Městě na Moravě a je publikován v jejím sborníku.
Co je to Literate Programming
Literate Programming obecně je způsob zápisu programu, kde se do jednoho zdrojového souboru zapisuje program (zdrojový text v programovacím jazyce) a dokumentace k němu. Dále je tento soubor rozdělen do číslovaných sekcí. Každá sekce se skládá právě z dokumentace a části kódu, která tvoří relativně samostatný celek programu. Z jiného úhlu pohledu můžeme také říci, že Literate Programming je způsob programování (vytváření algoritmů, jejich zápis v prog. jazyce) a jeho současné dokumentování. Literate Programming lze tedy chápat i jako proces vzniku programu. Autorem myšlenky Literate Programming je prof. Donald E. Knuth, který také vyvinul jeho první implementaci - systém web.
Literate Programming se do češtiny volně překládá jako „Literární programování“, „Dobře dokumentované programy“ nebo „Kultivované programování“, ani jeden z překladů nepovažuji za vhodný, proto budu používat originál nebo zkratku LitProg.
Systémů realizujících LitProg je celá řada, např. web, cweb, spiderweb, nuweb atd. Prvním takovým systémem byl již zmíněný web, který má jako programovací jazyk Pascal a pro formátování dokumentace používá TeX. Jeden z nejpoužívanějších systémů je cweb, založený na C/C++ a TeXu. Existuje mnoho systémů pro různé prog. jazyky, popřípadě jsou na jazyku nezávislé, a pro různé formátovací nástroje (nejčastěji TeX).
Jak to celé funguje
V systému web, který se skládá z programu tangle, programu weave a TeXovského makra webmac.tex, programátor zapisuje svůj zdrojový text a dokumentaci k němu pomocí řídících kódů do sekcí - vše do jednoho textového souboru. Soubor má vždy příponu *.web. Kompletní popis struktury webovského souboru a jeho jednotlivých řídících kódů přesahuje rámec tohoto článku, proto odkazuji čtenáře na literaturu. Pro základní informaci stačí vědět, že pomocí názvů sekcí lze zdrojový kód různě slučovat, skládat, případně opakovat v pořadí, ve kterém to vyhovuje programátorovi. S takto vzniklým souborem lze pracovat dvojím způsobem (viz obrázek):
-
Program tangle z web souboru vygeneruje pascalovský zdrojový text a ten lze kompilátorem přeložit.
-
Program weave z web souboru vygeneruje dokumentaci složenou z textů z jednotlivých sekcí a "naformátovaného" zdrojového textu v Pascalu. Výsledek zpracuje TeX do finální podoby (dvi, pdf, ps apod).
Výsledkem jsou tedy dvě věci. Jednak soubor s programem v Pascalu a jednak precizně naformátovaná dokumentace k programu, včetně rejstříku použitých identifikátorů, rejstříku sekcí, křížových referencí a obsahu.
Tímto způsobem prof. Knuth vytvořil např. programy TeX, Metafont, weave, tangle, StandfordBase a mnoho dalších. Systém cweb pracuje stejně, jen programovací jazyk je C/C++.
Literate Programming ve výuce
Programy psané v některém ze systémů LitProg jsou vhodné pro použití ve výuce programování, zejména pro výuku algoritmů (například předmět Programové vybavení, jak jej definují učební dokumenty studijního oboru 26-47-M/002 Elektronické počítačové systémy). Pro výuku základů programovacího jazyka, tedy elementární syntaxe a sémantiky, struktury programu a základních datových struktur není ideální, protože pro jednoduchý program v Pascalu (do deseti řádek kódu) by byla použita jedna nebo dvě sekce a program weave by vygeneroval dokumentaci o čtyřech téměř prázdných stránkách. To by studenty zbytečně mátlo a zatěžovalo.
1. Výklad
Předností tohoto systému je možnost rozdělit zdrojový text programu do sekcí a program z nich „skládat“. Při výkladu algoritmu je možné se zabývat jen tím kódem, který je důležitý (průchod daným cyklem, hledání minima v poli čísel, …) a nepodstatné věci (deklarace proměnných, „ostatní“ větve příkazu case apod.) odfiltrovat. Samozřejmě nepodstatné se v dalším výkladu může změnit na podstatné a naopak.
Dalším zajímavým efektem je možnost vysvětlovat algoritmus buď „shora dolů“ (začít přímo hlavním programem, případně hlavičkou podprogramu a „zanořovat se“ do jednotlivých sekcí) nebo můžeme postupovat „zdola nahoru“ (začít jednotlivostmi někde hluboko v sekcích a ty postupně skládat do celku). Obě dvě možnosti lze samozřejmě vhodně kombinovat. (Toto je ideální v hodinách přednáškového typu, kdy lze dokumentaci upravenou a naformátovanou pro dataprojektor promítat, při tom ji komentovat a diskutovat se studenty.)
Dokumentace, kterou získáme výše popsanou cestou toto vše umožňuje pomocí názvů sekcí, čísel sekcí a pomocí propracovaných křížových referencí (odkazů). Konkrétní příklad: následující obrázek je fragmentem třídícího algoritmu select sort.
Na obrázku jsou sekce č. 6 a 7, které tvoří jádro algoritmu. Je vidět, že v kódu sekce 6 je použit název sekce 7, která tam logicky patří, avšak je uvedena a dokumentována zvlášť. Např. při čtení sekce 6 čtenář může, ale nemusí číst sekci 7. Takové jednoduché a přirozené přeskočení části kódu je v přímo v prostředí Turbo Pascalu nemožné. V prostředí Delphi sice lze skrývat části kódu, ale o křížových referencích nebo o podobné dokumentaci nelze hovořit.
2. Praktické využití v hodinách
Práce s dokumentací se nemusí omezit pouze na přednášení, ale je možné do práce aktivně zapojit i studenty v hodinách kdy pracují s počítačem. V praxi se mi osvědčilo zadat studentům jako samostatnou práci z dokumentace ručně vypsat celý program - nahradit tak činnost programu tangle. Ukázkové programy nejsou nijak dlouhé, takže to studentům trvá několik minut (pokud je program „delší“, je vhodné použít program tangle nebo práci rozdělit). Nejedná se o samoúčelnou nebo prázdnou činnost, při této práci si musí student uvědomit jak to v daném programu funguje a to jej nutí k lepšímu pochopení učiva.
Ukazuje se, že s takovým zdrojovým souborem je student více ztotožněn a je lépe motivován k další práci, která spočívá v úpravách, optimalizací a dalších obměnách původního zdrojového textu. Pozitivní je, že i slabší studenti jsou vtaženi do problému a mohou se zapojit do „programování“, které jim dříve nešlo.
3. Samostudium
Forma těchto dokumentů je přímo předurčena k samostudiu. Výstup programu weave je v podstatě hypertextovým dokumentem podobně jako HTML stránky. Ten lze vytisknout jako knihu a také ji tak číst nebo lépe řečeno listovat v ní ze sekce na sekci. Pomocí pdfTeXu je možné vytvořit i interaktivní podobu dokumentu a ten pak pročítat a studovat přímo na počítači.
Shrnutí
Použití programů napsaných v systému web vnáší do výuky programování několik nových prvků. Mezi primární patří oživení výuky jinou formou zápisu programu, lepší zapojení studentů do procesu výuky a možnost pohodlného a efektivního samostudia, dále si studenti zvykají své programy více a lépe komentovat. Vedlejší efekt je propagace typografického systému TeX mezi studenty.
Snahou autora příspěvku je také vytvořit sbírku výukových programů v duchu Literate Programming.
Jistým negativem je skutečnost, že vytváření takovýchto programů je pro učitele časově náročné, vyžaduje dodatečné znalosti a dovednosti při programování a psaní dokumentace. Není to však překážka nepřekonatelná.
Literatura
Kašpárek L.: Literate Programming at Secondary School, ÚTIA 2003, Sborník PhD Workshopu, str 10
Knuth D.: Literate Programming, Stanford, California, ISBN 0-937073-80-6
Knuth D.: TeX the Program, Addison Wesley, ISBN 0201134373
Olšák P.: Typografický systém TeX, Konvoj 2000, ISBN 80-85615-91-6
www.literateprogramming.com
Ladislav Kašpárek
0 komentářů:
Okomentovat