Start Programming...Competitively!
I love programming. If you are reading this article then there is a good chance that you do too, or are at least interested in the idea. The problem with programming for a company these days though is that the problems we are solving just aren't as challenging or fun as the problems that computer scientists and enthusiastic programmers really salivate over. (unless you are working at Microsoft, Google, or somewhere else in Silicon Valley)
I work for a large Fortune 500 company and before that I worked for a bio-medical company, and though the work can be challenging, it is usually the business problems that are challenging and not so much the technical/mathematical (interesting) problems.
Business problems can sometimes be intellectually stimulating (I actually got my undergraduate degree in Business), but more times than not, I've found that usually you will need to go through a million channels to come to a conclusion that was the most obvious from the very beginning. This left me bored and frustrated.
If you are like me, then you will instead CRAVE those problems that need just the right algorithm to solve. For these rare problems, choosing and implementing the correct algorithm and using clever tricks of the programming/mathematical trade will determine if it is even possible to solve in a given lifetime. My dopamine neurons are firing on all cylinders when I encounter one of these bad boys.
Unfortunately, for me, they just don't show up enough. I need more. Like an addict that hasn't had their drugs, I began to look for other ways to get my fix.
And that's when I found it. A place where these "programming pearls" were in abundance and I could tinker away at these problems in my leisure whenever I wanted! The place was TopCoder.com, and I was addicted.
Now TopCoder.com isn't the only place that offers stimulating computer programming problems. There are other sites as well. Actually, my favorite right now has become LeetCode.com for its ease of use. The thing that all these sites have in common is that they are sites for what is becoming known as "Competitive Programming".
A programmer that has mastered his or her language can go to these sites and "face off" against other competent code slingers, and battle to the death!....or at least until one of them completes the programming problem with an acceptable result in the accepted amount of time. Who would have known that I could have fun solving problems and have fun doing it against other people! It's like playing a video game but one that actually can have really world benefits!
And that's what I want to really hit on. For all the coders out there that want to get better in their language of choice...or already think they are the best, I challenge you to go to one of these sites and get involved in some competitions. Fair warning though, these problems aren't for the faint of heart. They are heavily math based so you may need to brush up on some of those algebra concepts that you haven't seen in awhile :)
These problems will make you a better programmer. I thought I was on top of my game until I got thrown into one of these matches and a guy solved a problem that would take most programmers a few days to solve (if they could even solve it), in just few minutes. It's a humbling experience and one that has helped me grow a lot. You don't know if you are up on par with the best until you are up against some of the best, and some of the best programmers in the world are frequent visitors of these sites. It keeps you sharp and is actually a lot of fun once you get the hang of it.
If you are new to algorithm development and aren't familiar with some of the most famous algorithms that have already been written or aren't sure how to analyse an algorithm to find it asymptotic complexity (read my previous article) then picking up the book Introduction to Algorithms, by Thomas H. Cormen would be a great place to start.
If you are ready to jump in then this article will get you up and competing in O(1) time!
I hope you enjoyed this post and if you haven't already then please subscribe to my blog at jasonroell.com!
Happy coding everyone!!
Backend Software Engineer
9 年Gamification strikes again! :)
Relationship Manager WA
9 年Interesting article. Thanks!
Principal Engineer | Data Infrastructure | Platform
9 年Great you shared...interesting.stimulating..
Investor | Business Executive | Change Agent | Performance Improvement
9 年Good article Jason, however, in my view - the bigger problems in the world have more to do with working with people and organizations. Eventually, solving technical problems - while very fulfilling - has to yield results and the people angle therefore comes back into the picture. I guess that is why those who know "Why" end up leading those who know "How."
Software Engineer @ Snowflake
9 年Nice article. But I think it will be truly simulating if your solution helps in solving some real world problem, which doesn't happen a lot.