Learning Goals
In this course you will learn about systems in which communication is an important part of functionality. We will study technologies to build these systems, how communication protocols can be used in combination with components and program code.
You will also learn how to describe these types of systems. We will create system models with various notations, at various levels of detail and with different degrees of rigor. This includes formal modeling in terms of state machines, but also simple and effective sketches of the system on a whiteboard. As part of this, you will learn how to think in states and transitions, and how to describe complex interactions efficiently.
Part of system development is also the coordination of a team of developers and the management of resources. You will therefore learn about development processes and directly experience the dynamics in a team.
This means there are three layers of things to learn in this course: Technologies, how to specify them, and how to organize development projects and teams. Maybe we could have a separate course on each of them — there would be more than enough to learn for any of these. But in this course, it is particularly the combination of these three layers. If you are working as an engineer in any realistic project, elements from all of these three layers matter. They are interconnected with each other, which can make the work quite complex. Therefore, it is not sufficient to be good at just one of these layers.
The following are the learning goals in this course. I think they are well-aligned with, what a future employer will expect from you. All goals should be useful in many situations and roles within technology.
Knowledge
Knowledge refers to the understanding of theories, facts, concepts, principles, procedures in subjects, subjects, and professions.
Learning Goal |
Comment |
1. Classify different types of requirements, and explain the main activities during requirements development. Recite potential problems during requirements engineering. |
In the end, you should be able to develop systems, that fulfill important requirements. To be able to do that, you should learn to ask the right questions. In particular, it is important to have an idea about what can go wrong during the development. Moreover, you should learn to anticipate customer concerns, even if they don't know themselves. |
2. Recognize modeling elements in UML, properly explain their semantics, and correctly map them to program code. This comprises use case, sequence, state machine and deployment diagrams, among others. |
UML defines many standard modeling diagrams. The actual syntax does not matter too much, but we need precision to detect flaws and achieve consistency. Once you have understood the basic diagram types, you can easily learn others (like for example BPEL). |
3. Understand and describe the main features of application protocols (like HTTP and MQTT), and select and apply them efficiently and correctly to a system architecture. |
Communication is what keeps system components together and makes them form a whole. Often, however, different system components are realized by different stakeholders, which makes fragile communication between system components a major concern. You should have the knowledge necessary to guarantee a stable communication between the distributed components. |
4. List and explain the main elements in a development method as for instance Scrum, and reason about their applicability in a given development context. |
Agile methods of some form are now used in many projects, even if they may easily lead to quality issues of the developed product. To use agile methods correctly and with success, you should learn their key concepts. |
Skills
Skills are the ability to apply knowledge to solve problems and tasks. There are different types of skills - cognitive, practical, creative and communicative skills.
Learning Goal |
Comment |
1. Capture user requirements and synthesize relevant use cases at a proper level of detail. |
This is a frequently underestimated skill. The resulting use cases are often written in text and don't look spectacular, but formulating bad use cases is the earliest phase in a project where things can go wrong. |
2. Write project deliverables that describe system requirements, properties and solutions. |
You should learn to produce the right documents by emphasizing relevant questions at a reasonable precision level. By doing this well, project problems can often be early uncovered, sometimes even before they arise. Again, you learn to ask the right questions. |
3. Plan and coordinate the development of larger software products within a team of developers. |
In order to coordinate a project, you need to know a lot about the architecture of a system, but also the process, how to build it, and potential pitfalls. |
4. Think in terms of states and transitions, and handle complex concurrent behavior correctly. |
It is a valuable skill for an engineer to handle concurrent behavior correctly, independently of the technical domain or the tools employed. |
5. Model different aspects of a system efficiently, especially with regard to an appropriate level of detail and the consistency between different views. |
Modeling is a universal engineering tool in all disciplines and at all stages of system development. |
6. Apply agile development methods and reflect about their usage within the context of a project. |
An important goal of this course is to be able to select the right development development method: For that you should be able to answer questions like, how much should you plan ahead, or if you should use an agile method or better not. Further, you should be able to read articles on development methods and understand them based on your own experience. |
7. Make proper design choices for the system architecture and document them accordingly. |
It is a paractically important skill to learn, how to reason about different alternatives together with others. This can happen at a whiteboard or through a document. No matter how, good visualizations are helpful to achieve this task. |
General Competence
General competence is to be able to apply knowledge and skills independently in different situations by showing collaborative ability, accountability, ability to reflect and critical thinking in educational and professional context.
Learning Goal |
Comment |
1. Organize and facilitate meetings in which use cases and user requirements are solicited, discussed and evaluated. |
In engineering, we often focus about building the system ''right''. Building the right system is equally important. |
2. Managing the work of several developers. |
The technical challenges are only one aspect, that make system development difficult. Co-workers and other resources also need to be handled and planned. |
3. Facilitate team discussions and brainstorming sessions. |
How can you organize collaboration with your colleagues so that work is done efficiently in a good working environment. |
4. Provide feedback to the work of others that is critical, constructive and relevant. |
Everybody likes to receive constructive feedback. Therefore, one needs to learn how to provide it best. |
5. Reflect over own work done individually and in a team. |
Reflection is the basis for improving and adjusting development processes. It also helps to create good learning and working conditions. |