Candidate with strong theory but less practical skill vs. confident coder with mediocre theory?

Posted by NightestOfTheOwls@reddit | ExperiencedDevs | View on Reddit | 200 comments

We've been looking for a Java developer for a little while now, and while most candidates are predictably mediocre and somewhat fine in everything, every now and then you'd get one of those guys:

  1. Very good at theory, knows, a lot of details, trivia and "how things work" but has below average code reading and writing skills. Either writes too slow and with mistakes, unable to find bugs in existing code or properly architect a solution

  2. Confident at writing code, generally solves the problem in an acceptable way but seriously lacks the knowledge, often saying "I don't know\don't remember that", "Can I google/look up docs?", "I don't know how (algorithm) works, can you remind me?" and sometimes uses suboptimal solutions due to not knowing advanced Java and SQL functionalities

Either way, in cases like these I'm often leaning towards the latter type, because it just seems easier to get them to start meaningfully contributing, while when hiring the former type we had cases where a seemingly great candidate who knew the language and theory perfectly was struggling to create a simple controller according to specifications (and it REALLY didn't sound like he was cheating on the interview, but maybe we're just bad at catching this kind of thing). On the other hand, the former type of guy could just be nervous on the interview and just needs to get into some kind of "flow" once on-board.

In your experience, was hiring a know-it-all and getting them up to speed more beneficial over getting a productive coder with a noticeable lack of knowledge and filling in the gaps via code reviews and mentorship sessions?