|
In a competitive world of information overload, with millions of other developers, there will always be someone better than you. Even if you pick a niche, chances are there will still be someone even more talented than you in that niche. "There's always a bigger fish in the sea". Furthermore, learning any new field always requires hard work and making mistakes. So, a common question is "Why should I try if I can't be the best?" For example, why learn how to build web applications, or computer games, or any programming, when there will always be someone so much better?
It's a good question, one that unfortunately intimidates a lot of people from trying in the first place. There are several reasons:
You don't need to be the best. You can still get a job, contribute to the field, and have fun.
You can learn something just for the enjoyment of learning it. For example, you may enjoy making a Silverlight or XNA game just to have fun - it doesn't have to be the next Super Mario or Age of Empires. Similarly, I go running just for my own enjoyment - even though I make a turtle look fast.
The act of trying will improve your character, and still teach you other skills.
Often the "best" isn't available (they're already locked up in another job or project), so one's moderate skills are still needed.
You can still add value, even if you're not the best. Often star developers want to coordinate other people to help build a project bigger than what any one person can create by themselves.
Even if you're not the best, you can still probably help other people more junior than yourself. I.e., you're probably still an expert to someone - even if it's just a young student, intern, or someone changing careers.
Everyone has to start someplace. You may even become that super-expert someday.
Someone who constantly passes up the opportunity to learn something new, simply because they can't be the expert at it, is selling themselves short. As a father pointed out in the movie Facing the Giants, in a scene about a soccer kid hesitant to try out for the football team because he may not make the cuts, "You aren't on the team right now. You can't be any less on the team than you are right now." Likewise in development, if you don't know a technology and you're hesitant to learn because you're not an expert, you can't be any less of an expert than you are right now. You might as well take a stab at something you enjoy, have fun along the way, and become good enough to do what you want to do. I'll never be Michael Jordan, but it's still fun to shoot a few hoops.
Tim,
Hey Kalpesh,
Yes, I agree. I'll do a more detailed blog post on this eventually, but I
believe that in software engineering, learning must be a lifestyle.
Especially with new techs coming out, you're never "done". I try to
incorporate continual learning into my daily schedule - reading blogs, try
out new samples, ask for code reviews, read the occasional book, etc... I
find doing a little bit each day works for me, especially because it keeps
things fresh in my mind so I can take advantage of all the dead time -
driving in the car or waiting in lines - to mull over ideas.