Skip to content

Category: RealLife

Smacking the Code Interview

I don’t spend much time on social media.  To be honest, I’m not sure yet of its value.  Democratizing news is a noble goal.  Making and keeping connections is a noble goal.  Communication is a noble goal.  All three of these things are messy though and a continuous flow of low value content and constant reposts and shares with no value add is just noise.

But I watch, and wonder.  Sometimes, certain things continue to bubble to the top.  One of these things is the current hiring methods for technology professionals, particularly programmers.  

I spent the first fifteen or more years of my career as a programmer, then the next fifteen or twenty in a variety of IT roles, literally spanning the entire spectrum of IT.  So when I decided to return to my roots, to start programming again, I was blindsided by the change in hiring methods.  I was completely unprepared for the modern interview.

Until now, I’ve purposefully avoided adding my own angst and commentary to the noise.  I wasn’t sure of the noise to signal ratio of my own thoughts.  For one thing, hiring technical people is hard.  It always has been.  Just because we did it differently in the “old days” does not mean we did it any better.  So I understand the intent.  Additionally, like it or not, if I want a job as a programmer today, this is the hurdle I face.  I can complain or I can adapt.  Finally, I cannot really say I have a better idea.  Making my commentary likely high on noise, and low on value.

But I am a programmer.  Solving problems is what I do.  In particular, my specialty, if that word is correct in this case, is troubleshooting.  I am not the one who draws up your initial design.  I am not the one who keeps your project on track.  I am not even the one who reels it all in and plans the after-party.  I’m the guy you call when, despite the best laid plans and designs, it just does not work out.  If I succeed, the project gets back on track and I move on.

And that’s what this is.  A plan that doesn’t work as intended.  I mean it sounds sensible right?  If you want to hire a programmer, watch him program.  But the obvious answer is not necessarily the right answer.  And, at the risk of grossly over-generalizing, the easiest answer is usually not the right one either.

Before we go too much further, we should state the obvious.  The claim the current interviewing process is a failure is one sided. It comes from the many experienced programmers who find themselves stymied by such interviews.  I cannot say I have seen companies complaining about low quality results of their interviews.

That being said, it seems more than passing strange when experienced programmers cannot get past the current gatekeepers.

To keep this short, we will not break down and examine the failures, perceived or otherwise, of the current hiring methods.  Perhaps in another article.  For this one, let us just assume it is broken and re-examine our goals.

We want to hire good programmers, so I guess the first thing we need to define is what makes a good programmer.  We will not list everything, but need something to start from. First and foremost, we have always said IT professionals must be in a constant state of learning and re-learning.  We have also said programmers must be multi-faceted.  No one-trick ponies.  Less commonly admitted, a programmer needs to be a team player (my personal example notwithstanding).

While I do not want to delve deeply into it, I do want to state what should be obvious to everyone.  That being, the current mode of over-the-shoulder code interview involving a Leet Code like algorithm challenge hardly demonstrates any of the above.  In fact, the only thing it demonstrates is that the candidate managed to pass a Computer Science class on Algorithms and the challenge you gave him was one of his homework problems.

Let us revisit our goals.  Find someone with a proven ability to learn, who is multifaceted, and a team player.  Starting from there (rather than what we can easily implement), I finally get to the part I did not have to offer up, even a few days ago.  I will not go so far as to say I’ve solved it, but perhaps I have a new starting point for our conversation.  Again, without offering a complete analysis, compare the above goals with the following scenario.

Choose an algorithm or challenge, but describe it completely.  Do not actually assume the candidate knows what a Bubble Sort is.  Write it up in detail.  Hand them the textbook description.  Like, requirements one might say.  Then, make a random choice.  Roll some dice, pick a name out of a hat, spin a wheel and choose a programming language.  But here is the switch up.  The language cannot be one listed in the job description.  In fact, it should not even be a mainstream language.  Think Smalltalk, Eiffel, Forth or any of the many experimental languages.  This does a certain amount of level setting across the candidates.  

Here are the expected deliverables.

  • Document the development environment.  Tools, downloads, configurations, integrations, etc.
  • Working code
  • Automated tests
  • Documented code, written as if it were a code review
  • Deployment documentation
  • User documentation
  • Blog post

Then, send them away.  Give them a time frame to return, but consider being flexible on the deadline.  Ask for updates.  

When complete, the interviewing team attempts to recreate the work from the documentation supplied.  Before even talking to the candidate a second time, they evaluate the delivered package.  Obviously, the code will not be “expert” level.  Ideally, the candidate just learned the language being used.  But the package as a whole can be evaluated on a variety of levels.

Should the delivery evaluation be favorable, the next interview can occur.  This one is old school.  Technical skills are not even discussed, having been established by the code challenge.  This discussion is the team fit assessment.  Feel free to discuss favorite cartoon characters, the validity of pineapple as a pizza topping and even VI vs EMACS.

To sum up, “Ask not what your candidate can do for you during the interview.  Ask what they can do for you once hired…”

Birds flying high…

The other day I was driving around when a bald eagle flew over me. Not way up high in the sky, but right down in the trees where I could see him. Not only did he cross my path once, but twice; as if making sure I took note of his presence. He left the tree he was in, flew across my path, then turned back to his perch. So, you know what that means.

Babelfish…

What to do, what to do, oh what to do… sigh… I want to get back into programming, ideally professionally. But I’ve been out of hard core programming long enough I have taken on the appearance of an old dog learning new tricks. Even so, an If statement is still an if statement and a while loop is still a while loop. Thus, I’m not particularly worried about jumping back in. In fact, if I didn’t want to get paid for doing what I love, it would be easy. It’s that getting paid part that is tripping me up.

Robbing Peter to Pay Paul

By which I mean, it’s time to take another wack at budgeting…

Once, long ago, I set off for college. Before I went, my mother took me down to the bank and opened a checking account for me. Through this, I would learn to take care of my own finances as well as provide an easy conduit for my parents to funnel money to me as needed. One thing extra she did though was include what was then called “Overdraft Protection.” It was not a line of credit per se, nor was it a credit card. It was just a small amount ($500) intended to cover those moments when the bank decided to clear the checks I wrote, before the checks I deposited. For some reason, banks always prefer to do things in this order and I guess my mom knew full well who she was putting in charge of this account.

Mysterious Movements chapter 0

Prologue

Once upon a time there lived a young codeslinger. From the technological backwater of Tucson, he dreamed of coding challenges that would test his wits and determination. Coding challenges that make most coders cower in fear. Coding challenges that would make him a legend.

Tucson was not devoid of technology, but it was mostly technology that once was. The big gangs had pulled out long ago. The others were mostly lone codesligners; IDEs for hire. The important thing though, was none of them had time for a young upstart.

So, he packed his meager belongings and headed further West, the golden hills of California singing a siren song of wealth and challenges for anyone brave enough. He didn’t even bring his IDE (Integrated Development Environment), choosing instead to leave it behind for whomever should take up residence here next. Yes, he’d buy himself a set of shiny new IDEs when he arrived in San Francisco, the .COM capital of the world.