Doporučené postupy v programování

O předmětu

Kontakt

Rozvrh

Osnova

Úkoly

Literatura

O předmětu

Programování není pouze o schopnosti napsat fungující program. S kvalitou programu je (vedle návrhu a správné funkce) spojena celá řada charakteristik, které s jeho funkcí přímo nesouvisí. Mezi takové charakteristiky patří také kvalita programového kódu. Ten patří k nejdůležitejším částem programu a jeho kvalita 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 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.

Poděkování

Tento předmět svým zaměřením rozšiřuje záběr původního předmětu Dokonalý kód - Umění programování a tvorby software, který v letním semestru 2007 učil David Majda, a který naprosto nezávisle vystihl v té době již existující záměr KSI a pozdější D3S zařadit předmět věnovaný psaní kvalitního kódu do studijního programu.

Předmět Dokonalý kód Davida Majdy dal tomuto záměru konkrétní podobu a posloužil jako zdroj cenných zkušeností. V neposlední řadě poskytl také skvělý základ, na kterém je možné stavět při přípravě tohoto předmětu.

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, lubomir.bulej<at-sign>d3s.mff.cuni.cz
  • Peter Libič, peter.libic<at-sign>d3s.mff.cuni.cz
  • Tomáš Pop, tomas.pop<at-sign>d3s.mff.cuni.cz
  • Vojtěch Horky, vojtech.horky<at-sign>d3s.mff.cuni.cz
  • Tomáš Martinec, martinec<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 čtvrtka. V kanceláři bývám zhruba od 9:30 do 18:00, někdy i déle, ale 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 vyřídit běžnou administrativu jako např. zápis známek do indexu, případně poskytnout kratší, předem neohlášené konzultace. Pokud předpokládáte, že na konzultaci bude potřeba více času, je vhodné se na konzultaci předem domluvit a mít jasnou představu o její náplni – to znamená mít představu č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 2010/2011 se přednášky konají ve čtvrtek od 10:40 v místnosti S9. Na cvičení jsou vyhrazeny celkem 4 paralelky, 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.

Úvod

  • proč psát kvalitní kód, návrh software,
  • inherentní a zavlečená složitost.
  • 1. přednáška

Psaní kódu

Návrh metod

Návrh tříd

Zlepšování kódu

Formátování kódu, dokumentace

  • zdrojový kód, komentáře,
  • popis rozhraní, high-level dokumentace.
  • 11. přednáška

Úkoly

V průběhu semestru budou na cvičení zadány tři ú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 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 a oponentury, druhý úkol bude vytvoření knihovny a třetí úkol vytvoření testů a oponentura. Oponentura znamená, že po odevzdání řešení problému budou řešitelům rozeslána řešení jejich kolegů (každému řešiteli jedno) a budou mít za úkol je zhodnotit. Toto zhodnocení pak bude ohodnoceno :-) Zadání úkolů bude vždy dostupné na webu předmětu.

V případě prvního úkolu je možné za řešení problému získat maximálně 10 bodů, stejně tak za oponenturu. Za druhý úkol je možné získat maximálně 40 bodů a za třetí úkol maximálně 30 bodů. Co přesně je předmětem hodnocení bude uvedeno u každého úkolu. Celkem lze získat 90  bodů,jejich převod na známku viz slajdy.

Úkoly budete řešit ve dvojicích. Dvojice se mohou změnit před druhým úkolem. Dvojice je potřeba nahlásit po zadání úkolu ve webové aplikaci, která bude brzy zpřístupněna.

Odevzdání

Úkoly i oponentura se odevzdávají ve webové aplikaci. V případě prvního úkolu a jeho oponentury je třeba soubory odevzdat v plain-textu (tj. nikoliv HTML, RTF apod.) a u prvního úkolu též zarovnaný na max. 80 znaků. Text i kód musí být vložen přímo do aplikace (tj. bez použití archivačních a kompresních nástrojů). U druhého a třetího úkolu je formát odevzdání specifikován přímo v zadání úkolu. (Důvodem těchto pravidel je usnadnění opravování, nikoliv snaha o zbytečnou byrokracii.) Data v nevyhovujícím formátu nebudou akceptovány jako řešení.

Řešení je nutno odevzdat včas (viz harmonogram). Za každý den zpoždění u prvního úkolu bude odečtena třetina bodů, u  druhého a třetího úkolu pětina bodů z maximálního hodnocení. Případné výjimky je nutné dohodnout s dostatečným předstihem.

Programovací jazyk

První úkol bude v jazyce Java. U druhého úkolu budou povolené jazyky specifikovány přímo v zadání úkolu. Jazyk třetího úkolu bude stejný jako jazyk druhého úkolu.

Zadání úkolů

  1. Zpřehledňování kódu
  2. Návrh, implementace a dokumentace knihovny
  3. Testování a hodnocení knihovny

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.

Modified on 2012-05-14