makeshiftmind

Balancing the signal-to-noise ratio.

Mental Version Control

When I work on software projects, I use a tool commonly known as “version control” to help me keep track of changes I make to my code (or that other people make), so I have a “history” of my code over time. Version control is especially useful in group settings, where two people could potentially be changing the same files and not know it. Typically the version control repository is located on a server, and developers check out files from the server to work on them. When the files are checked back into the repository, version control is usually smart enough to see potential differences and attempt to reconcile them. If the differences can’t be reconciled, the files get flagged to indicate manual intervention is necessary to resolve the problem.

After the code has been stabilized for a scheduled release, it is then branched. Branches are important because they allow the developers to continue adding improvements to the main body of code (often referred to as the trunk), while having an exact copy of the released version of the code to which they can make bug fixes while new features are developed independently. When the new enhancements are ready to be released, the bug fixes in the branch are merged into the trunk, and a new branch is created from the merged files. And the cycle continues.

The interesting thing about version control systems is how they handle differences, both between individual files and entire branches. If version control made a copy of a file every time it was changed in order to keep a history of all changes to that file, the repository would grow to an unmanageable size. Most small/medium size software projects are literally composed of thousands of files. Instead of making copies each time something is changed (or branched), version control simply catalogs the actual differences that are introduced with the change. So if I add a single line of code to a file and commit the change to the repository, version control notes the original state of the file, and then notes the one line difference in that file’s history.

I wonder if our minds work like version control. We experience an enormous amount of mental stimulation every day, though our raw sense experience, and through the activity of learning new things. Perhaps our brains take the new information we receive daily, compare it to the information we already know, and make note of only the difference in the information in order to conserve “space”. This would explain why, at times, we have problems recalling details for a specific experience — because our brains never recorded the details, only the unique elements the experience provided. Our memory then, would operate recursively, starting with a particular experience and moving backwards to reconstruct it based on the other memory references the brain has created.

In primary schools we are introduced to basic concepts like shape and color, and from that point our learning becomes ever more refined, until we can exercise the ability to think in abstractions. Perhaps abstractions are difficult for us precisely because the brain must perform so much recursion — it must constantly work “backwards” to find the concrete origins for each abstraction.

What do you think?

1 comment

1 Comment so far

  1. ncloud March 17th, 2008 9:21 am

    I found a great article that deals with something similar to this topic: mental chunking. Take the little test at the beginning and see how you do.

Leave a reply

You must be logged in to post a comment.