What facts should be resident in a developer’s head?
I just finished reading this reddit thread about a guy that cheated to get a job (the original post doesn’t really shed a good light on anyone there) and the comments related to that.
That got me thinking about our own interview process and what kind of things I expect people to have in their head, for interviews, but also in general. In particular, this comment:
Honestly I wouldn't hire someone who couldn't code a search or sort algorithm on a whiteboard and tell me how efficient or inefficient it is.
Another example I heard of in a conference is literally examining people on Knuth. To the point where it you didn’t know chapter & verse for Oscillating Sort (literally, in what chapter is that covered), for example, you are obviously worthless and there is no point in continuing in the interview process.
For myself, I don’t think that I bother keeping any actual details about algorithms in my head. Much more important is to know about the algorithms, and to be able to have just enough information to recognize that it might be a viable option for my use case and then read up on the details.
In interviews, and in their work, I would expect people to know about big O complexity and be able to tell what kind of complexity a specific piece of code had, as well as whatever this was good or not.
As for implementing a sorting algorithm, I sort of remember the details on how quicksort work, for example. But actually writing that from scratch? There are far too many details for this to actually be a viable option.
- Lomuto or Hoare partitioning?
- What about choice of pivot?
- How about parallelism?
- How do you handled repeated elements?
I just pulled those from the wikipedia page, mostly because I remembered this post about how to answer such interview questions.
Implementation details shouldn’t matter (beyond understanding costs & complexities), so they shouldn’t take up valuable mental space in your head, that is why we can search for that. The important thing is that you know that you need to lookup additional information, as well as know how to do so.
Comments
Agreed - Albert Einstein: "I never commit to memory anything that can easily be looked up in a book"
You need enough in your head to be able to spot patterns, form connections, and make intuitive leaps.
Everything else: go and look it up.
I suspect it is more valuable to have a large breadth of knowledge, plus the skills to find and understand detailed information when necessary, than it is to keep the intricate details of a particular stack in the forefront of your mind.
Our technical interviews involve the candidate sitting down at a machine loaded with Visual Studio and tackling 10 questions tailored to their job description. We tell them we encourage them to use Google/search to look things up. We record the entire exam and review the video later. It is very telling: does the candidate even know what they should be looking for? It is a great insight and has been very valuable.
I agree with the other commentators here. It is all about knowing that you have seen this type of problem before and recognising that this type of problem is usually solved by x.
No way could I personally write an implementation on the whiteboard for a search/sort algorithm, not without studying for it anyway.
JV, Isn't that expensive in term of time (yours & the candidate)? How much time does it usually take them to go through it? And how much time does it take to review?
Not really. The candidates are given notice prior to them coming in. We allow for a max of 40 minutes. A good candidate can finish in around 15-20 minutes. Reviewing is generally faster, because we play back the video at faster speed. And, we can typically gauge how the candidate is going to do in the first few questions.
JV, What kind of tasks do you give them to do? 15 - 20 minutes is rarely enough time to do anything significantly broad in my opinion, certainly not 10 of them.
I can share my story :D
TL;DR "You are not a good coder, want to work at our super-company with a uber-complex projects?".
I am not a programmer, but am writing some code for myself from time to time. Quite comfortable with C# and DB providers. Have a pet project with RavenDB ;) Decided to apply for the junior position a few month ago. Usually, tests are good and fun to solve (file, console I/O, some loop's and maybe counting steps). Takes 4-6 hours.
One particular interview that I still remember was a set of 4 TIMED tests at Codility that you could take at home. Time limit - 4hrs for all tests.
1st: Sum [][] at rows/cols and check some conditions. Best case O() should be XXX and worst case O() YYY. 2nd: Write an SQL-query with inner sql. Failed that one :D 3rd: Find 2 errors in code. Not a small piece. and last one was easy, don't remember the task.
All tasks had some examples with your input - output. I was quite "amused" to see complexity, O-notation requirements, for timed task and that is why I still remember that.
That was a 3-stage application. 1. The first one was a talk with 2 programmers at their place. Passed. 2. Write test at home. Passed. 3. Follow-up at the office.
The last part was "funny". Were talking with a guy, dep.chef and a girl (hr). Both non-coding, according to linkedin. Two previous, coding, guys weren't there :) Technically, I wouldn't be there if I failed the assignment. Also, Codility assignments are checked with the unit tests and I've got my GREEN light.
Was told that my test wasn't that good. There are HIDDEN unit tests that failed and I am not allowed to see what/where. I couldn't defend myself because well... they don't write code :D They completely ignored the first part of the process, they knew that I am not using SQL directly and using Entity Framework. Simple CRUD is fine for me, but not the inner/complex queries. Why 4 tasks... one is more than enough.
Despite that, they actually invited me to take a short-term contract with some education on-site. Unfortunately, we had to say "no" to each other because of contract term and my current full-time job.
As I said, the assignment is tailored to the job description. It covers four basic C# questions, 4 basic SQL questions, 1 CSS question and 1 JavaScript question. I can see that an exam like this would scale in complexity depending on the job. That said: we are not building Voron over here. In the end, the developers we have hired have been fantastic.
Comment preview