learn one new thing with every project

A great way to keep your skills sharp and your knowledge growing is to try exactly one new thing with every project. Having a new thing with each project makes the constant learning process a habit, so you don’t have to think too hard about it or try to motivate yourself. Restricting it to one thing reduces the potential for problems in case it turns out to be difficult or inappropriate. It could be that you use Hibernate instead of EJBs for your object persistence in Java. You could use Kid instead of Myghty for your Python web application templates. You could integrate AJAX style interactions on top of plain old HTTP. You could write your application to run on Windows instead of Linux.

The one exception is learning a new language. That’s simply too large to tackle in a single project. You’re better off using new languages to solve the various and sundry small needs that always crop up, and only tackling a larger project once you have a few such successes under your belt. The important thing is to make steady, deliberate gains in your knowledge and experience, so that you have a wide array of solutions to any problem, and the perspective that can only come from seeing a problem from multiple angles.

A language that doesn’t affect the way you think about programming is not worth knowing.
– Alan Perlis