Hiring guide for Chapel Engineers

Chapel Developer Hiring Guide

Chapel is a parallel programming language developed by Cray Inc. with the aim of improving productivity on high-performance computing systems. It was first released in 2008 as part of the DARPA-led High Productivity Computing Systems program. Chapel supports a multithreaded execution model and offers features for both task and data parallelism, making it suitable for large-scale computations. Its design emphasizes general parallel programming, separating the concerns of parallelism and locality from algorithmic details. The language's development continues to be led by Cray, now a part of Hewlett Packard Enterprise.

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

First 20 minutes

General Chapel app knowledge and experience

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

How would you define a variable in Chapel?
You can define a variable in Chapel using the 'var' keyword followed by the variable name and its type. For example, 'var x: int;' defines an integer variable named x.
What are the basic data types in Chapel?
Chapel supports several basic data types including integers (int), floating-point numbers (real), complex numbers (complex), boolean values (bool), and characters (char).
How would you write a function in Chapel?
In Chapel, a function is defined using the 'proc' keyword followed by the function name, parameters, and body. For example, 'proc add(x: int, y: int) { return x + y; }' defines a function that adds two integers.
What is the purpose of the 'config' keyword in Chapel?
The 'config' keyword in Chapel is used to declare variables or constants that can be set via the command line when the program is run.
Describe the difference between 'in', 'out', and 'inout' intent in Chapel.
'in' intent is used when the argument is only for input, 'out' intent is used when the argument is only for output, and 'inout' intent is used when the argument is used for both input and output.
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 have a strong understanding of Chapel language?
Can the candidate solve problems using Chapel?
Does the candidate have experience with parallel computing?
Is the candidate able to communicate effectively about their work?

Next 20 minutes

Specific Chapel 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.

How would you create a multidimensional array in Chapel?
In Chapel, you can create a multidimensional array by defining the dimensions in the array declaration. For example, 'var A: [1..3, 1..3] int;' creates a 3x3 integer array.
What are the different types of Chapel domains and how are they used?
Chapel has several types of domains including regular domains, irregular domains, and associative domains. Regular domains are used for arrays with regular shapes, irregular domains are used for arrays with irregular shapes, and associative domains are used for arrays with non-integer indices.
How would you write a parallel loop in Chapel?
In Chapel, you can write a parallel loop using the 'forall' keyword. For example, 'forall i in 1..n do A[i] = i;' executes the loop in parallel.
Describe the difference between 'sync' and 'single' variables in Chapel.
'sync' variables in Chapel are used for synchronization and mutual exclusion, while 'single' variables are used for one-time assignment.
What is the purpose of the 'coforall' keyword in Chapel?
The 'coforall' keyword in Chapel is used to create a concurrent loop, where each iteration of the loop is executed in a separate task.
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 Chapel engineer at this point.

At this point, a skilled Chapel engineer should demonstrate strong problem-solving abilities, proficiency in Chapel 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 Chapel.

What does the following Chapel code do?
writeln('Hello, Chapel!');
This code prints the string 'Hello, Chapel!' to the standard output.
What will be the output of the following Chapel code?
var x: int = 10;
var y = 5;
var z = x + y;
writeln(z);
This code will output '15'. It declares two integer variables, x and y, assigns them the values 10 and 5 respectively, adds them together to get z, and then prints the value of z.
What does the following Chapel code do?
var A: [1..10] int;
A = 1..10;
writeln(A);
This code declares an array A of integers, assigns it the values from 1 to 10, and then prints the array.
What does the following Chapel code do?
coforall i in 1..10 {
  writeln(i);
}
This code creates a concurrent loop that prints the numbers from 1 to 10. Each iteration of the loop is a separate task that runs concurrently.

Wrap-up questions

Final candidate for Chapel 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 Chapel application deployments. Inquire about their experience in handling system failures and their approach to debugging and troubleshooting.

How would you handle exceptions in Chapel?
In Chapel, exceptions are handled using 'try', 'catch', and 'throw' keywords. The 'try' block contains the code that might throw an exception, the 'catch' block contains the code to handle the exception, and the 'throw' keyword is used to throw an exception.
What are the different ways to create tasks in Chapel?
In Chapel, tasks can be created using the 'begin', 'cobegin', and 'coforall' keywords. The 'begin' keyword creates a single task, the 'cobegin' keyword creates multiple tasks, and the 'coforall' keyword creates a task for each iteration of a loop.
Describe the difference between 'begin', 'cobegin', and 'coforall' in Chapel.
'begin' in Chapel is used to create a single asynchronous task, 'cobegin' is used to create multiple asynchronous tasks, and 'coforall' is used to create a separate task for each iteration of a loop.

Chapel application related

Product Perfect's Chapel development capabilities

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