One of the things I've been working on over the past few months is getting involved in the Open Source community. My first programming language is Ruby, an Open Source language, and I've been getting much more involved in the Raspberry Pi and Arduino communities (both Open Source hardware). I knew I wanted to work with Open Source projects from the beginning of my programming adventure, so I started researching potential opportunities. It's here that I learned about the various "Summer of Code" opportunities available for women programmers. Beginning when I discovered the GNOME Outreach Program for Women, and continuing through the last week when I found the RailsGirlsSummerofCode, I've been researching ways that women very new to programming could get involved with Open Source and also learn dozens of new skills.
Simultaneously, I've discovered in me a great desire to teach and share and educate others.
I'm realizing that as I begin exploring more languages and technologies, there aren't always guides for true beginners, those of us who are approaching this with little-to-no background knowledge on how things operate "behind the scenes" of technology. Whether it's learning how to maneuver a Command Line, or how to push to GitHub from Terminal, it's not always easy to understand the guides. Additionally, some technologies have tutorials built into their learning program, though these are often web-based and not in the native environment. For example: I completed the Codecademy "Try Ruby" tutorial, which is run in a mock terminal on their web classroom. But when I went to my own Terminal, running the commands and building the programs using the exact same code felt awkward, foreign, and usually resulted in errors on my part.
I know I'm not the only true beginner learning to code.
In all of the "Summer of Code" programs I have encountered, participants are expected to find a project within an existing Open Source technology. From all the descriptions I have read, these projects come across as "grunt work" -- cataloging bug reports, sorting emails, etc. This work is definitely important work, and for many people it is probably an incredibly useful way to learn the Open Source tech and whatever programming language you are using. Unfortunately,I don't feel comfortable enough with any one programming language or technology to feel like I could successfully understand bug reports or how to fix them. All of the projects I have seen available felt out of reach. Additionally, I confess that I had a terrible time reaching anyone who would answer questions or guide me to more information about the projects. Over the course of the last eight weeks, I've emailed a dozen project mentors in a variety of Open Source communities. Not a response was had from any of them. This makes me incredibly sad.
I started feeling like I was too new to be taken seriously. It was as though, because I didn't have 100 commits in GitHub or my name on a variety of web pages for projects, I wasn't worth the time or energy to get involved with on an Open Source project. This has taught me some very important lessons about tech, community, and finding my place.
1. If no one answers, or if they answer rudely, find a different place. This might mean approaching a different person or a different aspect of the Open Source technology. It might mean finding a different way to learn more about it or spending more time reading before contributing. If you're passionately interested in that particular Open Source project, don't give up. Just recognize there's someone or somewhere else you will fit.
2. Don't take it personally. This is always a hard lesson for me, but it's even harder when I want so much to be involved in something. Not every person or project will have a space for me in their collaboration. Sometimes it's because I'm a voracious activator, and I push people to do their best work. Sometimes it's because I'm as excitable as a young puppy. And sometimes it's because there just isn't room for another person on the team. All of these things are okay. But I had to let go of my personal attachments and disappointment when not one of the dozen project mentors I emailed responded. And then I checked to make sure my email was actually sending messages (it was). And I again let it go.
3. Discover your own ways to contribute. This is the biggest take-away for me, and I want it to be an inspiration for you as well. The projects I wanted to be a part of for any of the "Summer of Code" programs had to do with Ruby, education, and making the language accessible. Since I couldn't get a response from the project mentors and therefore couldn't apply to programs, I decided to create my own "Summer of Code" project. I confess: the primary downside to this is that I'm responsible for funding myself, as without any program participation I have no access to the funds available. However, once I got past this minor sadness, I realized that (like most programmers) I would have worked on this project anyway, even if I was working full-time on a funded project. My "Summer of Code" project blends my love for teaching, my enthusiasm for Ruby and programming, and my firm belief in paying forward the gifts we receive and building a future for our children.
I've been nervous to talk about this project outside a small circle of advisors because it is so much in infancy still. However, once I experienced this latest "Summer of Code" setback, I decided it's time.
RubyPi is my personal "Summer of Code" project. Using the Open Source hardware of a Raspberry Pi, and the Open Source programming language Ruby, I'm developing a curriculum for teaching anyone (but especially girls ages 5-18) how to program. I know you're probably thinking "She's only been at this six months, how can she teach it?" and you're right to think this. It's not typical for someone so new to programming to develop teaching curriculum, but I actually learn really well by teaching and sharing knowledge with others. In this way, sitting down and developing curriculum for new programmers is a perfect job for me. Additionally, I've trained a lot of people in a lot of different topics, and one thing that is consistent across genres is that the further you are from being a beginner, the harder it is for you to remember all the tiny things you did to learn something that is now as natural as breathing. Given this fact, being a beginner is a huge boon to developing this curriculum because it not only forces me to write down every single detail of each step of the process, but it also forces me into repetitive action which will ingrain these skills into my own memory.
Finally, while the curriculum I'm developing is specifically focused on the Raspberry Pi hardware, it will be adapted to work on a variety of hardware and operating systems. Once the initial development phase is complete, and the curriculum has been reviewed by both Ruby developers AND new programmers, I can then begin the process of writing component curriculum for other operating systems and machines (including Windows and Mac OS). Beyond this, I'd like to develop a learning app with a mirror command line for iOS and Android devices that allow people to learn Ruby in a near-native environment. As I mentioned above, when I first learned Ruby through online tutorials, I found it challenging to then move to the command line and a text editor to develop my programs. With the goal of developing a learning app, we can create an environment that is identical to a terminal and reduces the confusion and shock that comes from transitioning to that environment.
Obviously, this is a project that will take more than a summer to develop.
This is okay with me. The seed for this project has been germinating for six months before sprouting into the world. Growth and development isn't all rush and jumble, and that's sometimes a good thing. The drive and passion are here, and like a plant receiving sunlight and water and nutrients, this project will continue to grow and develop. And I can't do it alone.
I am not developing this teaching curriculum to make money off of it. Like the Open Source hardware and the Open Source language, this curriculum is open to anyone. I will be developing it in a public GitHub repository, and welcome additions, corrections, and improvements to it. One of the hazards of being a beginner is not always knowing when you make a mistake. I welcome the opportunity to learn from other developers while building this project. I would be remiss, however, if I didn't make possible for people to contribute financially if that is their wish (since some have already asked). I do have a GitTip account, and all funds received there will enable me to spend more time developing this curriculum and contributing to the Ruby, Raspberry Pi, and Open Source communities. Donations are not expected. If you'd rather make a one-time PayPal donation (thank you early donors!), please contact me for the appropriate email address.
In the future, I hope to create a nonprofit organization that can assemble Raspberry Pi kits (including a small screen and keyboard peripherals) to provide the opportunity to teach this curriculum to kids who might not have access to a computer. The goal is give the kids who complete the program their own complete Raspberry Pi setup in order to continue developing and programming after the completion of the program. The more kids we get learning to code, the more kids who have access to computers and technology, the more possibility for incredible learning and innovation. The results of learning RubyPi, and any programming language, are only limited by our imagination. If we can reach kids when they are still blooming with ideas, think of all the amazing potential we could reach.
I have a goal of teaching 10,000 kids to program by 2020.
Can you help me reach that goal?