User:Toshio/Infrastructure Classroom

Abstract
The Infrastructure Classroom Project is a program to teach people valuable skills while working collaboratively on tasks that Fedora needs performed. It could be compared to pair programming, internships, lab sections in colleges, apprenticeships, hackfests, minor league baseball, or any number of other tasks that mix learning and hands-on work experience.

High level problems
Volunteer projects sometimes struggle to fill their staffing needs. Even if they're popular, they may not be able to fill certain critical roles with volunteers. This project attempts to answer the question of::


 * 1) What benefit we can give contributors who want to participate in Fedora Infrastructure.
 * 2) How we can get new but experienced python programmers interested in working on Fedora Infrastructure tasks.
 * 3) How we get people who have little python experience to feel confident enough to take on harder and harder tasks.

This project would attempt to answer those questions in the following ways.


 * 1) We want to emphasize that one of the most important things you can get from contributing to Fedora Infrastructure is training.  You can learn to program in python, learn how development of software goes hand in hand with working with the people who will deploy your software, how to use version control, how to manage a team of people, etc, etc, etc.  People of different skill levels will contribute and learn different things in these settings.
 * 2) When pulling in people to work on Fedora Infrastructure we have many people who are just starting out learning python.  A classroom type setting can help them see how to use python to enhance what they can do.  They can practice those skills by working on tasks in our infrastructure.
 * 3) There are people in Fedora who have more python experience but they don't get involved in Fedora Infrastructure.  Classrooms would be a way to break down the barrier of entry to get them involved.  Experienced with python but not experienced with TurboGears?  On Monday we're going to work on writing a new controller method for our TurboGears2 Elections application.  Feeling good about your python knowledge but you don't have knowledge about how to localize an app?  On Tuesday we're going to make the Elections App localized and pull translations from transifex.

Courses of study
These are things that people can learn from us and one day do for us


 * Packaging
 * RPM building
 * Unbundling of libraries
 * FHS compliance
 * Fedora Review process
 * Tools for examining rpms
 * Tools for building packages in Fedora
 * Python Programming
 * Web Applications
 * TurboGears
 * TurboGears2
 * Using version control systems
 * Localization
 * gettext
 * transifex
 * Scripting tasks
 * UI Design
 * API design
 * Managing releases
 * unittesting
 * SQLAlchemy for database access
 * Cross-version compatibility
 * Unicode in python
 * Using standard unix tools -- grep, sed, tail, strace, vim, to diagnose problems
 * System Administration
 * Deploying web applications
 * Proxy servers
 * puppet
 * func

Materials
Some way to show people what changes we're making in real-time
 * Gobby?
 * Etherpad?
 * vim via screen?
 * Other collaborative editors?

Some way to show people what the effect of changes are
 * Screencasting?
 * VNC?

Method of communicating
 * IRC?
 * In person at FUDCon?

Structure of sessions
 * Demonstration?
 * Group hackfest?
 * More work-oriented coding dojo? (ie: pilot. other people watch and contribute suggeestions)