F5698 The Ultimate Python Developer's guide

Faculty of Science
Autumn 2023
Extent and Intensity
0/2/0. 2 credit(s). Type of Completion: z (credit).
Teacher(s)
Mgr. Andrej Roštek (seminar tutor)
Dr. Martin Topinka, PhD. (seminar tutor)
Mgr. Petr Zikán, Ph.D. (seminar tutor)
Guaranteed by
Dr. Martin Topinka, PhD.
Department of Theoretical Physics and Astrophysics – Physics Section – Faculty of Science
Contact Person: Dr. Martin Topinka, PhD.
Supplier department: Department of Theoretical Physics and Astrophysics – Physics Section – Faculty of Science
Timetable
Mon 16:00–17:50 Fcom,01034
Prerequisites
The course is a free continuation of F1420 Programming in Python and F4500 Python for physicists. Basic knowledge of Python language (basic syntax and data structures, functions, modules) is assumed.
Course Enrolment Limitations
The course is also offered to the students of the fields other than those the course is directly associated with.
fields of study / plans the course is directly associated with
there are 6 fields of study the course is directly associated with, display
Course objectives
We are approaching the third year of this course. While the first year attempted to understand certain concepts, perhaps unnecessarily in detail, in the second year, we utilized the cloud service GitPod and an already prepared structure of a Python package by Claudia Jolowicz (https://github.com/cjolowicz/cookiecutter-hypermodern-python). However, we did not sufficiently explain and practically skipped some important elements of modern Python development. This year, we will attempt to find a balance between the two approaches.

However, the objectives of the course remain the same:
* Understand version control systems and utilize GitHub for collaborative code management.
* Effectively use integrated development environments (Visual Code).
* Acquire skills in software domain modeling techniques for effective representation of real-world systems.
* Identify and utilize essential Python packages for various application domains.
* Apply design patterns to write sustainable, scalable, and reusable code in Python.
* Develop an understanding of software testing, documentation, and continuous integration (Continuous Integration).

For the new addition in the third year, we would add the following:
* Explore containerization concepts and employ Docker for creating reproducible environments.

It is clear that everything mentioned here cannot be covered in a single semester. Therefore, the specific focus of our attention will be the subject of collective discussion.
Learning outcomes
During the course, students will learn (hopefully at least something) of the following:

* Version Control and Collaboration:
* * Understand version control systems and their importance in software development.
* * Utilize GitHub for collaborative code management, including branching, merging, and conflict resolution.

* Integrated Development Environments (IDEs):
* * Effectively use Visual Code as an integrated development environment for Python projects.
* * Explore the features and productive tools provided by IDEs for efficient programming.


* Software Domain Modeling:
Gain skills in modeling software domains for effective representation of real-world systems.
Learn object-oriented modeling concepts such as classes, objects, and inheritance.

* Essential Python Packages:
* * Identify and utilize fundamental Python packages for various application areas.
* * Understand the functionality and usage of these packages in practical scenarios.


* Design Patterns in Python:
* * Learn design patterns and their importance in writing sustainable and scalable code.
* * Study commonly used design patterns in Python, such as Singleton, Factory, and Observer.
* * Apply design patterns to solve practical problems and improve code architecture.

* Software Testing, Documentation, and Continuous Integration:
* * Develop an understanding of software testing in Python.
* * Learn best practices for documenting Python projects, including using tools like Sphinx.
* * Explore the concept of continuous integration and its role in automated testing and project development.


* Containerization with Docker:
* * Explore the concepts of containerization and its benefits in software development.

During the course, students will also work on practical projects and exercises to apply their knowledge in real-world scenarios. They will gain a comprehensive overview of modern development practices in Python, including infrastructure tools, best practices, and software design principles.
Syllabus
  • Throughout the course, we will be working on a campus-wide project together, gradually developing and explaining the principles, concepts, and tools mentioned above.
Literature
    recommended literature
  • Scopatz, Anthony, and Kathryn D. Huff. Effective computation in physics: Field guide to research with python. " O'Reilly Media, Inc.", 2015.
  • Bob Gregory. Architecture Patterns with Python. O'Reilly Media, Inc. 2020. https://www.cosmicpython.com/
  • LUTZ, Mark. Learning Python. 4th ed. Beijing: O'Reilly, 2009, xlix, 1162. ISBN 9780596158064. info
Teaching methods
The teaching will take place in the form of seminars, where we will collaboratively develop the project using our collective efforts.
Assessment methods
The subject will be concluded based on the activities throughout the semester and a final colloquium.
Language of instruction
Czech
Further comments (probably available only in Czech)
Study Materials
The course can also be completed outside the examination period.
The course is taught annually.
Teacher's information
It is advisable for the student to have their own computer during the lesson. Teaching will primarily use the Linux operating system, however, other operating systems (Windows, iOS) should not be an obstacle. It is possible that on the latter operating systems, the teacher will not be able to provide full support to the young developer.
The course is also listed under the following terms autumn 2021, Autumn 2022, Autumn 2024.
  • Enrolment Statistics (Autumn 2023, recent)
  • Permalink: https://is.muni.cz/course/sci/autumn2023/F5698