
About this training
In the age of distributed systems, software projects are becoming increasingly complex. At the same time, they must be able to adapt to frequent changes in requirements. On an organizational level, these changes are met with agile process models. However, the software itself must also have the necessary flexibility to implement the changes.
As a result, the software development community has developed successful approaches to better manage the complexity of software while ensuring the necessary flexibility. This workshop will highlight the challenges of developing complex software systems and how maintainable, flexible, and sustainable software can be created incrementally. The approaches used are language-agnostic. Accordingly, the acquired knowledge can be applied in almost any development context, independent of special technologies and programming languages. However, it is not a one-size-fits-all approach, but rather a toolbox of principles, practices, and patterns that can provide valuable guidance to skilled developers in making design decisions.
The solution approaches presented are derived step by step in the course of the training, so that not only the question of "how?" is answered, but also the question of "why? This results in a common thread that enables the participants to find their way through the depths of software development even after the end of the training.
The language for the application examples can be chosen between Java, Python or C++. The participants do not necessarily have to have in-depth knowledge of the language. However, they should be able to understand rudimentary source code written in the language.
In the process, the following questions, among others, are answered
- What are the challenges we face in the software development process?
- How can I evaluate the quality of my software design?
- What is technical debt and why is development speed decreasing because of it?
- What is software architecture anyway?
- Why should components within a software system know as little as possible about each other?
- Given the plethora of options, how do I arrive at a design decision?
- What characterizes a flexible software design?
- What are the SOLID principles?
- What are the advantages and disadvantages of individual design patterns and what are the principles behind them?
Requirements
Required knowledge
You should be experienced in the use of a programming language.
Technical requirements
For our online trainings all participants need ...
- a computer with Internet access.
- a stable Internet connection.
- an updated browser, preferably Chrome.
Course of the training days
Day1
- Sustainable software development
- Motivation for sustainable software design
- Quality criteria
- Traditional vs. Agile
- Types of complexity
- Cohesion and coupling
- Basic concepts for organizing complexity
- Refresher: Object orientation
- Design Principles: SOLID & Co. with application examples
Day2
- From principles to design patterns
- Collaborative implementation of a sample application
- Consolidation of the learned content of the previous day through practical application
- Discussion of design decisions
- Recognizing and deriving design patterns
Additional modules
We support you every step of the way – from advice to implementation:
Trainer
Jan Linxweiler
Profile
Sören Peters
Profile
Sven Marcus
Profile
We reserve the right to change the trainer