F# Coding Dojos

What is a Coding Dojo?

A Dojo (道場 dōjō) is a Japanese term which literally means "place of the way"; it refers to a training place for students of Japanese martial arts, where they gather to conduct training, examinations and other related encounters.

By extension, a Coding Dojo is a meeting where a bunch of coders get together to work on a programming challenge. They are there to have fun and to engage in Deliberate Practice in order to improve their skills.

F# Coding Dojo in San Francisco

How to Organize a Coding Dojo?

There is no unique way to organize a Dojo. Every group or community is unique in its own way, and adapting the format is perfectly fine!

Make sure that attendees bring a laptop and are ready to code before the event starts. The best resource on setting up F# for various environments is the F# Software Foundation, where you can find instructions for Mac, Linux and Windows.


Here is a rough outline of how a Dojo of about 1.5 hours could look like. Depending on the nature of the challenge, the level or size of the group, or whatever else, this should be adjusted - the goal is for people to learn and have fun!

  • 10 mins: Explain the Dojo format, introduction the Challenge
  • 5 mins: Break people into teams
  • 1 hour: Code in teams [Check midway through how things are going]
  • 15 mins before end: Ask teams to prepare to share their experience
  • 15 mins: Each team shares their experience with the group

Tips and Tricks

There is no One True Way to organize a Dojo, but here are a few tips that can help make it even more successful!

  • A Dojo is NOT a competition; it is a place to learn by coding together. As an organizer or a participant, it is your responsibility to make sure that the atmosphere remains non-competitive, collaborative, and fun. People should feel comfortable regardless of their skill level, and feel safe to try out new ideas.
  • The "ideal" size for a Dojo is probably around 20 people; large enough to have different teams, with possibly different approaches to discuss - and small enough that teams can share and discuss their experience at the end of the Dojo. Smaller groups are perfectly fine; larger groups probably require adjustments, because logistics become time consuming. Specifically, in that case it may work better to let teams self-organize more, and sharing the team experience at the end should probably be more of a group discussion, rather than code show-and-tell for instance.
  • Breaking people up in random teams is strongly recommended. It makes it easier for people to mix and get to know each other, usually creates teams with better skill distribution - and it is fun :) One simple way to do this is to count how many teams of 4 can be formed, and ask the whole group to count up. For instance, with a group of 12, people would count up 1, 2, 3, 1, 2, 3 etc... Once everyone has said a number, people with the same number form a team.
  • Forming teams are better, but it's fine if people just want to work on their own! Encourage people to work in teams and get to know their team-mates, but let people know that if they are not comfortable with that, it's cool, too.
  • Take the time to discuss at the end! It is a great way to learn from the other groups, and reflect on what went well or didn't go that great... Depending on the size of the group, it can go from simply asking each group to talk a bit about what they did and learnt, to short demos where each teams shows their code.
  • Encourage people to work together, and to organize themselves accordingly: pair program on laptops, rearrange the furniture, anything that makes teams work better together is fair game!

Catalog of F# Coding Dojos

Our Dojos

  • Digits Recognizer: build from scratch a machine learning engine that recognizes handwritten digits! This dojo is on the longer side (ideally 2+ hours), but is a great introduction to F#, with lots of guidance on syntax.
  • Fractal Forest: a simple and fun Dojo - create beautiful fractal trees, and learn some recursion along the way. Good both for beginners and advanced F#ers!
  • Canopy & 2048: learn how to use the F# web UI testing library Canopy, by building a bot that automatically plays the game. Good both for beginners and advanced F#ers!
  • Markov Bot: build a small program to automatically generate human-looking text. Good both for beginners and advanced F#ers!
  • Type Provider Treasure Hunt: use the awesomeness of F# Type Providers to access data from 7 different sources, and unlock a mystery!
  • Classics mash-up: Picasquez vs. Velasso! Manipulate images and remix classic paintings - good for beginners and advanced F#ers.
  • Ham or Spam: recognize which of the (real) text messages are Spam!

Classic Learning Problems

Here are a couple of classic resources to sharpen your F# skills. If you know of other ones we have missed, please ping us on Twitter, or send a pull request!

F# Workshops

What is a Workshop?

Workshops are half- to full-day sessions hosted by a presenter where attendees get their hands dirty working with F#. Workshops typically include a mix of presentations and hands-on-labs with the presenter(s) and possibly a few other helpers available to answer questions that may arise while attendees work through the lab materials.

Catalog of F# Workshops

  • Computation Expressions Workshop: a deep dive into how to build computation and query expressions.
  • F# on the Web: Best suited for web developers with no F# experience, F# on the Web progresses from a simple C# web application to an Azure-hosted F#-ified web application and demonstrates closer adherance to HTTP and a shift in focus to the problem domain rather than the web delivery code.