As chief architect of an Ad-Tech startup, part of my role involves hiring and mentoring software engineering candidates. Our technology stack includes Scala, SBT, Akka, Spray, Spark + MLlib, AWS, Ecmascript 6, BeEF, Linux environment, Git, Docker, Bash, Kafka, ELK, NGinX, and as of today, Mesosphere. I can tell you, it ain't easy to find Scala Devs. IMHO, a suitable candidate must demonstrate that they are capable of diving in and learning frameworks that make up the Scala ecosystem.
Now, you can conduct a technical interview and watch said candidate sweat while they try to explain to you the merits of recursive singletons (joke), but that won't tell you whether they can
- learn on their own
- grasp concepts
- code elegantly in Scala (without being under the artificial pressure of an interview)
- integrate disparate technologies
Its not enough for a software engineer to grasp the syntax of a programming language. More is expected.
I constructed the following exercise, which I give candidates a week to do in their own time:
Part 1 - Spray
This exercise will
demonstrate the candidates' ability to learn and apply the
basics of Spray
-
Create a
simple Spray Restful Server with a Route that exposes 1 GET
endpoint.
-
This endpoint
will expect a querystring parameter that will contain a string.
-
The endpoint
functionality will be to reverse the string passed in the Request
and return it as the Response
-
Write a unit
test for the Route
Part 2 - Akka
This exercise will
demonstrate the candidtate's ability to learn and apply the
basics of Akka
Part 3 - Bash
This exercise will
demonstrate the ability to write a basic bash script
-
check for the
existence of the text file
-
run the Spray
service
-
run the Akka
app, passing in the path to the text file
-
read the
output file that the Akka program produced – select the top 5
words with the highest counts
-
curl these
words to the spray service and display the output
Part 4 - Git
This simple exercise
will demonstrate the ability to use
basic
source control
If you can do these basic tasks - congratulations, you are Scala job-worthy.