Oznámení

24. 5. 2017
Byla zadána 5. úloha.
27. 4. 2017
Byla zadána 4. úloha.
5. 4. 2017
Byla zadána 3. úloha.
20. 3. 2017
Byla zadána 2. úloha.
3. 3. 2017
Byla zadána 1. úloha.
16. 2. 2017
Cvičení se vzhledem k povaze a způsobu hodnocení předmětu v prvním týdnu výuky nekonají.

O předmětu

Programování není pouze o schopnosti napsat fungující program, nebo naimplementovat konkrétní algoritmus. Programování je z velké části také o zvládání strukturální složitosti počítačových systémů. U menších programů, které slouží především jako obal nějakého algoritmu, je tato složitost dána především abstrakcemi a datovými strukturami použitými pro implementaci daného algoritmu. U větších programů přestávají algoritmus a koncepty s ním spojené dominovat a program začne být složitý především v důsledku množství konceptů a jejich vzájemné interakce. U takových programů hraje návrh (design) kritickou roli a jejich vývoj a údržba přesahuje možnosti jednotlivce.

V takovém okamžiku je extrémně důležitá schopnost členů vývojového týmu efektivně komunikovat a zdrojový kód programu je jedním z komunikačních kanálů, který navíc přesně odráží stav vývoje programu. Kvalita zdrojového kódu sice přímo nesouvisí s funkcí programu, ale je určující pro celou řadu dalších charakteristik, jako je přehlednost, udržovatelnost a—ve spojení s návrhem—také rozšiřitelnost.

Kvalita zdrojového kódu se odráží v celé řadě aspektů, počínaje formátováním zdrojových textů, přes uspořádání příkazů, výběr názvů proměnných a funkcí, členění kódu do funkcí a metod, obsah komentářů, až po návrh tříd a rozhraní. Na nejnižší úrovni se často jedná především o volbu vhodného způsobu zápisu, kde cílem je co nejpřehledněji zachytit prováděné operace, zatímco na druhé straně spektra stojí snaha o vhodně zvolené a konzistentní abstrakce, které zjednodušují psaní a orientaci v kódu a v důsledku tak činí program lépe udržovatelným a rozšiřitelným.

Náplní předmětu je formou přednášek a práce v semestru seznámit studenty s praktickými postupy a pravidly, jejichž dodržování a aplikace vedou (nejenom) k psaní kvalitnějšího kódu. Cílem předmětu je motivovat studenty k osvojení a používání probíraných postupů v praxi.

Formální informace o předmětu jsou k dispozici v univerzitním informačním systému.

Kontakt

K výměně informací mezi studenty a vyučujícími je určena emailová konference. Pro dotazy a připomínky týkající se výuky používejte prosím přednostně tuto konferenci – většinou to bude zajímat širší okruh studentů.

Pokud máte dotaz nebo připomínku, kterou nechcete posílat do konference, můžete použít také email:

  • Lubomír Bulej, bulej<at-sign>d3s.mff.cuni.cz
  • Jakub Daniel, daniel<at-sign>d3s.mff.cuni.cz
  • Martin Blicha, blicha<at-sign>d3s.mff.cuni.cz

Pokud se rozhodnete napsat email vyučujícímu, ujistěte se prosím, že to na co se ptáte není nikde jinde zodpovězeno – ať už v mailing listu, nebo na těchto stránkách. Kardinalita vztahu mezi studenty a vyučujícími je typicky M:N, kde M je řádově větší než N a není v silách vyučujících opakovaně odpovídat na stejné dotazy.

Konzultační hodiny

V kanceláři č. 205 v budově na Malé Straně jsem k zastižení od úterý do pátku, typicky od 10:00 do 18:00. Pokud plánujete přijít po 17. hodině, je vhodné mi to předem včas oznámit.

Vedle výuky ještě nebývám k zastižení během seminářů D3S, které se konají v úterý od 14:00 do (většinou) 15:00 a ve středu od 9:00 do (většinou) 10:00.

Během konzultačních hodin jsem ochoten poskytnout kratší, předem neohlášené konzultace. Pokud předpokládáte, že na konzultaci bude potřeba více času, je vhodné se předem domluvit na konkrétním termínu a mít jasnou představu o její náplni – to znamená vědět čemu nerozumíte (a čemu ještě ano) – konzultace nemůže sloužit jako náhrada přednášek.

Rozvrh

Předmět přednáší Lubomír Bulej a v letním semestru 2016/2017 se přednášky konají ve střdedu od 14:00 v místnosti S9. Na cvičení jsou vyhrazeny 2 paralelky (úterý od 17:20 v S6 a středa od 10:40 také v S6). Podrobnosti naleznete v informačním systému.

Protože těžištěm práce studentů v průběhu semestru je práce na několika domácích úkolech, cvičení se konají (vesměs) jednou za 14 dní – přesný harmonogram naleznete v následujícím kalendáři.

Harmonogram cvičení

Alternativní odkazy: XML/RSS, iCal, HTML

Osnova

Pro snadnější orientaci v přednášené látce jsou k probraným tématům k dispozici prezentace z přednášek, které byly použity při výkladu v minulém roce. V případě potřeby budou tyto prezentace aktualizovány v průběhu semestru.

Vedle přednášek jsou k dispozici rovněž prezentace ze cvičení:

Úkoly a bodování

V průběhu semestru budou na cvičení zadány úkoly, které jsou podstatou hodnocení studentů. Předmět je tedy možné absolvovat na základě dobře odvedené práce v semestru. Úkoly budete částečně řešit ve dvojicích – cílem je motivovat studenty k diskuzi, vyzkoušet si práci v malém týmu a zároveň snížení zátěže kladené na vyučující.

První úkol se bude skládat z úprav dodaného kódu (oprava „nešvarů“ zmiňovaných na přednášce a cvičeních).

Další úkoly budou na sebe navazovat a postupně si v nich vyzkoušíte návrh vhodného API knihovny, napsání testů, dokumentace a „code review“.

Tato zadání se objeví na samostatných stránkách, termíny jsou uvedené v kalendáři.

Bodování jednotlivých úloh je nastíněno v následující tabulce, během semestru může dojít k drobným korekcím.

  Úkol Bodové ohodnocení
1. Čištění kódu, opravovací cvičení 10b + 10b
2. Návrh API 10b
3. Oponentura k navrženému API 10b
4. Implementace, testy, dokumentace 40b
5. Code review, rozšíření 10b + 10b

Mapování mezi body a získanou známkou přibližuje následující tabulka:

Známka Dosažené body
1 > 80b
2 > 65b
3 > 50b

Odevzdávání

Úkoly i oponentury se odevzdávají pomocí webové aplikace, tzv. submission systému. V případě že zaznamenáte nějaký problém s odevzdávacím systémem, ozvěte se. Nejlépe do mailing-listu, typicky se podobný problém bude týkat více uživatelů.

Podrobnosti o formátu odevzdávaných souborů jsou vždy popsány na stránce s úkolem. Dodržujte tyto požadavky, výrazně tím usnadníte opravování jednotlivých úloh. Jednotný formát nám navíc zjednodušuje zpětné rozesílání hodnocení apod. Především se to týká požadavků na odevzdávání oponentur ve formátu prostého textu.

Řešení odevzdávejte včas (viz kalendář). Vzhledem k návaznosti jednotlivých úloh je včasné odevzdání naprostou nutností a i proto budeme opožděné odevzdání penalizovat. Za každý den zpoždění jde o třetinu maximálního možného bodového zisku. Případné výjimky je nutné dohodnout s dostatečným předstihem.

Literatura

Náplň tohoto předmětu vychází primárně z 2. vydání knihy Code Complete od Steva McConnella, která existuje i v českém překladu.

  • McConnell, S. Code Complete: A Practical Handbook of Software Construction. 2nd edition, Microsoft Press, 2004, ISBN 978-0735619678
  • McConnell, S. Dokonalý kód: Umění programování a techniky tvorby software. 2. vydání, Computer Press, 2006, ISBN 80-251-0849-X

Existuje celá řada dalších knih, které se zabývají problematikou vývoje a údržby software. Málo z nich však klade takový důraz přímo na psaní kódu. Další užitečné postřehy jsou čerpány z 2. vydání knihy Effective Java od Joshuy Blocha.

  • Bloch, J. Effective Java. 2nd edition, Addison-Wesley, 2008, ISBN 978-0-321035668-0

Webové materiály

Vedle knih je také možné najít celou řadu zajímavých esejů a článků na webu. Odkazy na některé z nich jsou uvedeny v prezentacích z přednášek.

Logo of Faculty of Mathematics and Physics
  • Phone: +420 951 554 267, +420 951 554 236
  • Email: info<at-sign>d3s.mff.cuni.cz
  •  
  • How to find us?
Modified on 2017-05-24