I recently read the book The Passionate Programmer: Creating a Remarkable Career in Software Development (Pragmatic Life) by Chad Fowler.
I'd highly recommend reading it to any software developer. Fowler provides an excellent collection of tips and an approach for improving any software development career. Check it out on Amazon.
I'll provide my biggest takeaways from the book in this article.
Aim for Greatness...Not Mediocrity
Fowler makes a great point about how as software developers we should be setting our sights to be as great as we can be rather than just good enough to hold on to a job. You may have been asked the question by some well-meaning family member or friend (I know I have) about any concerns of losing your job to outsourcing.
To me, this is pretty small thinking and I'm sure the good and great developers in our profession have spent very little time concerning themselves with this fear. If you're aiming for the pinnacle of our profession you may never reach the absolute top, but chances are you'll end up far above average. This is a central theme from another book I'd highly recommend to anyone: The Magic of Thinking Big.
It's also important to keep in mind that you are a product of those around you. Fowler points out that you're better off being the worst at your craft wherever you go. This may be uncomfortable at first, but eventually being around and working with people who are more skilled than you will raise your own level. As you eventually look up and realize you've now become the best in your group. Then it may be time to look for the next challenge so that you can keep growing at a high rate.
Fowler points out that perception is reality. How people perceive you affect your career. And what your perception is based on is different between development team members and those on the business side.
Your project manager does not care how clean your code is because they will never have to read or work with it. They care about how your contributions are helping move your project and team forward and how effectively you communicate that. So tailor your message to your audience.
A critical skill for software developers is the ability to communicate effectively through writing. After all your job is to express ideas through writing in code. If you have difficulty doing so it will affect other people's perception of you.
Luckily this is a skill that's very easy to improve. Write blog articles or even a book. What better way to get your name out there as an expert in your field? For further reading on how to market yourself and skills as a developer I'd highly recommend this book: The Complete Software Developer's Career Guide: How to Learn Your Next Programming Language, Ace Your Programming Interview, and Land The Coding Job Of Your Dreams
Get Excited About Your Work
There are no artists out there producing great work without putting their energy and enthusiasm into their work. Fowler draws a parallel with musicians and programmers in that they both require a passion for truly great results. Where the professions differ is that no one goes into music for a steady paycheck.
Software development pays well and is an in-demand profession. Not everyone goes into the field because it's their passion, for some it's just a job and for them, that's just fine. But to me, if you're going to devote a large amount of your life doing something why not do something that excites you? You'll get the most out of life if you're putting passion into your work. You'll be making the most out of your abilities and providing the most value to others.
Understand Your Domain
As a software developer, you most likely won't have a real deep understanding of the problem domain that you're working in, and that's okay. But that doesn't mean you shouldn't at least try to. As developers, our job is to of course develop software, but also to provide value for the businesses we work for.
It's very easy to shrug your shoulders and say that understanding the domain is outside of your concern, but you could be missing valuable opportunities. The better you understand the domain you are working in, the easier time you'll have building solutions using that knowledge.
The best way to learn is just to ask questions. Even if you think they're dumb questions I've found that the business folks will appreciate that you're at least trying to learn what's going on.
Practice Your Craft
The author makes an interesting comparison about how a musician wouldn't practice at a paying gig and expect to be compensated for it. Musicians do their practicing behind closed doors where no one can hear. When you're practicing something you're typically stretching your abilities so the product you're producing probably isn't fit for public consumption.
As professionals, we should be dedicating some time to honing our craft. Fowler provides examples of good ideas for focusing practice time. There are coding challenge sites like Top Coder and Code Kata. Contributing to open source projects or building your own side project are also great.
Another is reading other developer's code. You can get good ideas (and bad ones), but this is a good way to show you ways to solve problems that you may have not yet been exposed to. Just Say No...Or At Least I Don't Know