1st
2009
Dec
permalink

The Purpose

I want to make software that people use. I’m tired of making stuff that gets used by one person once a month.

Pathway to the Sun

The purpose of software ultimately boils down to one of these things:

  • To help people work
  • To entertain people
  • To teach people
  • To keep people safe
  • To help people pursue happiness

Software can help people. If it doesn’t, it hasn’t fulfilled its purpose.

I always tell people at work that my job as a developer is to remove myself from the process — by replacing myself with software. If I do that, I’ve created an asset for the company. If I don’t, I’ve created a liability.


Related: The Question
Photo by jedzer

15th
2009
Nov
permalink

The Question

A skilled sculptor can form any shape. A skilled programmer can make any program. The only question is, what?

I think this rings true with anyone who has spent 10 years in the field. After a certain point, you start to realize, there’s nothing you couldn’t program. Sure, there are challenges. How do you get it to be fast enough? How do you allow it to scale big enough? But at the end of the day, after having faced challenging problems in the past and eventually overcoming them, you begin to realize that it’s no longer a matter of whether you can make it, but more… what’s worth making in the first place?

Paul Graham said, “Once you know what to make, it’s mere effort to make it, and most decent hackers are capable of that.”

“Every block of stone has a statue inside it and it is the task of the sculptor to discover it.” — Michelangelo

No matter what your craft, after a certain amount of practice you become a master craftsman. But the tradition of creating a masterpiece to cross the line from apprentice to master has faded away.

Deep down, we who love the craft still want this. And we wonder, what is worth making?

The result of our work can either be that awful thing in the park no one wants to look at, but has to, or David.


Related: The Purpose
Photo by jasontheaker.

14th
2009
Nov
permalink

Conrad Barski of lisperati.com gives a taste of his new (not yet released) book, Land of Lisp, at Philly Lambda. On Lisp + Game Programming!

Update 11/19/2010: Land of Lisp is out! Get it here.

5th
2009
Nov
permalink

How to Convert a Local Branch in Git to a Remote SVN Branch

This is a little more obscure git-svn recipe I derived today. Thought I would share it.

Basically, I was prototyping a new feature on a local branch in git. Later, I decided I wanted to push that local branch into an svn branch so that my svn comrades could see it. So I started with a local branch following svn trunk with purely fast-forward commits. And the following did the trick.

Create the svn branch.

svn cp <url-to-svn-repo>/trunk <url-to-svn-repo>/branches/final-remote-name
git fetch        # Sync w/ remote svn repo.
git branch -r    # This should list final-remote-name.

Make a new local branch with your feature that follows the new svn branch.

git checkout local-feature-branch   # This is the local branch where your prototype feature is committed.
git checkout -b final-local-name    # This makes the local branch derived from your local feature branch that will eventually become the branch that tracks the remote svn branch.
git svn info     # This will say you are following trunk.
git rebase remotes/final-remote-name

Verify.

git log         # All of your feature commits should be on top, followed by the commit that created the svn branch, followed by trunk commits.
git svn info    # This should now say you are following the svn branch, final-remote-name.

If everything looks good, push all your feature commits to the remote svn branch.

git svn dcommit

You can optionally delete the local feature branch that is following trunk, so you don’t use it by accident.

git branch -D local-feature-branch

Basically all it amounts to is a rebase, with some svn trickery.

So again, all together now…

svn cp <url-to-svn-repo>/trunk <url-to-svn-repo>/branches/final-remote-name
git fetch
git checkout local-feature-branch
git checkout -b final-local-name
git rebase remotes/final-remote-name
git log         # Check your commits.
git svn info    # Check you are following the svn branch.
git svn dcommit
git branch -D local-feature-branch    # Delete old local branch.

I hope someone finds this useful.

Related: How do I make git-svn use a particular svn branch? - Stack Overflow