Over a million developers have joined DZone.
{{announcement.body}}
{{announcement.title}}

The Day I Gave Up on Hacker Rank

DZone's Guide to

The Day I Gave Up on Hacker Rank

Because being clever is the enemy of being good.

· Agile Zone
Free Resource

See how three solutions work together to help your teams have the tools they need to deliver quality software quickly. Brought to you in partnership with CA Technologies

I just learned how negative numbers are stored at a binary level by Java. It was an interesting fact and something that I needed to know in order to solve the latest Hacker Rank question I was attempting.

I was diving into Hacker Rank to get a feel for how the process worked. Having seen it used as a way to filter out job candidates, and also having seen that this kind of coding test was in style after a few recent job applications, I figured it was worth at least being competent with the “cleverness” that was so often required to pass these kinds of questions.

Two things become obvious after working through a couple of the more challenging questions: one, that I either did not know or had forgotten a lot of nitty gritty theory of algorithms and how they apply to software development and two, that I had very little use for that nitty gritty theory in my day job.

The reality is that I often don’t have to deal with negative numbers at all, let alone understand how they are represented at a binary level. I could take every piece of code I have written in the last year, convert every int to an unsigned int, and the code would work the same.

What is more important than a clever understanding of algorithms, binary math, and efficient looping structures is the ability to effortlessly jump out of front end JavaScript, HTML, or CSS into backend Java or Spring in order to solve those full stack problems that are preventing go live. (Or to then SSH into a Linux box and configure NGINX to add another routing rule, or to debug a unit test, or to write some documentation, or to configure a database.)

The more I look at it, the more I realize just how much being good at my job involves a horizontal spread of knowledge across a huge technology stack, and just how little it involves a deep vertical understanding of any single given piece of technology. And I suspect this situation is the same for anyone not developing a new language, creating a new NoSQL service, or building data centers that take up whole suburban blocks.

But this doesn’t stop companies hiring based on “cleverness”:

“I heard about this interview process,” Geary said. “It seemed fine-tuned for people just out of college. When you are just out college, there’s a lot of algorithms and data structures and fast-thinking on a whiteboard, like you do in school. As opposed to real software engineering, there’s a lot of other stuff that goes into that. In my real work, in 20 years, I’ve never used a whiteboard. I use my computer. But in job interviews they do it all the time.”

I had a decision to make. Do I gain a working understanding of yet another JavaScript library and use that knowledge to be good enough at my job to get home on time? Or do I learn how to decompose integers to binary representations, bit shift them around in the most efficient way possible, and post my results so I can stand tall amongst a crowd of developers that loves these kinds of mental challenges, only to then have to work late because I can’t quite work out why this one last unit test is failing and preventing me from merging my code?

It was a pretty simple choice.

Discover how TDM Is Essential To Achieving Quality At Speed For Agile, DevOps, And Continuous Delivery. Brought to you in partnership with CA Technologies

Topics:
agile ,hacker rank ,code ,algorithms

Published at DZone with permission of Matthew Casperson, DZone MVB. See the original article here.

Opinions expressed by DZone contributors are their own.

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}