Code: 18PROP Practical training in programming
Lecturer: Ing. Jakub Klinkovský Ph.D. Weekly load: 2C Completion: GA
Department: 14118 Credits: 3 Semester: W
Description:
The goal of this course is to understand advanced topics related to programming, code design and software project development. Students will practice pragmatic techniques and principles on concrete real-world examples. Emphasis is put on the review of freely available software tools that can improve the programmer?s work efficiency and ensure high quality of the final source code.
Contents:
1. Best practices for writing clean code (formatting, naming, structuring)
2. Modular architecture of the program and software project
3. Object-oriented design, SOLID principles and design patterns
4. Principles of defensive programming
5. Principles of agile software development
6. Unit tests ? design, development and deployment
7. Source code version control with Git
8. Using Git to develop software ? branching and merging
9. Branching strategies ? GitFlow, GitHub Flow, GitLab Flow
10. Tools for project build automation ? GNU Make, CMake, Meson
11. Tools for code quality assurance and bug detection
12. Tools and techniques for code refactoring
13. Documentation generators
Recommended literature:
Key literature:
[1] K. Fogel, Producing open source software: How to run a successful free software project, Second Edition, O'Reilly Media, 2022. https://producingoss.com/
[2] R.C. Martin, Clean Code: A Handbook of Agile Software Craftmanship, Prentice Hall 2009. ISBN 978-0132350884.
[3] S. Chacon, B. Straub, Pro Git, Second Edition, Apress, 2014. https://git-scm.com/book/en/v2

Recommended literature:
[1] D. Thomas, A. Hunt, The Pragmatic Programmer, 20th Anniversary Edition, Addison-Wesley, 2019. ISBN 978-0135957059.
[2] M. Fowler, Refactoring: Improving the Design of Existing Code, Second Edition, Addison-Wesley, 2018. ISBN 978-0134757599.
[3] P. Silén, Clean Code Principles and Patterns: A Software Practitioner's Handbook, 2023. ISBN 979-8373835732.
Keywords:
Design patterns, agile software development, software testing, Git, programmer?s toolset.

Abbreviations used:

Semester:

Mode of completion of the course:

Weekly load (hours per week):