That’s an easy career improvement goal to give oneself, but “become a kick-ass programmer” is not a simple goal.
1. Remind yourself how much you have to learn
The first step in learning something is recognizing that you don’t know it. That sounds obvious, but experienced programmers remember how long it took to overcome this personal assumption.
2. Stop trying to prove yourself right
To become great—not just good—you have to learn from experience. But be careful, experience can teach us to repeat poor behaviour and to create bad habits.
3. “The code works” isn’t where you stop; it’s where you start
Part of that process is defining what “better” means. Is it valuable to make it faster? Easier to document? More reusable? More reliable? The answer varies with each application, but the process doesn’t.
4. Write it three times
Good programmers write software that works. Great ones write software that works exceedingly well. That rarely happens on the first try. The best software usually is written three times:
First, you write the software to prove to yourself (or a client) that the solution is possible. Others may not recognize that this is just a proof-of-concept, but you do.
The second time, you make it work.
The third time, you make it work right.
5. Read code. Read lots of code
When you read others’ code, you see how someone else solved a programming problem. But don’t treat it as literature; think of it as a lesson and a challenge.
6. Write code, and not just as assignments
Working on personal programming projects has many advantages. For one, it gives you a way to learn tools and technologies that aren’t available at your current job, but which make you more marketable for the next one.
7. Work one-on-one with other developers any way you can
When you contribute to an open source project, pay attention to the feedback you get from users and from other developers. What commonalities do you see in their criticism?
8. Learn techniques, not tools
Programming languages, tools, and methodologies come and go. That’s why it pays to get as much experience as you can with as many languages and frameworks as possible. Focus on the programming fundamentals, because the basics never change; pay more attention to architecture than to programming.