Charlatan developers and the Blunt truth

Summary: A rant on political correctness in the programming world.

Ayende, developer of RavenDB and author of popular programming blog, has been blogging the ugly, cringeworthy interviews resulting from his company’s recent hiring round.

Some developers couldn’t sort a list of strings. Others didn’t know what framework they were developing in. Aptly summing the lot, one developer with 6 years experience and a CV mentioning multi-threading experience said, "I only know BackgroundWorker."

The short of it is, we have a lot of charlatans in our industry. (See Why can’t programmers…program?)

But the comments to these posts tell a different story: bleeding hearts sympathizing with the interviewee and chiding Ayende for blogging about the bad interview.

Kelly Somers (@kellabyte), big data extraordinaire, complained:

"As an employer, I don’t think posts like this are a professional way to behave. Although they are anonymous, there is a human trying to make a living being humiliated here and I can only imagine how they might feel after having a bad interview only to then read it up on the internet in the public eye."

Patrick Smacchia, creator of NDepend, chimed in agreement,

"I am with Kelly here…You’d better mention only positive things that happen in the interview room."

“Only the positive things.” ಠ_ಠ

I have much respect for both Kelly and Patrick and the things they’ve built. However, what’s more important, a person’s hurt feelings or telling the truth?

If I was that interviewee, I’d feel bad, sure, but I’d also come to appreciate the truthful feedback. I’d want to know that I’m failing to use loops. Had I interviewed at DataStax or NDepend, I’d probably be calling them repeatedly, receiving uncertain answers about whether I’m hired or not, everyone beating around the bush and no one telling me just why it is that my calls aren’t being returned.

Contrast with Ayende’s approach, I’d just know straight up my current skills are lacking, and that I shouldn’t be advertising my many years of developer expertise if I can’t work with for loops.

When I visited Israel the other year, people were blunt, to-the-point, and honest. It was jarring, but good. Having lived in the US for my entire life, it’s been drilled into me that you never say what’s really on your mind. Criticism should be withheld for sake of politeness. If it will offend someone, nobody really tells the truth here.

Ayende’s honesty is wonderful for that reason. Yes, even if it were my code being criticized, I’d appreciate the honesty. Wouldn’t you?

I suspect this blunt honesty is foreign to most folks from the US, and is the reason some people are chiming in with bleeding hearts. They think "positive only" is better. “Think of the human being searching for a job!” But this sort of thinking is not really thinking at all, but rather emoting, thinking with your emotions rather than intellect. Compassion to the point of untruthfulness is not actually helpful to human beings.

I’d rather know the truth, even if it hurts. Wouldn’t you?


  • Totally agree, Judah. Two points: 1) How would such a poor developer ever read it online, as Kelly worried? Such a weak, passionless developer would NEVER read Ayende’s blog. Ever. 2) Much more importantly: if you never get constructive criticism, you’ll never improve, or your improvement curve will be much softer. I strongly, strongly, strongly welcome constructive criticism in my career. I’m at a ToastMasters meeting right now and I was just evaluated on my speech. The intention of that is to give constructive criticism. We need that. In order to improve our speaking, we need to hear what we did wrong. Same goes for developers.

  • Carsten

    I don’t think that’s the point with Ayendes interview: what most people criticize is that he only seems to accept people who are as brilliant as he is. Modern leadership style seeks more for interpersonal skills, like team spirit etc. For Ayende that doesn’t really seem to matter. As a modern leader, you always try to encourage people; you accept errors and let your employees do their errors. You say something like: “there is nothing bad about not knowing this for-loop-thing. If you find time, I’ll pay you a course. At least now we are both aware about your areas of improvements. Let’s start working on it. Together!”
    I think, Ayende wants to provoke reactions from such people.

    • These is a vast chasm between “I will only accept people as brilliant as I am” and “This person does not know how to implement a for loop.”

      • vincebullinger

        Exactly. We’re talking Grand Canyon sized chasm here. If he only hired people as brilliant as him, he’d have no employees.

  • From Twitter, “How is *blogging* about cringeworthy interviews constructive? All it does is make average coders feel better about themselves.” says @tarnacious.

    My response: The question to ask is, why are devs advertising 7 years experience when they don’t understand loops. Also, it is constructive in that it helps paint a picture of the state of software developers, a picture that’s been echoed by others.

  • Kriss

    But what was wrong with the code in part II of series? I really don’t get it. Ayende is talking about loop problem, but I don’t see it. It’s not code I would write, but see no obvious flaws.

    • Well, for starters, notice how the 2 blocks in the for loop are essentially the same block of code, copy and pasted, excepted using a different index.

      • Kriss

        I noticed it. But it has nothing to do with loops. He could extract that code to method. Also if Contains is useless. It should be If StartsWith. But Ayende said that it’s something with loops. So maybe accessing [0] and [1] and not iterating over it? But maybe the interviewee was said there will be only 2 elements there ever.

      • Yeah, I assume he should have been looping over escapeSrt, rather than pasting the same code but with different indexes.

  • Kriss

    “Yeah, I assume he should have been looping over escapeSrt, rather than pasting the same code but with different indexes.”
    Why can’t I response to your response?

    So you are not sure yet you are with Ayende and criticize this guy?

    I found these problems.

    1. Code duplication (could be extracted to method)
    2. Removing escape string removes it and one additional character
    3. If there are two input strings one starting with first escape string and another starting with second escape string and then they have same rest of the string adding it to dictionary will throw – input: “acde”, “bcde”, escapeStrings: “a”, “b”
    4. Not iterating over escapeSrt (but we don’t know if he wasn’t said there will ever be only two elements in escapeSrt)
    5. If he’s logic is right he could also join escape strings and do one check if StartsWith(joinedEscapedStrings).

    What have I missed. Only point 4 touches loops. And as I said we don’t know what info he got on table containing escape strings.

    • If there’s anything I’m unsure of, it’s the number of problems in that bit of code.

      (WordPress allows replies 3 deep max.)

      • Kriss

        Show me two problems I didn’t mention.