Background
Profile

Troels Kaldau

Software Developer with a focus on end-to-end mobile applications

Experience
Projects
Skills
Header Image

Bachelor in Software Engineering at the University of Southern Denmark

September 2020 - June 2023

TL;DR

I completed a bachelor's degree in software engineering at the University of Southern Denmark, focusing on collaboration, iterative development, and foundational software principles. The program emphasized practical learning through team projects and theoretical courses in areas like project management, system design, algorithms, and DevOps. For my final project, I replaced a Firebase backend with a custom real-time solution using NestJS and gRPC, showcasing my ability to design and implement scalable backend systems.

The University of Southern Denmark is a public university with campuses across Denmark. The Odense campus, where I studied, is home to more than 20,000 students and includes five faculties: Humanities, Science, Engineering, Health Sciences, and Social Sciences.

SDU website (December 2024)

SDU website (December 2024)

I began my bachelor's in software engineering at the University of Southern Denmark in 2020. The program is a three-year course with a broad focus, preparing students to tackle various challenges in software development. Each semester contained theoretical courses to lay the foundational knowledge of a Software Engineer. The first four semesters also included semester projects, the fifth semester included 3 electives, and the sixth semester culminated in the final bachelor project.

Semester projects were completed in groups of 4-6 students and emphasized collaboration, project management, and software development. These projects often incorporated theoretical learnings from the semester, leading us to discover the best approaches as the projects progressed.

1st semester project main page

1st semester project main page

The first semester project was a game based on the Java project "World of Zuul." We initially implemented it as a CLI project and then developed a graphical interface using JavaFX. The project primarily focused on requirement elicitation and software design, with less emphasis on the implementation. Since some team members, including myself, had prior Java experience, the implementation was completed smoothly. This project served as an excellent introduction to the program and helped us build teamwork skills.

Loading PDF...

2nd semester project report

The second semester project revolved around a case study provided by TV 2, to design a credit management system for TV shows. The project evolved through two iterations: the first used a local file-based system, and the second transitioned to a PostgreSQL database.

As the most experienced member of the group, I led the project, dividing tasks, delegating responsibilities, and handling complex implementations. The work emphasized requirements elicitation, iterative development using Unified Process and SCRUM, and designing a user-friendly JavaFX interface. Key features included role-based access for administrators and producers, credit validation workflows, and data export in XML and CSV formats.

This project not only demonstrated our grasp of software engineering principles but also provided valuable experience in team leadership and effective management of the software development lifecycle.

Loading PDF...

4th semester project report

In the fourth semester, we developed a 2D Tower Defense game as part of the Intelligent Software Systems course. The project incorporated learnings from courses on Algorithms and Data Structures, Artificial Intelligence, and Component-Based Software Engineering.

The game used the OSGi framework, enabling dynamic loading and unloading of components like towers, enemies, and players during runtime. A key technical highlight was implementing the A* algorithm for pathfinding, allowing enemies to navigate the map efficiently. Towers prioritized targets using a heuristic system that considered factors like distance and health, optimized through the use of min-heaps.

Despite the project requiring unsuitable technologies, the experience taught us the value of adapting to constraints—an essential skill in software engineering.

A software engineering degree is not just about mastering technologies but also about learning how to learn. While the semester projects were a great way to apply theoretical knowledge, the courses themselves formed the program's foundation. These courses can be categorized into Planning, Implementation, Data Management, Visual Design, and Mathematics.

Planning was a cornerstone of the program, with courses in project management, system architecture, and cybersecurity. These courses emphasized evaluating, describing, and estimating implementation plans and measuring how well the final product met the original objectives. Despite being theoretical, these courses were some of the most valuable in the program.

The implementation courses focused on building features, refactoring code, and setting up environments and CI/CD pipelines. Courses were primarily in Java but also covered Python, C#, and JavaScript. Among these, the DevOps course, run by the external company Eficode, stood out for its practical approach to Git, GitHub Actions, Docker, and coding environments.

Throughout the program, we worked with various data storage methods, including file-based storage, SQL databases like PostgreSQL, and NoSQL databases like MongoDB. We covered topics such as data normalization, indexing, querying, caching, sharding, replication, and redundancy.

Courses on visual and UI design included web, mobile, Human-Computer Interaction, and Interactive Design courses. These courses taught me to create user-friendly applications accessible to non-technical users and introduced frameworks like React, Flutter, and Android.

Mathematics was integral to the program, providing logical and analytical skills necessary for problem-solving in software development. Topics like algorithms, discrete mathematics, and linear algebra were essential for optimizing complex systems. Courses like Statistics and Artificial Intelligence clarified and demonstrated practical applications of mathematics in software development.

My education at the University of Southern Denmark provided a comprehensive foundation in software engineering, blending theoretical understanding with practical application. From mastering project management and system design to implementing real-world solutions, the program equipped me with the skills to navigate the complexities of software development. The emphasis on collaboration, problem-solving, and adaptability prepared me to tackle challenges across the software lifecycle.

Also Read:

/assets/high-res/server_performance.webp

Project

gRPC Performance Analysis

Optimized a real-time system using gRPC, achieving low latency and high scalability for 500+ concurrent clients for my bachelor's thesis