Sunday, November 06, 2011

Some thoughts on Git vs complexity


I originally wrote this in the Git For Human Beings mailing list. The thoughts are stolen from Rich Hickey's Simple Made Easy talk. (Matthew McCullough commented the same parallel the same day, but I think his timestamp was a few hours afterwards). I wanted to tweet about it, but it ended up being a whole post, as I'm trying to gather my thoughts on it for my next Git talk.

There's simple stuff, and there's easy stuff.

Simple means the opposite of complex. Easy, on the other hand, means it's very close to the stuff you already know. Git is "simple" but hard. Subversion is "easy", but eventually complex.

Git is *a lot* of features in one tool (think of the 100+ git plumbing commands). Each feature is simple, but learning to use them together is good bit of work. As soon as you've understood the model and you get that Eureka-moment, the tool never fails you, and you find it more and more fun to use the more you learn. (This is why there are so many git enthusiasts, I reckon.)

Subversion has a very limited set of features.It also turns awfully complex when you want to do stuff like merging. Actually the more I learned about Subversion, and the more I used it, the more frustrating I found it.

Why is Subversion complex?

- Because the stuff on the server is something different from what you have locally. Your local checkout is just a thin skin. All the interaction goes over the network with a really thin and crappy API. It’s like reading a book using binoculars. The same information is there, but it’s horrible to get at it.

- Everybody is tangled together using the same repository. People start making mistakes like committing without updating first. Everyone mis-use trunk as their own sandbox. This is complexity too (everything in one bucket).

- It mixes together committing, and pushing the changes to central. A commit should do one thing, and one thing well, and the reasoning should be in the commit message. Some are refactorings, others are feature-changes.

- Because branches are completely disconnected - there’s nothing that ties them together, except being a lot like each other. That’s how merging in Subversion works: “I assume that these two directories will be very similar”, and if they aren’t, BOOM.

Git, on the other hand, is simple: It all boils down to being three kinds of objects in a graph (commits, blobs, trees), and the rest of it are algorithms that work this data-structure.

Saturday, November 05, 2011

Presenting Git on Windows at the next Bonn-to-Code.net meeting

Update 18.11.2011: Due to Gad J. Meir visiting Bonn-to-Code.net all the way from Israel, we've postponed our talks that were planned for the 28th of November. Most likely I'll be doing the talk near the end of January next year instead.

It's been a while since I ran Visual Studio on my laptop. In my early university-college days, around ten years ago, .NET was just coming out of the oven. We learned algorithms and data-structures doing Java, but when it came down to actual application development, desktop- and web, connecting GUI's with databases, .NET was the thing.

I liked it. It was bit of an eye-opener for me, that I could actually use programming for building useful stuff, and not just fantasize about being a game developer.

Later on, I fell back into the Java/J2EE world, and rode there for a while. While working for Objectware's Java department, it was always interesting to see what the .NET department was up to, and while they were part of them evil scheme of Microsoft's technology lock-in, they were mighty productive in certain domains.

So, the reason I'm installing Visual Studio again is this: The Bonn-to-Code.Net meeting on the 29th of November. I'll be showing off how to get Git working in the hands of a .NET developer.

My employer, Viaboxx Systems was kind enough to sponsor me with three German Git books I can give away at the event. Hint: Asking questions might result in a free book!


Those who follow this blog know I'm actually a Mac/Linux user, so it's actually been quite a lot of research for me into finding the right Git tools to use on Windows and how to use them. Here are the things I hope to show off (with actual live demos!):


If you're planning on attending the talk, I'd love to hear any background or expectations you have. If you're undecided on attending, be aware that I just finished Scott Berkun's Confessions of a Public Speaker, so I know all the tricks of the trade now! Additionally, I've spoken a bunch of times before, some of which are recorded if you're curious what my talks are like. I promise an action-packed and dynamic talk with zero slides.