Course: Advanced Programming Techniques

« Back
Course title Advanced Programming Techniques
Course code KST/NNPTP
Organizational form of instruction Lecture + Tutorial
Level of course Master
Year of study 1
Semester Winter
Number of ECTS credits 5
Language of instruction Czech
Status of course Compulsory
Form of instruction Face-to-face
Work placements This is not an internship
Recommended optional programme components None
Lecturer(s)
  • Diviš Roman, Ing. Ph.D.
  • Bažant Michael, doc. Ing. Ph.D.
Course content
Programme of lectures and exercises: 1. Clean code - recommendations for writing of clean code, using comments, choosing good identifiers 2. Design patterns - fundamental design patterns by Gang of Four (creational, structural, behavioral) 3. Refactoring of source code - methods of refactoring, using IDE 4. Testing - recommendations for unit and integration tests, using mock/stub/fake/spy/dummy objects 5. Test Driven Development - cycle - test, code, refactoring 6. Git - distributed versioning system, principles, commands push, pull, commit, checkout, branch, merge, rebase, team cooperation, pull/merge request 7. Git, Continuous Integration/Continuous Delivery, Git Hooks - CI/CD techniques , using of Git hooks, services GitHub/GitLab/BitBucket and Travis/Circle CI/Jenkins 8. Coding kata - practical exercise of pair/group programming 9. Dependency Injection, Inversion of Control - methods (constructor, setter, method injection), DI/IoC containers 10. Garbage collector - reference couting, Mark&Sweep, Mark&Sweep&Compact, generational GC 11. Parallelism, concurrency, asynchronous - usage of threads, thread pools, async/await and other techniques for asynchronous programming 12. Generic programming - templates (C++), generics (Java - type erasure, C# - reification), features and consequences of different implementations of generics 13. Functional programming - elements of functional programming in OO languages, LINQ (C#), Stream (Java), lambda expressions, function closure, immutable objects, pure functions Exercises are focused on the application of theoretical knowledge from the lectures in a given week of teaching.

Learning activities and teaching methods
Monologic (reading, lecture, briefing), Dialogic (discussion, interview, brainstorming), Skills training
  • Preparation for an exam - 24 hours per semester
  • Writing a seminar paper - 9 hours per semester
  • Contact teaching - 52 hours per semester
  • Home preparation for classes - 65 hours per semester
Learning outcomes
The main goal of the subject is to familiarize students with advanced programming techniques in object oriented programming languages.
Passing this course enables to write and maintain clean code, use design patterns and other advanced programming techniques, use TDD and methods for team cooperation using versioning system Git.
Prerequisites
There is expected fundamental knowledge of algoritmisation, data structures, and knowledge of object oriented programming in higher programming languages (C++, C#, Java).

Assessment methods and criteria
Oral examination, Written examination, Home assignment evaluation

In order to get credit, the student will create a set of at least 3 patches for the assigned projects, which must improve the quality and functionality of the source code (applying clean code, unit tests, programming language conventions). The patch must pass code review approval. The specific requirements for the number of patches, project assignments and source code repositories are specified in the study materials. Examination: the student has to perform a code review on the given example(s), after writing the comments there is an oral-consultation part where the individual code comments will be further consulted by the examiner. In the case of the distance form of the exam, an oral examination will be conducted including theoretical questions, practical (programming) tasks and/or practical application of the code review. In order to pass the exam, a minimum of 60% of the expected deficiencies in the code must be identified (grade E). In the case of distance learning, the course will take place in the MS Teams environment during standard timetabled hours.
Recommended literature
  • Kent Beck. Test-Driven Development: By Example. 2003. ISBN 978-0321146533.
  • Robert C. Martin. Clean architecture: a craftsman's guide to software structure and design.. London: England, 2017. ISBN 9780134494326.
  • Steve McConnell. Code Complete: A Practical Handbook of Software Construction. Redmond: Washington, 2004. ISBN 978-0735619678.


Study plans that include the course
Faculty Study plan (Version) Category of Branch/Specialization Recommended year of study Recommended semester