Thursday, May 8, 2008

A Programmer's Personal Infrastructure

Programmers do it because they love it. A Software Engineer does it because it's their job (although, they might still love it).

At my job as a Software Engineer working on Atalasoft's .NET Imaging SDK, we have a fantastic continuous integration system. It takes much of the pain out of the day to day problems involved in software development. Unfortunately, this type of system is too expensive and difficult to maintain for a single programmer. Fortunately, there are some decent and mostly hassle free solutions available.

To enumerate what a programmer needs to be productive, in order of importance:

1) The Right Tools and Environment
Most hackers have this figured out already. Having your computer set up so you can jump right in and having a place to work where you can focus are equally important.

2) Offsite, Backed Up Source Control
How many times do you have to lose your work because you didn't back it up? Between hard disk failures, refactorings gone horribly wrong and malware munging my files... So many hours of lost work. With the advent of free public source control repositories and friendly gui tools there is no excuse for not taking advantage.

Some Free Options:
DevjaVu
Assembla
CodeSpaces

Here is an old (but good) blog post with a huge list of them.

3) Action/Planning System
One of the hardest things about getting going on a project is thinking about what to do next. I have found that by using an next action tracking system it's way easier to break my projects up into little bits and that makes it easier to get motivated ("I'll just do at least one thing a day").
I think bug tracking/ticket systems are a good fit for this because they are designed around priorities and projects. Thankfully most of these new, free, Source Control sites give you a free bug tracking system too. They can also be handy for, you know, tracking bugs.

Most free source control sites provide this service as well.

4) Some Way To Store Documentation or Ideas
I use a Hipster PDA for keeping track of ideas on the go (it works way better than my "smart" phone) but eventually physical things will get lost. That's why I think it's important to dump them to something digital with automatic backups asap. For this the best option is a semi-private wiki. They are fast for information entry and formatting and you can easily and cheaply get it web hosted at a place with automatic backups.

Some Free Options:
WikiDot
wikihost.org

WetPaint

There are tons of other options if you google for "free private wiki".

That's about sums up what I have in place. If you feel that I missed anything important please leave a comment.