Great question! There are so many answers to give. I could write some of my favorites, in my Anglish (Angel’s English… ;-) :
– Read: Read magazines, other programmers code, blogs, articles. There is no excuse, in this connected world, to refuse the information, knowledge, and wisdom of others. If you don’t have time to learn from others, you’ll lost your future learning alone.
– Think: You must think about what you read and learn. You have to exercise your critical thinking on what you know, read and apply every day. A pattern is not a recipe, written in stone. A framework is not a silver bullet. You must grasp what are the real problems to solve, instead of only learn a fixed solution. Raise your level of abstraction, separate the accidental details from the core problem.
– Write: Write down your ideas, or what you learn. Try to explain something to other, writing a short article, post, or some sample code. For me, this is the concrete deliverable of any improvement in your skills. As a programmer, you have to dominate communication skills, so you can translate your ideas, works, knowledge and implementations to others. According to Richard Feynmann, “if we cannot explain something, then we don’t understand the problem, yet”. And if you write about what you learned, then you are sharing that stuff with others, collaborating to their own improving. Exposing your discoveries is a way to receive feedback, on what you are doint right or not. Don’t be afraid of critiscism: all feedback should be welcome.
– Talk: related with the previous point, give an speech about a topic you are interested on. Prepare a talk for your local programmer group. You’ll gain visibility for yourself and your work. But the main point is: when you teach, you learn.
– Practice: take additional works, a “code kata“, a short exercise to train your skills. Write a mini interpreter, solve a problem, and publish the result.
– Pushing the envelope: get out of your comfort zone. Learn something new, that it’s not in your current set of abilities. If you are bad in graphic design, go on, and get involved in a project that needs a nice GUI. If you know only two programming languages, or one platform, it’s time to try another ones. If you feel uneasy talking to others, plan to give an speech: no problem if it’s not perfect, the important point is to get better.
Most of these activities could be done in group. Today programmer job is a team work. Learn from others, and give mentoring to others.
One related post of mine:
I just read Rick Brain answer: