The Ruby Mendicant University Core Skills Course2010-10-21 17:35, written by Gregory Brown
The Original Idea
Back when I wrote about the Ruby Mendicant University idea in June, I didn’t have a particular plan for it. I knew I wanted to teach a free online course of some kind, drawing from my life experiences as much as possible to form the learning materials. Being mentored by James Gray for the first several years of my career as a software developer really taught me the importance of having a great teacher to guide me while I worked, so I knew that mentorship would be a key part of the program. The idea behind RMU was mainly to scale that experience from a 1-1 relationship to one that could reach many students.
While it has been a wild ride so far, the results have been simply amazing. I’ll spend the next few days trying to give the Ruby community a sense of what’s going on within RMU, so they can see the awesomeness of the program for themselves. I’ve decided to start by describing the core skills course, which is something every student attending RMU needs to tackle if they wish to continue on in the program.
The RMU Core Skills Course
In order to become a permanent member of the RMU community and move on to take additional courses, each student must pass an entrance exam and then go on to successfully complete their core skills course. The entrance exam is mainly used for ensuring that the people joining the program are diligent workers who have sufficient background knowledge to do well in our core skills course. The core skills course itself though, is something I think is something genuinely unique that you can’t find anywhere outside of RMU.
Each core course starts with roughly 15 students submitting a proposal for a personal project to work on during their session. This can be anything Ruby related, but typically involves the student building an open source application or library that scratches a particular itch of theirs. This is the first learning opportunity of the course, as it filters out those who can’t think of anything to work on. There isn’t a list of suggested projects to pick from, students need to come up with an idea themselves. As each student decides what they want to work on, I work with them to figure out what they can reasonably produce in three weeks which would be useful and show measurable progress.
I’ve found that without some tangible goal to focus on, improving your skills is an abstract, disconnected experience that is only enjoyable until the going gets tough and the novelty wears off. No RMU student can even begin their session with this mindset, which I think is a key part of why the course can inspire such rapid growth. But many folks are only likely to volunteer to work on problems which they find sexy on the surface, which isn’t a good way to master a craft. That’s where assigned work comes in.
While the exercises used in each session are different, I try to include one for each of the following topics:
- Integrating with other systems (typically web services)
- Modeling non-trivial business logic (often a game of some sort)
- Community Service (contributions to RMU and the community at large)
- Classical Computer Science / Engineering Knowledge (Patterns, Algorithms, etc.)
No matter what the topic is, the end result of the exercises is some sort of real application. Even when we’re studying higher level concepts, we don’t stray too far from things that you could actually use in day to day life. The varied nature of the assignments insures that all students are challenged in one way or another, regardless of their relative level of experience entering the course.
While earlier core skills sessions we ran involved some exercises that needed to be done in isolation, the current course is set up in such a way that the exercises can be actively discussed between students without it spoiling the learning experience. This in itself is invaluable, because most of the lessons learned in RMU are not actually pre-determined by the course materials, but instead, emerge through conversations about the problems.
Rather than doing lectures, I maintain extensive office hours on IRC and the session mailing list, spending 15-20 hours per week answering student questions and discusses topics as they arise through the session. This has been extremely time consuming, so I’ve started to enlist the help of some of our alumni in mentoring session students. But this is also the area of RMU that I find most special and unique. I spend three days a week in constant conversation with my students, which means that I learn an incredible amount about each of them and can tailor the program to meet their individual needs and interests.
Students can submit their assigned work or individual projects for review at any point in time during the three week program. I approve submissions which don’t show any obvious gaps in understanding the key points, the others, I provide feedback on and ask them to resubmit when they’ve made revisions. Students who make good progress at the end of the course by getting at least three of four assigned projects approved, and by doing good work on their individual project, gain alumni status and are invited to stay involved with RMU for the long haul.
I’ll have to save the alumni responsibilities and benefits for another post. But it’s worth noting that so far, 16 of 25 students who have completed a core skills course gained alumni status. While I’d like to see that number higher, several of the students who didn’t successfully complete their session are working with me to find a way to get their status later. But the great thing is, 100% of our alumni intend to take more courses at RMU in the near future!
Below are the sixteen individual projects of our current RMU alumni from our August and September sessions. While many of them are still in their early stages of development, several are quite useful already. Keep in mind, most of these projects were built in just three weeks!
- google_currency (Shane Emmons): Ruby Money::Bank interface for the Google Currency exchange data
- cashmate (Frank Wöckener): Business proposal management system
- forum_engine (Pavel Chipiga): Forum engine built on Rails 3
- groupy (Justin Ramel) ActiveDirectory Group Management Utility
- prism (Alex Soulim): WebSocket Server for chat
- gstore (David Ruan): Ruby client library for the Google Storage API
- Prawn Reference Guide / Examples Refactoring (Felipe Doria) Soon to be merged upstream
- themes_for_rails (Lucas Florio): Theme support for Rails 3
- unwatched (Morgan Prior): Utility for tracking watched media files
- montogomery (Wojciech Piekutowski): A lightweight object mapper for MongoDB
- vegtastic (Andrea Singh): Collaborative vegan/vegetarian recipe collection app
- resourceful (Jaakko Vallo): Automated work schedule management.
- qinfo (Ignacy Moryc): SQL Query optimization tool
- minivid (Brandon Hays): 60 second video uploading and sharing service
- rallot (Alberto Fernández-Capel): Secure electronic voting system backend
- rmu-alarmclock (Eric Gjertsen): Client/server based reminder system
While I gave students guidance on their projects throughout the course, my focus was on education, and not on quality assurance, so please do not consider this listing of projects a personal endorsement that they’ll be suitable for a particular purpose.
If you’re curious about the sorts of problems students worked on during their sessions, you can check out the few that have been released so far. Eventually all of our materials will be released, and collected nicely in an easy to find location. For now, feel free to re-distribute these under the terms of the GNU Free Documentation License.
You can try these on your own, or look through the network graphs to see some student submissions that have been made public.
- s0-e1 : Prototyping the board game Dominion
- s0-e2 : IRC bot / Web Service mashup
- s1-e1 : Twitter bot / Web Service mashup
- s1-e2 : Prototyping a Github themed achievement system
Lots of other exercises will be released soon, so stay tuned.
Please help us with funding!
As you might imagine based on this article, running RMU is an incredibly labor intensive task. What started as something I thought I’d do as a side project after the initial setup work has gone in the opposite direction. I now spend 30-35 hours per week on RMU related responsibilities, about half of that time is spent interacting with students. My coworker Jordan Byron spends at least two days a week working on RMU, building out our web application for course management, and my wife Jia spends several hours each week dealing with administrative tasks.
I’ll write more about what goes into running RMU soon, but for now, there is a pledgie open that is meant to bridge us over until we get a proper non-profit organization with a decent revenue model set up. Your contributions would be greatly appreciated, so please donate now, and tell your friends as well.
Questions / Thoughts About RMU?
We are not accepting new students now, but you are still welcome to discuss the program with us either via irc.freenode.net in the #rmu-public channel, or via the RMU Public google group. We are happy to hear your thoughts and questions! Also, feel free to leave questions or comments here on this blog post, I’ll be sure to read them and respond quickly if there is anything on your mind.