SWI113: Dokonalý kód - Umění programování a techniky tvorby software
LS 2006/2007, seminář, 0/1 Z
každou sudou středu v 17:20, učebna S4 (začínáme 21. 2. 2007)
Cíl předmětu
Matfyz vás naučil programovat. Tento seminář vás naučí programovat dobře (nebo se o to aspoň pokusí). Ukážeme si praktické programátorské techniky, které vedou k psaní přehlednějšího, kvalitnějšího a lépe udržovatelného kódu. Vysvětlíme si, proč je používat, a předvedeme si spoustu dobrých i špatných příkladů.
Protože nikdo se ještě nenaučil dobře programovat jen posloucháním, vyzkoušíte si nabyté znalosti na několika malých úkolech.
Viz také leták na nástěnkách (PDF, 32 KB).
Slajdy
Zobrazit/stáhout slajdy (poslední aktualizace: 21.12.2008 22:08)
Slajdy jsou v XHTML a je možné je přepnout do režimu prezentace. Ve
Firefoxu použijete odkaz Spustit jako prezentaci, v Opeře stačí
přepnout do režimu zobrazení přes celou obrazovku. Jiné prohlížeče nejsou
podporovány. Všechny obrázky a další materiály jsou vloženy přímo do
XHTML souboru (jsou použity data: URL –
RFC 2397), pro offline
prohlížení vám tedy stačí stáhnout jen jeden soubor.
Hodnocení
Pro získání zápočtu je třeba:
- Mít ostře nadpoloviční účast (tj. alespoň 4 semináře).
- V průběhu semestru kvalitně a včas vypracovat tři malé úkoly (žádný by vám neměl zabrat víc než jeden večer) – více viz níže.
Úkoly
| Datum zadání | Téma |
|---|---|
| 4.4. | Zpřehledňování kódu |
| 18.4. | Návrh API |
| 9.5. | Dokumentace |
Úkol bude zadán vždy na příslušném semináři a jeho zadání bude následně dostupné i na této stránce. Řešení mi pošlete mailem na david@majda.cz nejpozději do dne před následujícím seminářem (včetně). Kdo nepošle úkol včas bez závažného důvodu nebo předchozí domluvy, ztrácí nárok na zápočet.
Pokud řešení úkolu nebude vyhovovat, je možné, že budu chtít přepracování. V tom případě je nejlepší vše probrat osobně na semináři následujícím po termínu odevzdání.
Úkol můžete vypracovat v libovolném rozumném programovacím jazyce. Za rozumné programovací jazyky považuju určitě Javu, C#, Ruby, Python, PHP a JavaScript. Naopak rozumný jazyk není C ani C++. U ostatních jazyků není funkce rozumnosti zatím definována a můžu ji dodefinovat na požádání.
V případě prvního a třetího úkolu dostanete v rámci zadání kód, ze kterého budete při
řešení úkolu vycházet. Tento kód bude v Javě a v případě použití jiného
jazyka si ho do něj musíte přepsat. Dejte si přitom pozor na korektní překlad
všech syntaktických prvků a idiomů.
Osnova
- Design software, inherentní a zavlečená složitost.
- Zásady pro práci s primitivy strukturovaného programování.
- Design metod: pseudokód, lokálnost × duplicita kódu, data-driven programming, práce s výjimkami.
- Design tříd: dědičnost × kompozice, coupling a decoupling, modularizace a vrstvy abstrakce, desgin rozhraní (API).
- Refaktorizace. Defenzivní programování, názvové konvence a dokumentace.
- Testování, unit-testing, ladění.
- Plánování a udržovatelnost software.
Literatura
- Steve McConnell: Code Complete 2 (k dispozici i v nepříliš povedeném českém překladu)
- Joshua Bloch: Effective Java Programming Language Guide (též k dispozici v českém překladu, jeho úroveň neznám)