I have spent incalculable amounts of time trying to set up software environments, and if you’ve done any programming, I’d guess that you have had similar experiences. As a way to save everyone time and frustration, I think we should push for hermit crab software–programming environments that carry their “home” around with them.

Sometimes you need a language runtime and a text editor, sometimes an IDE has everything, sometimes you have to grab the language and various tools, or the language ecosystem relies on outside libraries. Then there’s configuration of each of the components; for example, download and set up the Clojure bundle for TextMate, add the language to your PATH, etc.

Some issues I’ve had recently:

There are a few promising leads like Vagrant and Juju, which make it easier for everyone to share a development environment. Unfortunately, they probably can’t help at the language level (e.g., are you using Ruby 1.9.2-p180-patched or 1.9.2-p290?). Maven, Bundler, Pip, and other dependency management systems help, but I’d like to see the language make dependencies and versioning a first-class citizen. I envision the ability to download an app from source control and be running with all the right versions of the language, tools, and dependencies in one-click.

So, why not create software environments that carry their environments around on their back?