Practical Introduction to Scientific Software Engineering and Design

Practical Introduction to Scientific Software Engineering and Design

Course description

In this course, we dive into the practical aspects of software engineering and design specifically tailored for scientific software. By leveraging an example workflow and software, we'll guide through the implementation of crucial software engineering and design principles, emphasizing their significance and application.

We take the viewpoint of an academic software developer that is exposed to an existing code base with task to add additional functionality. We will show how to deal with common obstacles like missing tests, interposed functional aspects and inherited technical debt.

Using practical hands on sessions participants will interactive learn how they can utilize software development techniques to tackle those problems in practice.

Note: The workshop is a hybrid event. The number of participants on site is limited to 20.


Click here to register.

Participants will learn

a) code exploration
b) code-cleanup and refactoring
c) testing and basic validation techniques
d) aspects of software engineering


First day

Morning Session (9:00 - 12:00)

  • 9:00 Introduction to scenario: PI wants you to do "something" ...
  • 10:00 Getting started: Version control + basic testing
  • 11:00 Interactive session: Mob-review of the Gradient descent demo code

Afternoon session (13:00 - 17:00)

  • 13:00 Guideline for refactoring: Single Responsibility Principle (SRP) 
  • 13:10 Interactive session: Demo code refactoring 
  • 13:30 Discussion of software engineering aspects for the demo code
  • 15:00 Hands-on: Refactoring the demo code
  • 16:30 Code-discussion, summary and Q&A 

Approximate end: 17:00

Second day

Morning session (9:00 - 12:00)

  • 9:00 Recap day 1
  • 9:15 Software testing and aspects test-driven development
  • 10:30 Mob-coding: Develop software tests for the demo code
  • 11:30 Hands-on: Develop additional software tests for the demo code

Afternoon session (13:00 - max 17:00)

  • 13:00 Introduction to Adagrad
  • 13:30 Hands-on: Extend demo code with Adagrad
  • 15:30 Group discussion about software engineering aspect within the example
  • 16:15 Wrap-up and Q&A

End latest: 17:00


  • Knowledge about the C++ programming language
  • Solid programming experience