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

continuous re-evaluation

You need to identify what is wrong with your application. You don’t need to actually do anything about it (immediately), but you need to know. Define the problem. Write it down somewhere so you’re forced to articulate it. Add things onto your list without thinking every time you run into an issue. Eventually, you’re going to substantially rewrite a component for some other reason. You might as well rewrite it to make it better at the same time. Yes, eventually, you’re going to rewrite the whole thing, but intelligently incrementally rewriting it will push off that day. Even if you don’t do it, your total rewrite will be better because you will have weeks, months, or years of thought that’s gone into identifying exactly what your pain points are. Don’t wait till you have to know what to fix. Know it now.