Základy vývoje a tvorby software. Inherentní a zavlečená složitost. Příprava a klíčová rozhodnut í.
Proměnné a konstanty. Obecná pravidla pro práci s proměnnými. Názvové konvence. Základní datové typy. Neobvyklé datové typy. Vytváření nových typů.
Řídící struktury a primitiva. Organizace kódu. Podmíněné příkazy. Smyčky. Obecná pravidla pro práci s řídícími strukturami. Neobvyklé řídící struktury. Metody řízené tabulkami.
Tvorba kvalitního kódu. Návrh metod. Pseudokód. Lokalita a duplicita kódu. Práce s výjimkami. Defenzivní programování. Návrh tříd. Dědičnost a kompozice. Vazby mezi třídami. Modularizace a abstrakce. Návrh rozhraní.
Programátorské umění. Styl a uspořádání kódu. Dokumentace kódu a způsoby komentování. Osobnostní kvality.
Zdokonalování kódu. Testování. Ladění. Refaktorizace. Kolaborativní techniky tvorby software. Ladění výkonu.
Proces tvorby software. Vztah mezi velikostí programu a způsobem tvorby. Plánování a řízení vývoje. Udržovatelnost software. Programovací nástroje.
Programování není pouze o schopnosti napsat fungující program. S kvalitou programu je (vedle návrhu a celé řady funkčních charakteristik) spojena celá řada charakteristik, které s funkcí programu přímo nesouvisí. Náplní předmětu je seznámit studenty s praktickými postupy a pravidly, jejichž důsledné dodržování a aplikace vedou ke kvalitnějším programům. Cílem předmětu je motivovat studenty k osvojení a používání probíraných postupů v praxi.
Předpokládají se znalosti programování v rozsahu bakalářského kursu NPRG031 Programování II.