I am a geek, may be a nerd, may be both. And may be this is the justification of never having had the opportunity to work on a killer project that was exemplar of cutting-edge technology. I never wanted to. But I’ve made most out of unmatched opportunities, to deliver business critical software that has done its job. I’m not a master of any technology/language, but a jack of many: whether for work or leisure, I’ve touched upon most known technologies. But all that diversification makes me confident of being able to solve a problem, and not necessarily using a certain technology. I am now a product manager, far from coding. So you are about to take some unsound advice. Please continue reading at your own risk. These tips are not for software engineers who are experts in a particular technology. These are for pure computer geeks – people who love writing code.
1. Focus on concepts & constructs, not syntax
People often ask: I want to do a computer course, what language do I learn? And I ask them to clarify: Do you want to learn, earn or both+fun? My answers for each (in order) are: C, Java and PHP. But at the end, it boils down to concepts. Knowing what a loop requires to run, the power of references, how strings are managed in the heap (& why they are immutable), etc. This learning is divine. So, don’t start learning syntax, focus on concepts.
2. Be single – always – and free to mingle
3. Be Lazy, very lazy
This is the first real piece of advice that I got as a developer (back then, I was writing hex frames to speak to cars). And I couldn’t neglect it, because it came from someone who had been coding for 25 years in the same domain. Be lazy to write code, be lazy to test the same code again. This will force you to build a generic code library over time, and use it to expedite any subsequent development. And Larry’s been by your side ever since he pledged to make the world’s information accessible & usable. Spend (time & money) wisely. Anything useful, feel free to beg, borrow, …
4. Solve real world problems
Never raise a toast to an academic accomplishment. Remember: what doesn’t ship has no value. Make sure you are learning by solving a real problem that will make someone smile. Code that doesn’t help humanity is same as ‘doNothing. You could be making a Symbian phone theme for your girlfriend or writing ant script to start 5 programs you need on OS start-up. Whatever it is, take pride in solving a problem, shipping a working solution & making someone’s life easy. Don’t compromise on anything less.
5. Help, and you will be helped
As simple as it sounds. Participate on Q&A sites, share whatever you know, and contribute to open source. You never know how a 3 line snippet could help someone leave in time for their daughter’s b’day party. Besides, the community is where you will make friends with a lot of like-minded people (a.k.a. geeks/nerds). Share & learn best practices (without getting specific about syntax). Scratch someone’s back if you ever want to be scratched back 😀
That’s quite it, if it helps. To quickly recapitulate: focus on concepts and not technology when solving real problems, be lazy and share. By the way, C and pointers remind me of the day I felt very lucky: that was the day I heard Yashwant Kanetkar (of the Let Us C fame) speak – Live – on pointers. The room was so packed that you would have to run GC twice to empty it. But my conscience, and Java concepts, are forcing me to delete the previous line. I can’t ignore the fact that the GC is like a woman – you can’t get it to do it when you like it, it’ll do it as per its own whims & fancies 😉
So what are you? A Java guru, a RIA developer, or a useful programmer?
Open for comments.
Tweet/Share: @prasadgupte: 5 qualities of a useful geek, or some unsound advice from a product manager http://bit.ly/i9sj5f