A while ago we decided to hire a senior software developer for Meridian. The reason was I was leaving and they wanted to replace me with a new me! I participated in all the interviews and was responsible for asking the technical questions. I didn’t have much experience interviewing developers but it was a great experience.
Hiring programmers is not easy. The problem I had was that the resumes were generally much better than the actual person. You see this beautifully crafted documents full of carefully picked keywords compiled to impress recruiters and employers. But, in the face to face interview there is no sign of that glory. Good thing we don’t hire anyone just by their resume.
So what is the problem? Why are resumes much better than people? I have a few thoughts on that. There are two important problems with resumes these days. Oversell and Overconfidence.
The oversell problem is much more obvious. Finding a job is in fact a marketing practice. You are the seller and the employers are the potential customers. You want to seem bigger than you actually are because this is how marketing works. The other important player in the equation is the recruiter or hiring agent. It is amazing how many of the technical recruiters are in fact non-technical or at least not-that-technical. What do you think recruiters look for to find their candidates? The answer is keywords. Hiring is a keyword game. It is now customary to have a table of categorized keywords in your resume. Heck! I have a keyword table in the first page of my CV. You know why? Because it works. You will get indexed by search engines. You will get noticed. People will find you and offer you interviews. Apparently getting an interview is an achievement of its own. You have done a hello world app with AngularJS put in there. You’ve read about MongoDB or Closure the other day? Put it in there. You’ve heard that Ruby gets you hired? You know that Scrum is cool but your company have never done a project in Scrum? Don’t worry. Just put them all in your resume.
I don’t think that’s the developers’ fault though. They want jobs, the education sucks, not everyone is a social media junky and new frameworks and programming languages pop up every day. It’s a mess. It’s hard to keep up and funny enough, everyone expects you to do it. So what’s the quick and easy solution? Just lie!
Let’s talk about Overconfidence now. The vast majority of poker players think they are naturally talented and better than their peers. But becoming a really good poker player, takes study and hard work. It is the same with programming (or any other profession for that matter). Part of the problem of overly good resumes is that developers genuinely think they are good. Sometimes we don’t want to lie. We really think we are geniuses. From the 7 or 8 candidates that I have interviewed, almost all of them claimed to be fully proficient in C# and .NET. The form they had filed beforehand clearly stated that “Fully Proficient” means they can write text books on the subject. I really was intimidated by the look of the resumes. I’d tell myself what am I going to ask these people? Wouldn’t that be awkward if I ask a silly question and they start laughing at me?! But then, in the interview, everything changed. I would ask simple questions about delegates, generics or extension methods that anyone with 8 years of experience working with .NET framework and claiming to be a world class expert should be able to easily answer, but no. It was a bit disappointing and heart-warming for me at the same time.
Maybe, you would point out, that expecting everyone to remember every technical detail in a framework is not fair. You’d be right. How about the basics? Algorithms. I asked candidates to represent a graph in any form they want. None of them remembered adjacency matrix. When I asked them to find out if a graph is tree or not, again none of them knew about the relationship between the number of edges and nodes in a tree. Is this asking too much? Ok. How about XOR operator. Do you know what does XOR operator do? More than half of the candidates couldn’t answer the question. It was the same with dependency inversion, design patterns and SOLID principles. Everyone tells you they know them, but the reality is different.
Life for a programmer is sometimes isolated. Whether it is the nature of the work that requires constant focus or the habits of the practitioners, the result is you become isolated for long periods of time.
You create something from the scratch and it feels amazing. And then you get carried away. You will start to appreciate your abilities too much. You can easily become satisfied with what you already have and you will stop learning and pursuing the latest development in the industry.
I think a good programmer should never stop learning, should never stick to one technology, one programming language or one operating system and should never lose touch with the basics of computer science. And of course a good programmer should never be overconfident.