It has been almost 5 years since I started writing computer software. In these 5 years, I’ve met a lot of developers. A few of my classmates, a few others. The one thing that truly separated the truly successful developers from the crowd is passion. Now passion is an overused and abused term these days. Too often people take it to mean a passion for being successful, for achieving a personal goal in their life. When I talk about passion, I mean love. I’ve been in love with computers since I was 15 years old, and I’d be playing with them even if I didn’t get paid for it. If software engineering is merely a means to an end, you’re not going to be happy in the long term working in this field, because much of it is God-awful boring unless you have a passion for it.
Being passionate about software is critical to being successful. A skill-set that will get you a package of Rs.6L today will be possesed by junior programmers in five years. And unless you’re constantly adding new tools to your belt, you are going to find yourself priced out of the market very soon. Many good projects will come to you because of the skill-set you already possess. And nobody is going to spoon-feed you with the skills. You are rarely going to get an opportunity to have your current employer pay for you to learn things, so learn them on your own and be in a position to leverage the skills when a new project comes along. But if you have passion for technology, you’ll already be doing it, without me needing to tell you to. That’s the reason why passionate people have a head start.
The new graduates, who are in their twenties, tend to jump into small companies or start ups, and that is the best thing to do. A junior developer at a startup is going to jump from one technology to another and learning many different aspects of the field where as at a big company or MNC, the developer is going to be working on the same thing for a long duration of time.
Pick the right technologies to learn. It’s easy to be seduced by the flavor of the month, and spend time learning something that will never gain significant traction. That isn’t to say that you shouldn’t learn something new if you’re genuinely interested in it, but don’t follow the herd just because everyone is talking about language X or framework Y. Analyze and ask around, and only then start learning.
Also, play well with your team mates. Realize that there is more than one path to the same solution. Everyone has their own likes and dislikes. Just because you find operating system Foo to be the most abysmal thing ever created doesn’t give you the right to call for Jihad against people who choose to use it. After all, you don’t decide that someone is your enemy because they ordered “Baingan ka Bharta” in your college canteen and you don’t like it.
Finally, remember that most of the time in your career, you will not be developing software for your own benefit. Whether it’s internally used code, or an end-user application, the quality and innovation of the work you do can directly affect the happiness of other people. Truly pioneering development can change the world. Google did it by giving a simple web page that shows you details of anything you are searching for. Linux did it, by creating a solid, flexible, performant operating system that you could throw into any kind of hardware product, because you didn’t need to license it. Try to find at least one opportunity in your career to move the ball a little, rather than just doing what’s already been done.
So, younglings, go out and do great things. I’m sure you will, just as every graduating class has, from the ones that gave us Alan Turing and John McCarthy to the ones that gave us Linus Torvalds and Tim Berners-Lee, and beyond. You know, the passionate ones.
Note: This article was inspired by James Turner’s Commencement speech posted here