Hoping to broaden my programming horizons in 2020 I studied F#, but I didn't make as much progress as I'd hoped. My objective in 2021 is to pick up Rust, and I wanted to try something different this time. Thinking back to a study group I'd been part of in the past, and to group projects and such in my student days, I saw the following advantages to study groups:
- Goals and deadlines - a group has to move to some cadence that is agreed up-front by all involved. Something like "Let's read a chapter every week". This gives you a specific, measurable goal and a timeframe to complete it in.
- Motivation - I find that it is easy to put off something if you're doing it for yourself. But if you're doing it for someone else? In my experience that is much more motivating. Studying together involves making commitments to keep up with the reading pace and to prepare material for a study session, so you get that extrinsic motivation.
- Feedback - once you've read and practised some particular aspect of what you're trying to learn, how do you know you've understood it correctly? In a group setting you can share your understanding with one another and get feedback on whether you've understood the material correctly.
- Fun - it is much more fun to learn along with friends and colleagues than to slog away by yourself.
So, based on that I started a study group in January. We meet every other week, regularly get 5-7 people in attendance, read The Rust Book and have fun while we're at it. It has been great- I feel I've easily learned as much about Rust after a few months as I did about F# in all of 2020. So if you have something you want to learn- any kind of skill or knowledge- I suggest looking for others who are interested in it too, from your workplace and among your friends, and studying together.
Okay that was the "why", here is the "how". The first thing is to create a channel or group chat (in Slack, Teams, Discord, or whatever application). You'll need this space to coordinate together. Then drop some messages about what you want to study and the name of the channel into several prominent, related channels/group chats. Don't be shy, make sure as many see it as possible. In my case I dropped my message in several of the most populated channels in my work Slack but still had people only finding out about it and joining over a month after we'd started.
It is important to create your channel first, because it gives anyone that's interested a place to register their interest and host discussions- otherwise you have several disjointed discussions in different channels. In my case I didn't create the channel until later and exactly that happened.
Lastly, you want to big it up in meetings and water cooler chats with friends and colleagues too. Not everyone watches group chats like a hawk, but word of mouth may reach them.
Then I'd suggest you invite anyone that showed an interest, give it a little time to see who joins, and start openly discussing how this group might work. In my case I made it clear from the start that I didn't intend to dictate how this would work. I think that helped to get people engaged and invested in the group. I did this by asking for input from the group on every decision and taking votes (posting the options and voting with emoji reacts works well). There are a bunch of things you should decide together:
- How often will we meet? I found every other week works well
- What day & time will we meet? It should be a time that works for as many people as possible, but at the same time you can't please everyone.
- What will we study? There are probably numerous resources on your subject, and you need to agree on one shared goal.
- What will the format be?
That last one, the format, is important. You should agree on the format between yourselves and even iterate on it as need be in the future, but let me offer the format we've settled on as a template. I'm not sure of the exact origin of this format, but it's based on something my colleague Alfredo suggested in a previous study group. The format goes like this, chronologically:
- Ask who's completed the reading, find out where we all got to and how we found it.
- For each section of reading we've completed since the last meeting someone makes a presentation
- This can take any form- slides, a live coding demo, a conversation. It's worth discussing with your group which presentation styles work for them and keep that in mind, but there's no need to be prescriptive.
- Everyone should feel free to interrupt and discuss. The presenter should put their understanding of the material up for scrutiny. The ensuing discussion challenges any misunderstandings that we may have unwittingly picked up and ensures everyone has the same shared understanding.
- Presentations can be interactive- I find that throwing in a Kahoot quiz works great.
- Discuss any exercises we've completed since the last meeting- what was challenging or confusing, how did you find it?
- Decide how much of the material we'll commit to reading before the next meeting
- The word "commit" here is key- this is something you're all committing to completing within a timeframe, so don't be overambitious. Ensure it is something that everyone is comfortable with.
- We look up the page numbers of the next few chapters so that we know how long they are, then compare that to how many pages we got through in previous iterations.
- If, based on the previous exercise, we don't think we can complete the next whole chapter then we'll split it into smaller sections.
- Estimating and splitting work, informing planning by how much we completed in previous "sprints" - you may notice that this is similar to how agile planning works. I suppose the same principles apply everywhere.
- Decide which exercises we'll commit to completing before the next meeting
- As above, but with exercises (in our case, coding challenges. But it could be sheet music to play, or foreign language books to read, or whatever).
- Ideally these should be relevant to the material. In our case this was easy because the Rustling exercises map to the chapters in the book.
- Ask for volunteers to present at the next meeting
- They will prepare a presentation of some sort to share their notes and thoughts on some section of the material for the next meeting.
- These make up the presentations (as we saw at the start of the format) for the next session.
- Split the material into sections however you like- we often split long chapters into two separate presentations.
Lastly, feel free to switch up the format on occasion. This keeps it fresh and less repetitive. In my case after we'd read the first 10 chapters of The Rust Book I recommended doing a coding dojo session, to apply our new skills practically with some pair-programming. The rest of the group was keen and the session was really fun and helpful, and switching up the format helped to keep the group from feeling repetitive or stale.
I really recommend this approach, it has worked great for me. If you try it, let me know how you get on. And if you know any other study group formats let me know, I'd love to try some new ones out.