Hiring guide for Inko Engineers

Inko Developer Hiring Guide

Inko is a dynamically-typed, concurrent, and object-oriented programming language designed for writing scalable and distributed systems. It was developed by Yorick Peterse in 2018 with the aim of providing a language that is easy to learn and use, yet powerful enough to build complex software systems. Inko's syntax is heavily influenced by Ruby, while its concurrency model draws inspiration from Erlang and Pony. The language uses automatic memory management through garbage collection, reducing the risk of memory leaks. Detailed information about Inko can be found on its official website (https://inko-lang.org/) and GitHub repository (https://github.com/inko-lang/inko).

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

First 20 minutes

General Inko app knowledge and experience

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

How would you create a new object in Inko?
In Inko, you create a new object by using the 'new' keyword followed by the name of the object. For example: 'let myObject = new MyObjectType'.
What are the basic data types in Inko?
Inko has several basic data types including Integer, Float, Boolean, String, Array, and Map.
How would you define a method in Inko?
In Inko, a method is defined using the 'def' keyword, followed by the method name, parameters in parentheses, and the method body enclosed in curly braces. For example: 'def myMethod(param1: Type, param2: Type) -> ReturnType { ... }'.
Describe the difference between 'let' and 'var' in Inko.
'let' is used to declare a constant, its value cannot be changed once assigned. On the other hand, 'var' is used to declare a variable, its value can be changed.
How would you perform error handling in Inko?
Inko uses the 'try' and 'throw' keywords for error handling. You can 'throw' an error and then 'try' to catch it in a 'catch' block.
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 Inko's syntax and semantics?
Has the candidate demonstrated problem-solving skills?
Is the candidate familiar with the standard library of Inko?
Can the candidate effectively communicate their thought process and reasoning?

Next 20 minutes

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

What are the steps to install Inko?
You can install Inko using the ienv script. You need to download it, make it executable using 'chmod', and then run it. The script will install Inko in your home directory.
How would you implement inheritance in Inko?
Inko uses the 'trait' keyword to define a trait, which can then be implemented by an object using the 'impl' keyword.
Describe the difference between synchronous and asynchronous programming in Inko.
Synchronous programming means the code is executed sequentially, one line after the other. Asynchronous programming means the code execution is not linear, it can execute different pieces of code at the same time.
How would you create a new trait in Inko?
In Inko, you create a new trait using the 'trait' keyword, followed by the trait name and the trait body enclosed in curly braces.
What are the main features of Inko?
Inko has several main features including a garbage collector, support for concurrent programming, and a simple, expressive syntax.
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 Inko engineer at this point.

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

What does the following Inko code do?
import std::fs::file

let path = '/tmp/test.txt'
let contents = file.read_text(path)

match contents {
  Ok(c) => c.print()
  Err(e) => e.message.print()
}
This code reads the contents of a file located at '/tmp/test.txt' and prints it to the console. If the file cannot be read, it prints the error message.
What will be the output of the following Inko code?
let x = 10
let y = 20

if x > y {
  'x is greater'.print()
} else {
  'y is greater'.print()
}
The output of this code will be 'y is greater' because the value of y (20) is greater than the value of x (10).
What does the following Inko code do?
let numbers = Array.new(1, 2, 3, 4, 5)
let sum = numbers.reduce(0) do (total, number) {
  total + number
}
sum.print()
This code creates an array of numbers from 1 to 5, then uses the 'reduce' method to calculate the sum of all numbers in the array, and finally prints the sum.
What does the following Inko code do?
import std::process

let p = process.spawn do {
  'Hello, World!'.print()
}
p.wait()
This code spawns a new process that prints 'Hello, World!' to the console. The main process then waits for the spawned process to finish.

Wrap-up questions

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

How would you handle exceptions in Inko?
Inko uses the 'try', 'throw', and 'catch' keywords for exception handling. You can 'throw' an exception and then 'try' to catch it in a 'catch' block.
Describe the difference between static and dynamic typing in Inko.
Inko is a statically typed language, which means that the type of a variable is known at compile time. Dynamic typing, on the other hand, means that the type is known at runtime.
How would you use the 'match' keyword in Inko?
The 'match' keyword in Inko is used for pattern matching. It is similar to the switch statement in other languages, but more powerful.

Inko application related

Product Perfect's Inko development capabilities

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