Search
Účelem této stránky je poskytnout náhled pro zvolené způsoby hodnocení a odpovědi na otázky, proč je v PRP zvolen právě takový přístup a způsoby výuky.
V podstatě lze programování učit v libovolném programovacím jazyku. Cčko jsme zvolili především z důvodu jeho velmi těsné vazby na paměťový model a práci s pamětí. Věříme, že právě tato vazba umožní osvojit si základní představu o programování, která je dále zobecnitelná v libovolném jiném programovacím jazyku. V neposlední řadě je Cčko vhodné pro další navazující předměty, zejména ty, které využívají malých mikrokontrolérů (MCU) a vestavěných systémů.
Důvodů je několik. Zejména převládají ty pragmatické. Předně, operační systémy nazývané unixového typu (i když je v Ubuntu použito jádro Linux) mají k vývoji aplikací velmi blízko. Zpravidla je kompilátor Cčka standardní součástí operačního systému a není tak nutné nic zvláštního instalovat. To považujeme za jasný signál k čemu operační systém slouží. Přeci jenom programátorů je a stále asi bude výrazně méně než běžných uživatelů. I z toho důvodu lze očekávat masovější rozšíření OS, které pro programátory vyloženě určené nejsou. Dalším pragmatickým důvodem je administrace instalace a počítačů v učebně. Nejen, že je řešení založené na identickém obrazu systémového disku snadno administrovatelné. Také nevyžaduje žádně speciální nástroje, které v konečném důsledku snižují náklady v porovnání s jinými komerčními řešeními. S těmi byly v minulosti nejen výrazné komplikace, ale také se výrobce rozhodl dále systém nepodporovat a bylo by nutné pořizovat licence nové. Další výhodou je snadné “klonování” obrazu OS pro účely implementačních testů, ve kterém je konfigurace upravena tak, abychom automaticky měli přístup k vašim programům. V neposlední řadě, pokud je pro Vás systém Ubuntu novinkou, tak je to ideální příležitost jak se seznámit s něčím novým. Studium na VŠ považujeme za období rozšiřování obzorů a z hlediska využití výpočetních prostředků k tomu seznámení s různými OS patří. Později, v pracovním procesu, k tomu už zpravidla mnoho příležitostí není. Považujeme za žádoucí, aby absolvent FEL, ČVUT v Praze, měl povědomí a také praktickou zkušenost s různými OS.
Jednoduše proto, že je to nejpřímější způsob ovládání, který odpovídá způsobu jak tvoříme programy zápisem do textového souboru. Cvičíte se tak ve způsobu myšlení a využití výpočetních prostředků, které se očekává od programátora. Další výhodou je jednoznačnost a stručnost zápisu (popisu). Zkuste si například představit, že chcete někomu sdělit jak přeloží a spustí váš program main.c s využitím kompilátoru gcc. V případě přímého volání příkazů je to např. gcc main.c; ./a.out. V případě nějakého komplexnějšího vývojového prostředí musíte nejdříve vysvětlit jak se takový soubor otevře, jak a čím se zkompiluje a spustí. Navíc vývojových prostředí existuje celá řada a liší se i mezi jednotlivými verzemi. Neznamená to, že by to nešlo, jen místo kompilace a spuštění je nutné se nejdříve seznámit s vlastním programem vývojového prostředí a způsobem jeho používání. Čím složitější proces je, tím spíše na něco zapomeneme nebo uděláme v procesu chybu. V PRP se chceme soustředit na důležité a podstatné aspekty programování, základní principy, které pak již sami můžete generalizovat. Věříme, že pochopení základních principů, jako je například překlad a spuštění programu, které jsou nakonec velmi podobně použity i v grafických nadstavbách a vývojových prostředí, Vám umožní se efektivně naučit používat nové technologie, které nemusejí být aktuálně k dispozici. Prostřednictvím základů a principů se tak snažíme budovat dlouhodobé znalosti.
gcc main.c; ./a.out
Určitě. V PRP nepředpokládáme předchozí zkušenost v programování, i když je určitě výhodou. Nemá smysl si nalhávat, že programování je pro každého snadné. Někomu jde rychleji, někdo potřebuje více času. Věříme, že všichni zapsaní studenti programování zvládnou. Je přirozené, že někomu to jde zpočátku pomaleji, i proto je možnost chodit na páteční časové sloty v počítačové učebně. Na druhou stranu je také vhodné si uvědomit, že náročnost předmětu odpovídá odhadované průměrné časové náročnosti (dané kreditovým ohodnocením předmětu). Může se stát, že některé úlohy jsou pro někoho velmi snadné, ale někdo jiný s nimi může zápolit výrazně dlouho.
Především bodování odpovídá očekávané časové náročnosti řešení. Naší snahou je motivace dát na začátku více času na řešení úloh. V dalších úlohách již předpokládáme úspěšné zvládnutí předchozích úloh a tak se obtížnost zvyšuje, ale nutně to nemusí znamenat výrazně vyšší časovou náročnost. Pokud někdo první úlohy “přeskočí” může se zdát, že náročnost úloh se skokově změní. Naší snahou je motivovat vás k průběžné práci.
Důvod je především v motivaci, abyste odevzdávali funkční program a nikoliv zkoušeli jestli vaše implementace projde testy v Upload Systému. Cílem domácích úkolů není odevzdat úlohu, která projde Upload Systémem, ale naučit se programovat a získat zkušenost s řešením programovacích úloh. Automatické testy jsou prostředkem jak ověřit, že váš postup vede na funkční řešení. V praxi zpravidla něco jako Upload Systém mít nebudete a je plně na zodpovědnosti programátora, že implementuje funkční a správný kód. Přirozeně se mohou vyskytnout technické problémy či drobná opominutí, právě proto slouží první úloha k seznámení s nahráváním řešení domácího úkolu do Upload Systému. Ve většině domácích úkolů je limit pro počet uploadů bez penalizace nastaven na 5. Navíc, penalizace je pozvolná, což dává další prostor pro opravy, nebo například implementaci volitelného zadání, kdy i po vyčerpání 5 uploadů je penalizace za 6. upload výrazně menší než bodový zisk z řešení volitelného zadání.
Především jako motivace průběžné práce. Posloupnost domácích úkolů sleduje systematické budování znalosti a dovedností. Je proto vhodné je realizovat postupně, což penalizace za pozdní odevzdání podporuje.
Důvodu a výhod je několik. Předně implementace povinných zadání úkolů představuje minimální množinu programátorských znalostí a dovedností, které by vám měl kurz PRP poskytnout. Dále to dává prostor pro úplné začátečníky a začátečnice, kterým to zpočátku moc nejde. Mohou se tak s programováním více seznámit a nemusí být nutně v takovém stresu z náročnosti úlohy. Po získání více zkušeností se v pozdějších úkolech mohou pustit do volitelných nebo i bonusových zadání a získat tak například “ztracené” body z volitelných zadání prvních úkolů. Obtížnější varianty zadání dávají také možnost seberealizace pokročilejším studentům/studentkám a v neposlední řadě jsou indikátorem motivace studenta/studentky a jeho/jejího zájmu o předmět a programování vůbec.
V zásadě ano, ale prostý součet bodů poměrně jasně indikuje, že v ostatních kategoriích je nutné získat maximální nebo vysoký počet bodů. To přirozeně možné je, ale spíše je to nepravděpodobné. Proto se očekává, že většinu úkolů vyřešíte nejen pro povinné, ale také volitelné zadání.
Předně je třeba říci, co to znamená úspěšně. Dalo by se říci, že známka A nebo B je vhodným předpokladem, pro budování programátorských dovedností. Dlouholetá zkušenost z výuky programování říká, že i naprostí začátečníci, kteří začnou s programováním právě v prvním kurzu, mohou takové ohodnocení získat. Zpravidla je také předpokladem, že vás programování baví, pokud nikoliv tak naší úlohou v PRP je vás motivovat, aby vás programování bavilo. Bez ohledu na známku je klíčové si uvědomit, že programování je dovednost a jako každá dovednost potřebuje trénink. Někomu stačí málo, zpravidla je však potřeba dovednost budovat dlouhodobě. Z tohoto pohledu je programování během jednoho semestru velmi málo. Proto je velmi doporučeno programovat průběžné během celého studia, pokud k tomu není příležitost v rámci některého z navazujících programátorských nebo odborných předmětů, myslete na to a zkuste si sem tam najít čas na řešení nějakých programátorských úloh. Nemusí to být nutně v Cčku, ale třeba i v skriptování v shellu (příkazové řádce) nebo učení se jiného programovacího jazyka je vhodnou příležitosti jak nezapomenout a dále prohlubovat své znalosti a především programátorské dovednosti. Znalost programování Vám může i značně ulehčit řešení úkolů a úloh v jiných předmětech tím, že zadaný problém dokážete vyřešit, nebo nasimulovat pomocí počítače.
V zásadě můžete použít cokoliv vám vyhovuje. Preferujeme sice použití jednoduchého textového editoru, pro který poskytujeme základní konfiguraci pro pohodlnější zápis programu (zvýraznění syntax a formátování), nicméně můžete použít libovolné jiné prostředí. A to jak předinstalované v systému, tak i ty, které je možné si instalovat v rámci svého domovského adresáře. Například pokročilý textový editor sublime ( http://www.sublimetext.com ) nebo integrované vývojové prostředí (IDE) CLion ( https://www.jetbrains.com/clion/ ), které můžete využít ČVUT licence viz https://download.cvut.cz. Jediné omezení na vlastní instalace je v případě implementačních testů, kdy není dovoleno instalovat si nějaké další programy a to zejména z důvodu maximálního využití času na zkoušku pro tvorbu programu a nikoliv konfiguraci prostředí.
Protože se učíte a k tomu dril patří. Je dobré základní příkazy ovládat a umět zapsat i bez pomoci. To nejen zvyšuje efektivitu, ale je to také indikátor zvládnutí syntax a základů programování. Přirozeně pro složitější příkazy a funkce je vhodné nahlédnout do dokumentace, takových příkazů je však v PRP velmi málo. Navíc i u většiny pohovorů pro vývojářské pozice se od vás očekává, že základy ovládáte, máte je zažité a nemusíte například dlouze přemýšlet, jak se vlastně píše funkce main(). Pokud si ji pokaždé necháte vygenerovat, je docela dobře možné, že si na ni ani nevzpomenete.
Předně nás v takovém případě upozorněte na komplikovanost zadání. Určitě není naším úmyslem zadání komplikovat nepřehledným popisem. Snažíme se, aby zadání byla stručná a jednoznačná, ne vždy se však trefíme, proto zadání rádi upřesníme. Co se týče využití nějakého existujícího řešení, tak je dobré mít na paměti, že v PRP máte prostor jak se věci naučit a jak jim porozumět. Pokud se jedná o slepé převzetí cizího kódu, tak to rozhodně není doporučeno. Kromě možného problému s plagiátorstvím přicházíte o možnost o problému hlouběji přemýšlet a navrhnout řešení vlastí. Tím se učíte, existující kód tak spíše použijte pro inspiraci nebo ještě lépe pro ověření, že jste sami postupovali podobně. Byli bychom moc rádi, pokud absolventi kurzu PRP nebudou pouze “lepiči”, ale sami budou dostatečně tvůrčí, aby dokázali vytvořit kompletní program a to ideálně zcela samostatně a když ne jen tak na papír, tak alespoň v prázdném souboru implementovali správné řešení.
Zdrojů je hned několik. V první řadě je možné využít příklady na přednášce a zkusit si je naprogramovat zcela samostatně, pouze v případě nejasností se inspirovat přiloženými zdrojovými kódy k přednášce. Dále úkoly na cvičení, které se ne vždy musí na cvičení všechny stihnout. Také doporučená kniha S.G.Kochan: Programming in C obsahuje na konci jednotlivých kapitol příklady k procvičení. Další příklady lze nalézt v knize K.N.King: C Programming A Modern Approach, která je sice dle našeho názoru zaměřena více na jazyk C než samotné programování, nicméně obsahuje zadání řady dílčích úloh i menších projektů. Nakonec kromě jiných knih či e-kurzů, si lze procvičovat programování také nějakým vlastním projektem.
Obecně vzato v podstatě tak, že implementované řešení splňuje zadání a program dělá to co se od něj očekává. Zpravidla není pouze jediný unikátní způsob implementace, např. ve smyslu rozdělení na funkce, použité proměnné či názvy. V případě algoritmů je základním ukazatelem správnosti a efektivnosti časová a paměťová složitost. To však neznamená, že méně efektivní implementace je vyloženě špatně. Například pro malé vstupy může být vhodnější obecně pomalejší algoritmus, třeba z důvodu přehlednosti kódu nebo časové náročnosti na vlastní vytvoření programu. Kritérií může být celá řada. Programování je tvůrčí činnost a tvůrce (programátor) musí mít jasnou představu co se od programu očekává a jak má fungovat. Pro ověření správnosti je dále možné použít ověřující testy, například zdali pro použité datové struktury platí požadované vlastnosti. V případě řešení domácích úkolů je správnost ověřovaná testy a porovnáváním výstupu odevzdaného úkolu s referenčním řešením v Upload Systému. V praxi však takový systém ověřování k dispozici nebývá, neboť úkolem programátora je implementovat řešení nového problému, pro který odpovídající program není k dispozici. Pokud by byl, tak by se mohl použít a nebylo by nutné jej vytvářet znovu.
PST a PDT je označení časového pásma. Důvody pro definice termínů odevzdání v těchto časových pásmech jsou v zásadě dva. První je motivován přibližením možných reálných termínů pokud nejste omezeni jen na českou kotlinu a pracujete v globálním prostředí. Dále se pak snažíme výjít vstříct těm z vás, kteří nejsou vyloženě skřivany (pointa je skryta v přepočtu termínu odevzdání na naše časové pásmo).
I když to přednášejícího mrzí, může se to stát. Podobně jako vám nemusí vyhovovat doporučená učebnice. Nebojte se kontaktovat přednášejícího a diskutovat alternativní možnosti, případně doporučení na jinou literaturu. Bohužel v případě stovek studentů zpravidla nelze plně vyhovět všem požadavků, určitě se však dá najít vhodný kompromis.
Určitě dá, především se nebát ozvat a to buď na přednášce nebo i po přednášce. Také je možné, že je to v důsledku odlišného stylu výuky na VŠ a střední škole. Dalo by se říci, že na VŠ se předpokládá především samostudium. V konkrétním případě PRP je v ideálním případě student/studentka na přednášku připravena, třeba tím, že si dopředu projde podklady k přednášce, nebo si předem přečte příslušné kapitoly doporučeného učebního textu. K tomuto ideálu se sice přibližujeme pouze velmi, velmi pomalu, ale přednášející věří, že se připravenost studentů bude lepšit a tím i předávané znalosti prohlubovat. Představte si, že by přednáška nebyla pouze strohým výkladem, ale spíše diskuzí nad konkrétními problémovými částmi příslušných témat a odkrývání skrytých zákoutí a specifických vlastností programování nebo jazyka C, na které není při běžném a základním výkladu příliš prostoru. Přednášky a jejich náplň mohou být různé a to nejen v závislosti na přednášejícím, ale také publiku. Téměř každý přednášející, a v PRP tomu není výjimkou, se snaží výklad co nejlépe přizpůsobit posluchačům.
Nejraději bychom chtěli mít všechna cvičení v semestru, tak abychom vám mohli předat co nejvíce znalostí. Bohužel v průběhu semestru jsou některé dny svátky. V případě velkého počtu cvičení, v PRP jich máme více než dvacet, může tak snadno dojít k tomu, že v průběhu jednoho týdne budou v různé dny jednotlivá cvičení různá. Tomu se snažíme zabránit a sjednotit náplň cvičení na kalendářní, resp. výukové týdny, tak aby byla pokud možno zachována návaznost na přednášky a například možnost náhrady cvičení. Využili jsme naší dlouholeté zkušenosti a koncipovali předmět tak, abychom zvládli odpřednášet a odcvičit stejnou látku i v případě výpadku v podobně státních svátků a přesunů výuky. I nepovinná cvičení je doporučeno navštěvovat a např. při výpadku poskytujeme alternativní termíny, ty se však pochopitelně nemusí hodit všem. Proto nechceme extra penalizovat neúčast na cvičení a explicitně označujeme cvičení jako nepovinné.
I to se může přihodit, přirozeně nás mrzí rozdílná úroveň vstupních znalostí. Kurz PRP je koncipován jako základní kurz programování bez předchozí zkušenosti, proto může být považován za kurz srovnávací. V případě, že vás programování baví a chcete mu věnovat více času, můžeme jen doporučit kurzy ACM programování, které se vypisují každý semestr. Jedná se v podstatě o individuální kurz a podle úrovně vašich znalostí je nastavena obtížnost.