How to grow in the craft of programming?
Of course there is not one correct answer to this question. In this post I will outline 7 steps I think you can take to grow as a programmer. For myself it should be a reference to stay on track. Maybe you find it useful as well. If you have additional tactics please share them.
"We will encourage you to develop the three great virtues of a programmer: laziness, impatience, and hubris." -- LarryWall, ProgrammingPerl
How to grow as a programmer?
Read / write
1. You learn programming by practice, a lot of practice. Write a lot of code, best way to actually do this is to start work (and hobby) projects, look around at problems you can solve. If you cannot find interesting problems, try to automate silly or actual useful common tasks you or your team mates have to do on a regular basis. Another way is to contribute to open source.
2. Read other people's code, both bad and extraordinary code. It definitely takes some discipline to go through code that does not make sense at first sight. Look up keywords and functions you don't understand, run it if possible, take it to pieces. What is good practice, what would you do differently and why? What creative solutions did the programmer apply?
3. Develop a non-stop learning attitude, read at least 2 programming books a month, both on concepts / from the pros (code complete, clean code, making software, coders at work) as well as the programming tutorials (I personally like the O'Reilly books), it is important to NOT get into a comfort zone: PHP and Perl enough? No, learn Python and/or a compiled language. Only know Java? Check out Ruby. Done a lot of OO (object oriented)? Look into FP (functional programming).
Get into the field
4. Hang out/ work with programmers that are better than you: it might feel awkward, but this way you will step on the accelerator of your learning process. I think most good software developers are willing to help you if you show genuine interest, passion and a proactive attitude. In practice this means, when you don't understand something they do, go learn it and come back for more. Experienced people will like this, they probably recognize themselves when they started. Keep in mind that they were not born with the skills eiher, they learned it at some point as well.
Skills / practices
5. Become a good problem solver - this is usually what programming is all about, writing the code (syntax) is one thing, but at its core you need to understand how to effictively / creatively solve a problem. Usually this also requires being an allrounder: understand the software stack, understand some Networking and OS as well, learn to ask the right questions.
6. Not only code to code: what is a client/user need, is the program easy to use for his/her skill level? Software development practices and processes, deployment to a server, get out of the coder's cave and try to understand the bigger picture. An interesting article from Coding Horror: How To Become a Better Programmer by Not Programming. On another note: learn TDD (test drive development), learn to write code for humans (the next coder that gets to see your code), learn to write clean code. This is not a binary thing ("not done, now done"), you gradually develop these skills with experience I think.
7. Develop your toolkit. Save time and brain cycles, prevent headaches! So use version control software (I use Git), use a fast and powerful text editor (I am getting better with Vim). Automate repetitive / easy tasks to focus on the real learning challenges (e.g. shell aliases, automate ssh login, learn more Vim keystrokes, all shave off seconds, but over time it adds up!). There probably is a lot you could add or discuss here, but it boils down to becoming more efficient by using existing and/or creating new tools.
I assume most readers of this blog have a programmer, web developer or alike background. What techniques do you use to become better in your field?