views:

192

answers:

1

Working alone on academic research sometimes breeds bad habits. With no one else reading my code, I would write a lot of throw-away code, and I would lose track of intermediate results which, weeks or months later, I wish I had retained.

My recent attempts to make my personal workflow conform to the Joel Test raised interesting questions. Academic research has inherently different goals than industrial software development, and therefore some aspects of the Joel Test become less valid.

Nevertheless, I find these steps to be still valuable for academic research:

  1. Do you use source control?
  2. Can you make a build in one step?
  3. Do you have an up-to-date schedule?
  4. Do you have a spec?

Of particular use is the one-step build. I find myself more organized now that I have implemented the following "one-step build":

One step build.

In other words, I have a single script, build.py, that accepts Python code, data, and TeX as inputs. The outputs are results, figures, and a paper with all the results filled in. (Yes, I know "build" is probably not accurate in this context, but you get the idea.) By consolidating many small steps into one, I am not backtracking as much as I used to.

...but I'm sure there is still room for improvement.

Question: For research projects, which steps of the Joel Test do you still value? Do you have a one-step build? If so, what does yours consist of, i.e., what inputs does it accept, and what output does it generate?

+6  A: 

Most of my published papers have been about software or have been made possible by software. But there's a big difference between a software project whose lifetime is measured in years and which supports a whole stream of papers, and a student's summer project that if lucky gets into one paper submission.

With that preamble, here are my responses to the Joel Test:

Do you use source control?

Always. Even for papers. Newer tools like git and darcs have made it easy compared to the bad old days of CVS and RCS.

The last project for which I didn't have source control from the start was noweb, which I started as a first-year grad student in 1989. It didn't get imported into source control until 1991. It formed the basis for one scientific paper.

Can you make a build in one step?

Yes for most projects, but often not until the project is several months old. And when software is going to be distributed or when I am collaborating with someone outside my institution, it gets harder.

When I am playing lone wolf it often is several months before I even know what I mean by a build.

When a project is mature, not only do we have a one-step build, we have a one-step build-and-run-regression-tests. Couldn't survive without it.

Do you make daily builds?

No. The one project I headed that made daily builds was Quick C--. The daily build server died two years ago, and we never found enough value from it to make it worth replacing.

I would make a daily build only for a big project with real users. At that point it's not likely to be "lone wolf" any more.

Do you have a bug database?

Usually not. There have been a couple of exceptions, but we've had a hard time finding a bug database that meets our needs as Linux users. We'll be trying again soon with http://community.haskell.org.

Do you fix bugs before writing new code?

Sometimes. We get paid to make new discoveries, not to build working software. That said, the working software gets us credibility. But if the project is small enough that I am the only one working on it, I fix bugs only if they need to be fixed.

Do you have an up-to-date schedule?

Never. (Unless you count the next paper deadline.)

Do you have a spec?

Never.

Do programmers graduate students have quiet working conditions?

Yes.

Do you use the best tools money can buy?

No. Sadly, this decision doesn't impact us much, because great tools for Haskell or Lua or ML are generally not offered for sale. But when I worked on C compilers as a researcher, we could not afford to buy the Plum-Hall test suite.

Do you have testers?

No.

Do new candidates write code during their interview?

No. Graduate students are hired based on research potential. Postdocs are hired based on research achievement.

Do you do hallway usability testing?

Not nearly enough. But it's hard to grab someone in the hall and get them to try out your new language or your new code generator :-)

Norman Ramsey