Why and How Educators Use GitHub(alexeyza.com) |
Why and How Educators Use GitHub(alexeyza.com) |
The process to get students fluid at the basic flow took a few days, but after a while it was great and I couldn't imagine doing it any other way. Any programming course using this is obvious, but I'd even do it for non-programming things if I could get the student trained on it in a minimal amount of time.
The only roadblocks with git are that there's so many basic ways to screw up, which are hard to fix. Let's say a student does a `git init` in their `~/code` folder that holds all of their git projects... and then makes a bunch of commits, and then can't figure out why they can't push to github. I wish there were some better failsafes to prevent such things, but they happened by accident once a week at least.
In fact, the blog post doesn't include all the details, but some of the educators we interviewed were not from CS. You can see a table describing all the participants in our research paper (the link is provided at the end of the blog post).
Just like you, I believe it is completely possible to use this for non CS classes, and still gain all the benefits. However, like you said, there should be a basic understanding of Git.
Many of git's capabilities seem esoteric to students, and for someone just starting indeed they are (students aren't managing a huge FOSS project, just their homework).
Today, we released Classroom for GitHub: https://classroom.github.com
Classroom for GitHub automates repository creation and access control, making it easy for teachers to distribute starter code and collect assignments on GitHub.
You can read more about it on our blog: https://github.com/blog/2055-teachers-manage-your-courses-wi...
I like to write code in class, and it's great to be able to push every couple of minutes so students can follow along on their laptops if they want. Of course that's more about git itself, but the GitHub interface is good and I think that it lowers the frictional cost for both me and the students, so everybody gets a little more done.
By the way, your article has encouraged me to get the students using issues for eg. homework questions they'd normally email, thanks for that.
We taught what what needed, but students (in learning to be self resourceful) will often google things, try tutorials, read on stack overflow, etc... and sometimes get themselves turned around. Git is a big piece of software to understand completely I guess, and even if you only show someone a small bit, they are likely to get confused at some point when they are trying to go deeper.
As an interesting and certainly unintentional thing, we discovered at one point that the words git uses to describe commands are often daunting to students. Commit and blame in particular. At one point we found many students weren't making enough commits, or sometimes none and were reluctant to turn in their homework. Through meeting in some 1:1's, we discovered that some of the students felt that if their work wasn't perfect, they didn't want to "commit" to it and that the word held too much power seemingly- they thought maybe there was something deeper to it.
This probably sounds silly, but when teaching people who are new to programming there are all sorts of preconceived notions that can really hold people back, and this was one of them.
It reminds me of the problem with teaching Java as a first language – you must start with `public class Foo` in a file called `Foo.java`, containing a method declared as `public static void main(String[] args)`, which means you must either explain tons of concepts (what "class" means, what "public" means, what "static" means, etc.) long before you can motivate any of them, which makes everything seem complicated and hard, or hand-wave them away as incantations that you'll learn about in due time, which makes programming seem magical and mysterious.
None of which is to say that Java isn't a great language for doing professional work, just that it isn't great to start with. Git seems quite similar to me.
On the other hand, I get that it is valuable to teach techniques that will actually be useful to students in their professional life, even if they are clumsy in a non-professional setting. There's a real tension here.
Apropos of nothing else I wrote: I've always enjoyed seeing people alias `blame` as `praise` or something similarly positive (although `annotate` is the built-in neutral option, which is also pretty good).
Can I ask what initial decisions you had, or what did you reorganize with time?
That's pretty specific to the more or less sequential approach with the book, though. It's a good book, so it can support that kind of thing.
I think it will also help with presenting the supplemental material that is linked with each chapter/section. Again, that might be specific since in the Stevens book, there is always a manpage or Single UNIX Specification reference to give for almost any section.
This might be a good solution if people want something a bit more fancy as a course website. Thanks for sharing.
Anything you teach them that is simply theoretical, you have to fight them to get them interested in. This isn't to say I didn't do it. I taught students basic C, binary conversion, arduino, basic electronics, game programming, noSQL databases, computer science, etc... in various classes. But there was always a group of students who wanted nothing outside of what they would need on the job, immediately.