a group of people are looking at a computer screen together.

Software Engineering Modules

These modules immerse future software engineers into the practical application of coding and technology, ensuring you learn to confidently bring complex software solutions to life. Gain hands-on skills to excel in the tech industry, transforming innovative ideas into reality through expert programming.

a group of people are sitting around a table in a classroom.

Orientation Semester

The first semester for every CODE student, where you get practical experience in all three disciplines, with professor guidance and project-based assignments.

Software is everywhere in today’s world — from our homes to outer space, from medicine to digital products, software is everywhere we look and a part of everyday life. Having a basic understanding of what software is, how it can be used, and how to engage with software as a creator and not just as a user is a key part of technoliteracy and an essential skill of the 21st century. In this module, students gain an understanding of the most important aspects of software engineering. Students encounter contemporary best practices of the software development process and how to apply these in practice. Students select and schedule their own learning path based on a set of offerings and reflect on their choices.

Students who successfully complete this module develop a basic understanding of Design and its application in both analog and digital contexts. Students are exposed to (and are required to deploy) a range of introductory methods, tools, and theories related to Design. Students explore topics (for example through design briefs or challenges) in groups or individually and through research, develop creative responses that are contextually appropriate. Students develop their knowledge and experience through engagement in Orientation Semester-specific workshops, peer-to-peer feedback and critique sessions, through learning-by-doing in project-focused work and reflective activities and outputs.

We live in a world of products. Almost everything that is designed and engineered in some way is made available to the world in the form of a product. The product mindset does not need to be only about commercial products, but equally applies to non-profit products and social innovation. Business, product and innovation managers help to define and bring to life digital and physical solutions to real-world needs and problems, while the entrepreneurial mindset ensures the viability of the products and organizations which build them, whether in a highly scalable startup, an established company of any size, or an NGO.
In this module, students gain a broad overview of perspectives and methods in business management and entrepreneurship. Students understand key elements of product discovery, market analysis and product strategy and apply them within guided exercises. Furthermore, students are introduced to the fundamental principles of agile product development, and they know the main aspects of the roles of business, product and innovation managers in organizations.

Project-based learning (PBL) is the core pedagogic approach at CODE University of Applied Sciences in which students are engaged in complex, real-world projects that are linked to their studies and encourage them to develop inquiry and problem solving abilities.
During this module students are exposed to key principles, methods, tools, and approaches of PBL which they will apply to a project that forms/is the synthesis of learning, outcomes, and outputs from OS_01, 02, 03. This is a practical module and students are expected to demonstrate a body of work that includes experiments, documentation, and reflection on practice throughout. The main objective is to provide students with sufficient background knowledge in Project-based learning that allows them to transition into core semester study.

a man is sitting at a desk using a laptop.

Core Semester

This is where you will spend the majority of your time, building projects, joining Learning Units and doing assessments. You decide which modules you want to take when and how to align them with your project work.

Software development is the process of building a software application, a key element in the larger software engineering process. A wide range of topics are covered in this module, which together allow a student to solve problems and practice using computer programming. The basic concepts of computer programming are covered here as well as the configuration and use of a computer for software development, including the command line interface and integrated development environment. Key elements of the practice of software development are also covered, including the process of iterative development, the use of version control, debugging, and the documentation process.

A number of basic algorithms and data structures are at the core of nearly every program. Inspecting algorithms and understanding their efficiency using techniques such as asymptomatic analysis key to the assessment of algorithms. Similarly, learning about common data structures and understanding the advantages and disadvantages is fundamental for students to be able to make informed decisions about what data structures to use and how to use them effectively.
In this module, students learn about the analysis of algorithms ,algorithm time complexity, and searching and sorting algorithms. Important data structures such as linked lists, arrays, hash tables, trees, and graphs are also part of this module.

There is a wide variety of programming languages, but these languages are usually based on common concepts. Understanding these common concepts makes it possible to quickly understand and learn and understand new languages and to make informed choices about the language(s) to use in a project.
This module introduces the concepts found in programming languages and their implementation into compiler or interpreter operations. Students develop an understanding of those concepts and the similarities and differences between languages. This is supplemented by knowledge of compilers/interpreters and their inner workings.

Network Programming is about creating software which communicates across a computer network. Computer operating systems provide access to the networks they are connected to via low-level APIs, such as sockets, and many programming languages and libraries provide implementations of common network layer protocols such as TCP and UDP, or application layer protocols such as HTTP, IMAP or FTP.
In this module, students investigate and answer questions such as: How does the choice of protocol affect the way an engineer architects and builds their software? Which network and software choices are “best practice” for transferring large amounts of data that need to arrive perfectly intact, or for real-time streaming of a multi-person video call, or for sending information from an array of IoT devices? What are the pros and cons of various types of network protocols? How does a software engineer design for a network connection that may be unreliable? Which protocols are useful for software that is running on a device not connected to the internet?

The need for storing, updating, managing and searching data in a machine-aggregable and comparable format while being accessed by multiple users simultaneously was observed early on in informatics and still remains a major challenge.
Starting with a discussion on how to define a data model, this module covers the basics of operating relational database systems, both the theoretical foundations with relational algebra as well as practical usages such as creating tables, storing data in normalized formats and manipulating information. Furthermore, students learn about data handling and manipulation techniques like aggregation, indexing, joining and handling huge amounts of data, as well as accessing data through an application by way of appropriate frameworks, e.g., using Object-Relationship Mappings (ORM). Advanced database objects like user defined functions, triggers or stored procedures are discussed. The motivation for serializing operations is discussed as well as the implementation of transactions and the option of transaction failure and error handling. The course concludes with an overview of state-of-the-art developments.

Building a new application frequently requires the implementation of an operational data store (ODS) in an early stage of design and development. Usually, this requires flexible database schemas and simple development. Further along in development, elastic scaling, accommodating a fast-growing dataset, and minimizing the use of system resources may play a significant role. NoSQL databases can solve these issues, especially for unstructured or semi-structured data or in a state of development where schema and requirements are still unclear. Furthermore, understanding NoSQL databases includes understanding different types, such as document databases, key-value databases, or graph databases. In this module, students learn how to configure and adapt a data model for NoSQL databases.They learn how to optimize efficiency and performance of the databases and how to access them while programming, including through the usage of source code and frameworks.

Software engineers often need to communicate about technical topics in writing, and the ability to do so well is an essential skill in the professional world. Technical documentation can cover such diverse topics as installation instructions, reference documentation, and conceptual system descriptions. In addition, today's documentation covers multiple formats and methods of dissemination, among them blog posts, wiki pages, emails, and traditional page-based documents. Finally, diagrams are an integral part of many documents, so it helps to be able to convey information well using diagrams.
In this module, students will learn to write technical documentation that is understandable and well-structured. The focus is on being able to transport information in written form in a clear and precise way.

Clean code is code that can be adapted to changing requirements. The alternative is code that grows more and more disorganized as it is changed over time, leading to slower and slower development. This module introduces clean code principles such as well structured functions, classes, and modules. It also covers methods for iteratively achieving a high code quality. This includes the ability to recognize potential quality issues (“code smells”) and leverage refactoring to improve quality.
Basic knowledge of automated testing is a prerequisite for this module, so completing SE_10 Automated Software Testing either concurrently with or before this module is strongly recommended.

Cyber Security is a specialized field that focuses on ensuring the confidentiality, integrity, and availability of software systems and data. Cyber Security encompasses various methods, practices, and tools to protect software systems and data from cyber threats, such as hacking, data breaches, and malware attacks. For Software Engineers, Cyber Security involves understanding and integrating security principles throughout the entire software development lifecycle.
Students who study this module develop an understanding of the core methods of Cyber Security, and apply them in a practical context.

Automated testing of software has grown in importance in the last two decades, mainly because refactoring and continuous deployment are next to impossible without well-written automated tests. This module focuses on automated testing in its different forms, including unit testing, integration testing and system testing. It also covers the practical ability to write tests for a piece of software and to judge whether these tests are sufficient or not.

Artificial intelligence seeks to enable artificial systems to act autonomously and rationally. This includes equipping them with basic capabilities of human intelligence, such as planning their own actions, reasoning on the basis of known information, or learning from experience.
Students who study this module develop a basic understanding of the core methods of artificial intelligence. This includes the concept of rational agents, the basics of machine learning, the basics of automated reasoning, and the basics of decision-making using rule-based approaches, planning, and optimization.

Students who study this module learn advanced techniques in machine learning. In order to achieve state-of-the-art results in machine learning, the engineer must apply advanced methods to find the right model and fine-tune it. To understand the results, it is useful to visualize the model itself but also the model's focus on input data, for example, understanding which part of an image was relevant to decide for a specific classification.
In this module, students prove their proficiency in the subject by doing a deep dive into a machine learning problem. Students focus on applying the respective methods, tools, and knowledge to the machine learning question within their project. Students show that they are able to make an educated decision on machine learning models and their configuration (e.g., layers and architectures of a neural network). They prove that they understand how the selected machine learning approach works and can support this by e.g., creating a visualization of their learning outcomes. Furthermore, their project demonstrates the student's ability to select and interpret appropriate evaluation-metrics, handle complex or unbalanced data, and use programming approaches that improve the performance of their chosen model.

Websites are an essential means of communication in the world we live in. Since the inception of the Web, its uses have stretched into nearly every corner of daily life, and its capabilities and architecture have become more refined and complex.
This is a broad module covering a general understanding of how a website works, what a web server is, how to dynamically generate and serve content, how a website can be made accessible via the internet, the use of HTTP, how it can be viewed by a user on a browser and what the DOM is, and how a website can receive input from the user. Students build an understanding of what choices they are free to make, e.g., choice of backend language. Students also learn to understand what the roles of HTML, CSS, and JavaScript are for a website and how they interact. Common architectures for websites, for example MVC or JAMStack are examined here as well.

Software engineering processes have evolved from the days of long release cycles, slow feedback, and a perpetual high tension between the teams responsible for developing software and those responsible for operating it. Continuous Integration, Delivery and Deployment are a set of practices which enable software developers to get rapid feedback on their progress while ensuring that the software is always ready to be released, and in doing so scale the engineering work of a team. These processes rely on many techniques including build automation, automated software testing, certain version control strategies, automated deployment pipelines, and monitoring of production software. Collectively known as “CI/CD”, this approach has dramatically improved the way software teams work together, changed the shape of organizations, and improved the reliability of software systems at the same time. CI/CD relies on many elements, both technical and cultural - the latter often being referred to as DevOps.
Students who study this module explore both the how and the why of this evolution. Furthermore, as CI/CD and DevOps become standard in the software engineering process, methodologies keep evolving, with related practices emerging and gaining traction. Such evolving best practices are covered in this module as well.

Scaling and growth of computational power depends on parallelization and concurrency. Even entry-level consumer computers are equipped with multicore machines, and any software which does not make use of the hardware’s capabilities is considered substandard. The associated non-deterministic scheduling has, however, brought new challenges into the process of software engineering, requiring an understanding of locking and synchronization. When network or protocol latencies are added on top of parallelization, a profound understanding of the system is required for efficient calculations.
This module covers both standard and emerging best-practices for parallelization and synchronization. Students examine the design and implementation of distributed computing systems and analyze the limits of a system in this context.

Linear algebra is at the core of many software engineering applications, including machine learning, 3D rendering, and image processing. Learning linear algebra notation operations are essential for understanding how math translates into meaning.
Students in this module learn systems of equations, vectors, matrices, and their relevant operations. Linear transformations and vector spaces are also examined.

This module covers differentiation and integration with one variable, differentiation of multivariate function and applications.

two men are working on a 3d printer.

Probability and statistics constitute a powerful framework that helps us understand, analyze, and visualize random processes. Probability helps us quantify uncertainty and thus make informed decisions about what is likely to happen based on the information we have. Statistics help us describe random phenomena and make inferences from data.
Students are introduced to the basic theory and practice of the discipline. This includes both descriptive and inferential statistics on simple datasets, as well as the foundations of probability theory as well as various interpretations of probability.

Scientific research is at the core of our modern societies. In this module, students acquire practical experience in a scientific research field of their choice.

Software systems tend toward chaos over time. It happens so often that researchers identified it as a pattern: “the big ball of mud”. To avoid this anti-pattern, software engineers are expected to have a strong sense of software design and to develop structure into their systems on a regular basis. This module introduces the common principles, patterns, and practices used to design software systems. There are several learning opportunities in the field to solve problems at different levels of software architecture, from the organization of code within a single module, to the organization of multiple modules into a larger system. Students learn how to make design decisions based on the requirements of a problem and the trade-offs of different design options. Students also learn to balance effort and value in the design process by using "good enough" agile modeling artifacts for communicating and documenting their solutions

Optimization is a search technique that assigns values to a set of parameters such that they optimize the output of a given function. Examples span from microeconomics (e.g., maximizing the utility of a fixed budget or maximizing the revenue of a business) to control engineering (e.g., model predictive control). The task of engineering an optimization system requires an appropriate formalization of the optimization problem reflecting domain constraints, optimization goals and quality requirements. Solving the optimization problem requires the selection, configuration and evaluation of an appropriate algorithm.
In this module, students prove their optimization proficiency by doing a deep dive into a specific and advanced optimization problem. In the process, students develop a comprehensive understanding of optimization problems, constraints and quality requirements, optimization algorithms, and their configuration. The application of optimization in the context of this deep dive shows the ability to apply this understanding in a complex optimization problem.

Planning is a search technique that identifies a sequence of actions that lead from a start state to a goal state. Examples are calculating a route in a street graph, selecting moves for a game like chess, or scheduling production processes in a factory. The task of engineering a planning system requires an appropriate formalization of the planning problem reflecting the domain constraints, actions and goals. Solving the planning problem requires the selection, configuration and evaluation of an appropriate algorithm.
In this module, students prove their planning proficiency by doing a deep dive into a specific and advanced planning problem. In the process, students develop a deep understanding of planning problems, constraints, and goal formulations, as well as planning algorithms and planning heuristics. The application of planning in the context of this deep dive shows the ability to apply this understanding to a complex planning problem.

Publishing a research paper is a challenging task requiring specific skills. This includes knowing how to write a proper paper, follow documentation standards, follow good scientific practices, understand peer reviews, and write a rebuttal. Students in this module learn how to go through this process for the first time. Students also explore how to select the right journal, understand their specific requirements, what a peer review is, and how to manage the actual publication process.
As a precondition for the module, students should have research results they intend to publish or a project setup that will produce such results.

Mathematics is essential for programming, digital products, technology, and engineering. In this module, students build the framework of mathematics for further study and real-world projects. The module covers a variety of mathematical methods from fields including linear algebra, calculus, set theory, and graph theory, which together provide a foundation for advanced mathematics and a toolkit for use in real-world applications.

Digital fabrication is the creation of physical items from software-based three-dimensional (3D) models. It is typically used for low-volume (or one-off) production. Examples for tools used for the actual production are 3D printers, laser cutters, and computer numerical control (CNC) mills. All of these production methods have a fairly low setup cost and low turnaround time, making them suitable for use in prototyping contexts.
This is a broad overview module. Students learn about relevant tools and methods of 3D software modeling and options available for digital fabrication based on those models.

Data Science seeks to transform data into knowledge by combining computer power, critical thinking and domain knowledge. Students who study this module learn how to use state of the art techniques to explore data using statistics and visualizations. Through the use of real world case studies this module discusses how to draw and assess conclusions derived from data.

This module is focused on applying data analysis skills to extract knowledge from complex datasets. Students doing this module learn how to perform data acquisition, wrangle datasets and explore them using appropriate methods. Students should be able to communicate their results in a scientific way.

Embedded systems - computers that are a part of a larger device - play a huge role in today's world. In most cases, the computers used are microcontrollers: highly resource-constrained, low-power systems without an operating system. Developing for these systems is significantly different from development for larger systems, since much of the infrastructure that is generally taken for granted is not available.
In this module, students will learn to develop complex embedded systems on microcontrollers. Students are expected to apply this knowledge by contributing significantly to a complex embedded application.

Web Frontend Technologies have become sophisticated and complex in recent years, allowing for new browser capabilities, a bustling ecosystem of tooling, new architecture patterns, and a new way of thinking about and building websites.
Students in this module learn about contemporary best practices in frontend web application development. The core of this module is a focus on building advanced websites in a secure, modern, and accessible fashion. This includes utilizing a stateful client or pushing the limits of computation in the browser by incorporating new technologies and developments.
Students are expected to apply this knowledge by contributing significantly to the engineering of a complex frontend web application.

Web backend development has grown into a mature field with proven best practices, a focus on designing software for horizontal scalability, and the ability to serve multiple clients via APIs in a secure, modern, and fast network interface. Various software design patterns are used in practice, often dependent upon server architecture.
Students who study this module focus on the question of how to build software applications that are performant, secure, and scalable in a given context. They are also able to make informed decisions about the tech stack and general development approach.
Students are expected to apply this knowledge by contributing significantly to the engineering of a complex web backend application.

This module focuses on the development of mobile applications and common issues and frameworks associated with this activity. This includes the challenges resulting from varying devices, the technological difference between the prevalent platforms, and limited connectivity.
Students are expected to apply this knowledge by contributing significantly to the engineering of a complex mobile application.

Cloud computing is the practice of using computer infrastructure and services in a flexible manner, delivered over a network. This encompasses computation, storage, and dedicated services. The widespread availability of cloud computing has changed the shape of organizations, impacted software architecture, legislation, and changed the software development process itself.
Students in this module learn about what cloud computing is and how to use it. The module encompasses the use of typical services offered in a cloud and the ways in which cloud computing can be leveraged to help the software engineering process. Students also investigate pitfalls such as high cost, compliance issues, and vendor lock-in. Furthermore, students gain practical experience with tools and methods associated with cloud computing including programmable infrastructure, containerization and orchestration of containers, and serverless software.
Students are expected to apply this knowledge by contributing significantly to a cloud computing architecture.

The invention of Bitcoin in 2008 and the development of subsequent blockchains have revolutionized the way data can be stored, managed, and retrieved in a decentralized fashion by providing global consistent state information that is protected by a consensus among the participants of the network. On top of that, Web3 has emerged, which is based upon a novel set of protocols and crypto assets that facilitate various decentralized applications.
Crypto assets can be considered as exchangeable virtual assets that utilize cryptography and are shared via a distributed ledger. Within all crypto assets, the native cryptocurrencies have been a major driving force behind developments in the field for several years. At the same time, various token systems have emerged, comprising both fungible tokens (such as ERC20-based tokens) and non-fungible tokens, which can represent, for example, digital collectibles or domain names. Token systems were introduced as custom implementations of smart contacts. Their code is executed upon receipt of a transaction and smart contract accounts can store and modify local state and implement arbitrary computations. Other important aspects of Distributed Ledger Technologies (DLTs) are scaling solutions and state channels, wallet solutions for end users, the design of governance processes as well as IT operations for Blockchains and DLTs.
Students are expected to apply this knowledge by contributing significantly to the engineering of a complex decentralized application.

Software engineering is both a very broad domain and a domain of rapid change. New technologies evolve fast, others are niche topics only covered by some experts. Students in this module focus on finding a special SE topic, conduct research on appropriate learning resources, and explore the topic in depth. Furthermore, they learn the process of understanding the requirements derived from implementing their specialty topics and become familiar with the respective tools and methods related to this project. By applying these in the scope of a project, students learn to gain professional knowledge and application skills in a chosen topic in a self-directed manner.

a man in a red sweater sits at a desk in front of a computer

Choose your own study path

To encourage your curiosity, CODE offers a flexible study path, that is individual to each student. In your core semesters, you can choose modules from each study program to shape your journey based on your specific interests.

Apply to CODE and start your journey now!

Our admission process is designed to find out if CODE is the right place for you - and you are the right person for CODE. This is why our admission process aims to challenge your drive and curiosity.