Git is actually sooo hard. Not just to learn, but also to use consistently.
And I say that as a person who used it for probably over ten years. I’ve used it since GitHub was in beta, and I heard of this Git thing, and it was trending, and it was cool, and probably my only early adoption thing kicked in around that time, when I wanted to check it out…
Since then I’ve been using it probably every day. And I have interfaced with it so often. I’ve read all of its man pages, and documentation, everything. And still to this day (ten years later) sometimes it’s hard for me to explain.
When people come to me with a very basic question of like:
Oh, I just pushed a change. I really didn’t wanna push that, so how do I undo it?
So from their perspective, that’s a really reasonable question to make. And then I’m just like:
I’m sorry… This is gonna sound like I am teasing you or that I’m mocking you, but actually I’m really being frank, and I’m gonna give you my advice. It’s just not gonna be great.
Or for instance, when people ask:
How do I delete a branch?
and then I have to ask them:
Well, what do you want to do? Do you wanna delete a local branch, and then just get it recreated when you pull again from the same remote? Or delete the remote tracking branch? Or delete the remote branch?
And now for the first time I’m realizing that they have never even considered that there’s such a thing, because why would they? A branch is just a single concept in our head that is made complicated by the inherent distributed nature of Git.
It’s not to say that I’ve become disillusioned with the tech itself. I think it’s amazing, and I think that the tech itself is… the quality of the tech that is Git is a testament to GitHub being able to make it this far in the tech space. And I think it evolved amazingly as well.
But I think in its evolution it’s only getting bigger. It’s just getting more commands. And even though its documentation is getting more approachable to newcomers every year… and there’s really good man page documentation now… and error messaging is fantastic because it often suggests what you should do next to get yourself out of the mess that you’ve accidentally made…
I feel that with all that power that it’s gaining, instead of being a more approachable tool, that it’s actually being a tool that is continuously making people feel frustrated, to the point where I feel that whatever the next version control system is…
(And it does not have to be something separate than Git. It should maybe be just a really powerful abstraction built on top of Git.)
But I think whatever the next iteration of the people’s version control is… it should be something that is more reflective of how we think about what version control is for us.
How people think about things is generally always very simple:
I have some changes. I wanna share it with Jon and Johnny so they can tell me what they think. And then maybe they can add their ideas. And then we can have a merging of our ideas, and eventually test out if it works, and have it out there and ship it.
That wasn’t hard to explain. I think it’s very easy for all of our listeners to understand that mental model in their heads. But then when we come to physically typing out all those commands… suddenly we need months or sometimes even years of learning this set of tools to become proficient enough with them.
What about GUIs
I have really initially resisted the idea of graphical tools for Git, because I was this heavy terminal nerd; I was very much in my terminal bubble of being really proficient with a lot of these things, because I was for ten years (before even my Git learning) using just terminal tools in general, because I was a very Linux nerd. And I feel that even though it was possible for me to learn that, I feel that nobody should need to have spent so much time in a terminal to be able to understand those things.
I especially see it when somebody not from my background is approaching this.
So I would definitely say it’s not such an unpopular opinion. I’ve heard a lot of people express their anguish (especially on Twitter) with their inability to use the Git command line even after a long while.
The user hands-on aspect of version control –how we interact with it– needs to be built in something that is much more closer to how humans think about it. Rather than being:
I will get you to think about a directed graph or as operations on a directed graph
No human thinks about that! Humans think about:
I’m gonna save my work and I’m gonna share it with other people. Then I’m gonna step off this computer and just leave for the day.
In other words
I guess this short TL;DR version would be I feel that version control systems (the next version of them) should not be something that was specifically made for the Linux Kernel community. It should be something that was specifically designed to be used by the wider community.
(And it can still be implemented on top of the Git tech, or it doesn’t have to be.)
For me, I love version control and I’m gonna love it in any iteration it appears in. I feel that the next one should have more broader users in mind than a bunch of people who are already really comfortable with their terminals, and they’re reading the email from mailing lists in their terminals already, and unpacking patches by typing out a
tar command in a single go.
The new generations of users of GitHub that I witness are not those people. And they’re not me. And they’re not those Linux maintainers.
That’s not all Mislav had to say. Listen to the entire episode to hear the story of switching
hub away from Ruby. Also, he shares another unpopular opinion he has about GraphQL and Go. Play it from the start right here 👇
Oh, and don’t forget to subscribe to Go Time in your favorite podcast app so you don’t miss future episodes and insights. ✌️