version 3
Angelika Tyborska

Hi! I'm Angelika

Exercism history

  • 2013: v1
  • 2018: v2
  • 2021: v3

v3 🚀 01.09.2021

Slides

angelika.me/elixir-conf-eu-2021

What is Exercism?

  • code practice
  • mentorship
  • free and open source
  • TDD
  • over 50 different languages

How it works

  1. Download an exercise
  2. Solve the exercise
  3. Upload your solution
  4. Talk with a mentor (optional)
  5. Compare with others (optional)

1. Download an exercise

        
          exercism download --track elixir --exercise bob
        
      

2. Solve the exercise

        
          bob
          ├── .formatter.exs
          ├── HELP.md
          ├── README.md
          ├── lib
          │   └── bob.ex
          ├── mix.exs
          └── test
              ├── bob_test.exs
              └── test_helper.exs
        
      

Test suite

        
          defmodule BobTest do
            use ExUnit.Case

            test "stating something" do
              assert Bob.hey("Tom-ay-to.") == "Whatever."
            end

            @tag :pending
            test "shouting" do
              assert Bob.hey("WATCH OUT!") == "Whoa, chill out!"
            end

            # ...
          end
        
      

Solution stub

        
          defmodule Bob do
            @spec hey(String.t()) :: String.t()
            def hey(input) do
            end
          end
        
      

3. Upload your solution

        
          exercism submit lib/bob.ex
        
      

How it works

  1. Download an exercise
  2. Solve the exercise
  3. Upload your solution
  4. Talk with a mentor (optional)
  5. Compare with others (optional)

4. Talk with a mentor

5. Compare with others

How it works

  1. Download an exercise
  2. Solve the exercise
  3. Upload your solution
  4. Talk with a mentor (optional)
  5. Compare with others (optional)

What is new in v3?

Problems in v2

  1. Difficult initial setup
  2. Code practice without learning
  3. Long mentor response time

1. Difficult initial setup

Solution: let people code in the browser

  • Web editor (optional)
  • Test Runners

Web editor

Test Runners

Problems in v2

  1. Difficult initial setup
  2. Code practice without learning
  3. Long mentor response time

2. Code practice without learning

Solution: offer learning

  • Syllabus (optional)
  • Learning Exercises (optional)

Syllabus

Syllabus

Learning Exercises

Learning Exercises - introduction
Learning Exercises - instructions
Learning Exercises - hints

Practicing Concepts

Practicing Concepts

Syllabus = huge effort

Problems in v2

  1. Difficult initial setup
  2. Code practice without learning
  3. Long mentor response time

3. Long mentor response time

Solution 1: provide automated feedback

  • Analyzers
  • Representers (coming soon)
Analyzers
Analyzers
        
          assert_no_call "does not call any Enum functions" do
            type :essential
            called_fn module: Enum, name: :_
            comment Constants.bird_count_use_recursion()
          end
        
      
Analyzers
Representers
            
              def greet(name) do
                "Hello, #{name}"
              end

              def greet() do
                # Alice is the default name
                greet("Alice")
              end
            
          
            
              @doc "Says hello to somebody"
              def hello(x), do: "Hello, #{x}"
              def hello, do: hello("Alice")
            
          
            
              def placeholder_1(placeholder_2) do
                "Hello, #{placeholder_2}"
              end

              def placeholder_1() do
                placeholder_1("Alice")
              end
            
          
Representers
Representation
            
              def placeholder_1(placeholder_2) do
                "Hello, #{placeholder_2}"
              end

              def placeholder_1() do
                placeholder_1("Alice")
              end
            
          
Feedback
            
              Consider using a [default argument](https://elixir-lang.org/getting-started/modules-and-functions.html#default-arguments)
              with the value `"Alice"` instead of
              defining a separate function clause.
            
          
Representers

UI coming soon

3. Long mentor response time

Solution 2: avoid unwanted sessions

  • Learning Exercises
  • Always optional
  • Must be requested explicitly
  • Initial comment from student
  • Favorite and block lists
Mentoring request
Mentoring queue & favorites
Block lists

exercism.org/report-abuse

3. Long mentor response time

Solution 3: mitigate consequences

  • Does not block progress
  • Can be ended by either side
  • Mentoring slots
Mentoring slots

Problems in v2

  1. Difficult initial setup
  2. Code practice without learning
  3. Long mentor response time

How to help?

1. Join the platform

exercism.org

2. Become a mentor

exercism.org/mentoring

3. Donate money

exercism.org/donate

4. Contribute code & content

exercism.org/contributing

Elixir Exercism repositories

Elixir maintainers

Tim Austin
Saskatoon, Canada
Jérémie Gillet
Okinawa, Japan
Angelika Tyborska
Berlin, Germany

Not just Elixir

Contact