Encapsulated experience

I spent a little time this morning looking into source control management systems. Today I watched Linus Torvalds’s talk at Google. I’m going to use Git, for the same reason that C is still a standby in programming.

C is a terrible language. Compared to its contemporaries (ALGOL 68, Lisp 1.5, Smalltalk) it’s primitive. Compared to today’s top languages (Haskell, ML, Scheme) it seems ludicrous. C has something these languages lack. It is the codification of how a couple of smart and experienced programmers liked to write assembly. It provides support where its designers wanted support, and nowhere else. Such a language can never be planned or designed, nor should it, but it provides something to fall back if you can’t find a clean language appropriate for your project.

Git represents Linus implementing a system to support how he wants to do source code control, based on years of a large and particularly chaotic development process. Developing software within a laboratory is chaotic and unstructured. I have trusted Linus for years on the kernel of my operating system. I’ll trust him on version control.

The only other thing of real interest out there is darcs, which is version control based on a theory of patches as noncommuting operations in analogy to Hermitian operators in quantum mechanics. Intellectually, it’s very exciting, but I have become jaded and bitter and I need to finish my PhD, not mess with beautiful computer science.

2 Comments

  1. RobBlake:

    I looked into switching version control software awhile ago. There are two main flavors: centralized and distributed.

    Centralized: A good fit if less than 5 people are collaborating on code, or if no one ever wants to branch the code.

    subversion is the winner here, especially since you can team it up with a Trac wiki and drill down into your repository history

    Distributed: Allows for infinite numbers of branches. Scales better than centralized. A bit less support, sometimes harder to use.

    darcs - Really nice, beautiful theoretically, but checking in code is strange and the algorithm has a bug that sometimes requires an exponetial search in the patch space.

    git - Alpha/Beta software when I was evaluating it, perhaps it’s stabalized?

    mercurial - I have friends that swear by this program. It’s supposed to be the easiest to use of the distributed programs.

  2. madhadron:

    Actually, I find git very easy to use. They’ve apparently come a long way in the last year.

    But I agree with Linus that any system which makes branching difficult is essentially useless. I have to have various branches and versions available and maintainable. For some things, we need a stable version with no whistles. Someone may be collaborating in developing a new feature. I have rewrites of parts of the code going on elsewhere. If I can’t easily isolate these things in branches, I am in deep trouble. I remember being so. It’s why I need source code control.

Leave a comment