Code Monkey home page Code Monkey logo

intro_to_sprinting's Introduction

Intro to Sprinting

This project is designed to help beginners learn AND practice the basic skills necessary to contribute to open source projects. While it is designed to be delivered as a workshop for a group of students, it can also be used individually as self-study.

It can be used in multiple ways:

  • as a lead-in for open source sprints at programming conferences
  • as class material for teachers
  • as preparation for hackathons OR group projects
  • as a resource for open source project leaders

Why an introduction to sprinting?

At many programming conferences, time is set aside for developers to come together to work on open source projects (called sprints or sprinting). Many project leaders welcome new developers of all skill levels to contribute. This works fine if a newcomer has contributed to a project before and has an understanding of the tools and processes.

The struggle for both the project maintainer and the newcomer has been that beginners often have a significant learning curve and need to become familiar with too many new tools and new skills before they can successfully contribute.

They often turn to the sprint leader for help and mentoring on the basics of "contributing to open source". Things like these are fundamental skills, most of which are not specific to a given project.

  • using version control software,
  • interacting with version control repositories (repos)
  • process of submitting patches and contributions
  • setting up virtual environments (for Python developers)

They are often limited by the sprint leader's availability to help them learn. The sprint leader becomes, through no fault of their own, a bottleneck. The beginners often spend so much time figuring out the basics that they can't really get into the project sufficiently to understand nuances of the bugs they want to fix OR the contributions they want to add. Due to limitations on time, new contributors often leave the sprints without having successfully contributed to the project, at all. Furthermore, once new contributors arrive at home, they are often so removed from the project and the mentorship opportunity, that they may not be able to pick up from where they left off.

This project aims to fix some of these problems by having materials and instructions available via group/classroom study AND self-study so that new contributors can learn the basics before they ever sit down with their sprint leader and can start focusing more on the project and less on the learning curve. In addition, should they run into a problem, they have a ready resource to return to, thus taking some of the burden off the sprint lead.

Overview

This workshop provides a high-level overview of the steps, tools and tradecraft needed to introduce beginners to open source sprints. The workshop provides lecture/demo AND lots of hands-on in the following areas.

  • Using version control tools such as git and github
  • Hands-on: Creating additions and changes to an open source project
  • Getting those changes incorporated into the project via pull requests
  • Understanding, creating, and using virtual environments

In addition, the overview will include numerous resources for self-study.

This project is based on conda, git, and github for Python sprints. This project can be modified for the needs of other sprints and other languages.

Prerequisites

Beginners will need to already know the following:

  • How to edit plain text files on their computer

It helps if a beginner knows:

  • The basics of using the command line (cd, ls/dir, etc)

For help with the above, see the Student Preparation instructions

Beginners will NOT need to have in-depth knowledge on the following:

  1. Programming OR Python (many contributors to open source never write code: they help with design, documentation, etc)
  2. Any specific open source project
Next
Table of Contents

intro_to_sprinting's People

Contributors

808kimosan avatar alestainer avatar briansmithbeta avatar bsthorpe742 avatar chalmerlowe avatar chris-nowlin avatar coeurderyan avatar ctaylor08 avatar danachee avatar ilankham avatar james-prior avatar jkobyp avatar jlgimeno avatar johnjohnsoniii avatar joker2600 avatar jpbatz avatar kjcole avatar mdelgadonyc avatar meldex avatar mgmt06 avatar michael-b-king avatar paulproteus avatar samsammurphy avatar seawolf42 avatar sockduct avatar steve-lorenz avatar tashamc avatar tathagata avatar wdouglashall avatar yshshrm avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

intro_to_sprinting's Issues

Add a code-less pull request

Add, if it is not already there, a place where the students submit a pull request that does not have anything to do with code.

The benefit of this is that they get to submit a pull request earlier in the day and can do so without having to wrap their head around any code, etc.

Remove Time-box sections from each Major Section Page...

Each of the Major Section Pages has a time-box section that is generally unnecessary due to the very short amount of material to cover. These pages are affected:

environment_overview.md
pre_req_overview.md
git_overview.md
github_overview.md

Remove the time box.

Do we need to add git pull?

@seawolf42

In our git lesson, we don't have
git pull
as a precursor to
git merge
so that users can compare changes to the upstream against their changes.

Do we want to include this?
OR
Leave that as a learning curve experience for the student?

Please advise.

Accumulate all hands-on materials to lesson 7???

Will want to do this item pretty close to last, in prep for Saturday, so that we capture all the right steps, with the right links, right verbiage, etc.

Why do we need this change? The current workflow pattern won't work, as intended...

every lesson asks the students to work on one project (generic) during the lecture AND a separate project during the hands-on (rpncalc).

this involves potentially switching virtualenvs back and forth, back and forth and if students are in the wrong folder/virtualenv they will mix codes bases and chaos will ensue.

SO:
move all hands-on material to one of the later lessons >> i.e lesson 7 OR 8 so that once the students have gone through the lessons/demo...
they can then start on doing all the hands on steps can be seen at once and in rapid sequence.

provide a list of example functions for students to tackle

provide a summary list of example functions for students to possibly work on
having a ready made list of example functions available when we kick off the last big hands-on section will shorten the talk track and give students something to jump into right away.

Confirm bottom navigation on every page (prev, up, next)

Confirm that the bottom navigation on every page really does go to the right place.

Sections

  • Up should go to table of contents
  • Prev should go to last lesson of previous section
  • Next should go to first lesson of this section

Lessons

  • Up should go to section page
  • Prev should go to previous lesson (or section page if first lesson in section)
  • Next should go to next lesson (or next section page if last lesson in section)

Replace green sticky with different green sticky.

I would like to use a slightly different green sticky.
Suggest some green stickies and we can find one that looks a bit better.

It should be possible to suggest links OR attach files to this thread until we come up with one that looks cool.

The ideal solution will be to rename the file so it can be a drop-in replacement requiring no changes to any of the files.

Looking for files/graphics that are creative commons OR licensed for open source use.

Table of Contents missing some pages

Right now the TOC is missing at least a few pages that can be reached from the bottom navigation (for example, Pull Request Tips and Tricks is not referenced in the TOC).

Merge Calculator AND Lesson Content

Merge the Calculator and Lesson Content into a single repo.
This should:

  • reduce some confusion
  • eliminate some of the talk track
  • speed things up so we can get to the hands-on sooner

Tweak the instructions to follow the github >> git >> github workflow...

Right now, the github overview covers two factors of the github workflow:

  • forks
  • pull requests

The git overview then covers the git workflow of:

  • cloning
  • pushing

I suggest that we break the github workflow into two parts and bookend the git overview, so that the attendees get a smoother view of how a real workflow works:

github overview, part 1

  • forks

git

  • cloning
  • pushing

github overview, part 2

  • pull requests

UPDATED: Add closing section: include non-technical support/helps/ideas

Add a final section/file (i.e. section 6).

Include some commentary about the reality of supporting sprints:

this blog article has some very good ideas... https://treyhunner.com/2019/04/making-the-most-of-the-pycon-sprints/

Some ideas include:

  • leaving a group to work on a different sprint is OK
  • approaching a group and asking them to describe their project is OK
  • asking the project developer is OK >>> in fact, more than OK. In most cases, they have allocated their time to welcoming and helping new sprinters ... you aren't bothering them... you are giving them something to do.

Suggest conclusion.md as a filename

The general idea is to leave the attendee with:

  • a nice conclusion to the workshop
  • some encouraging words
  • sage advice

NOTE: this will also require an edit to the table of contents file: toc.py

Add concrete steps for a basic work flow using git

Add concrete examples of steps to take using git - the point is less about full explanations of each step and more about giving someone a quick and dirty look at the totality of the process.
things like:
config your git
add upstream
create branch
checkout branch
pull changes to master
add files
commit changes
merge branch
push to github
issue pull request

Problems with "random thoughts..."

In Windows 7 under PowerShell, git doesn't appear to like this filename as shown below. What do you think about renaming this to "random_thoughts..." to see if that fixes it?

C:...\sprintintro\intro_to_sprinting>git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes not staged for commit:
(use "git add/rm ..." to update what will be committed)
(use "git checkout -- ..." to discard changes in working directory)

    deleted:    random thoughts...

Untracked files:
(use "git add ..." to include in what will be committed)

    random thoughts

no changes added to commit (use "git add" and/or "git commit -a")

Move warning notes before the action.

On the overhaul branch:
on this page the note/warning comes after the steps to perform. Move the note about ensuring that you change the name of the repo in the path to match your own repo to a place before the step.

start with a clone

It might be clearer to start with a clone rather than a fork..

We could perhaps then talk about setting the upstream as different from the origin THEN talk about making forks in github

No Sticky

No sticky note on the Branching and Merging section.

create an overview on git

add some short commentary to parallel the sections in the virtual environment page about git:
include section headers and highlevel overview, etc.

Add git diff AND git status commands to the lesson

Add examples of using git diff to the lesson.
Also, add if not already present, some examples of using git status to see the changes to the repo

UPDATE:
provide multiple instances in the material where git status can help the attendees begin to better understand the status of their repo.

  • before the make any changes
  • after they make changes to a file
  • after they add a file to the repo
  • after they commit a file to the repo
  • etc

Also identify places where git diff can be beneficial i.e. when attempting to understand how your material conflicts with a change to the upstream repo material.

Need to resolve change to beowulf.txt

After changing the upper 'B' to lower 'b', there are no instructions for the user to move fwd with this update after 'git diff.' Suggest that either you tell the user to "git checkout" to wipe the change, or ask them to review their commit skills from the previous lesson to submit it (then later revert back to the correct version with the upper 'B').

Add Deep Dive to github_submit_pull_request.md

The Deep Dive section of github_submit_pull_request.md is currently empty.

Some ideas for content include:

  • why to do a pull req from a given branch versus master
  • formatting of pull req messages
  • the importance of trying to do a fetch/pull prior to submitting your pull request so that your PR is as close to clean and merge-able as possible.
  • etc

Add to prerequisites

Add a link to a basic "command line tools" tutorial or two (*nix and Windows) for the prerequisites section of the README.md
cd
mkdir
ls / dir
etc

UPDATED: highlight more effectively, the purpose of the README

We need to find a place to elaborate for the student on the typical purpose of README.md files.

In that file, we need to add a sentence OR three on why projects have README.md files and how projects displayed on github benefit (i.e. github auto displays the file as the project summary on the main page of any given project).

This pages seems like a good candidate:
https://github.com/chalmerlowe/intro_to_sprinting/blob/dd81d26f9f5a029f7207df7654d9643228f5e2e0/class_materials/github_concepts.md

UPDATED: Add items and commentary to the Resources sections

Add appropriate links.
Provide summary statements for any links without such statements.

Each of the resources sections should have good resources and each resource should have a link and a brief summary of what students should expect to find when they click on the link.

Several examples:
in the git_config.md file there are two incomplete resources:

  • Cheatsheet for Windows command-line commands:
  • Cheatsheet for Mac command-line commands:

NOTE: there are two links to cmd/terminal commands included in
prereq_student.md

Ensure that we point students to the right direction and either duplicate the links here OR find some way to deconflict.

in the [git_overview.md] (https://github.com/chalmerlowe/intro_to_sprinting/blob/master/class_materials/git_overview.md) file there appear to be links that do not have a description.

There are assuredly more examples of incomplete resources.

Polish the main README.md

The main README.md file should be revised to more fully explain the project:

  • There are sections that are not complete
  • There are sections that need to be revised
  • There may be material that needs to be added, deleted, etc
  • IF not present, add more detail on what a "sprint" is.

reorganize and rename of each section...

Suggest the following changes and renaming to the broad layout/structure:

  • lesson one: introduction (ie. welcome students, help them understand the workshop and what we will accomplish) - lesson_01_workshop_intro.md
  • lesson two: tools for sprinting (introduce the tools to be used and install them) - lesson_02_tool_installation.md
  • lesson three: virtual environments overview - lesson_03_venv_overview.md
  • lesson four: github overview - lesson_04_github_overview.md
  • lesson five: git overview - lesson_05_git_overview.md
  • lesson six: project overview - lesson_06_intro_to_the_project.md
  • lesson seven: contributing hands-on - lesson_07_hands_on.md

add dependency picture for virtual environment lesson

Add pic of dependencies to highlight why virtual envs are import.

py 2.7 <- library 2.3 <- other_library 2.4

py 3.6 <- library 1.7 <- different_library 1.3

py 3.6 <- random_library 1.5 <- different_library 1.2

Decide on changes to Github page(s)...

Right now, the table of contents has two links on the overhaul branch related to github, that need some work:

https://github.com/chalmerlowe/intro_to_sprinting/blob/overhaul/class_materials/github_setup.md
https://github.com/chalmerlowe/intro_to_sprinting/blob/overhaul/class_materials/fork_a_repo.md

Right now, the github setup page has the content needed in the fork_a_repo page.

ACTION: decide on whether we need two pages OR not.
IF yes, then migrate the right materials to each page.

feel free to discuss here.

Add some explanatory details on the git setup...

On the overhaul branch, this page talks about setting up git.
Add some verbiage to describe the fact that the git config, in this case is a global config for all git projects on your machine as opposed to a git config for this project.

Edit text relative to the hands-on nature of the workshop...

Edit this sentence in prereq_student.md

"In the hands-on practice session, you will be using command-line tools to contribute to a practice project, namely a calculator."

Include a reference to a practice project that has no code and a programming oriented project...

Rework the content for more efficient delivery...

MAJOR REWORK:

We are gonna revise all the content from top to bottom to fit a new delivery model and template based loosely on this layout:

For each lesson:

Title

  • Short Intro
  • Objectives
  • Hands-on steps <<< this is the crux of this approach.
  • Detailed explanation of each step
  • Resources to learn more

Why this change?

It takes too long to get students to the last lesson of the day: the lesson where we give them free reign to contribute to a software package based on a calculator.

We spend too much time talking about each step, each instruction, answering off-topic questions, sometimes diving too deeply into topics to the detriment of getting them to the place where they can actually practice the steps, etc.

This approach allows us to deliver the content in a way that focuses more on getting their system set up fast and easy AND control the amount of time spent on each lesson:

For example:

OLD WAY:

  1. talk about topic...
  2. answer questions (sometimes questions that deviate from the topic OR that dive too deeply into the minutiae)
  3. talk about topic until the explanation has been completed.
  4. execute the command line steps waiting until everyone is complete
  5. mentors help those who struggle >> but those folks then fall behind on the next explanation

NEW WAY:

  1. execute the command line steps
  2. talk about the topic WHILE mentors help those who struggle
  3. answer questions
  4. talk about the topic
  5. move on at a SET TIME (regardless of whether the full explanation has been completed >> the full explanation is in the write-up with resources to learn more)

Advantages:

  • The mentors can get started sooner on helping folks resolve issues to help folks keep pace
  • The content can be delivered in windows that are better controlled
  • IF time runs out before a topic has been fully explored, at least the attendees are at the right place: their virtualenv is set up OR the software is installed OR their repo has been cloned and they can always go back and refresh themselves on the concepts at their leisure.

add resources pertaining to miniconda

Add to the virtual environment page some details in the resources section:
i.e. links to pages with more details on conda, virtual environments in conda, etc

Change the list of functions into a table format

In the Intro to the project (lesson 7, although that number may change)...

There is a long list of functions that could be added to the calculator.

Please convert this list to a table format.

Thanks.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.