Well, that was unexpected. In the following, I’m trying to follow Jon Evans’ advice from “The Terrible Technical Interview”.
To: [email protected]
From: Ahmed Fasih
Subject: Re: Programming Test Invitation
Hi there! Thanks for offering to let me take a HackerRank test for ABC, I appreciate the vote of confidence.
I'd never heard of HackerRank, but after you wrote two other employers sent me their own HackerRank tests. Having worked on those tests first (I considered them practice, for the real thing with ABC :), I'd like to check if you have flexibility in finding an alternative way to evaluate my basic coding chops.
This is because, as functional programmer and author Paul Chiusano says, "Programming is all about managing complexity" [1], but HackerRank is quite bad at measuring my ability to manage complexity. It asks for small algorithmic coding puzzles to be done in unnatural conditions including (1) time limits, (2) forbidding research on Wikipedia or StackOverflow, (3) forbidding collaboration, and (4) forbidding the use of libraries (Python and JavaScript e.g. are so different when confined to their vanilla languages without Numpy/Pandas or lodash/npm packages).
I'm hoping ABC's recruitment policy is flexible enough to let me offer alternative, or at least parallel, routes to quantifying my skill in coding—skills in managing complexity, selecting libraries, and extending existing code, not just solving algorithmic puzzles. I have written a number of open-source projects that I'd love to spend two hours adding features and squashing bugs:
-
Ebisu is a Python (and JavaScript) library I wrote to implement a Bayesian estimation problem (for scheduling quizzes in spaced-repetition software): I have a detailed writeup on what it does at https://fasiha.github.io/ebisu/ and the source code lives at https://github.com/fasiha/ebisu
-
Mudder.js is a JavaScript library I wrote that implements simple arithmetic in arbitrarily-high-base numbering systems to lexicographically-subdivide string space, which is useful in NoSQL databases for use as keys: a detailed writeup is included in the repo at https://github.com/fasiha/mudderjs
-
The Texture Shaded Globe lets you interactively visualize the world's elevation and terrain after it's been texture-shaded, which is a fractional-Laplacian frequency-domain operation that I wrote in Python to work on ~100 gigabytes of data: the app is at https://fasiha.github.io/texshade-cesium-viewer/ and a description of it, with links to specific views, is at https://fasiha.github.io/post/texshade/
-
KanjiBreak is a webapp I wrote in JavaScript and Elm to collaborate with my friends and family who were also learning Chinese/Japanese characters. We are using it to make a character dependency graph: the app is at https://kanjibreak.glitch.me and includes a detailed "Help" section (it may take a few seconds to load the first time, since Glitch is a free resource that spins down inactive servers).
These are just four projects I picked as I scrolled through my list of recently-committed GitHub projects [2] that I think showcase not just skill in programming but also in math and design.
Would ABC be willing to work with me to define a better way to check my technical qualifications by choosing one of these projects (or any other project of mine!) to perhaps conduct a code review and/or add an enhancement that you would like to see? I think that would be a much more interesting and useful way to spend two hours, rather than implementing cute little algorithms inside an isolated environment like HackerRank.
I'm hoping that, if the HackerRank test turns out to be an absolute requirement for ABC, that we can do something like the above in addition to HackerRank.
Thanks for considering it! I'd love to work for ABC, and I hope I'm not being too forward or presumptuous by sending you this long email.
Best regards,
Ahmed
[1] See http://pchiusano.github.io/2017-01-20/why-not-haskell.html
[2] At https://github.com/fasiha?tab=repositories
Let me bring an employers view into the discussion.
It is correct that this is an unnatural step testing basic things not often used in practice. They are meant to be simple and easy, but are also often more academic than practical. The interview checking all the things mentioned in this post - architectural approach, dealing with complexity, etc - usually comes as a next step.
Online coding tests, however, simply set a minimum bar for entrance. Although the bar is fairly low, this filters out an unexpectedly large amount of candidates at a early stage. The purpose for the company is simply an early low-effort filtering step to save time.
I do agree they can be frustrating, having recently gone through multiple interviews myself. However, having been on the interviewer side, we have often spent multiple hours on candidates who seem perfect in a face to face interview and on paper, but then completely fall apart when faced with a simple coding challenge. After introducing a simple Codility test, our pool of candidates is of much higher quality, and we can avoid spending days on candidates who claim to have 3 years of Java experience but can't implement FizzBuzz. (A quick note: We could still hire a candidate like this, if we see otherwise potential and are looking for a junior position with no required work experience. I assume this is for a position requiring some work life experience.)
The only downside to HackerRank tests is some candidates may not be quick thinkers, but are otherwise excellent engineers, and can randomly fail these tests due to the pressure of the time limit. This is unfortunate, but from a hiring standpoint, I would rather risk to miss hiring an excellent engineer, than risk to hire a bad coworker.
A word of note on time limits: These are actually advantageous from a diversity perspective - people who have children and other responsibilities can have problems dedicating more than an hour time slot. Therefore restricting the time available makes the playing field even, regardless of if you are a parent, or young free and freshly graduated.
What does this mean for you as a candidate? Assuming you are competent, it means having to dedicate an extra hour or two per application for a trivial task. It is something I would prefer not to, but it is better than not getting an interview at all because some other person with no skills knew how to flair up his CV and bullshit his way through an interview.
Oh and a final word of warning: If a company gives you a online coding test, and then checks your skill in no other way, you may want to reconsider...