Habits of a Good Programmer

1. If it works and is still useful, don't throw it out.

This means writing portable code, and making reusable pieces. Libraries, APIs, whatever it takes. Be your own client. Layer your work.

2. Never solve the same problem twice in parallel.

This means making tools. Adopt the Unix philosophy: command-line tools that do one thing and do it well. Learn about pipes. While you're at it, use Linux (or a BSD) as your development box.

3. Solve the same problem often in serial.

This means being willing to throw out your code and rewrite it when you find better solutions. If you work towards minimal APIs rather than features, this works better.

4. Write code, and repeat, until you are fluent in your language.

Using a small language makes this easier. It takes years to become really fluent in a programming language.

5. Work with others.

Learn the techniques of collaboration. A good way is to contribute to an open source project. Or even better, start your own.

6. Technology is a tool, not a tribal affiliation.

Never turn pragmatic choice of tools into a belief system. The language matters little.

7. Aim for this cycle: learn, play, work, teach.

It is the fastest way to get better and deliver code that others can use and trust. Avoid this cycle: imagine, argue, agree, work. It is the fastest way to deliver junk.