Skip to content

Instantly share code, notes, and snippets.

@GRardB
Last active August 29, 2015 14:25
Show Gist options
  • Save GRardB/5003c872fafcf663a929 to your computer and use it in GitHub Desktop.
Save GRardB/5003c872fafcf663a929 to your computer and use it in GitHub Desktop.
Why I don't think Git (or any VCS) is good for beginner programmers

This is an explanation of a tweet I wrote that seemed to cause some major controversy for some reason.

Before I say anything, just know that this is not meant as the start of a debate. I have zero interest in debating about this topic. I've had more than enough debates and arguments with other programmers to last a lifetime. Nowadays, you'll never see me talking about what programming language is the best, why your framework sucks, or anything like that. The only reason that I'm bothering to respond to people who disagreed with my tweet is that I have the utmost respect for education, and it's important enough for me to write about my opinions. You can disagree if you want, but just know that I will not get into a debate with you. Let's just agree to disagree. This is not me being close-minded; it's me already knowing what your arguments are, and me having already disagreed with other people with the same thoughts. Thanks for understanding.

Gerard, what gives you the right to say how people should teach programming?

I've got a good amount of teaching experience. In college, I was a TA for the Introductory Computer Science course for four semesters. I got great reviews each time I taught the course, and I still keep in touch with many of my students. I suppose this means that I'm pretty good at teaching. I remember one time when a student of mine came up to me after class and said, "I wish you were the professor for this course. You're so much better at teaching than our professor is."

I've also taught Front End Web Development at General Assembly twice. Just like my days as a TA, I got great reviews and keep in touch with many students. Some of them have even sent me emails and personally told me how much they loved taking the course with me. I've also gotten some amazing comments from the TAs as well.

On top of these things, I've been a mentor to many people, both on a personal level and for short periods of times like a weekend at a hackathon.

I feel the need to bring these things up, because – without trying to sound overly rude or cocky – I get mildly annoyed when people with no teaching experience tell me that they think I'm wrong about how to teach programming. I think that my students who ended up working for places like LinkedIn, AppNexus, MongoDB, Google, etc. will back me up in saying that I know what I'm doing.

With that being said, here are my actual thoughts:

You likely didn't learn this way.

I didn't learn any version control systems when I first started programming. Unless you went through some kind of programming bootcamp, you likely didn't either. I didn't learn how to use one until I had been programming for a couple of years already.

For some reason, many programmers – especially those without teaching experience – think that they can optimize the teaching of programming. They think that the way they learned was inefficient and slow, and that it can be improved on. I will quote Zed Shaw, who wrote something that I couldn't agree more with:

To me this inability to visualize a person who is a total beginner is a symptom of most programmers being terrible at teaching programming. They frequently have bizarre ideas about teaching programming because they can’t visualize a person who knows absolutely nothing. My favorite is how they think you should teach programming without teaching “coding”, as if that’s how they learned it. They’ll have this imagined idea that they learned programming in their first discrete mathematics course, when really they were probably typing the code out of a book when they were 11 and simply don’t consider that where they learned to code.

Zed Shaw isn't talking about version control, but the general idea is still the same. Many programmers think to themselves, "man, Git is so useful! I wish I had known this back when I first started out." Here's the thing, though: you don't wish you learned it alongside learning how to program, but that you knew it.

Pretend you're one of my students at General Assembly. You have a Windows laptop and maybe know some basic shortcuts for things like copying and pasting text. You might still be using Internet Explorer. You have never heard of Sublime Text before (you might not even know what the phrase "text editor" means). You have written text inside of online forms and Microsoft Word, but not much else. You don't know how to find files on your computer that aren't inside of My Documents. Now, someone is simultaneously trying to teach you how to navigate your filesystem, use your computer somewhat more efficiently, use a browser in a way you never have before (To open these weird HTML files!? What is going on?!), multiple new computer languages (HTML, CSS, and JavaScript, which have no shared syntax), how to think like a programmer, and plenty of other things you've never encountered before.

And you want me to further confuse them by teaching them how to use the command line and some random command line tool, because you think it's useful? No, I'm sorry. It's already difficult enough for students to understand all of these new things you're throwing at them. Adding these extra complexities further confuses them.

You don't realize this, because you didn't learn this way. Many programmers have liked computers and tinkered with them long before they learned how to program. Many of you have simply forgotten how you learned.

I will reiterate that while you wish you knew how to use a VCS when you started programming, you certainly don't wish that someone was teaching it to you while you were learning the basics. I love using Vim, but I don't teach it to beginners, because they already have enough to worry about.

It doesn't solve their problems.

I simply don't see the value in teaching someone how to back up their programs and have multiple "versions" of it, when they haven't even broken 100 lines of code. When people are creating the simplest programs, or the simplest of web pages, you simply don't need a VCS. If you're in an interview and someone asks you to code up FizzBuzz on your computer, do you create a directory in your console and type git init? I hope not.

By teaching a beginner programmer how to use a VCS, you are trying to teach them how to solve a problem they haven't encountered yet, and likely won't encounter for a while. And again, it just forces them to keep track of too many things while they're still trying to learn the basics of programming.

My girlfriend is currently taking a programming course, and she doesn't see the point in learning Git right now. It's being taught to her, but she hasn't really learned how to use it and doesn't understand why it's useful for the small amount of code she's writing. I'm glad she doesn't understand, because I don't either.

It's not fun.

One of my friends is giving programming a shot. He doesn't look forward to going to school for another three years to follow the career path that he originally wanted to go through. I showed him an online coding school that has "prep work" that must be completed before applying for the course. He's been doing it for a couple of weeks now.

I asked him yesterday if he was having fun and he said, "to be honest, no." I asked him what he was learning, and he said that they're teaching him how to use GitHub. WHY!? My friend has literally not even written a single line of code, but he is being taught how to use Git and GitHub. Again, without trying to sound overly mean and hostile, this is an extremely stupid method of teaching programming. I can't even imagine how many people give up at this point, because they don't feel like they're progressing or learning something useful.

It doesn't make you a better programmer.

Think of all the best programmers you know. How many of them learned a VCS while they were still writing simple programs? I'm willing to bet that most programmers don't know very many programmers better than themselves who did.

And before someone who learned this way gets all pissy about what I'm saying, just know that I'm not saying that learning a VCS while beginning hurts your chances at becoming a great programmer. Not at all! What I'm saying is that if the best programmers got where they are without it, then anyone can. In other words, I don't think learning a VCS early on puts you at an advantage over someone who didn't.

In conclusion!

Please don't teach a VCS to beginner programmers. If you run a bootcamp course of some kind, you'll need to teach it at some point for sure. When they're learning everything else is not the time, in my opinion. If it has worked for your students, then I applaud you, and you may even be a really good teacher. However, I stand by my opinion that given a random selection of a teacher and a random selection of students, teaching these things while they're learning the basics will yield suboptimal results on average. Everyone learns differently, of course, but I think that certain methods absolutely work better than others.

If you learned this way and have become successful, then I applaud you as well. I would argue that you experienced success, not because of learning a VCS as a beginner, but in spite of it. I find it to be impressive, so kudos to you.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment