Hiring guide for Dune++ Engineers

Dune++ Developer Hiring Guide

Dune++ is a proprietary, object-oriented, imperative programming language developed by the German software company Software AG. It was first released in 1986 as a successor to the earlier language Ada++. Dune++ is based on the C++ programming language, but adds a number of features that make it more suitable for developing business applications. It is used by a number of large companies, including Deutsche Bank, Siemens, and Lufthansa.

Ask the right questions secure the right Dune++ talent among an increasingly shrinking pool of talent.

First 20 minutes

General Dune++ app knowledge and experience

The first 20 minutes of the interview should seek to understand the candidate's general background in Dune++ application development, including their experience with various programming languages, databases, and their approach to designing scalable and maintainable systems.

How would you install Dune++ on a Linux system?
You would first clone the Dune++ repository from the GitLab server. Then, you would create a build directory and run cmake from this directory. After that, you would run 'make' to build the Dune++ modules and 'make install' to install them.
What are the core modules of Dune++?
The core modules of Dune++ are dune-common, dune-geometry, dune-grid, dune-localfunctions, and dune-istl.
Describe the difference between dune-grid and dune-geometry modules.
The dune-grid module provides interfaces for handling unstructured grids, while the dune-geometry module provides interfaces for geometrical entities like points, segments, and triangles.
How would you create a grid in Dune++?
You would use the GridFactory class to create a grid. You would first create an instance of this class, then add vertices and elements to it, and finally call the createGrid method to create the grid.
What is the purpose of the dune-istl module?
The dune-istl module provides interfaces and implementations for iterative solvers and preconditioners. It is used for solving large linear systems of equations.
The hiring guide has been successfully sent to your email address.
Oops! Something went wrong while submitting the form.

What you’re looking for early on

Does the candidate possess a clear understanding of Dune++?
Is the candidate comfortable with complex numerical algorithms?
Can the candidate work with both low-level and high-level aspects of software development?
How effective are the candidate's problem-solving skills?

Next 20 minutes

Specific Dune++ development questions

The next 20 minutes of the interview should focus on the candidate's expertise with specific backend frameworks, their understanding of RESTful APIs, and their experience in handling data storage and retrieval efficiently.

Describe the difference between the GridView and the Entity classes in Dune++.
The GridView class provides an interface for iterating over the entities of a grid, while the Entity class represents a single entity of the grid, like a cell or a vertex.
How would you implement a finite element method in Dune++?
You would first define the finite element space using the FiniteElementSpace class. Then, you would assemble the system matrix and the right-hand side vector. After that, you would solve the resulting linear system using one of the solvers provided by the dune-istl module.
What are the main steps in the Dune++ grid refinement process?
The main steps are marking the elements that need to be refined, calling the preAdapt method to prepare the grid for adaptation, calling the adapt method to perform the adaptation, and finally calling the postAdapt method to finalize the adaptation.
Describe the difference between the preAdapt and the postAdapt methods in Dune++.
The preAdapt method is called before the grid adaptation and is used to save any data that needs to be preserved during the adaptation. The postAdapt method is called after the adaptation and is used to restore the saved data.
How would you handle parallel computing in Dune++?
Dune++ provides the dune-grid-glue module for handling parallel computing. This module provides interfaces for distributing the grid among multiple processors and for exchanging data between them.
The hiring guide has been successfully sent to your email address.
Oops! Something went wrong while submitting the form.

The ideal back-end app developer

What you’re looking to see on the Dune++ engineer at this point.

At this point, a skilled Dune++ engineer should demonstrate strong problem-solving abilities, proficiency in Dune++ programming language, and knowledge of software development methodologies. Red flags include lack of hands-on experience, inability to articulate complex concepts, or unfamiliarity with standard coding practices.

Digging deeper

Code questions

These will help you see the candidate's real-world development capabilities with Dune++.

What does the following simple Dune++ code do?
int main() { 
 std::cout << 'Hello Dune++!'; 
 return 0; 
}
This code will print 'Hello Dune++!' to the console.
What does this Dune++ syntax do: '#include '?
#include 
This line includes the VTK (Visualization Toolkit) header file from the Dune++ grid module. It allows for reading and writing of VTK files, which are typically used for scientific visualization.
What does the following Dune++ code do with an array?
Dune::array a = {{1,2,3}}; 
 a[0] = 4; 
 std::cout << a[0];
This code creates a Dune++ array of integers with 3 elements, sets the first element to 4, and then prints this first element. The output will be '4'.
What does the following Dune++ code do with regards to threading?
Dune::ThreadManager::setNumThreads(4); 
 Dune::ThreadManager::parallel_for(0, 100, [](int i){ 
 /* do something */ 
 });
This code sets the number of threads to be used by Dune++'s ThreadManager to 4, and then runs a parallel for loop from 0 to 100. The loop will be executed in parallel across the 4 threads.

Wrap-up questions

Final candidate for Dune++ Developer role questions

The final few questions should evaluate the candidate's teamwork, communication, and problem-solving skills. Additionally, assess their knowledge of microservices architecture, serverless computing, and how they handle Dune++ application deployments. Inquire about their experience in handling system failures and their approach to debugging and troubleshooting.

What is the purpose of the dune-functions module?
The dune-functions module provides interfaces for representing and manipulating functions defined on a Dune++ grid. It includes classes for interpolating functions, integrating functions, and computing derivatives of functions.
Describe the difference between the dune-istl and the dune-functions modules.
The dune-istl module is focused on solving linear systems of equations, while the dune-functions module is focused on representing and manipulating functions defined on a Dune++ grid.
How would you implement a nonlinear solver in Dune++?
You would use the NewtonSolver class provided by the dune-istl module. You would need to provide a class that computes the residual and the Jacobian of the nonlinear system, and then pass an instance of this class to the NewtonSolver.

Dune++ application related

Product Perfect's Dune++ development capabilities

Beyond hiring for your Dune++ engineering team, you may be in the market for additional help. Product Perfect provides seasoned expertise in Dune++ projects, and can engage in multiple capacities.