From Coding Horror, on the subject of “how to prepare for a career in software development”:
Fortunately, this is a battle you can fight on multiple fronts:
You don't have to do all these things, but if you're serious about your career, pick at least two and follow through. For more detailed advice, I highly recommend Rob's advice on how to become a programmer.
- If you're a student, seek out internships like your life depends on it. Some of the best programmers I've ever met have been college interns. Intern somewhere that you can absorb and learn as much as possible. You won't make much money, but the experience will be priceless.
- Participate in local user groups. User groups are an unbeatable resource for people just starting out in their careers; they're an excellent source of advice and mentorship.
- Contribute to an open-source project. There are thousands, so pick whatever strikes your fancy. But pick one and really dig in, become an active contributor. Absolutely nothing is more practical than working collaboratively with software developers all over the globe, from all walks of life.
- Publish articles. The cleverest code in the world won't help you if you can't clearly communicate how that code works, or what it's for. Try your hand at writing. CodeProject is an excellent sandbox to practice in. Publish an article and the large, active CodeProject community will let you know how you're doing with ratings and comments.
- Start a blog. Pick a writing schedule and stick with it; I recommend once a week at minimum. Select a general theme for your blog and write on topics related (at least tangentially) to that theme. And don't be an echo chamber.
These are all good tips. Off the top of my head, the best tip I’ve got is to treat everything you learn as something you’ll need to teach someone else. Knowing that you may be called upon to teach something is a powerful motivator for getting your mind to think critically. This leads to a second point: if you want to get started learning about something, volunteer to present a talk on it (at work, at the user group etc). This tends to have the same effect of really forcing you to understand the topic.