12 Jul 2010

RMU's Secret Sauce: Game Mechanics

Less than a month ago, I wrapped up the entrance exam for the Ruby Mendicant University online training program.  Around that same time, I created a mailing list and IRC channel for accepted students so that they could keep track of announcements and get to know each other.   What happened next was nothing short of amazing.

In just a few weeks time, we've seen a total of 545 posts to the mailing list, and around 9000 messages passing through IRC.  Far from idle chatter, we've seen self-organization of focus groups ranging from joint code reading sessions to remote pairing via Skype.  This level of participation far exceeds what I've seen on my open source projects, at least in their early stages.  But it also is not a huge surprise to me, as it was baked into RMU's core design from the beginning.

Weaving together the learning and playing phase

I'm not an avid gamer, but I have been known to get sucked in every once in a while when the buzz about a particular game becomes too much for me to ignore.   This happened with the Half-Life 2/Portal series for me, and just last night happened again with a game called inFAMOUS.  These games blend learning into the gameplay, as do most other games I've found really engaging. This approach gives you a steady way to ramp up your skillset without enduring a painfully dull "training program".

RMU started with an initial task designed to get everyone on a level playing field, via our entrance exam.  What is important to notice about the way the exam was designed is that it wasn't meant to be comprehensive, and it wasn't meant to be a knowledge test.  Instead, it provided a problem space to "play" in, and left it up to the participant to decide exactly how to proceed.  But like a good game, it wasn't a free for all, there were subtle environmental constraints to keep folks on track.

Making progress visible and open-ended

Provided with the exam were a set of unit tests, which while not complete, provided a baseline level of expected functionality that must be satisfied.  In addition to these simple tests was a benchmarking script which formed the core task of the exam.   We were working on a memory and performance optimization problem, with the goal being to write a better implementation that would fit nicer in time in space than the provided naive implementation.   Rather than asking folks to optimize something that took up a 100 mb down to 50 mb, I asked them to take a script that ate up 8gb (enough to kill most ordinary machines, or at least severly stress them), and "do the best they could" with knocking down the footprint.  This provided an open ended challenge, in which those who were comparatively newer to attacking these sorts of problems in Ruby could focus on just trying to get that script to run, while the more advanced could try to optimize for as small a footprint as possible without sacrificing the clarity of their implementation.

While it takes some effort to design problems this way, it leads to a much more interesting discussion in the end.  The mixture between the common goal of getting something running and the emergent goals that arise naturally from individual motivations means that each student was able to learn a lot, despite having possibly focused on different aspects of the problem.

Encouraging emergent goals and "Playfulness"

The games I've had the most fun with are the ones where I don't feel rushed to head down a linear path that was predefined for me.  While a certain amount of direction is necessary to maintain the motivation to "complete" something, it should be possible to stop along the way to explore, play around, and persue indvidual goals that come up along the way.  This is another thing that is baked into RMU's design, which we are starting to see unfold now.

Via focus groups, students are getting together to explore topics that are interesting to them.   It's really amazing to see people from all around the world starting to do remote pairing together, and really neat to think that folks are self-organizing adhoc sessions such as last night's code review of RestClient, all without my direct involvement.  I'm thrilled to see folks trying to organize book reading clubs, or talking about how they can work together on contributing open source patches.   Other folks have taken an interest in hacking the RMU system itself, volunteering to build tools to support our operations such as IRC logging, or helping document our progress by writing summaries about our operations.   In each of these activities is the opportunity to learn things that are off the beaten path.

Letting the players help define the game

I have decided to take this all a step farther by setting the requirements for students to have an individual project approved BEFORE their training session starts.  The requirements for this are super open ended: the work needs to be Ruby related, needs to be something that can be discussed with fellow RMU students, and needs to be able to show some meaningful progress in a three week period.

While the sessions will still have some pre-defined problems, I'm going to try to pick topics which will dovetail nicely with what sorts of individual projects our students are working on.  This way, the practice and research they do for RMU will serve a greater goal, and won't just be learning for the sake of learning.  Students are going to be actively encouraged to use their time at RMU to focus on problems that they've been interested in all along, just with the added help of some fellow explorers, along with some guidance from someone who's been playing the game for a while.

RMU students are showing me each day that they can rise to the challenge of active, purposeful engagement.  Even though we haven't started training sessions yet, that evidence makes me feel confident that on the path to the epic win.

Source Materials for Educators

For an entertaining take on emergent goals in gaming, see Matthew Orona's post My Four-Year-Old Son Plays Grand Theft Auto.

Also, see these two TED talks for some inspiring ideas about maintaining engagement throughout problem solving:

 

10 Jul 2010

RMU Insider #2

Written by Andrés Freyría, one of the inaugural RMU participants. You can find the original source documents for these articles at: http://github.com/rmu/insider.

These have been some interesting weeks.

For starters, we had our first official meeting! The topic was a group review of the different RMU entrance exam submissions. It was decided that the session would be public, so the transcript is available (thanks to Pete Higgins), along with the solutions that were discussed.

With that out of the way, it's time for the big announcements.

August Pilot Program

Everybody who signed up for the pilot program, listen up. All students need to have their projects approved before August 1st. This will allow Gregory to plan the material around the problems that you'll be likely to find, as well as ensure that the session will begin smoothly.

There aren't any hard rules on the project that you may select, but keep in mind that meaningful progress is expected during the three week period. Also, if you're interested in a team project, keep it below three people so there's work for everyone.

If possible, send a free-form description of your project soon by private email to Gregory — it's the best way to discuss it.

RMUers

I want to bring to your attention the current projects/material available to you:

So far as focus groups are concerned, we're about to begin week 4 of the Remote Pair-Programming sessions (thanks again, Anita Kuno!), as well as week 1 of the Code Reading sessions (merci beaucoup, Felipe Doria).

Last, but not least, remember to join us at #rmu-general @ freenode.net.

RMU.send(:insider => :end)

20 Jun 2010

RMU-Insider #1

Written by Andrés Freyría, one of the inaugural RMU participants.  Andrés has volunteered to do periodic updates about the inner workings of RMU from the student perspective.

Ruby Mendicant University has not officially started. And yet, it has.

So, for the benefit of those who have recently joined, and for those curious about what's going on, here's the first RMU-insider announcement!

The response from the RMU students has been overwhelming. This is no hyperbole — I barely got any work done on friday just keeping up with the mailing list (alright, alright, there was the world cup also). Everybody is enthusiastic about the program and all the options that are shaping up already. Which options? Glad you asked...

#rmu-general @ freenode.net: Greg started the channel "half expecting it to be a ghost town". Not so! However, we could use more people. Don't let the fact that it's IRC scare you, as it's the official real-time communication channel. There's already been some interesting conversations about RubySpec, Rubinius, MongoDB, and fluffy pets, so don't miss out!  The IRC channels now feature transcripts, courtesy of locks, who hacked it together with the guidance of Volundr.

For those who are not students, but wish to know more about RMU (or just hang out), please join us at #rmu-public.

RMU's Class Administration App: Want to contribute to open source, but don't know where to start? Help us build the app that RMU (read: you) will use. This is a great opportunity to experiment with Rails 3, and to erase the fears and anxiety of the first-timers. Greg will be posting the features for the application next week, hopefully, but in the meanwhile please add your ideas here.

Focus Groups: Anybody who's interested in a particular topic is free to start a thread in the mailing list (please check Greg's original post, though). So far we have healthy discussions on metaprogramming, how to write better tests, and remote pair programming. Which, speaking of it, brings me to...

Remote Pair Programming: If you haven't had the chance to do pair programming, or wish to pair with fellow RMUers, this is for you. Anita Kuno has been an awesome host, and she's already organized the first pairings! Please check the thread if you wish to jump in — everybody is welcome, independent of previous experience or ruby skill.

Time for some general announcements:

  • Applications for RMU are now closed. The final student count is 87.  All who submitted a completed solution passed.
  • 10 brave souls will go through a pilot RMU session in August. Thanks for volunteering!
  • Newcomers, please introduce yourselves in the appropriate thread
  • The RMU exam is now publicly available for download, for those curious about the challenge.

RMU.send(:insider => :end)

16 Jun 2010

Ruby Mendicant University and the Community

So far, by all measures, Ruby Mendicant University is on a fast track to success:  With the funding drive for initial content creation fulfilled in a 10 day period, and 63 participants already passing the entrance exam with a few days to spare, I'm not worried about the level of interest or the feasibility of getting our first session off the ground.  However, we've been making up the philosophy as we go along, and I think it's time to start hammering out some of the details of what role RMU should play in the community at large.

Public Products, Private Sessions

Because I accepted community funding, and because I'm a firm believer in open content in general, RMU is endebted to provide at least some public material throughout the course of its operation.  You'll see the first of that in just a few days, when I release the entrance exam writeup.  By the time the first session goes live, with the help of a number of participants, you'll also see some open source Rails code for doing online classroom administration tasks.  Throughout the sessions, I can see where more and more opportunities to share things with the community will crop up.  On top of all of that, as I retire problems and exercises from our program, they will absolutely be released under some sort of open content license.

However, with regards to actual sessions, I had mentioned that I was considering doing some publicly open sessions, and I think I want to step back from that a little.  I feel like the manageable number of people that have been accepted into RMU so far makes it much more likely that we'll develop deeper and more meaningful connections together in a semi-closed setting. I want to grow our internal community slowly, and use the sessions as a means to get everyone up to a level playing field so that they can begin focusing on the projects they really want to get involved in.

In this way, RMU participants will actively engage in the community at large.  We might have assignments to do code reviews of projects they're interested in.  We might work together in groups to help come up with patches to bugs or wanted features in open source code.  I will try to occasionally get us set up with guest appearances from notable open source hackers to do Q&A sessions with our students.  We could do things like post transcripts of select meetings, and otherwise document our experiences and put them out there for anyone to use and learn from.   But at the end of the day, RMU students will have a private and supportive environment to practice their skills in, alongside other likeminded folks.

An Intentional Community

While some folks will certainly do their three week session and move on, others are bound to want to stick around and keep ties with the folks they've met along the way.  Currently, I'm actively encouraging students to make use of some general discussion channels to do ad-hoc study groups, set up projects, and otherwise connect with people in similar shoes as their own.   I am hoping that our Alumni stick around after completing their sessions, so that they can help make new members feel at home, and share their experiences with others.

As the total number of people who have been through an RMU session grow, I can see us forming an intentional community centered on improving our craft.  Only time will tell, but I can see potential that spans far beyond my initial humble goals for this project.  So far, the level of enthuiasm among recently accepted students has been through the roof, and we're still months away from our first session.  That tells me that we're on to something here.

The Dangers of Wild Success

It is important that we try to ensure that we don't become an exclusive or elitist group in any way.  No one in the group has that attitude so far, but I'm afraid that the greater strides we make, the greater the risk we run of losing sight of our initial goals.   I will say though that at least as it stands now, the entrance exam is not meant to be a rigorous test of skill.   In fact, while I did ask a few people to make revisions, everyone who has submitted so far has passed.  By having an entrance exam and selection process, I am only trying to weed out those who wish to lurk only, as RMU is a participants-only program.   I also do need to know that all participants have at least a baseline understanding of Ruby, so that I don't spend several weeks flying over half of our participants heads.

Similarly, the final exam for sessions will in no way be a "certification" process.  Instead, it'll be meant to recognize those who put in the necessary effort over the course to improve themselves to the point where they be productive, helpful members of the Ruby community.  This is going to mean something different to everyone, and is highly subjective.  I just want to recognize those that I feel have learned something from the program, as a very small token of appreciation for their hard work.

So, all of this is a long way of saying that if anyone ever shows you bias based on your inclusion / exclusion from the RMU program, you have my permission to punch them in the genitals.  RMU is primarily about individual development, and only our students will know how much progress they've made.

Transparency

Despite my decision to keep our sessions closed to the public, I will be keeping my notes on our policies and overall progress public, so that I can benefit from community input, and from the next set of potential students who might wish to join us.   I've already set up an #rmu-public channel on irc.freenode.net to interact with those who aren't yet actively participating in the program.  Should it seem like a good idea down the line, I'll probably set up a public mailing list as well so that folks can ask whatever questions they want or give us suggestions for things that could be fun to do.

My hope is to make this program bend and shift significantly to meet the needs of our students, while keeping a few core values intact throughout.  But like most everything else I do, this is all a giant experiment.  Feedback is much needed, and greatly appreciated.  If you've got a question or comment, just let me know.

9 Jun 2010

Q&A about Ruby Mendicant University

What follows is a conversation I had with a developer and entrepreneur named Johnny who sparked the initial ideas for Ruby Mendicant University. 

He was originally looking for personal mentorship, something I've historically done for free as a volunteer effort but these days have to charge for or downright decline due to a lack of available time.  Fortunately, as I continued my conversation with him, I realized that there might be a way that I could go back to my roots.   The idea for RMU was born in an instant, and Johnny's initial questions helped me form some basic ideas about my overall goals for the program.

Since he was kind enough to let me share this in public, you can now get a sense of what my vision of RMU is, and what sorts of students I'm looking for.  If it sounds promising, you can apply to take the entrance exam, or help me cover the costs of initial content creation.

But for now, let's get on with Johnny's questions.


On 6/3/10 12:38 PM, Johnny wrote:

> Some questions:
> > 1. Are the sessions "solid" blocks of time? How long? What does it look
> like through the eyes of a student?

I think what it will be is something in which people would be expected
to spend a good deal of time on independent learning (this lets them get
out of the program what they want). But then a couple days a week,
there would be interactive sessions, some structured, others
unstructured in nature.

I'm thinking basically two event nights per a week + one unstructured QA
session where I'm sitting in a channel waiting for people to drop by, or
watching a mailing list.  This would be continued across roughly a three week period.

> 2. Lets talk niches.
> > a. Heavy Duty. There are several rails shops and similar organizations
> that'll help people coming from other languages learn Ruby over a
> multi-day session. Lay $500-$1500 on the table and get group time with
> famous Rubyists + cookies.

Yes, active, intense learning is a market that was at one point
saturated at at least at this point abundant. I have taught some of
these sessions and I think they're awesome (Doing one in Chicago in a
few weeks, as I mention in the post). But they are not for the faint
of heart, and usually not accessible to hobbyists due to their cost and
travel requirements.

> b. Light Weight. Buy books, download PDFs, read the ruby and rails
> source docs, find that your install is different even if you purchase a
> brand new mac so even if you read it you won't get the reward, read
> forum posts to fix it, try stackoverflow, beg in IRC, attend Ruby groups
> but realize that they are for developers more than help sessions and you
> don't want to hijack it.

Yep, sooner or later, this gets frustrating as hell, and these folks
tend to become permanent newbs hating their job OR disappear entirely.
Sad situation.

Some people make it to the far side of this and come to understand just
how much work documentation and helping others is. It's a shame that
more don't fill in the cracks here.

> c. Mid-Strength. Underwear + ??? = Ruby Knowledge. Meaning, there's
> bloody nothing in the middle range. I'm thrilled to run through sets of
> learning instructions if I can get a human on the other side when the
> thing I need is simple but it'll take me the rest of the day to figure
> out that there's a gem list, or that I can hit cmd + r to run my script
> right from TextMate, or that TextMate EXISTS!
> > Do you agree that there's little in the way of mid-strength tutorial
> solutions and that there's a need here? If so, can you hit this sweet spot?

That's definitely the market I'm aiming for. There are a lot of people
who have gone through the initial gauntlet only to plateau and find that
while they can play by ear, they can't quite read the music.

I want to help motivated people find the resources they need to be
productive people who can work on interesting problems :)

> 3. Demand. Yes there are waves of Ruby newbies running around and
> banging into walls. Will they pay in large numbers for the help you want
> to give? How often do people like me pitch you on getting mentored?
> After 2 minutes of thought....I dunno. I will, but I'm probably weird.

Not weird at all. I get a request for mentorship at least once a month,
sometimes more frequently than that. I have had some long term
relations with people, others stuck around for a bit and then either
dropped out or went on to accomplish great things.

But now that I have a wife and a house, my available free time has
dwindled and I don't generally accept mentorship requests unless they
can pay my going consulting rate. Unfortunate, really, because my
mentor (James Edward Gray II) gave me tons of his time for free. But I
imagine that those were different times for JEG2 as well, as it was over
6 years ago.

So I'm hoping that with this class, I can create a program that
streamlines my ability to help people out, helps defray some of my
costs, and adds a bit of structure to the thing so I can fit it into my
life. If it works out, students will be able to participate for free or
very cheap, and I can get back on the mentoring horse.

Of all the things I've done in my life, helping people learn has been
the most satisfying.

5 Jun 2010

Thoughts on Entrance Exam Selections

 
Within two days time, the requests for copies of the RMU entrance exam have skyrocketed to 143 people. This probably isn't close to the number of people who will submit a completed exam, but it's still a bit overwhelming.  The challenge now is to come up with a reasonable way of accepting students into the program that doesn't force the vast majority to re-take test after test in hopes of getting in.
 
A key aspect of Ruby Mendicant University is that I want to make sure that it is accessible to a wide audience.  I don't want to turn the entrance exam into a stressful experience in which only the fastest and most skilled get in.  I also absolutely don't want to remove the 20 student per session limit, because I feel like the 1-1 time and small group activities are an essential part of my overall vision.   With these thoughts in mind, I've come up with a plan I think will work.
 
The Selection Process
 
Rather than selecting just the participants for the initial class, I will attempt to fill five sessions (September, October, November, January, February). I will go down the list of those who were accepted into the program and ask which class they would like to attend, until all 5 sessions have 20 people in them.  If I receive less than 100 acceptable submissions, I'll reduce the number of sessions accordingly.  If I receive more than 100, I will place up to 20 people on a wait list to be on call for unexpected openings.
 
Deadlines
 
I will keep the request form open for the entrance exam until June 12th.  The exam will be emailed to applicants on June 13th.  The submission deadline will be 00:00 UTC June 20th, but may be closed early if I can fill all 120 slots.  There is an advantage to getting your submission early, as you will be invited earlier, increasing your chance of getting the session you want.
 
Hardship Considerations
 
In my original plans for RMU, I had mentioned that I'd like to make some sort of special consideration for those that would uniquely benefit from this opportunity.  I have had a lot of trouble coming up with a fair way to do this, and have decided that there is no way that I can give preferential treatment as to whether or not someone gets accepted into the program because of a hardship.
 
I think I have a compromise though: I can review the submissions blind, and then request those accepted participants who have a hardship to step forward AFTER I have made my selections.  I will review each case (working primarily on the honor system and gut reactions, because verification is next to impossible), and those that seem to be genuine will be given first picks on which session they want to attend.  All I ask is that people use this opportunity responsibly, so that others don't feel like they are being unfairly treated.
 
I am hoping this seems reasonable to the community at large.  If people get out the pitchforks, I'll need to abandon the idea.   
 
Acceptance Criteria
 
To be considered for RMU, your performance on the exam does not need to show complete mastery of advanced Ruby concepts.   Instead, I am mainly looking to see that your ability to work on and think about problems is sufficient for the sort of material I'm planning.   To a great extent, I will be using the exam to judge what sort of content I should be teaching.  This means it will be important to make sure your submission is your own work.   The problem will be open ended and somewhat accessible across different skill levels.

When it is released, spend a bit of time on it (a couple hours at the most), give it your best shot, and then just relax.  The worst thing that can happen is that I may recommend that you study a bit more and try again next time.  Results will be kept completely confidential, so there is no harm in trying your luck and seeing how things go.
 
Caveats
 
Assuming that we reach our funding goal for building the initial content, I am committing to teaching the September session regardless of whether donations end up covering my expenses.  However, the same does not necessarily hold true for later sessions.
 
ASIDE:
 
As a complete guess, I think that I could take the necessary time away from my consulting to run the class for about $1500 per session.   I will have a much better sense of this by mid-September, and will post an updated estimate along with an explanation for it at that time.  I will then open up a new pledgie for the total cost of the 5 sessions.  At $1500 a session, that'd be about $7500.  It's likely that if this funding drive went well, I would leave it open as an open fund to support the ongoing operations of the school.
 
I want to make it possible for students to donate after they complete the course, rather than ahead of time.  I also want to make it possible for students to not contribute any money if they are financially limited or didn't find value in the session.   However, I just want to make it clear early on that I can't let this project become a financial burden to me, and if it doesn't go as well as expected, I may cancel it before we make our way through all five sessions.
 
But here's hoping for the best.  I'd love to make the school an ongoing thing and even see it grow over time.  But for the more cautious, if you want to be sure you get your chance to attend RMU, select the September session if you get a shot :)
 
Things you can do right now:

4 Jun 2010

Ruby Mendicant University: What You Need To Know

Born less than 24 hours ago, my Ruby Mendicant University idea is already more than a third about half of the way to having its initial costs covered. In less than 12 hours, we've had 35 59 people request a copy of the entrance exam. So now that the idea is validated, it's time to begin on the execution.

Here's what you need to know: 

Because I'm busy, and won't be quitting my day job to run this program, you shouldn't have to either. 

I will try to keep the workload and interactive commitments down to 5-10 hrs a week, but leave challenges for those who want a more intense experience

There WILL be an entrance exam, which you need to pre-register for via this google form.

Its purpose is not to select the "best solutions", but instead, to  gauge how I should select a group that will work well together and benefit the most from the content I produce.

Donations do not affect my decision on who gets accepted to the program.

I'm pretty sure that'd be illegal, anyway.   But please only donate to support me in executing this idea, not because you expect anything in particular in return.

Most exercises and meetings will be optional.

But every student joining the program should commit to the full 3 weeks and attempt to stay involved with what's going on in the course. I hope that everyone who joins the session gets "Alumni" status, but it's going to take more than lurking to get it. :)

There WILL be a final exam, which must be submitted to gain "Alumni" status.

Like the entrance exam, this is not an objective measure of skill as much as it is a way to gauge your individual progress and ensure a decent understanding of the fundamentals.

I will not be posting a course syllabus

This is because much of what I teach will be dynamic in nature and focus on problem solving rather than a bullet list of topics. We will take advantage of the small group setting to do 1-1 coaching and peer review. Upon submitting the entrance exam, you will have an opportunity to list the topics in particular that interest you, and I'll let you know whether I plan to cover them before you need to commit to the course. 

This course will be conversational, light-hearted, and pragmatic in nature.

I'm not looking to create an academic experience here, nor am I trying to act as a "judge" of your Ruby skills. The goal is to create an open-ended learning experience that will take you closer to mastering your craft, but at the end of the day, the course will be what you make of it.

Some events will be open to the public

While a key part of this program is creating a comfortable and private environment to study in, some of our exercises and events will be done out in the open.  This will be perhaps 20% of the overall material, so the truly shy may still apply and skip these events, but community interaction is part of what it takes to become a masterful Rubyist.

Still on board? Then, you'll want to know about these dates as well:

  • June 13th: Entrance Exam sent to those who pre-registered
  • June 20th (00:00 UTC): Deadline for Entrance Exam submissions
  • June 20-27th: Invites to accepted students will be sent.
  • June 28th: Inaugeral Class List is announced. (Students have the option of remaining anonymous)
  • July 1st: If we have reached our funding goal, then the sessionwill go on as scheduled.
  • September 1st-22nd: Session 1!

Things you can do right now:

Thanks for helping me make this idea a reality.  Expect to hear more soon!

 

 

Gregory Brown's Posterous

I am a math student, hacker, author, and practicing Buddhist living in New Haven, CT with my lovely wife Jia.

I'm also trying to put together a free school for helping intermediate Rubyists on their path to mastery. It's called Ruby Mendicant University, and you can keep up on the latest news about it here.