Life as a GitHub Intern: the Making of GitHub Field Day

Wilhelm Klopp is a student at University College London (UCL), a Campus Expert, and creator of Simple Poll—one of the most popular Slack integrations. He spent the summer of 2017 as a Developer Relations Intern on the GitHub Education team. In this post Wilhelm shares his work on GitHub Field Day over nine weeks at GitHub HQ in San Francisco.

Solving a problem for my own community

At UCL, our student community is vibrant and engaged, but after a few years, I noticed that we lacked a system for “knowledge transfer”, including a way for older leaders to train new students before they graduate. There are a few great resources out there to help solve this problem. Campus Experts, for example, is an online training community to enrich the technical community on your campus.

Personally, I was interested in developing an in-person event for student tech leaders—and GitHub Education was interested, too. For my internship, I proposed to start with a prototype event at GitHub HQ in San Francisco, and grow it to wider scale from there.

The event, later called “GitHub Field Day,” would bring together tech student leaders to learn from each others successes and mistakes, figure out what works and what doesn’t in community development, and get to know each other. Field Day would be an event where students create an agenda of their pain points and success stories. After a day of learning from each other, they could go back to their own schools and apply the lessons learned.

Interns working at GitHub HQ

Support and mentorship, the GitHub way

The first week as a GitHub intern is big—kind of like moving to new city and starting a full-time job. You move into a flat in San Francisco, meet your co-workers, and get to know the team you’ll be spending time with over the summer. The Developer Relations interns also got to join the Education team for a “mini-summit”: a twice-annual team meeting where we discuss priorities and timelines, while getting a sense of how the team works together.

Something that not very many people know about GitHub is that over 60 percent of its employees work remotely. Although all interns are based in San Francisco, we worked remotely with our GitHub team members—sometimes across multiple time zones. This can be challenging at first as you learn to use a plethora of communication tools to their fullest.

For example, if your teammate lives in Scotland and you’re in San Francisco, you might get a few Slack messages outside of working hours—or even wake up to reminders about 4 am meetings.

Intern class with hoodies
Interns have on-boarding cohort, just like GitHubbers do–and complete with swag. Here’s the whole internship class in our navy GitHub Intern hoodies.

Launching the first Field Day

Fellow interns @jasonetco and @kim-codes and I worked quickly to gear up for a successful launch, which meant we needed branding, an announcement, and a landing page for the event. Together, we managed to get it all up and running in just five days. The morning of the event, we also put together banners, name tags, and enough food to feed dozens of students.

The hard work paid off: We received hundreds of applications from students who wanted to improve their communities, and on Field Day we had a packed house. When 50 students began to walk through the door, I knew we were onto something great—everyone was excited and had a lot to talk about.

One topic was learning design for coding beginners, particularly relevant to student-run events and hackathons. Another common pain point was how to develop a group identity, and make new members of a school's tech community feel like they belong. Students also wanted to be able to connect their campus community with other schools, something they could accomplish through the relationships they built on Field Day. We even had a surprise visit from GitHub’s Senior Vice President of Technology, @jasoncwarner who did an impromptu Q&A.

I’m happy to share that Field Day lives on: all the work going into the branding, outreach, design and reflection has now shipped to 10 scheduled events around the world.

See if Field Day is visiting a city near you

Wil and Kim intern in San Francisco

Postscript shoutout: thanks @kim-codes!

Thanks to my awesome intern cohort and especially @kim-codes—my partner-intern in crime in brainstorming, ideation, and execution.

We're just wrapping up application season for our 2018 internships. If you'd like learn more or get updates on recruiting for our 2019 intern cohort, visit

Mapping crises for the American Red Cross and the UN with GitHub

How many students can help solve urgent problems within weeks of writing their first lines of code?

In Taichi Furuhashi's “Introduction to Spatial Information Systems I” at Aoyama Gakuin University in Japan, students collaborate with organizations like the American Red Cross, the World Bank, the United Nations and the Japan International Cooperation Agency.

For Furuhashi, President of CrisisMappers Japan, student engagement and active learning are his primary design principles. The relatively new program helps students work together to make new tools that solve big problems.

Furuhashi’s courses have been dedicated to alleviating disasters, and his students work on different aspects of providing accurate and up-to-the-minute data to aid in relief to NGOs and industry partners.

Design principles behind School of Global Studies and Collaboration
Design principles behind the School of Global Studies and Collaboration.

From OpenStreetMap to GitHub Gist

In July of 2017 the Asakura City region of Japan was hit with heavy rains and flooding. Whole sections of southern Japan were impassible, and residents urgently needed resources like water and food.

Organizations like the Red Cross used the Humanitarian OpenStreetMap Team’s tasking manager (called HOT for short) to post requests for analysis of affected regions.

Landslides and Flood mapping in Asakura City
Students in Taichi's class accept a request for mapping help from the Humanitarian Open Street Map tasking manager (a.k.a. HOT).

Photos of the affected regions come in via probe drone, satellite, or panoramic camera. Students draw polygons on maps that match up with these photos to show affected regions, like mudslides, downed forests, or collapsed bridges. Then they export the GeoJSON data to a GitHub Gist file (like this one) and send the analysis back to organizations the Red Cross via HOT.

Asakura-shi Sugawa area(

This map captures the heavy rain caused by Typhoon No. 3 on June 30, 2007. It’s based on images taken by helicopter by the Ministry of Land, Infrastructure and Transport. The polygons and lines indicate potentially impassable roads due to mudslide and the general reach of the flood.

The contributions that students make—their polygons and data analysis—can help authorities decide where to send resources and find flood and landslide victims. By helping local crises, the work of the class is always relevant and urgent.

GitHub 101 in Japanese

As the Director of OpenStreetMap Foundation Japan, Furuhashi involves students directly in the open source communities he’s a part of. This means mastering the GitHub flow, using GitHub Pages to make portfolio sites, and participating in open source communities.

He produced a slide deck to help onboard students to the world of GitHub and introduce them to the world of open source. The slides are, naturally, under an open license: CC BY-SA 4.0.

GitHub and Spatial Information



OpenStreetMapからGitHub Gistへ

赤十字などの組織はHumanitarian OpenStreetMap TeamのTasking Manager (略称HOT)を活用し、被災地域の分析リクエストを投稿しました。
古橋氏のクラスの学生は、Humanitarian OpenStreetMap Tasking Manager (略称HOT)からのマッピングサポートリクエストに応じました。

探査ドローン、衛星、パノラマカメラなどから被災地域の写真が届くと、学生はそれを基に、土砂崩れ、倒木、崩落した橋など、被災地域の状況を示す多角形を地図上に描きました。その後、GeoJSONデータをGitHub Gistファイル()にエクスポートし、分析結果をHOT経由で赤十字に返しました。



日本語版GitHub 101

オープンストリートマップ・ファウンデーション・ジャパンの理事として、古橋氏は自身が参加するオープンソースコミュニティに学生を直接かかわらせています。つまり、学生はGitHub Flowをマスターし、GitHub Pagesを使ってポートフォリオサイトを作成して、オープンソースコミュニティに参加しているということです。
古橋氏はスライドデッキを作成して、オープンソースの世界を紹介し、学生がGitHubの世界に入りやすくしています。これらのスライドは、当然オープンライセンス(CC BY-SA 4.0)です。


Teaching efficient collaboration at the Hasso Plattner Institute

If you’re looking for a real-world approach to computer science education in Germany, you can find it at the Hasso Plattner Institute (HPI) in Potsdam, which offers a practical and engineering-oriented alternative to conventional computer science programs.

Students at Hasso Plattner

In one of HPI’s undergraduate software engineering courses, researchers Arian Treffer and Christoph Matthies encourage their students to make mistakes, assess where they get stuck, and reflect on their software development process. This way students learn how to deliver the best possible results when working together.

The final year undergraduate course "Software Engineering II" features a real-world software development challenge: 20-30 participants jointly develop a single system. Students form small development teams and coordinate within as well as with the other student’s teams. Tutoring, lectures and an introductory exercise are offered alongside the project. All code is published on GitHub under an open source license. Christoph says:

When you leave here, you should have an idea of how to develop software in a team. It's likely that you’ll work with others on some outdated legacy system in your later work life. As long as people have the ability to reflect on how their process, they are more likely to succeed in whatever they want to do.

Arian adds, "If you don't practice good communication and you work in a setting with multiple teams, frustration is inevitable. The first time your code is thrown away because someone else has already completed your ticket is an important learning experience."

Focusing on communication and self-organization shapes how students start coding: commit often, write clear commit messages, and learn from your mistakes. But first, students learn the basic tools and processes needed in an introductory exercise. However, managing these exercises for many students—and checking them manually—can get tedious.

Introducing Professor CI

Professor CI introduces students to technical tools using GitHub’s continuous integration services.

Participants work on their own repositories in Github and receive feedback and new challenges from the CI server when they push their code.

Arian is quick to note that using CI to help students fix their problems isn’t completely novel. The innovation, he says, is in how they use Professor CI with GitHub.

What is novel is using GitHub issues to motivate people and basically get them into the habit of tackling issues, writing tests and fixing bugs. If an Issue is done, you’re automatically sent another one that progresses the exercise—this is the new part. Prof. CI simulates a customer requesting new features, changes and bugfixes.

workflow of Professor CI
Summary of time from acceptance to completion of student tasks via Professor CI. For more details on the design and implementation, see the corresponding paper.

With Professor CI, students can work on their local machines, using their local development tools, and get the benefit of quick feedback from instructors. In turn, instructors have insight into students’ processes and code.

marking graph

Christoph adds, "Automation is great for standardized exercises, but in the actual development project that follows, we rely heavily on human interaction."

Spot the real requirement

Building software in teams requires talking to real humans, so the next step in the course is gathering clear and concrete requirements from a stakeholder. As anyone who builds software knows, that’s easier said than done.

Instead of giving students clear requirements for their final project, Treffer and Matthies assign a co-worker the role of the customer, whose primary job is to—well—be a customer.

He throws ridiculous requirements at the students, and changes his mind constantly. Then the students have to get out of the customer what to build. They don't get requirements. And the development process and all of its artifacts, they have to manage on their own.

This approach ensures that budding engineers get the close-to-real-world experience that the HPI hopes to instill. They develop real skills in listening, negotiating, and communicating that will help them code solid products and reduce wasted effort, wherever their degree takes them.

Treffer notes that students often think that development is chugging along better than it is, because they don’t yet have the experience required to identify problems as they arise. Milestones serve as natural points of reflection at which the group can work together to make processes better. They also closely monitor students, both with tutors and using GitHub tools to make sure they don't deviate too much from development best practices.

Reflect, then reflect on your reflection

Treffer and Matthies use a variety of exercises that help students find out what worked, what didn’t, and how to make next time better. The Sailboat is an exercise that students use to reflect on the development process.

Reflection exercises at HPI

In this exercise, the sun is what went right and the wind is what pushed the team in the right direction. The anchor represents what slowed the team down, and the rocks, of course, are potential future problems. Marking each feature of the boat scene allows the group to candidly diagnose how they work together.

Reflection exercises allow the students to get closer to one another and their professors to more intimately understand their students. Being able to collectively analyze and discuss what went right and what went wrong allows for some resolution to what might have been a rough sail. It also helps students learn how to collectively develop a process that will, ultimately, create better software and more efficient development time with minimal waste.

Basically, the most important aspect of our lecture is that students learn to apply what they're doing to identifying problems with their development process and learn how to improve the process. It’s about figuring out which process works best for your team and context.

For further reading:

Summer internships at GitHub in San Francisco

Applications are open for summer internships at GitHub. As an intern at GitHub's San Francisco headquarters you'll spend ten weeks from June to August working with a team in engineering, product, security, sales, marketing, or design.

Intern at GitHub

Every GitHub intern has the opportunity to make an impact by working on real projects with mentorship from experienced GitHub employees. Interns have worked on projects ranging from adding embedded code snippits to deadlines and rosters for GitHub Classroom and The state of the Octoverse.

You can read more about the 2016 and 2017 classes of GitHub interns on the GitHub Internships website.

2017 GitHub Intern Group Photo
GitHub interns visit Alcatraz - Summer 2017

To help give you a better idea of what to expect from interning at GitHub, the class of 2017 has written a letter to future GitHub interns:

If you’re reading this letter, you’ve made the first step towards gaining the professional experience of a lifetime—at a place that values you—your ideas, creativity, life experiences, and individuality.

Read the full letter

Intern presentations
GitHub interns give final presentations - Summer 2017

2018 Summer internship opportunities

The GitHub internship program is open to all students enrolled in a university, community college, associate, or graduate school program. You can apply directly on our website for any of the following 2018 summer internship positions:

Read more and apply to intern at GitHub. If you'd like to stay up to date on new internship openings, sign up for email updates.

Innovating in the liberal arts: code as language at Bard College

Bard College is not a technical research university. In fact, when students arrive on campus, most say they’ve had no experience with computer science.

Professors Keith O’Hara and Sven Anderson aim to change this during students' first week on campus. Every student starts their liberal arts experience with the Language and Thinking program in which O’Hara asks them to think, express ideas, and create an artifact with code.

Anderson and O’Hara’s novel pedagogy makes programming accessible and appealing to philosophy majors and poets. Here are three of their methods to try with your nontechnical students.

"The mathematician, like the poet, works only slightly removed from pure thought-stuff. He builds his museums in the atmosphere, from atmosphere, creating by toil of the imagination."—Fred Brooks, mathematician

Learn by remixing, with your peers

Keith introduces his class to the world of code by using JS Bin to remix HTML pages. Then students build confidence by seeing the direct output of their changes as they work. First they change a link, then the stylesheet, then work up to adding their own graphics. In the first workshops, they also learn how to use GitHub to host media files from fellow students.

Code to express yourself

We can use code to speak to machines, to each other, and to the world around us. To prime students to think about these complex relationships, O’Hara points to the first chatterbot ELIZA, a parody of a psychotherapist as a human-machine communication system. Humans input their thoughts and feelings, the machine responds to their input, and the relationship blooms out of the design of the software.

In a second workshop, students write algorithms to generate poetry, make a robot sing and dance, or create virtual fish for a group fish tank.

Computer-generated poetry

In these workshops, Keith provides clear and functional code for students to customize and enhance.

In these coding studios, students were exposed to how computing can be the ultimate medium—the meta-medium—allowing us to express ourselves in new ways with motion, sound, graphics, and text.

Take it offline: manual link-building

In the first assignment, Keith asks students to collect and share URLs from a free-write. To help them understand how link structures work, he gives students balls of yarn. Then they toss yarn around the room to show connections between their sites.

Later, they exchange wooden nickels to explore the algorithm that powers Google Search, sharing their “money” with those the sites they link to and an instructor who further divvies up the pot.

The wooden nickels act as currency for power or authority; the exchange of these nickels simulated how power is distributed ad accumulated in the network.

Wooden nickels exchanged in class

Programming across the curriculum

What is the impact of these creative assignments? And why would Bard implement a computing element in their orientation?

Keith’s answer: to change attitudes towards computer science. To make significant strides in the diversity of computing, we need to connect computing to other disciplines, like art and biology.

First impressions are critical, and we expect that this brief exposure to computer science will have its most signicant impact on students when they make decisions about whether to engage computing in courses and employment opportunities. An increased familiarity with computing may allow them to entertain it as part of a viable pathway for their future.

Student leaders, join us at GitHub Field Day in San Francisco

GitHub Field Day, July 29th

GitHub presents Field Day—a one-day unconference for leaders of technical student communities. Students will share how they build communities, learn from each other’s successes and mistakes, and explore how they can collaborate in the future. We'll spend the day focusing on how our summer internships in the San Francisco Bay Area can benefit our respective communities at home.

Field Day is a flexibly structured, student-run event. Attendees drive most of the content, and you'll find students giving lightning talks and leading discussions on their experiences.

If you run a student tech club or if you're actively involved in your school’s tech scene, and also happen to be in the Bay Area this summer, we’d love to welcome you at GitHub HQ on July 29th.

Learn more about GitHub Field Day

Learn by doing at Cal Poly with GitHub and Raspberry Pi

Professor Chris Lupo has taught at California Polytechnic State University for eight years and recently revamped his upper-level Architecture course using GitHub Classroom. In this post, he shares his workflow for deeper insight into student work, efficient debugging, and community support.

Open tools lead to a hackable classroom practice

At California Polytechnic State University, the motto is “learn by doing”, so it follows that students learn with real-world tools, rather than with board work and problem sets.

There's evidence of this learning philosophy in the tools teachers choose—particularly in open source projects GitHub Classroom and Raspberry Pi.

In group work, we do a lot with Raspberry Pi and students get into the habit of making sure they push to get it on their other systems, or so their partners can download changes. The flow encourages strong development habits. Push early, push often—that kind of thing.

Chris uses Classroom to distribute starter code and create individual and group assignments.

Diagnose, collaborate, fix: a debugging workflow that doesn’t hurt

Chris uses Classroom, GitHub’s collaboration features, and Raspberry Pi to work with students when they get stuck. Here's a quick overview of his workflow:

Quickly access a student repository. Assignments set up through Classroom automatically add Chris as a collaborator, and the dashboard clearly presents a list of student work.


As soon as students click an “invitation link” from Chris, Classroom creates a new repository for them.
Here’s the output from GitHub Classroom in Chris’s course.

Clone and comment in-context. Students can see where changes need to be made and leaves comments directly in their code.

Test the fix on his own Raspberry Pi.

Push the code back to the student’s repository, with fixes and comments.

This workflow solves the cumbersome task of transferring files. Both instructor and student can work from their own environments, instead of switching between computers.

I can clone their work, connect to the Raspberry Pi that I have access to, and run their code. From there I can work with them directly on their code base to show them what steps to take and how to move beyond their current problem. After we work together, I can push the code back to them when we’re done.

I have access to everybody's code all the time. I've not had that capability prior to using GitHub Classroom.

An active community of teachers helping teachers

When Chris has questions about Git or best practices, he reaches out to the GitHub Education Community for advice from other teachers.

I've also found the community really helpful for support. For example, I learned about a script named orgclone that was really useful for me in repository management.

screenshot 2017-06-26 13 39 18

Even though Git and GitHub take some time to get students up to speed, Chris says students are happy with the experience now that he’s implemented GitHub.

Feedback has been very good. There is a little bit of a learning curve for people who have never used Git before, but they all said it was worth it.

Adapt Professor Lupo’s assignments:

Use Raspberry Pi assignments for a university setting:

See more GitHub Education posts

Sentry joins the Student Developer Pack

Sentry joins the Student Developer Pack

School may be (almost) out for summer, but we're still adding to the Student Developer Pack. Sentry is now offering error reporting to new and existing pack members—send up to 500,000 errors per month and enjoy unlimited projects and members.

Sentry provides real-time error tracking and crash reports for your web apps, mobile apps, games, and more. With Sentry, you get all the information you need to identify, reproduce, fix, and prevent bugs—from the full stack trace and the contextual details of the exception to a trail of events that led to the issue and release and commit data—so you can set priorities, triage proactively, and make sure errors don't affect your user's experience.

Sentry works with dozens of languages, frameworks, and libraries, including JavaScript, Python, Ruby, PHP, Node, Java, Go, and Swift—and it's 100% open source. Sentry also integrates with GitHub to create issues based on Sentry events.

Sign up for the pack now.

GitHub Student Developer Pack

Our Student Developer Pack gives students free access to the best developer tools from different technology companies like DigitalOcean, Datadog, Stripe, Travis CI, Sentry, and more. Oh yeah, and all students get free unlimited private repositories—perfect for summer projects.

How to grade programming assignments on GitHub

Feedback is essential to the learning process. Input from an expert at the right time can make all the difference in a software project.

In past programming classes, Professor John David N. Dionisio's printed out student assignments and commented on their code by hand, directly on the paper. Students said it was easier to understand feedback when it was in context.

When he started using GitHub’s interface to communicate with his students, he found he could introduce version control even earlier in his courses. As a result, Dionisio's students have the opportunity to use industry tools from day one of their studies.

The web app has made development more accessible sooner, letting freshmen get in on it without having to learn everything about version control. The comment threads and the ability to comment line by line tightens the feedback loop. Now printing is not really necessary because you can just look at the diffs and make comments about it.

With a streamlined process, students don't get stuck on setup

John runs his courses using GitHub Classroom to manage student assignments and Jenkins CI to deliver immediate and ongoing feedback.

Working with a live repository, he knows students will see it exactly as he does. And GitHub Classroom’s dashboard lets him share a link to the full assignment and view who has accepted it.

For students it’s easy to get started. With Classroom, I can now basically deliver a complete package, including the instructions. Instead of things being sort of scattered, and having the student accumulate it together. Documentation is there, sample code is there, and configuration files for continuous integration are there.

Every student picks it up, and if they’re off and running. They can commit, and you can look at their histories. Students have their own private repo that they would build their files on.

More substantive feedback, fewer syntax errors

Until he started using Jenkins to flag formatting issues, Dionisio had to provide his students with a flood of stylistic comments.

Now, instead of focusing on bad indentations and incorrect spacing, Dionisio can give more qualitative feedback on redundancies and best practices. His comments have evolved into more of a conversation.

I frequently give feedback in terms of design and structure, like "I would’ve instead written this line this way." And since GitHub comments are in Markdown, they're easy to read and very clear.

You can really format the code and convey your ideas. The display thread helps the student respond. It allows very context-sensitive, context-aware discussions for finer points of code.

The difference reviewing code on GitHub makes
A before and after of Dionisio's feedback—from manual markup to precise and contextual feedback using GitHub’s review process.

github-annotated-json-error copy
github-explain-linting-notes copy
github-pinpoint-focus-on-bug copy
A few additional examples of John's feedback to students.

The goal: strong communication skills around code

In industry, developers almost never start from scratch. To be successful, they need to be able to ask questions about code, to understand what’s going on, and recognize the strategies of other developers. In the classroom, pull requests work to build those skills:

Pull requests with Markdown support are a great place to have a consistent thread of feedback. And this clear signal of, "I now accept your work"—like building a relationship of submitting your work for someone to look at, and after we workshop it for a little bit, I now accept your work.

Anything that helps me simulate tools and practices they will encounter later is always of help.

This is a post in our “Teacher Spotlight” series, where we share the different ways teachers use GitHub in their classrooms.

See more GitHub education posts

Teaching recursion with fractals at Lowell High School


Mikaela Marciales, a junior at Lowell High School in San Francisco and member of the JROTC, reflects on her projects in AP computer science as equal parts expression and fun—in large part thanks to a creative AP computer science approach developed by her teacher, Art Simon.

When I’m feeling all optimistic and happy, I’ll make a really colorful, explosive program. If I'm more calm, I'll make a more minimalistic type program.

Spark curiosity in your course design

Years ago, Art remembered that a student brought in some code he ripped out of a magazine. After they ran the code together, the student’s eyes lit up.

From there on out, Art has designed assignments for students to make work theirs, put personal touch on projects, and build things that are meaningful.

Programming is about making the computer do what you want it to do. So personalize your projects. Make them fun. Make them unique. When students can make it theirs, you tap into another kind of creative design and drive.

Rethink recursion assignments

Recursion is a critical programming concept, but it can be pretty abstract. In Mikaela’s words, her first introduction to recursion was, “Wow, this must be super complicated.”

But Art showed students fractals and prompted students to create their own. With a touch of Algebra and looking at a few lines of sample code, Mikaela jumped in to make her own Sierpinski Triangle.

See Mikaela’s project on GitHub Pages

Now Mikaela is even looking at nature differently.

Whenever I think of recursion, now I think of nature and tree rings, Mr. Simon showed us this picture of a leaf that is a leaf inside of a leaf inside of a leaf type thing. I think I've seen it in a lot of plants now that I think about it.

Unique projects make cheating difficult

Art encourages his students to look at similar projects on GitHub for inspiration and to ask other students for input.

Mikaela reflects on this blend of studio feedback and peer learning:

Having people that I talk to is really nice because, you can just say, "Oh, that would be really cool in your program." And someone will tell me, "Oh yeah that would be cool in your program, too."

mikaela asteriods 3
Mikaela built on what she’d learned in Java programming for her future assignment Asteroids.

He structures the assignments in terms of milestones, layering in a different element or feature of the project at each turn.

In Mikaela’s Asteroids game, we're using object oriented programming techniques that build up and adds features. We get the ship working first. That's milestone number one. We get the asteroids on the screen. That's milestone number two. We get the ability to remove asteroids and look for collisions. That'd be milestone number three. Then we add bullets, and you got a working game.

Since everyone’s project is unique, Art isn’t concerned about dishonesty—as long as students can explain what is going on in the program, they’ve mastered the material.

People are going to create objects that explode differently and encounter collision detection differently.

A passionate start to a career in programming

Mikaela has run out of computer science courses to take at Lowell, but she participates in an after-school program called Mission Bit and plans to continue with an engineering internship this summer. And Mr. Simon’s approach to teaching has made all the difference:

I have to compliment Mr. Simon because I was a complete beginner in all of this stuff when I came into it, and he taught me everything, which is pretty cool because now I know so much.

Resources for AP Computer Science teachers

This is a post in our “Teacher Spotlight” series, where we share ways teachers use GitHub in their classrooms.

See more GitHub Education posts

How investing in teaching with GitHub pays off

How Harvard, San Francisco State, and The College of New Jersey use GitHub in their courses

As a teacher, you juggle the endless stream of student emails, faculty responsibilities, and an ever-evolving field of scholarship. Is it worth to switch to version control for your courses? What do students get out of it?

Three teachers candidly reflected on the benefits GitHub offers their classroom practice at the recent Special Interest Group on Computer Science Education conference (SIGCSE) in Seattle.

Skip to a specific section:

  • 2m24s Omar Shaikh (SFSU): GitHub + Travis CI for automated grading
  • 11m50s S. Monisha Pulimood (TCNJ): Collaborating on real-world projects
  • 23m28s David J. Malan (Harvard): Custom tools for CS50
  • 37m25s Questions and answers

Monisha Pulimood, Professor of Computer Science and Chair at The College of New Jersey, shifted her class on databases to a project-based model, where students collaborate in teams with a service learning component.

My concern was that, because of all the collaborative activities, I was losing class time for the students to actually master the content. But in fact, they are. It turns out they are really doing well with that; there’s a good increase in understanding the content. Students can answer deeper questions than they could before.

David J. Malan from Harvard University walked through the nuts and bolts of implementing Git and GitHub for CS50 in this deck.

CS50 Deck

Sign up for lesson plans, tutorials and best practices from GitHub Education

Once a month we’ll pass along tips and tricks for implementing Git and GitHub in your classroom.

Subscribe for updates

Why version control is required for Comp 20 at Tufts University

Ming Chow of Tufts gives advice on teaching Git and GitHub

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.

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.


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.


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

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.


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?

GitHub Issues and user testing as authentic assessment

Alexey Zagalsky quote on learning process

A course organized around users, not exams

In his Startup Programming course at the University of Victoria, Alexey Zagalsky asks students to design products based on user needs.

Working together in teams of four to six, students deliver pieces of the project at key milestones:

He ties the course to the software industry by inviting experienced mentors from local startups to evaluate student work. Alexey says:

While the end-products are terrific, the larger goal is understanding the process of collaborative software development. Students learn how to listen to users and incorporate their feedback in a thoughtful way.

User testing as assessment

After students ship a working prototype, the next milestone requires user testing with their target audience. And of all the challenges over the semester, students wrestle the most with addressing user feedback:

The most frequent point of failure is not understanding their users. And they wouldn’t see where they’ve failed until they try to get people to use their product.

But being able to listen to feedback, and implement it as part of the design process, is quite important. First, to learn, but also to get a job, because it’s not about writing code but actually understanding what needs to be built and how. One student now works at Amazon. Two or three work at Microsoft. One has gone on to become a UX designer. So many students really benefitted from this approach.”

Feedback through GitHub issues

Alexey admits:

You’d be surprised how often students get stuck and never ask for help

So occasionally he pops into student repositories to see what’s going on, test the code himself, and spot mistakes before it’s too late.

If he spots a bug, he’ll open an issue, outline what’s amiss and upload screenshots of the behavior.

Alexey finds a bug in a student project
From the fall 2016 student project DayTomato.

Next, he works with the team to think about potential solutions:

One team wasn’t sure which metrics they should track using Mixpanel. I suggested they track certain metrics at the prototyping, release, and iteration phases of their project. I gave them some perspective on how to prioritize and implement.

Alexey comments on a student project
From another student group, who made a borrowing and lending application called Bümerang.

Iteration for intrinsic motivation

In an Agile classroom, the goal is not the right answer to the problem, but knowing which problem to take on first, and how to solve it in the right increments.

This course isn’t about assessing a final product and saying, ‘You did that wrong.’ Our in-progress ‘checks’ show the students we care about their work; it’s not just some assignment they need to submit for a grade. The way we care makes them more motivated in turn.”

screenshot of presentation on process

Another student project, SmirkSpace, reflecting on its user feedback for Milestone 3.

A collaborative classroom practice

Alexey’s research focuses on how to use industry tools to build software together, to help his students develop the social ties, trust and curiosity to sustain a successful software career.

So he uses GitHub to enable discovery, design, and collaboration:

It’s about changing the way people work: students and educators, students among themselves, and education’s relationship to industry.

I am working from the hypothesis that software built collaboratively, with many voices and opinions, will improve the collective good of future software, period.

How to implement this classroom practice

Alexey documents all of his course designs and publishes the results of his research on student experiences with GitHub, Slack, Stack Overflow and other real-world tools.

Here’s a recent talk on his course design that discusses the benefits (and drawbacks) of using social tools in the classroom:

Student reflections on tools ecosystem

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 use issues in your class?

Invest in tools students can grow with: GitHub and RStudio for data science at Duke University

quote from mine cetinkaya-rundel

Data science is a melting pot of disciplines: students from Anthropology to Political Science to Education all sign up for the same course. It’s a challenge to keep the material engaging for everyone.

At the same time, teachers want the next generation of data scientists to be able to analyze any dataset they come across in the future with the same level of rigor used in the classroom. That outcome requires a consistent level of training, across diverse datasets.

Mine Çetinkaya-Rundel, Director of Undergraduate Studies and an Associate Professor at Duke University, tackles these problems head-on. She quite literally wrote the book on the subject, and her open, online course Master Statistics with R certifies thousands of students a year. She edits the Citizen Statistician blog and offers the annual Duke DataFest, a hackathon for working with data.

Her data science course emphasizes “reproducible computation”, a documented process of how data is treated in order to replicate the results in the future. She meets that learning goal using R Markdown and R Studio, as well as by requiring students to incrementally commit their changes using Git and GitHub.

Students learn the concept and the real-world tool, at the same time

Some instructional products have a high learning curve in-and-of themselves. Çetinkaya-Rundel would rather students learn a language in the discipline that they can later build upon:

They learn a limited bit of R syntax that allows them to analyze and visualize data in R. While the goal of the course is not to make each student a proficient R programmer, they learn enough R to be able to build on in their second or third classes. Teaching software designed to be used only in an introductory class would not have this benefit.


Editing an R Markdown file in RStudio by Chester Ismay, MIT License

She wants her students to ship their first visualization project quickly and get started “like a knife through butter” without errors. To bootstrap their efforts quickly, she has them access RStudio Pro using her department’s server.

Best practices for scaffolding collaboration

Sta112FS introduces Git on day one to help students learn about version control gradually and in increments. Her GitHub structure is one organization for the course, one repository per team, and one per assignment. She recommends starting out with an individual assignment first, so students can get used to Git’s mental model before adding the complexity of collaboration.


Mine has students access their projects through RStudio, which she integrates with Git. These slides are from her talk, A first-year undergraduate data science course.

On group projects, Mine creates one repository per team, and everyone on the team can push. Knowing that students will encounter merge conflicts when they’re working asynchronously, she provokes the error messages early on in the semester.

In the first exercise, students clone a demo repository and are asked to edit the README in two tools, first on GitHub and then again in the RStudio editor. The conflicting changes throw an error, which she teaches students to resolve calmly, and by reading the messages.

I show them how I would resolve [the conflict], and then they do the same thing... I tried to create a situation in the classroom that could be frustrating for them later, and say, "This is about to happen. It's important to read the message that it sends you, and this is how you would resolve it.”

The setup pays off in engagement and curiosity

For Mine’s course, using a computation tool prompts students to engage with data directly—an important pedagogical choice to make their analysis both personal and real. There’s a freedom in exploring and tinkering with the real-world tool that professionals use.

Using a computational tool means that you can give the dataset to the students, and they can play around with it. They might be playing around with it in a way that you have designed the assignment or the assessment, but still it gives them the flexibility to look at another variable, make a different plot, than what was assigned for them to do.

Git and GitHub expertise after students leave the classroom

While she keeps student repositories private, merely using GitHub gives her students an edge later in their careers. They can also choose to make their repositories public after they are done with the course.

A lot of students have said to me later, even first-year undergraduates, that using GitHub has helped them a lot when they went for an internship or a research position interview.

They are able to say, "Oh, I already have worked with GitHub. I'm familiar with it. I know how it works.” So I think they are at least able to put that on their CVs and go into a situation where there's a research or data analysis team and say, "Yeah, sure. I am actually familiar with the same tools that you use."

Creating RStudio projects from GitHub repositories

To see an example of Git and RStudio in action, check out this tutorial from Dr. Nicholas Reich at UMASS-Amherst:

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: What are your favorite Statistics/R/ GitHub Resources?

Real-time feedback for students using continuous integration tools

For teachers it can be a challenge to get students the help they need exactly when they get stuck, especially in large courses. But when teachers use an automated testing suite like Travis CI with their assignments, students can hone in on their mistakes and iterate to improve.

Students see the value of a test-driven workflow as they are learning, and teachers save time grading assignments: a win for everyone.

Omar Shaikh quote

Omar Shaikh, Lecturer at San Francisco State University, saw an opportunity to improve the assignment workflow for the C++ course he took over:

"The problem with the manual submission process was that, if a student is missing a small semicolon, or they were almost correct, the TA has no way of knowing because it doesn't compile. Yes, the TA can go into the code and try to grade it, but it's very inefficient."

Build confidence through passing tests

Exercism, a tool that helps code newbies and experienced programmers learn new languages, uses a testing framework to guide students in increments.

“It helps people who are new to programming break down problems into smaller pieces” said Exercism creator Katrina Owen, “a lot of students spent a lot of time being stuck before I introduced test suites. Seeing the green check marks when their tests pass can reassure students that they’ve mastered the skill and the problem is solved for now.”

Experienced Ruby teacher (and TravisCI engineer) Renée Hendricksen agrees: “When you have assignments that are ‘write code to get these tests to pass’ the student gets instant feedback if they are on the right track.”

“When you use a ‘test-first’ teaching method,” she explained, “students get used to reading and understanding errors early. When they start with a failing test, they can look into whether it’s an error because of setup or their application. Let the red-green-refactor guide you.”

Efficient grading for problem sets

Instead of grinding through a lot of time looking for a missing period or semicolon, teachers have insight into exactly which piece of the code didn’t pass and go from there.

For Hendrickson, a testing suite makes grading more efficient because she can see where a student needs help:

“If I see a failing test I can look there immediately and address where they struggled. If all the tests are green, I can focus on working code and give them guidance for style and composition improvement, without getting bogged down explaining syntax issues.”

A step-by-step guide to using tests for immediate feedback

Omar connects his course organization to GitHub Classroom, and then to Travis CI. While there are many ways to implement automated testing, here are the steps to implement his particular workflow:

Step 1: Create the tests

  • Make an organization for each class, and apply for the organization discount at the GitHub Education website.
  • Prepare homework assignments, their solutions, and test cases. For C++ assignments, Omar used Google's Gtest library for test cases. Create a private repository in the organization, and move homework files there.
  • Connect the assignment repository to Travis CI.

01 Create new assignment
Setting up a new individual assignment in GitHub Classroom

Step 2: Make the assignment and connect it to GitHub Classroom

  • Omar removes code segments so that students complete them as their homework. He includes a few lines of contextual information as comments embedded in code (such as “Complete this Section”), and creates a public repository with the name of the homework assignment: hwx-template (where x is the homework number).
  • Omar navigates over to GitHub Classroom, creates a new individual assignment, and points the assignment to the template repository.
  • Omar posts the assignment link from GitHub Classroom to his class forums. As students click on the link, Classroom creates a new private repository for each of them.
  • In Travis CI, Omar enables the tests on each of the student repositories. Travis will then build the repository after every push, based on the directions Omar put in the starter code template repository.

03 student repos in Travis
Example of a few student repositories on Travis CI for “hw3”

Step 3: Students clone the assignments and complete their homework using the recommended IDE

  • Omar uses the CLion C++ IDE from JetBrains, which offers free licenses for educators, and manages Google Tests efficiently.
  • Students clone their particular assignment repository with detailed instructions in the
  • Students open the project in the IDE to start coding and running unit tests. As students complete their assignments, they push their changes to GitHub.
  • Instructors can see if the build is passing via Travis CI and in the “commit” view on the GitHub web interface.

04 Passes student example
Graders can look at which tests failed for insight into where students struggle with the material

Use this workflow in your own course

If you’re ready to implement Travis CI and GitHub Classroom, here are some tools to get you started:

  • a sample repository you can use as an example with all the moving parts
  • a Travis build of that sample
  • Omar’s problem sets, which have been tested by his team of teaching assistants and also contain detailed instructions.

To help you put all of the pieces together, Omar made a video walkthrough:

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 to automatically gather or collect assignments?