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.
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...
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.
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!
Check out our thoughts here.
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.