How are Scala programmers being interviewed? What are the aspects that the interviewer looks for when interviewing a Scala developer?
First, I would say, think why you need a Scala developer. Is it really Scala that you need? Think about what comes along with Scala (IDE, build tools, libs, another layer of complexity above Java etc ...). Back to the question. It goes in two aspects: Theoretical understanding and practical abilities. don't let the "theory" thing fool you. It's as important in Scala as practicality is important in Java.
- See if they know what functional paradigm is really about. Ask them to compare the two paradigms (FP vs imperative that is) in philosophy and practice. If they can give examples from languages that has full or partial support for FP, then it's a plus for them.
Theory and practice mingled
- See if they can actually do functional programming in the right way. Ask them about lists, maps, zipping and recursion. Then comes the closures, lambdas, reduction, higher order functions and immutability.
See if they can refactor an imperative code snippet into a good functional alternative (see above). Try a loop that implements some math or something along these lines.
Find their taste for functional vs imperative style. Opt for a more functional style but take caution it doesn't get to the extremes on the developer's side.
See how much they know about Scala libs (e.g. Lift, dispatch etc) and tools (e.g. SBT, fsc, IDEA).
See how well they can leverage Java (code -and- tools). Scala is tightly coupled to Java specially in more serious environments. Knowing this is a big plus.
- Ask them to compare Scala to Java (PHP, C++, Objective C or whatever) and require them to tell you what is wrong with Scala. See if they understand the problems as well as the advantages. Ask them to give real-world examples of when Scala's shortcomings may cause trouble (e.g. It's hard for new Joes to get along, it's immature as support is very limited compared to Java etc)
See if they are connected to the community. Ask them about Martin Odersky and David Pollak. Ask them to name few Scala projects and describe them to you (Facebook, Twitter, FourSquare, DBPedia and DBPedia SpotLight). See if they know how exactly Scala is used in these projects. Have they read the articles, watched the videos, etc.?
Ask them about the books (there are only a few). The more they know the better.
As one final word of caution I may say that brilliant languages have this strange potential to attract the wrong people. Be careful about the kind that comes to Scala for all the wrong reasons. Here are few:
- Scala is for the privileged (I feel smart, I feel so different from other Joes, I've got a brand new shiny Ph.D, I hate imperative because it's for the retarded, Java is superficial, Scala is so elegant, etc.). This type is not productive in serious projects and difficult to get along with.
- I'm in love with Scala's syntax and would love to write my DSL everywhere I get the chance to code. This kind loves to exploit Scala's peculiarities to the last drop in a destructive way. They feel great to write cryptic and over-concise code to the point of being illegible. This kind is particularly dangerous as their code is unreadable. Their giveaway is their love for operator overloading, strange names and writing one-liners.
- I stick with Scala to the last drop no matter what. This is the naive purist type. They can't trade off and project suffers when a hybrid approach is required as is the case with real world projects.
P.S: If you found a good Joe then please by all means let me know as we need some ;)
In a real-world interview, simply knowing Scala is half the battle won. Hiring a good programmer is always difficult, regardless of the language!
Scala programmers tend to come to the language because they were already at the top of their game in Java and wanted to “take it to the next level”.
If you have a plentiful supply of Scala developers available for interview, then consider yourself lucky. If not, the more relevant questions might be “What aspects should I look for in a programmer who I'll be training to use Scala?” and “What companies are currently able to provide training services?”
I like to see solutions to little problems like this: Make a histogram of the outcomes of throwing two six-sided dice 200 times.
See the comments here for some interesting answers: http://briccetti.blogspot.com/2011/01/dice-throw-simulation-in-java-and-scala.html
Someone with a solution like Daniel Sobral’s, or this one from Kevin Wright: http://ideone.com/8LFs3 would be worth a closer look.
If the answer looks like Java code, then the applicant might not be far enough along.
I would also like to see that the person is connected to the Scala community: Knows the books, authors, open source developers, user groups, interesting people.