We are all a bunch of tech and tool nerds. We enjoy hacking out a clever solution. Finding exactly the right commands and switches to solve the challenge at hand. Sometimes we go a bit overboard. Many developers don’t think Git is something that we should tinker with. But it is!
The Dumbfounded Teacher
I have taught Git many times to a wide variety of people. Usually I’m on top of my game and got answers at the ready. But one day a question stumped me: “Why should I learn Git? I’m just a software developer”. To the developer in question, I was some kind of special breed, those that enjoy tooling. And while that is true, I still believe that being proficient in Git ( or whatever inferior SCM you are currently using ) is an essential part of being a skilled developer.
I had taken it for granted that, of course, everyone should learn Git, but now I was challenged on my assumptions. What a delightful and helpful exercise for me to answer that question.
The Skilled Developer
We all have expectations of software developers, be it ourselves or others. Proficiencies, understandings and competences a skilled developer should possess. Here’s a few common ones.
I think this is the least controversial of the “pillars of skill”. I expect a skilled developer to know something about the things that they are making. If you are an embedded developer this could be the trouble with interacting with hardware, working on a real Real Time system, or working with restricted resources. When developing Windows applications, it wouldn’t be unreasonable to expect the ability to interact with Windows core features These are things you might not know when you start in a new position, they are skills you hone. They separate the rookies from the skilled developers.
Your IDE is likely the place you spend most of your time when developing software. (My condolences if that’s actually PowerPoint or SharePoint.) So to be efficient, you need to work gracefully within that setting. Do with a simple keystroke what novices do with multiple messy menus and deceptive dropdowns. Know how to tweak the configuration so that it suits your workflow and domain.
A skilled developer should be proficient with the language they work in. They understand the idioms, features and limitations of their language and know their way around the standard libraries. If I’m coding Java everywhere I’m doing it wrong.
Environment and Circumstances
There are a lot of items that can go in a ‘miscellaneous’ category. We, at Praqma, tend to shed light on a lot of dark corners in this area. I expect a skilled developer knows how to build and release his own software. But many places “It’s Steven who can make the release, it works on his machine”, so I might be very naive in that aspect. But If you are not able to release your piece of software, how can you bring value to the business?
Many developers are handed a toolstack, and get complacent. “The tools team has got it”. However, you need to work efficiently, and an external dependency on a separate team is not facilitating that.
Why not Git, then?
So after all of these points, why do we not expect our software developers to
When I started using Git I could commit, pull and push. Merge conflicts gave me sweaty palms and I often found myself deleting a repository and cloning it again.
I also tended to have multiple versions of The Software lying around.
The_Software_02-05-17-going-home. It is clear that while I was using Git, I did not know Git.
There are many benefits to knowing Git. Here’s a few:
Being comfortable with Git’s lightweight branching model makes it trivial to go on tangents, while keeping the experiments isolated yet easily integrated.
The full power of Git. Offline.
Software Development is most fun when you are collaborating. But the ability to use the full force of Git while not being connected is very strong. You can still make many checkpoints in your history and check out previous versions. This, for many people, is reason enough to use Git.
Enable Continuous Delivery
Git branches are made for Continuous Integration and automation, so they will enable all your automation efforts. A branch can be used as a flag, a branch can make sure all automation work is isolated, and doesn’t even duplicate any data.
Build your own workflow
Git does not impose any workflow on your organization. You can choose for yourself. While this is a double-edged sword, and requires some up-front investment, it will empower you. Rather than compromising your flow to fit the tool stack, you dictate the flow and easily customize Git to suit your needs.
Yes! Me! I want to learn Git!
We do a lot of training in Git at Praqma. We’ve even done free Git Trainings and Continuous Delivery Academies for students. We also train professionals. If you are working in or near Aarhus you should look into the Sharpening your Git Skills course. If you want to do some self study, look into our excellent Git Katas.