(This post is based on a talk I was supposed deliver to Computer Science students at Texas A&M. I had to back out because of medical issues; this is my attempt to convey the same information.)
You spend almost than half your waking hours at your job. Your job satisfaction will have a big impact over your happiness, and you owe it to yourself to work at a job that love. Before we discuss how you can improve yourself as a developer, make sure that you are in this for the right reasons. Quoting Jeff Atwood:
Be realistic: are you programming to collect a paycheck, or are you programming because you are driven to? I know this sounds harsh, but it’s an economic reality– in an environment of global offshoring, the world simply can’t support any more highly paid mediocre coders. There are a hundred thousand well educated Indian developers who will do what you do at a fraction of the price, and thousands more coming of age in other third world countries. Blame the Internet if you want, but just being “good with computers” is no longer a free ticket to a high paying tech job.
Your college education will teach you to be competent (at the best) when you graduate. That might not be enough to get you the job you want. At his talk at Business of Software 2010, Seth Godin emphasized his preference for brilliant vs competent programmers
If there’s any job that could be written down, it gets done by freelancer. Because if we can write down exactly what we want, why on earth we need a brilliant person to do it? We get a competent person to do it. There are no competent people that work at our company.
Here are 10 things that can help you on your journey to improve as a developer:
1. Empty your cup
As you learn new technologies and ways of doing things, don’t let what you know right now interfere with the learning process.
2. Read more books Get in the habit of reading books (technical or otherwise) regularly. I recommend that you start with the following 3
The Pragmatic Programmer
3. Read Code
Try to read more code from other programmers. You will pick up useful gems from seeing how they work. Check out the Weekly Source Code posts by Scott Hanselman if you are looking for a place to start.
4. Meet other passionate developers
Try and attend as many user groups, conferences, coding dojos and nerd dinners as you can. You can find local events at www.communitymegaphone.com.
You are the average of five people you spend the most time with. Education is in a way soaking up knowledge from people smarter than you. College is one place to do that, where you learn from your professors, but it might nor be the most efficient way. Try and find a mentor, but be respectful of his/her time. You should not be asking them for answers that a simple Google Search can provide you.
(Your goal is not to exploit your friends, but remember that most job positions are filled by recommendations/references from other employees rather than through job boards.)
5. Social Media
Use Google Reader, or a RSS feed aggregator of your choice and keep up with blogs of other developers. A few to get started are Scott Hanselman’s blog, CodeBetter, CodingHorror, The Morning Brew, DZone and Rands In Repose.
You can pick up a lot on Twitter, depending on whom you are following. I also learn a lot by monitoring sites such as Hacker News.
6. Help Others
An excellent way to learn is to help other people with their problems. You can try contributing to open source projects, answering questions on Stack Overflow or even building an application that satisfies somebody’s needs.
This is kind of a mixed bag. Just having a certification may or may not help your personal brand, but preparing for a certification is a great way to pick up the basics in a new technology and timeboxing it at the same time.
8. Don’t restrict yourself to one platform
Technologies, frameworks will come and go many times during your career. Try to be a well rounded developer and pick up the good parts from multiple technologies rather than invest all your time in one particular one.
9. Write (more) code
Try to work on a side project to play around with technologies you don’t get to use at your day job. Also, code katas are an excellent way to hone your craft.
10. Share what you learn
If you try to teach something to your friends, you’ll end up mastering the topic yourself in the process. Try and host technical brownbags, or volunteer to present at a user group meeting. The fear of public embarrassment due to not knowing your subject well is a great motivator to understand something inside out.
A few more general tips before finishing this:
Work Out: Take care your body, or you will pay the price later. When Richard Branson was asked on how one can became more productive, his answer was to work out. He said that it gave him an additional four hours of productive time everyday.
Take Breaks: Take regular breaks from your computer. It’s very easy to get burnt out by working too hard.
Use the 80/20 principle: Use the Pareto’s principle to your advantage. It’ll take you 20% time to learn 80% of the programming language or framework you are trying to learn and vice versa. You do not need to know 100% of a language before starting to work in it, so plan accordingly.
Invest in the best hardware and software you can afford: You are going to spend a lot of time on your computer. Even though I am a big fan of frugality as well as minimalism, this is one place I do not recommend that you try to save money. Use what makes you the most effective.
Stay hungry, Stay foolish: Steve Jobs ended his Stanford commencement speech with these words. I try to remind myself about those words regularly, and I honestly can’t think of anything better to tell you.