![Ming Chow of Tufts gives advice on teaching Git and GitHub](http://web.archive.org./web/20170505192004im_/https://cloud.githubusercontent.com/assets/7321362/25156701/1306adc6-2451-11e7-9416-10709cd72286.png)
Students don't leave Ming Chow’s course until they are prepared to hold their own on an engineering team. Full stop.
What’s required for those rigorous engineering roles? “Experience making tangible things, mastery of how the web works, and communication,” Ming affirms.
In 2016 he received both the School of Engineering Teacher of the Year and Excellence in Technology Education awards at Tufts, success he reached using GitHub:
I’ve used Git and GitHub for well over five years now. When you take a course with me, it is simply expected that you’re going to learn Git and GitHub.
Ming was inspired to put version control front-and-center in his curriculum from a colleague, Norman Ramsey, who posted the idea to Stack Overflow. “Norman is a man of many great ideas, and this was one of them. I took his idea and executed it.”
To collaborate, you must communicate
It’s rare that developers build something entirely on their own: whether it’s taking over legacy code, reading documentation or submitting bug reports, we’re always in dialogue with others.
The benefit of version control is that it takes snapshots of progress over time, and small commits with clear progress markers give context to your work. Training students to make commit messages that are clear and frequent pays off in the future when other developers are able chip in to help.
Just to make sure that students master collaboration, Ming designs assignments and group projects so students must rely on one another to distribute the workload. He also asks students to give context to their work with GitHub’s documentation features:
In every assignment and every lab, students have to write a README. And a lot of them ask, “Why the heck do we have to write that?” Well, the difference between a good engineer and a great engineer boils down to writing skill and communication. So that’s the whole point of having a README for every project.
![chow-readme-example](http://web.archive.org./web/20170505192004im_/https://cloud.githubusercontent.com/assets/1874003/24818674/7724bd3e-1baf-11e7-948c-626180d9eeee.png)
Priming collaboration: GitHub users are invited to create a README for every repository.
Collaboration matters because the web is relationships
To demonstrate how web technologies are interrelated, Ming has students evaluate and use third-party tools like APIs, Heroku, and GitHub to build their projects.
As part of that process, students become wise about which APIs to rely on:
One of the nice things about this course is it reveals the ugliness of web development, especially if you’re using other people’s platforms and services. For instance, Instagram recently changed its policy on rate limits, which students had to adjust for in their projects. When you’re dealing with APIs, you’re at the mercy of that third party. In any job, you’ll need to learn how to deal with that kind of risk.
All that said, Ming recommends the third-party tool Heroku for student projects because students can use Git to push changes to a live product.
![wikilinks](http://web.archive.org./web/20170505192004im_/https://cloud.githubusercontent.com/assets/1874003/24818722/9cbf4410-1baf-11e7-9e9d-3a64399eac55.png)
Screenshot from a COMP 20 project hosted on Heroku. With these end-of-semester projects, students demonstrate their ability to work in teams, apply everything they’ve learned in the class, and have fun.
![phood](http://web.archive.org./web/20170505192004im_/https://cloud.githubusercontent.com/assets/1874003/24818757/bbf46bda-1baf-11e7-9206-0e04dcf6d5f1.png)
Screenshot of another COMP 20 project.
Last, Ming points to GitHub itself to show the moving parts of the web in action:
Git and the web are tightly integrated. One of the main points of using GitHub is to show it’s all based on HTTP and HTTPS. That also reinforces the learning of how the web works, as well.
Why is mastery of the fundamental pieces of the web important? Once students master the web conceptually, they will be able to integrate new technologies into this framework, building upon their understanding in the future.
Careers are the sum of our contributions
At the end of the semester, Ming celebrates the end of the course with perhaps one of the best subject lines of all time:
![gift image](http://web.archive.org./web/20170505192004im_/https://cloud.githubusercontent.com/assets/1874003/24818791/dd7a24a2-1baf-11e7-9d3d-fb74684b8f8e.png)
Ming frames student work as something that’s valuable and in moving a repo to their stewardship, he’s giving students the gift of a portfolio. In the future, students can point to this project as proof of how they communicate with other developers.
As their last assignment, he asks students to frame their repository with one last README: a self-assessments about what they’ve learned in the course. From a student:
The most important thing I learned has been the importance of communication in teamwork. For example, dealing with merge conflicts on GitHub was a big problem in my group, and helped us learn how to discuss our changes with each other, even as we were working on separate parts of the project. Another time we were struggling with making our database queries, and even those group members not working on the server side had to learn about it and help.
A duty to train future leaders
Git and GitHub reinforce the ability to communicate with others around real-life projects, which is why they are required for COMP 20.
Ming believes that teaching computer science is not simply about ones and zeroes but about leadership. The technology of the future relies on the habits he’s building in the classroom.
![image](http://web.archive.org./web/20170505192004im_/https://cloud.githubusercontent.com/assets/1874003/24818810/ef66e25e-1baf-11e7-8849-5543fd88a03d.png)
This is a post in our “Teacher Spotlight” series, where we share the different ways teachers use GitHub in their classrooms. Check out the other posts:
Join this week's discussion in the community forum: How do you introduce Git in your course?