Literate programming (GP; anglicky Literate Programming ) je koncept, metodika programování a dokumentace, ve které se program skládá z prózy v přirozeném jazyce proložené makro substitucemi a kódem v programovacích jazycích [1] . Samotný termín a koncept navrhl Donald Knuth v roce 1981 při vývoji počítačového systému rozložení Τ Ε Χ .
Gramotné programování je jako vysvětlení na přednáškách o programování pomocí frází v " pseudokódu " v přirozeném jazyce. Přinášejí srozumitelnost složitému kódu a skrývají mnoho dalších vnořených abstrakcí a kódu ve formálním programovacím jazyce pod jednu frázi.
GP je v jistém smyslu „programování v pseudokódu“ s libovolnými frázemi, které jsou následně rozšířeny jako makra pomocí nástroje ze zdrojového souboru, který zahrnuje jak dokumentovaná textová vysvětlení pojmů, samotný kód, tak pseudokód.
Jinými slovy, program není postaven jako vzestupná nebo sestupná hierarchie, ale jako „vzájemně závislá síť pojmů“ (odtud název prvního systému GP – „Web“) a je vytvořen jako „proud myšlenek“ procházející prostřednictvím této sítě koherentním, logickým způsobem, který navenek působí, že popis vypadá jako literární esej. Pořadí prezentace se ukazuje jako nezávislé na požadavcích jazykového překladatele.
Změňme tradiční priority při vytváření programů: místo toho, abychom svůj úkol považovali za vytváření pokynů "Co dělat?" u počítače se zaměříme na to, abychom ostatním lidem vysvětlili popisy naší vize toho, co by měl počítač pod kontrolou programu dělat.
— Donald Knuth , http://community.livejournal.com/ru_perl/249441.htmlSystém GP, který Knuth navrhoval jako alternativu ke „ strukturovanému programování “ ze 70. let, i přes příznivé recenze, nebyl široce přijat kvůli nedostatku podpory nástrojů a jejich integrace [2] .
Dalším problémem bylo zaměření GPU na dávkové zpracování , zatímco programovací systémy se stále více zaměřovaly na nástroje WYSIWYG [2] .
Šíření HP navíc bránila mylná představa, že „gramotné programy“ by měly být monolitické a že HP je opakem hypertextu [2] .
Mnoho lidí si myslí, že GPU je pouze dokumentační systém nebo formátovací systém pro běžné komentáře. Ve skutečnosti lze program s malým nebo žádným komentářem napsat pomocí přístupu GP, stejně jako podrobné poznámky samy o sobě nevytvářejí přístup GP.
Nejčastější nedorozumění se týká role makrosystému, který umožňuje stavět libovolné systémy abstrakcí nad abstrakcemi, a změny pořadí kusů ze strojově orientovaného na to, které vyžaduje myšlení. Je tedy absolutně nesprávné považovat použití systémů dokumentace rozhraní jako JavaDoc, doxygen, DOC++, autoduck, POD za programování GPU.
Další mylnou představou je, že D. E. Knuth chtěl opravit přístup „shora dolů“ ve vývoji softwarových systémů. Ve skutečnosti navrhuje kombinovat přístupy shora dolů a zdola nahoru, jak vyplývá z citátu v knize TeX: The program: „ Ale autor navrhuje, že nejlepší způsob, jak tomuto programu porozumět, je do značné míry dodržovat pořadí Komponenty TeXu tak, jak se objevují v popisu WEBu, který právě čtete, protože současné uspořádání je určeno ke kombinaci výhod přístupu „zdola nahoru“ a „shora dolů“ k problému pochopení poněkud komplikovaného systému. »