Thoughts on coding, software development & hiring.
Stop asking about stuff one doesn't need to get the job done
I used to work at a company that primarily developed web and mobile applications. To excel in that place, one needed familiarity with a few common frameworks, a good understanding of HTTP and REST and an ability to write code that’s not a ball of spaghetti. Daily work involved gluing together various web services with some diligent unit and integration tests. Nothing fancy pancy. And yet, if you were to interview at that company, you will be asked to explain in detail red-black trees, solutions to programming puzzles and space-time complexities of obscure algorithms.
The use of brainteasers in technical interviews has come under a lot of attack lately, but that’s just a symptom of a larger issue that plagues many technical interviews: testing for skills that aren’t critical to the role being interviewed for. Blame the much advertised hiring processes in companies like Google and Facebook. I see a lot of smaller companies modeling their interviews in the same mould, without really thinking about what will work for them. The end result? The seemingly rock solid new hires struggling to get their day-to-day stuff done.
Time for some blasphemy: one does not always need to know the nuts and bolts of hard-core computer science concepts to be a productive web or iOS developer. While having a strong grasp of CS fundamentals is no doubt desirable, it should not be the focus of technical interviews as I so often hear from friends. Instead of rejecting someone right away for not being able to explain an obscure data structure, or to derive the time complexity of a given algorithm, you should instead find out whether the candidate thinks that knowing such things is a drag and a waste of time. The latter is definitely a cause for concern and is a much more valid reason for turning down somebody.