Hard Reality

August 22, 2016

When it Struck

I was contacted by TopTal.com not too long ago about posting a blog entry on the site. I had heard about their company before.  They admit only the top 3% of developers and designers into their company (at least the ones that apply). They are like a higher quality freelancer or upwork site for freelancers.

Out of curiosity, I checked out the site and was curious about if I had what it takes to be a part of the team.  I mean, come on, top 3% of those interviewed? I'm sure they get thousands of inquiries a month, so to believe I could be the top 3% would be awesome!

So I started doing some research on the interview process. It does appear to be fairly rigorous. There are 4 steps to the process. The parts that concerned me though were the tests and projects. I learned a bunch of this from this blog post (http://www.michaelhoughton.com/article/toptal-review-the-interview-process).  They use a site called codility.com for stage 2 of the process. I figured, I was good enough to handle this, so I went onto the site (https://codility.com/programmers/)...

Well they aren't as simple as they look.  Yes, they're not impossible, but I'm not the most detailed-oriented person. So I ran into a few problems. The first couple were fairly simple to complete logically. They weren't hard to understand, but the issues is that codility also takes performance into consideration. Something I wasn't expecting. So I could make the problems "correct" 100% of the time on the first couple, but I would fail performance. Oh dear...

Then as the problems got increasingly more difficult, I started missing edge cases. Things like integer overflows and empty arrays. Silly mistakes. But mistakes none the less. They test the edge cases as well. So instead of getting 100%, I started getting 80%, then 66%; even one for 24%. I was shocked! Not because I missed them. But because I had better expectations of myself.

I've been developing since I was 11 years old. I'm in my late 20s now. These algorithm problems should be simple. But they weren't.  And they were humbling to say the least. I highly recommend anyone to try them out if you're a developer...

Aftermath

So I have spent days honing my skills on this website. It's quite the challenge for me. But I am starting to be able to focus on little details more. I think eventually, these type of problems will be simple. However, this experience has taught one very important thing: I'm not as great as I thought. 

We as developers sometimes think we know everything. I know that's how I am. I know I'm a good developer. I develop my skills constantly, especially in the world of .NET (MVC, WPF, etc). However, my typical use of programming doesn't require complex algorithms or understanding how heap sorts work. So that knowledge is rarely used in a meaningful way with me. Which means I've gone soft. Math is king with me. I'm an Electrical Engineer by trade. We know mathematics. But that doesn't imply we know algorithms. And this site will test your algorithms.

I now have renewed focus on who I am and the skills I've lost being complacent in my job and with clients. It's almost scary to me.

I know I don't normally blog about personal realizations on this blog. However, this one is important for engineers and developers alike. 

"Keep your skills up to date and constantly keep learning! Don't become complacent"

That's all I can say. Keep testing yourself and your limits. This doesn't mean learning a new language. No I mean, keep pushing the limit of your algorithms and your "out of the box" thinking. I seemed to have lost some of that with the cushiness of .NET. And try out codility.com. It will be worth your time!

Back to blog

Related Posts

Check out our thoughts here.

What is important to a career

Lately I’ve been spending a lot of time thinking about my career and where it’s going. I don’t want to give the impression that I have never thought about my career before, but now the thoughts are becoming constant.

May 8, 2018
Databases: Component or Infrastructure?

There is always strong debate around databases and their role in development. Sometimes they are considered components, while others will consider them infrastructure. Is there a right answer? Let's discuss!

March 15, 2018
Software Maintenance: The Never-Ending Feud

There is one, and only one, primary focus that any software developer acknowledge: the ability for software to be maintainable. Of course, correctness, functionality, and performance are all important, these will always be easier to address with maintainable software.

January 25, 2018