Infested With The [topcoder] Bug – 05/2011
Member since 02/14/11. Specialties include Java, Python, and Mobile.
I am a big fan of programming challenges, especially those that allow me to learn something new. When [topcoder] came along a few months back, I did not know what to expect. Little did I know that as of today, I am completely infested with the “[topcoder]” bug and make it a daily ritual to check out the site, blog, any new contests, any submission updates and much more. And that is not a complaint…. In this blog post, I wanted to discuss why I “[topcode]” and why you should too.
One of the challenges that we as developers face is to keep ourselves updated with latest technologies. The pace at which things are moving is both a good and bad thing. Its a bad thing since it is difficult to keep learning all the stuff happening on the Development stack. Its a good thing because it presents a great opportunity to focus yourself on an important area, learn stuff fast, do some serious assignments and build your brand and make yourself known among your peers.
[topcoder] for me is now the vehicle to do all the above. I have participated in a handful of challenges by now and have focused on what I think I know well. So since Google App Engine is an area I know well, I tend to gravitate towards those challenges. The experience has been fun. The challenges are clear in what they want you to develop and you are working against time to learn, implement and deliver it. There have been challenges where I was not much familiar with the stuff but ended up learning it, fixing the little errors or so and delivering it, no matter what the end result.
Where [topcoder] really shines is that it gives you a great platform to be a better developer. And let me explain why? You might be a master of coding but that is not enough in a community setting. It forms just a part of the overall delivery package. How about documentation on what you have done? A video? How about commenting your code so that others can understand? I think all of us developers now have a chance to try out all these things and present our work in different ways. And once we crack the problem of communicating what we have done to others via various mediums like our code, documentation, video, etc — the sky (sorry Cloud!) is the limit for us.
My next step with [topcoder] is to learn about stuff that I am not familiar with. For e.g. SalesForce challenges are a plenty but I do not know much about it. And CloudFoundry, the latest PaaS play sounds exciting too. I am going to roll up my sleeves and start learning them. Here is where I have a suggestion for [topcoder] i.e. a “[topcoder] University” sort of a page, which links tutorials, blogs, etc where one can get started quickly. They have taken the lead with CloudFoundry and the tutorial videos and hopefully can replicate it across other platforms too.
Thanks for reading. Are you ready to [topcode] now?
Get On [topcoder] Now! – 01/2013
Last week, I spent 2 days with the students of BITS Pilani, Goa and I am still energized by my interaction with them. The kind of stuff that they are able to learn and demonstrate is happening in “Internet time”, so to speak. For those of them who wanted to take the plunge into software development as a career, I started thinking what I could put down to get them building solid skills. In this blog post, I want to talk about [topcoder] and how it can possibly make all you students not just better programmers but teach you so many other things, if you want to be ready for the Software Industry when you graduate.
An introduction to [topcoder] is due first. I take the liberty of taking the definition from their website itself : “An independent crowdsourcing development community and marketplace that matches companies who need cloud development work with a worldwide community of cloud experts. The focus for [topcoder] is solely on using public cloud platforms to build and deliver enterprise-class solutions.”
The words highlighted in bold are key ones. First up is that all the work is around public cloud platforms, ones that are available to all of us either for free (to try out) and then with a “pay as you use” policy. Key platforms from Google, Amazon, SalesForce, Heroku, CloudFoundry and others come in this category. Crowdsourcing over here can be loosely termed as telling all the developers ([topcoder]) that here is a problem and let me know who comes up with the best possible solution within the given time frame. It is a marketplace because organizations come to [topcoder] with what they want to build and [topcoder] puts them up as “challenges” or “contests” which you can do. And best of all, no one cares where you live. Years back I remember the “Got Milk?” advertisements. I am pretty sure it can be substituted now with “Got Cloud Skills?”.
In short, you look at the various challenges. Pick any of them up. Deliver a solution as per the requirements and then hope to win. Don’t know how to proceed, ask a question in the challenge Q&A and you get enough pointers on references to get you started. A laptop, an Internet connection and a will to learn… those are the magic ingredients needed to qualify for [topcoder].
And here is why I think you need to take this seriously. The points below are the ones that I feel will get you ready to work as a software programmer in most places, even before you have graduated. And who knows, by participating in the challenges for months, it will trigger ideas in you that should be enough for you to even consider exploring on your own. The possibilities are endless. So here we go:
Learn New Skills
A career in programming is unique in many respects. The only constant in this career is learning new stuff on a daily basis. The languages, frameworks, components that we know today are the ones which are replaced by newer (if not better) versions. If you have been reading articles around necessary skills needed by a programmer today, one word in all those articles will stand out. And the word is polyglot. The word has its roots in ancient Greece (well, what doesn’t ! ) and it means ‘many tongues’. An official definition of the word says “Speaking, writing, written in, or composed of several languages.” This is precisely what you need to be in order to succeed. Do not get into the debate of which language / framework is better. The creators (may their tribe increase!) of these frameworks saw a problem not addressed by their current set of tools and went about setting it right. So pick up new languages and frameworks. Each of them have gems that will broaden your skills and ability to address unique situations as you program more systems. The first language or two that you pick up will always be at the back of your mind as you spend years in the industry but do not limit yourself to that.
What has this got to do with [topcoder]? Well, the challenges at [topcoder] are across the spectrum. Client / Server languages, various frameworks … you have it all. Learn them, try the challenges. That is the best way to learn these.
Competition is important for all of us. Without that, we will not push the limits of our capabilities. [topcoder] has some terrific contestants and by pitting yourself against the most committed of developers (who all want to learn and win) will harden you for the battles that come ahead in your programming journey. I have taken part in a handful of these contests and when I see the videos of folks who beat me, I had to put my hand up and say “Man ! This submission by XYZ rocks.” And I don’t even want to remind you of the major boost to your confidence, when you win a challenge. You are being judged by seasoned pros and getting that confirmation from them will do your confidence wonders. Trust me on that one. You have nothing to lose really. Any submission you make means an attempt made, an effort put in and submission uploaded. Those are signs of a winner to me.
Software projects are fun to work on. We are in a fairly nascent industry and a favorite remark heaped on software projects is that they are usually late. The reasons for that are many : incomplete/changing requirements, resource issues, lack of skills … the list goes on and on. So one of the things that you need to get used while working in this industry is delivering under time pressure. There will always be less time on your hands, no matter what you do.
Each of the [topcoder] challenges has a time deadline in which you are told to submit your solution. By deadline, it meets that you will be given 5 days or 10 days or whatever, by which to submit your solution. If you want to complete the challenge and do a great job, then you will have to do it within the time stipulated, no other ways about it. Over time, you will know your capacity and how to break up your work into smaller tasks so that you are within the deadline. Time waits for no man and definitely not for software deadlines. So getting under time pressure here at this stage of your life to complete a technical assignment will stand you in good stead moving forward.
[topcoder] rewards the winners for their efforts. Each challenge has multiple winners, who win some prize money or the other. The prize money is important because you can use it in ways to become better. How about putting some of that back to take an online course for learning a new technology? You have tons of Online universities now that offer technology courses. You could buy a new laptop or if you were me, you can bootstrap a training and small consulting firm. Look at the top 3 prize money winners on the [topcoder] home page, that is no mean achievement. It is serious money. People have bootstrapped successful companies with that kind of cash. Think about it!
When you take part in [topcoder] contests, you will come across Developers in the challenge. Common interests bring all of us together to [topcoder], so why not know more about each other. Search them up on the Internet, follow them on Twitter. Open up conversations with them, it can lead to things that you could never imagine. Some of my interactions with fellow participants have been extremely positive. Interact with the [topcoder] managers too. Extremely friendly and very knowledgeable. They have such a wealth of knowledge that just interacting with them introduces you to some new thing or the other in our fast paced developer ecosystem. And which could save you hours of research.
Programmers are often called introverts but I have seen many of us open up considerably when technology is being discussed. The Open Source movement has been a game changer for all of us. It is all about the community. You must participate. You must download and use stuff. You must give back, in whichever small way. Maybe via a bug fix, a documentation page, even a project but learn to give back. We learn more and faster by sharing and supporting.
At [topcoder], you could help out in many ways. If you feel requirements are not clear, tell them that. If participants ask questions about clarifications and you happen to know the answers, go ahead and share those points. If you win a few contests in a particular area, you could even be a judge on them. The more you participate, the more you will become better at playing a leading role in the community. And like any great community, changes happen bit by bit, every day by everyone and over a period of time, something wonderful is born out of that. So participate.
By the way, if you still feel that you are a really “quiet” person and are not cut out for this community stuff, maybe joining the Quiet Revolution might help?
This is an area that is detested by most programmers that I have encountered. The funny part is that they are usually the first to complain when they read a badly written user help page. Documentation is a critical skill to have and if there is a component, framework or application that you have spent hours of your life on, give it some love and make sure that you describe and write about it in a manner that makes people want to use it. Remember, we live in an Internet age where people have shorter attention spans and won’t give you a second chance. It is brutal out there. So when it comes to documentation, we have enough successful examples out there to learn from. Keep in mind stuff like “Quick Start” that will cater to anyone who wants to get going with your software in the shortest possible time.
When you submit your entry to any [topcoder] contest, you need to provide instructions on how to setup, compile, run, etc your code. The judges have limited time and they have other great entries to judge too. So one way to shine out is to give detailed documentation to make their task easier. In other words, by submitting multiple entries and analyzing the documentation that you sent across, you will know inside of you what you should have done to make it better. Listen to that voice and keep working on it.
In a recent survey conducted by ProgrammableWeb, the leading directory of public APIs, developers (like you and me) were unanimous that providing good documentation is among the most important features that they consider while evaluating any product. Don’t believe me .. please don’t. Instead, ask yourself honestly and you will never again ignore writing good documentation.
Closing out a sale is as much about presentation as it is about the real stuff. And by presentation, I do not mean creating empty slides that don’t have anything behind to support it. I am talking about video here, which is fast becoming the way people describe anything. Complete user guides are getting replaced with instructive videos. Learn using this medium, it can be powerful. If you feel that you are not cut off for writing thousands of words, remember the old adage that “A picture is worth a thousand words”. Maybe a video is worth a million.
When you submit your entry to [topcoder], one of the optional things to submit is a video. Do yourself one little favor: make that mandatory, not optional as far as you are concerned. Create a video, hear your own voice (it can sound funny at times!) , learn video recording tools, edit it as needed and before you realize you will have a powerful way to describe anything.
Ready to Hire Profile
It is 2013 now and your Microsoft Word resume is not going to cut it anymore. Every company wants to hire the best possible programmers and they tune their hiring process to find candidates who could best fit into their current openings. Do not be under any false impression, that they will hire you because you can be woken up from your sleep at 4AM and you can still write a complicated recursive function. That could be just one criteria. Some of the previous points like support work, presentation skills, community stuff could very well turn the tide in your favor. In spite of their best efforts, organizations have a tough time hiring the right resources. The best developers are courted, they are not hired. And you must do your bit to be in the former category.
Here is what I want to say. Your resume in 2013 has to be a “Browser Search”. That’s all you need to do and you will find that the companies will search you and get to you. But for that, you have to put in the efforts , build your skills, win some challenges, write some blog posts, post your projects on Github, earn some good karma on StackOverflow and so on.
You must have an online profile. Don’t have a domain name? Get One. Don’t have a web site / blog ? Get One. Start Blogging. Don’t know what to blog? Write about what you did today. Or hop over to Stack Overflow and answer some questions, if that is your style. There are various ways in which you can leave behind your online traces. Just make a start, the rest as they say will take care of itself.
I am sure there are other high level points but this should be enough to inspire you to get started today. Time is short and trust me when I say that 5 years later when you do a rewind, this simple decision of yours to be ready to learn new things in 2013 should be among the stand-out decisions that you took. I do not have the gambling instinct, but I would still bet on it.
Thanks for taking your valuable time to read this. All the Best. You folks are the future superstars and I am lucky enough to share what I feel would be in your best interests.
P.S: While my article is a call to current undergraduate students, it applies equally well to anyone interested in a programming career, experienced or even otherwise.