It can be incredibly difficult to find the right Scala developer. You have to search through mountains of resumes sent by candidates and recruiters to find the right one. But at the end of the day, it is hard to tell which of these potential candidates will be able to do the job and which are simply not right for your organization. To make your job a little easier, we’ve written this article to explain exactly what you need to do to find the right Scala developer.
1. What you need to know about Scala to hire a Scala developer
Scala (/ˈskɑːlɑː/ skah-lah) is a general-purpose programming language providing support for functional programming and a strong static type system The design of Scala started in 2001 at the École Polytechnique Fédérale de Lausanne (EPFL) by Martin Odersky. It followed on from work on Funnel, a programming language combining ideas from functional programming and Petri nets. Odersky formerly worked on Generic Java, and javac, Sun’s Java compiler.
Scala is mainly used in backend development in highly concurrent applications.
Key advantages of Scala:
- Objects are immutable “by default” (e.g. all collections)
It makes the language much less error-prone, particularly in relation to threads.
- An advanced type system
More types mean that Scala can perform more kinds of tasks than languages with more basic type systems, like Java.
- Functional, object-oriented, and imperative programming are all possible
Different tasks require different styles of programming. While other languages only work with one or two programming styles, Scala works with all three. This means that a developer working in the Scala environment can perform more types of tasks without having to switch to a different programming environment.
2. What is important for IT Recruiter to know about Scala?
Above all else, there are three super important things that any technical recruiter should know when they are trying to fill a Scala developer position.
- Currently, Scala is the most popular functional programming language. While it has a number of different applications, probably it’s most popular used right now is in Big Data.
- Scala uses the same runtime environment as Java called the Java virtual machine. Because of this, it is completely interoperable with Java. That is a fancy way of saying that you can use Scala libraries for Java applications and Java libraries for Scala applications. This gives Scala developers have a huge advantage over other developers because they can access the incredibly large and diverse Java ecosystem.
- The one thing that can put developers off Scala is that has more complicated syntax in languages like Java or C#. As a result, the learning curve can be particularly steep, meaning it can be difficult to find a qualified Scala developer.
(In March 2015, former VP of the Platform Engineering group at Twitter Raffi Krikorian, stated he would not have chosen Scala in 2011 due to its learning curve. The same month, LinkedIn SVP Kevin Scott stated their decision to “minimize dependence on Scala.” In November 2011, Yammer moved away from Scala for reasons that included the learning curve for new team members and incompatibility from one version of the Scala compiler to the next) Source: Wikipedia
When searching for Scala developers, you have to understand that you’re going to be looking for an elite who have been willing to overcome the barriers to entry that the language poses.
3. How to verify Scala skills in the screening phase
3.1. Technical screening of Scala skills based on the candidate’s resume
Before doing any type of broader technical screening it’s worthwhile to check out your development candidates interest in functional programming. This means how interested they are in learning new languages as well as functional languages like Haskell, F sharp, and OCam.
Scala glossary for tech recruiter
|Scala frameworks and libraries||Backend: Akka, Finagle
Big data: Spark, Scalding
Web: Play, Lift, Scalatra
Utils: Scalaz, Cats
|Scala testing tools||ScalaTest, Specs2|
|Scala build tools||sbt (Simple Build Tool)|
Relations between respective versions of Scala technology:
Mostly version 2.12 is used with a smaller contingent of developers using version 2.11. Version 3.0 is scheduled to be released in 2020. These major Scala versions aren’t binary compatible – you need to recompile all libraries, but minor versions (2.11.1, 2.11.2 etc.) are; all versions are source compatible.
The significance of a Scala certificate for assessing a Scala developer’s skills
There are a lot of courses available. Most popular ones are offered by Lightbend which also issues certificates. But a lot of people are doing the Coursera Scala track, which is developed by Scala Center.
Check out these courses as well:
While certificates can show some aptitude, there are many more factors which determine whether a candidate will be the right Scala developer for you.
3.2. Technical screening of Scala skills during a phone/video interview
Usually, after a resume screen, the next step in the hiring process is to have a phone or video interview with a candidate. The main advantage of this part of the process is to be able to ask behavioral questions to see how your candidate would react in certain real-life situations. Often this is the main decider as to whether a candidate will be invited on site for a one-on-one technical interview so it’s important at this stage to ask the right technical questions.
Of course, these questions can vary depending on the types of skills that you are recruiting for. That said the questions here should be useful for filling any Scala developer position.
Q1: What is pattern matching?
Why you should ask this: It is important to know because Scala has a built-in general pattern-matching mechanism. This mechanism allows you to match it any sort of data with a first match policy.
Q2: What are case classes?
Why you should ask this: Case classes are unique to Scala. They’re actually just regular classes that have a few extra conditions added to them. They are immutable by default, decomposable through pattern-matching, compared by structural equality instead of by reference, and succinct to instantiate and operate on.
Q3: Which object-oriented patterns are implemented in Scala?
Why you should ask this: There are three main object-oriented patterns that a Scala developer should know. With Singleton, Scala provides direct realization of the Singleton pattern in the language. Value object patterns are possible by using Tuples, types, or case classes. Finally, in Scala, there’s a lazy keyword which offers lazy initialization
Q4: What is a trait and is there any equivalent in Java?
Why you should ask this: Traits are similar to interfaces in Java and partially implemented.
In addition to the specific technical questions, there are a number of behavioral questions which will be helpful in determining how your candidate will act in certain situations.
Q5: Which technologies have you had commercial experience within the past 2 years? What were your responsibilities? What was your biggest achievement?
Why you should ask this: Not all programming skills are created equal. Developers often have a wide variety of interests and have dabbled in a number of different Technologies but it is important to ascertain which they have a functional working knowledge of and which they simply have dabbled in. This question will also help show how will they have used the technology for commercial land.
Q6: Which Java open source libraries do you consider to be valuable and why?
Why you should ask this: Mentioned before Scala is interoperable with Java. Since Java has many more libraries to draw on the effectiveness of your Scylla engine year will be depending on how many of these libraries they are familiar with. This question will give you insight into what libraries outside of Scala your candidate is familiar with and how they have used it in the past.
Q7: I’ve noticed you listed framework X on your CV. What’s your opinion of it? Is it a good choice?
Why you should ask this: The real value of a developer is not simply their knowledge of the language for their ability to execute a project efficiently. The best are familiar with A number of tools and resources that Multiply the scope of what they are able to Achieve. this question will get to the heart of how comfortable the developer is using these outside resources to supercharge their software development.
3.3. Technical screening of Scala skills with an online coding test
Phone screens can give you a lot of information as can a thorough scan of a candidate’s resume, but at the end of the day, you need to be able to determine what the coding skills are of your candidate. After all, none of the screening methods mentioned up until now and actually tell you whether your candidate can code or not. For that, you need a coding test.
There are a number of ways currently offered to do coding tests. They range from whiteboard interviews to algorithmic testing platforms. Unfortunately, most of these methods don’t give you the information you need to make an informed decision. Data structures and algorithms are the basic building blocks of software but at the same time, they have little to do with the day-to-day work of a software developer. It would be like asking a backhoe operator to dig a hole with a shovel. Technically you’re testing how well they can move dirt but what you really want to know is how well they can use the tools available to them to efficiently dig a giant hole within a tight deadline.
In the same way, you don’t want to waste time in your recruitment process testing basic skills. Instead, you want to see how a developer uses all of the tools and resources available to them to deliver efficient solutions on time. Probably the best way to do this is with a work sample test. We’ve discussed elsewhere on this blog how to make a work sample test but here are the main points you should take into consideration when giving a work sample test to a Scala developer.
- You shouldn’t just test languages skills but also knowledge of the frameworks and libraries that your company uses
- Instead of relying on multiple choice questions, focus instead on the programming tasks
- Whenever possible, use a real task using your own codebase since it will give your candidate a taste of the kind of work they will be doing when they start working for you
- Treat the test like a normal day at work. This means giving the candidate access to tall the libraries, frameworks, and general resources they would use on a normal day. You aren’t testing their ability to memorize facts. Instead, you want to know whether they can create an amazing solution
The main advantage of this type of platform is that tests are delivered automatically so the candidate can take the test out there later from anywhere in the world. Not only that the platform automatically evaluates the code quality as well as the power of the solution without any input from any technical staff on your end. It is an efficient way to get an effective read on how well your candidate can do the job and is incredibly convenient both for your staff and for the candidate. This means that fewer candidates fall out of your pipeline and fewer hours are wasted having your expensive developers work on recruiting.
Author – Adam Warski
Adam is the founder and CTO of SoftwareMill, an end to end developer of custom software using Scala, Akka, Java, and other languages and interesting technologies. A frequent blogger, speaker, and open source contributor, you can keep up with Adam on the SoftwareMill Blog. Concentrated in Poland, SoftwareMill builds innovative applications and rescues great projects, all while working in close partnership with their customers.
4. Devskiller ready to use online Scala coding assessment
While Devskiller gives you the option to use your own code base for testing developers, not every company has the time or resources to build their own work sample test. For those companies, there are Devskiller’s pre-made Scala tests. Rather than dealing with abstract concepts, they all test your candidates by giving them a real-world task, the kind of tasks that they would encounter on their first day of work.
Contains the following tasks:
1) Multiple Choice - Answer 3 questions on Scala Basics.
2) Multiple Choice - Answer 3 questions on General Scala
3) Programming task - Headers parser - functional thinking and scala types
Contains the following tasks:
1) Multiple Choice - Answer 3 questions on Scala Basics.
2) Multiple Choice - Answer 3 questions on Intermediate Scala
3) Programming task - Implement a client handler for TCP stream messages, process them and send back result to the sender and databaseSaverActor.
Contains the following tasks:
1) Choice Questions - Verify knowledge of Ruby: Basic Knowledge of Ruby, Basic Errors, Basic Math, Basic Array Access, Basic Hash Access, and Ruby on Rails Controllers
2) Programming task - Implement the following mathematical operations: Add, Subtract, Multiply, Divide in Scala
Image source: godatafy